import React, { useState } from 'react'; import { css } from 'emotion'; import pick from 'lodash/pick'; import { GrafanaTheme } from '@grafana/data'; import { Button, stylesFactory, useStyles } from '@grafana/ui'; import { OptionsGroup } from 'app/features/dashboard/components/PanelEditor/OptionsGroup'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; import { AddLibraryPanelModal } from '../AddLibraryPanelModal/AddLibraryPanelModal'; import { LibraryPanelsView } from '../LibraryPanelsView/LibraryPanelsView'; import { PanelQueriesChangedEvent } from 'app/types/events'; import { LibraryPanelDTO } from '../../types'; import { toPanelModelLibraryPanel } from '../../utils'; interface Props { panel: PanelModel; dashboard: DashboardModel; } export const PanelLibraryOptionsGroup: React.FC = ({ panel, dashboard }) => { const styles = useStyles(getStyles); const [showingAddPanelModal, setShowingAddPanelModal] = useState(false); const useLibraryPanel = (panelInfo: LibraryPanelDTO) => { panel.restoreModel({ ...panelInfo.model, ...pick(panel, 'gridPos', 'id'), libraryPanel: toPanelModelLibraryPanel(panelInfo), }); // dummy change for re-render // onPanelConfigChange('isEditing', true); panel.refresh(); panel.events.publish(PanelQueriesChangedEvent); }; const onAddToPanelLibrary = (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); setShowingAddPanelModal(true); }; return ( { return isExpanded && !panel.libraryPanel ? (
Panel library
) : ( 'Panel library' ); }} id="panel-library" key="panel-library" defaultToClosed > dashboard.formatDate(dateString, 'L')} currentPanelId={panel.libraryPanel?.uid} showSecondaryActions > {(panel) => ( )} {showingAddPanelModal && ( setShowingAddPanelModal(false)} initialFolderId={dashboard.meta.folderId} isOpen={showingAddPanelModal} /> )}
); }; const getStyles = stylesFactory((theme: GrafanaTheme) => { return { panelLibraryTitle: css` display: flex; gap: 10px; `, }; });