import { css } from '@emotion/css'; import { useCallback, useState } from 'react'; import { PanelPluginMeta } from '@grafana/data'; import { Button, VerticalGroup } from '@grafana/ui'; import { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv'; import { PanelModel } from 'app/features/dashboard/state/PanelModel'; import { changeToLibraryPanel } from 'app/features/panel/state/actions'; import { useDispatch } from 'app/types'; import { PanelTypeFilter } from '../../../../core/components/PanelTypeFilter/PanelTypeFilter'; import { LibraryElementDTO } from '../../types'; import { AddLibraryPanelModal } from '../AddLibraryPanelModal/AddLibraryPanelModal'; import { ChangeLibraryPanelModal } from '../ChangeLibraryPanelModal/ChangeLibraryPanelModal'; import { LibraryPanelsView } from '../LibraryPanelsView/LibraryPanelsView'; interface Props { panel: PanelModel; searchQuery: string; } export const PanelLibraryOptionsGroup = ({ panel, searchQuery }: Props) => { const [showingAddPanelModal, setShowingAddPanelModal] = useState(false); const [changeToPanel, setChangeToPanel] = useState(undefined); const [panelFilter, setPanelFilter] = useState([]); const onPanelFilterChange = useCallback( (plugins: PanelPluginMeta[]) => { setPanelFilter(plugins.map((p) => p.id)); }, [setPanelFilter] ); const dashboard = getDashboardSrv().getCurrent(); const dispatch = useDispatch(); const useLibraryPanel = async () => { if (!changeToPanel) { return; } setChangeToPanel(undefined); dispatch(changeToLibraryPanel(panel, changeToPanel)); }; const onAddToPanelLibrary = () => setShowingAddPanelModal(true); const onDismissChangeToPanel = () => setChangeToPanel(undefined); return ( {!panel.libraryPanel && ( )}
{showingAddPanelModal && ( setShowingAddPanelModal(false)} initialFolderUid={dashboard?.meta.folderUid} isOpen={showingAddPanelModal} /> )} {changeToPanel && ( )}
); }; const styles = { libraryPanelsView: css({ width: '100%', }), };