{"version":3,"file":"4460.766de06cfa1d0a077de4.js","mappings":"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","sources":["webpack://grafana/./public/app/core/components/PanelTypeFilter/PanelTypeFilter.tsx","webpack://grafana/./public/app/features/dashboard/components/VizTypePicker/PanelTypeCard.tsx","webpack://grafana/./public/app/features/dashboard/components/VizTypePicker/VizTypePickerPlugin.tsx","webpack://grafana/./public/app/features/dashboard/components/VizTypePicker/VizTypePicker.tsx","webpack://grafana/./public/app/core/components/FolderFilter/FolderFilter.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsSearch/reducer.ts","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsSearch/LibraryPanelsSearch.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/reducer.ts","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/actions.ts","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/reducer.ts","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/DeleteLibraryPanelModal.tsx","webpack://grafana/./public/app/features/library-panels/components/DeleteLibraryPanelModal/actions.ts","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelCard/LibraryPanelCard.tsx","webpack://grafana/./public/app/features/library-panels/components/LibraryPanelsView/LibraryPanelsView.tsx","webpack://grafana/./public/app/features/library-panels/styles.ts","webpack://grafana/./public/app/features/plugins/PluginStateInfo.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport { GrafanaTheme2, PanelPluginMeta, SelectableValue } from '@grafana/data';\nimport { getAllPanelPluginMeta } from '../../../features/dashboard/components/VizTypePicker/VizTypePicker';\nimport { Icon, resetSelectStyles, MultiSelect, useStyles2 } from '@grafana/ui';\nimport { css } from '@emotion/css';\n\nexport interface Props {\n onChange: (plugins: PanelPluginMeta[]) => void;\n maxMenuHeight?: number;\n}\n\nexport const PanelTypeFilter = ({ onChange: propsOnChange, maxMenuHeight }: Props): JSX.Element => {\n const plugins = useMemo(() => {\n return getAllPanelPluginMeta();\n }, []);\n const options = useMemo(\n () =>\n plugins\n .map((p) => ({ label: p.name, imgUrl: p.info.logos.small, value: p }))\n .sort((a, b) => a.label?.localeCompare(b.label)),\n [plugins]\n );\n const [value, setValue] = useState>>([]);\n const onChange = useCallback(\n (plugins: Array>) => {\n const changedPlugins = [];\n for (const plugin of plugins) {\n if (plugin.value) {\n changedPlugins.push(plugin.value);\n }\n }\n propsOnChange(changedPlugins);\n setValue(plugins);\n },\n [propsOnChange]\n );\n const styles = useStyles2(getStyles);\n\n const selectOptions = {\n defaultOptions: true,\n getOptionLabel: (i: any) => i.label,\n getOptionValue: (i: any) => i.value,\n noOptionsMessage: 'No Panel types found',\n placeholder: 'Filter by type',\n styles: resetSelectStyles(),\n maxMenuHeight,\n options,\n value,\n onChange,\n };\n\n return (\n
\n {value.length > 0 && (\n onChange([])}>\n Clear types\n \n )}\n } aria-label=\"Panel Type filter\" />\n
\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css`\n label: container;\n position: relative;\n min-width: 180px;\n flex-grow: 1;\n `,\n clear: css`\n label: clear;\n text-decoration: underline;\n font-size: ${theme.spacing(1.5)};\n position: absolute;\n top: -${theme.spacing(2.75)};\n right: 0;\n cursor: pointer;\n color: ${theme.colors.text.link};\n\n &:hover {\n color: ${theme.colors.text.maxContrast};\n }\n `,\n };\n}\n","import React, { MouseEventHandler } from 'react';\nimport { GrafanaTheme2, isUnsignedPluginSignature, PanelPluginMeta, PluginState } from '@grafana/data';\nimport { IconButton, PluginSignatureBadge, useStyles2 } from '@grafana/ui';\nimport { css, cx } from '@emotion/css';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { PluginStateInfo } from 'app/features/plugins/PluginStateInfo';\n\ninterface Props {\n isCurrent: boolean;\n plugin: PanelPluginMeta;\n title: string;\n onClick: MouseEventHandler;\n onDelete?: () => void;\n disabled?: boolean;\n showBadge?: boolean;\n description?: string;\n}\n\nexport const PanelTypeCard: React.FC = ({\n isCurrent,\n title,\n plugin,\n onClick,\n onDelete,\n disabled,\n showBadge,\n description,\n children,\n}) => {\n const styles = useStyles2(getStyles);\n const cssClass = cx({\n [styles.item]: true,\n [styles.disabled]: disabled || plugin.state === PluginState.deprecated,\n [styles.current]: isCurrent,\n });\n\n return (\n \n {`${plugin.name}\n\n
\n
{title}
\n {description ? {description} : null}\n {children}\n
\n {showBadge && (\n
\n \n
\n )}\n {onDelete && (\n {\n e.stopPropagation();\n onDelete();\n }}\n aria-label=\"Delete button on panel type card\"\n />\n )}\n \n );\n};\n\nPanelTypeCard.displayName = 'PanelTypeCard';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n item: css`\n position: relative;\n display: flex;\n flex-shrink: 0;\n cursor: pointer;\n background: ${theme.colors.background.secondary};\n border-radius: ${theme.shape.borderRadius()};\n box-shadow: ${theme.shadows.z1};\n border: 1px solid ${theme.colors.background.secondary};\n align-items: center;\n padding: 8px;\n width: 100%;\n position: relative;\n overflow: hidden;\n transition: ${theme.transitions.create(['background'], {\n duration: theme.transitions.duration.short,\n })};\n\n &:hover {\n background: ${theme.colors.emphasize(theme.colors.background.secondary, 0.03)};\n }\n `,\n itemContent: css`\n position: relative;\n width: 100%;\n padding: ${theme.spacing(0, 1)};\n `,\n current: css`\n label: currentVisualizationItem;\n border: 1px solid ${theme.colors.primary.border};\n background: ${theme.colors.action.selected};\n `,\n disabled: css`\n opacity: 0.2;\n filter: grayscale(1);\n cursor: default;\n pointer-events: none;\n `,\n name: css`\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n font-size: ${theme.typography.size.sm};\n font-weight: ${theme.typography.fontWeightMedium};\n width: 100%;\n `,\n description: css`\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n color: ${theme.colors.text.secondary};\n font-size: ${theme.typography.bodySmall.fontSize};\n font-weight: ${theme.typography.fontWeightLight};\n width: 100%;\n `,\n img: css`\n max-height: 38px;\n width: 38px;\n display: flex;\n align-items: center;\n `,\n badge: css`\n background: ${theme.colors.background.primary};\n `,\n };\n};\n\ninterface PanelPluginBadgeProps {\n plugin: PanelPluginMeta;\n}\n\nconst PanelPluginBadge: React.FC = ({ plugin }) => {\n if (isUnsignedPluginSignature(plugin.signature)) {\n return ;\n }\n\n return ;\n};\n\nPanelPluginBadge.displayName = 'PanelPluginBadge';\n","import React, { MouseEventHandler } from 'react';\nimport { PanelPluginMeta } from '@grafana/data';\nimport { PanelTypeCard } from './PanelTypeCard';\n\ninterface Props {\n isCurrent: boolean;\n plugin: PanelPluginMeta;\n onClick: MouseEventHandler;\n disabled: boolean;\n}\n\nexport const VizTypePickerPlugin: React.FC = ({ isCurrent, plugin, onClick, disabled }) => {\n return (\n \n );\n};\n\nVizTypePickerPlugin.displayName = 'VizTypePickerPlugin';\n","import React, { useCallback, useMemo } from 'react';\n\nimport config from 'app/core/config';\nimport { VizTypePickerPlugin } from './VizTypePickerPlugin';\nimport { EmptySearchResult, stylesFactory, useTheme } from '@grafana/ui';\nimport { GrafanaTheme, PanelPluginMeta, PluginState } from '@grafana/data';\nimport { css } from '@emotion/css';\n\nexport interface Props {\n current: PanelPluginMeta;\n onTypeChange: (newType: PanelPluginMeta, withModKey: boolean) => void;\n searchQuery: string;\n onClose: () => void;\n}\n\nexport function getAllPanelPluginMeta(): PanelPluginMeta[] {\n const allPanels = config.panels;\n\n return Object.keys(allPanels)\n .filter((key) => allPanels[key]['hideFromList'] === false)\n .map((key) => allPanels[key])\n .sort((a: PanelPluginMeta, b: PanelPluginMeta) => a.sort - b.sort);\n}\n\nexport function filterPluginList(\n pluginsList: PanelPluginMeta[],\n searchQuery: string,\n current: PanelPluginMeta\n): PanelPluginMeta[] {\n if (!searchQuery.length) {\n return pluginsList.filter((p) => {\n if (p.state === PluginState.deprecated) {\n return current.id === p.id;\n }\n return true;\n });\n }\n\n const query = searchQuery.toLowerCase();\n const first: PanelPluginMeta[] = [];\n const match: PanelPluginMeta[] = [];\n\n for (const item of pluginsList) {\n if (item.state === PluginState.deprecated && current.id !== item.id) {\n continue;\n }\n\n const name = item.name.toLowerCase();\n const idx = name.indexOf(query);\n\n if (idx === 0) {\n first.push(item);\n } else if (idx > 0) {\n match.push(item);\n }\n }\n\n return first.concat(match);\n}\n\nexport const VizTypePicker: React.FC = ({ searchQuery, onTypeChange, current }) => {\n const theme = useTheme();\n const styles = getStyles(theme);\n const pluginsList: PanelPluginMeta[] = useMemo(() => {\n return getAllPanelPluginMeta();\n }, []);\n\n const getFilteredPluginList = useCallback((): PanelPluginMeta[] => {\n return filterPluginList(pluginsList, searchQuery, current);\n }, [current, pluginsList, searchQuery]);\n\n const renderVizPlugin = (plugin: PanelPluginMeta, index: number) => {\n const isCurrent = plugin.id === current.id;\n const filteredPluginList = getFilteredPluginList();\n\n const matchesQuery = filteredPluginList.indexOf(plugin) > -1;\n return (\n onTypeChange(plugin, Boolean(e.metaKey || e.ctrlKey || e.altKey))}\n />\n );\n };\n\n const filteredPluginList = getFilteredPluginList();\n const hasResults = filteredPluginList.length > 0;\n const renderList = filteredPluginList.concat(pluginsList.filter((p) => filteredPluginList.indexOf(p) === -1));\n\n return (\n
\n {hasResults ? (\n renderList.map((plugin, index) => {\n if (plugin.state === PluginState.deprecated) {\n return null;\n }\n return renderVizPlugin(plugin, index);\n })\n ) : (\n Could not find anything matching your query\n )}\n
\n );\n};\n\nVizTypePicker.displayName = 'VizTypePicker';\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n return {\n grid: css`\n max-width: 100%;\n display: grid;\n grid-gap: ${theme.spacing.sm};\n `,\n };\n});\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport debounce from 'debounce-promise';\nimport { AsyncMultiSelect, Icon, resetSelectStyles, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\n\nimport { FolderInfo, PermissionLevelString } from 'app/types';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\n\nexport interface FolderFilterProps {\n onChange: (folder: FolderInfo[]) => void;\n maxMenuHeight?: number;\n}\n\nexport function FolderFilter({ onChange: propsOnChange, maxMenuHeight }: FolderFilterProps): JSX.Element {\n const styles = useStyles2(getStyles);\n const [loading, setLoading] = useState(false);\n const getOptions = useCallback((searchString: string) => getFoldersAsOptions(searchString, setLoading), []);\n const debouncedLoadOptions = useMemo(() => debounce(getOptions, 300), [getOptions]);\n const [value, setValue] = useState>>([]);\n const onChange = useCallback(\n (folders: Array>) => {\n const changedFolders = [];\n for (const folder of folders) {\n if (folder.value) {\n changedFolders.push(folder.value);\n }\n }\n propsOnChange(changedFolders);\n setValue(folders);\n },\n [propsOnChange]\n );\n const selectOptions = {\n defaultOptions: true,\n isMulti: true,\n noOptionsMessage: 'No folders found',\n placeholder: 'Filter by folder',\n styles: resetSelectStyles(),\n maxMenuHeight,\n value,\n onChange,\n };\n\n return (\n
\n {value.length > 0 && (\n onChange([])}>\n Clear folders\n \n )}\n }\n aria-label=\"Folder filter\"\n />\n
\n );\n}\n\nasync function getFoldersAsOptions(searchString: string, setLoading: (loading: boolean) => void) {\n setLoading(true);\n\n const params = {\n query: searchString,\n type: 'dash-folder',\n permission: PermissionLevelString.View,\n };\n\n const searchHits = await getBackendSrv().search(params);\n const options = searchHits.map((d) => ({ label: d.title, value: { id: d.id, title: d.title } }));\n if (!searchString || 'general'.includes(searchString.toLowerCase())) {\n options.unshift({ label: 'General', value: { id: 0, title: 'General' } });\n }\n\n setLoading(false);\n\n return options;\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css`\n label: container;\n position: relative;\n min-width: 180px;\n flex-grow: 1;\n `,\n clear: css`\n label: clear;\n text-decoration: underline;\n font-size: ${theme.spacing(1.5)};\n position: absolute;\n top: -${theme.spacing(2.75)};\n right: 0;\n cursor: pointer;\n color: ${theme.colors.text.link};\n\n &:hover {\n color: ${theme.colors.text.maxContrast};\n }\n `,\n };\n}\n","import { AnyAction } from 'redux';\nimport { createAction } from '@reduxjs/toolkit';\nimport { PanelPluginMeta, SelectableValue } from '@grafana/data';\n\nimport { FolderInfo } from '../../../../types';\n\nexport interface LibraryPanelsSearchState {\n searchQuery: string;\n sortDirection?: string;\n panelFilter: string[];\n folderFilter: string[];\n}\n\nexport const initialLibraryPanelsSearchState: LibraryPanelsSearchState = {\n searchQuery: '',\n panelFilter: [],\n folderFilter: [],\n sortDirection: undefined,\n};\n\nexport const searchChanged = createAction('libraryPanels/search/searchChanged');\nexport const sortChanged = createAction>('libraryPanels/search/sortChanged');\nexport const panelFilterChanged = createAction('libraryPanels/search/panelFilterChanged');\nexport const folderFilterChanged = createAction('libraryPanels/search/folderFilterChanged');\n\nexport const libraryPanelsSearchReducer = (state: LibraryPanelsSearchState, action: AnyAction) => {\n if (searchChanged.match(action)) {\n return { ...state, searchQuery: action.payload };\n }\n\n if (sortChanged.match(action)) {\n return { ...state, sortDirection: action.payload.value };\n }\n\n if (panelFilterChanged.match(action)) {\n return { ...state, panelFilter: action.payload.map((p) => p.id) };\n }\n\n if (folderFilterChanged.match(action)) {\n return { ...state, folderFilter: action.payload.map((f) => String(f.id!)) };\n }\n\n return state;\n};\n","import React, { useReducer } from 'react';\nimport { HorizontalGroup, useStyles2, VerticalGroup, FilterInput } from '@grafana/ui';\nimport { GrafanaTheme2, PanelPluginMeta, SelectableValue } from '@grafana/data';\nimport { css } from '@emotion/css';\nimport { SortPicker } from '../../../../core/components/Select/SortPicker';\nimport { PanelTypeFilter } from '../../../../core/components/PanelTypeFilter/PanelTypeFilter';\nimport { LibraryPanelsView } from '../LibraryPanelsView/LibraryPanelsView';\nimport { DEFAULT_PER_PAGE_PAGINATION } from '../../../../core/constants';\nimport { LibraryElementDTO } from '../../types';\nimport { FolderFilter } from '../../../../core/components/FolderFilter/FolderFilter';\nimport { FolderInfo } from '../../../../types';\nimport {\n folderFilterChanged,\n initialLibraryPanelsSearchState,\n libraryPanelsSearchReducer,\n panelFilterChanged,\n searchChanged,\n sortChanged,\n} from './reducer';\n\nexport enum LibraryPanelsSearchVariant {\n Tight = 'tight',\n Spacious = 'spacious',\n}\n\nexport interface LibraryPanelsSearchProps {\n onClick: (panel: LibraryElementDTO) => void;\n variant?: LibraryPanelsSearchVariant;\n showSort?: boolean;\n showPanelFilter?: boolean;\n showFolderFilter?: boolean;\n showSecondaryActions?: boolean;\n currentPanelId?: string;\n currentFolderId?: number;\n perPage?: number;\n}\n\nexport const LibraryPanelsSearch = ({\n onClick,\n variant = LibraryPanelsSearchVariant.Spacious,\n currentPanelId,\n currentFolderId,\n perPage = DEFAULT_PER_PAGE_PAGINATION,\n showPanelFilter = false,\n showFolderFilter = false,\n showSort = false,\n showSecondaryActions = false,\n}: LibraryPanelsSearchProps): JSX.Element => {\n const styles = useStyles2(getStyles);\n const [{ sortDirection, panelFilter, folderFilter, searchQuery }, dispatch] = useReducer(libraryPanelsSearchReducer, {\n ...initialLibraryPanelsSearchState,\n folderFilter: currentFolderId ? [currentFolderId.toString(10)] : [],\n });\n const onFilterChange = (searchString: string) => dispatch(searchChanged(searchString));\n const onSortChange = (sorting: SelectableValue) => dispatch(sortChanged(sorting));\n const onFolderFilterChange = (folders: FolderInfo[]) => dispatch(folderFilterChanged(folders));\n const onPanelFilterChange = (plugins: PanelPluginMeta[]) => dispatch(panelFilterChanged(plugins));\n\n if (variant === LibraryPanelsSearchVariant.Spacious) {\n return (\n
\n \n \n \n {showSort && (\n \n )}\n \n {showFolderFilter && }\n {showPanelFilter && }\n \n \n
\n \n
\n
\n
\n );\n }\n\n return (\n
\n \n
\n
\n \n
\n
\n {showSort && }\n {showFolderFilter && }\n {showPanelFilter && }\n
\n
\n
\n \n
\n
\n
\n );\n};\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n container: css`\n width: 100%;\n overflow-y: auto;\n padding: ${theme.spacing(1)};\n `,\n buttonRow: css`\n display: flex;\n justify-content: space-between;\n width: 100%;\n margin-top: ${theme.spacing(1.5)}; // Clear types link\n `,\n tightFilter: css`\n flex-grow: 1;\n `,\n tightSortFilter: css`\n flex-grow: 1;\n padding: ${theme.spacing(0, 0, 0, 0.5)};\n `,\n libraryPanelsView: css`\n width: 100%;\n `,\n };\n}\n","import { createAction } from '@reduxjs/toolkit';\nimport { LoadingState } from '@grafana/data';\n\nimport { LibraryElementDTO } from '../../types';\nimport { AnyAction } from 'redux';\n\nexport interface LibraryPanelsViewState {\n loadingState: LoadingState;\n libraryPanels: LibraryElementDTO[];\n totalCount: number;\n perPage: number;\n page: number;\n numberOfPages: number;\n currentPanelId?: string;\n}\n\nexport const initialLibraryPanelsViewState: LibraryPanelsViewState = {\n loadingState: LoadingState.Loading,\n libraryPanels: [],\n totalCount: 0,\n perPage: 40,\n page: 1,\n numberOfPages: 0,\n currentPanelId: undefined,\n};\n\nexport const initSearch = createAction('libraryPanels/view/initSearch');\nexport const searchCompleted = createAction<\n Omit\n>('libraryPanels/view/searchCompleted');\n\nexport const changePage = createAction>('libraryPanels/view/changePage');\n\nexport const libraryPanelsViewReducer = (state: LibraryPanelsViewState, action: AnyAction) => {\n if (initSearch.match(action)) {\n return { ...state, loadingState: LoadingState.Loading };\n }\n\n if (searchCompleted.match(action)) {\n const { libraryPanels, page, perPage, totalCount } = action.payload;\n const numberOfPages = Math.ceil(totalCount / perPage);\n return {\n ...state,\n libraryPanels,\n perPage,\n totalCount,\n loadingState: LoadingState.Done,\n numberOfPages,\n page: page > numberOfPages ? page - 1 : page,\n };\n }\n\n if (changePage.match(action)) {\n return { ...state, page: action.payload.page };\n }\n\n return state;\n};\n","import { Dispatch } from 'react';\nimport { AnyAction } from '@reduxjs/toolkit';\nimport { from, merge, of, Subscription, timer } from 'rxjs';\nimport { catchError, finalize, mapTo, mergeMap, share, takeUntil } from 'rxjs/operators';\n\nimport { deleteLibraryPanel as apiDeleteLibraryPanel, getLibraryPanels } from '../../state/api';\nimport { initialLibraryPanelsViewState, initSearch, searchCompleted } from './reducer';\n\ntype DispatchResult = (dispatch: Dispatch) => void;\ninterface SearchArgs {\n perPage: number;\n page: number;\n searchString: string;\n sortDirection?: string;\n panelFilter?: string[];\n folderFilter?: string[];\n currentPanelId?: string;\n}\n\nexport function searchForLibraryPanels(args: SearchArgs): DispatchResult {\n return function (dispatch) {\n const subscription = new Subscription();\n const dataObservable = from(\n getLibraryPanels({\n searchString: args.searchString,\n perPage: args.perPage,\n page: args.page,\n excludeUid: args.currentPanelId,\n sortDirection: args.sortDirection,\n typeFilter: args.panelFilter,\n folderFilter: args.folderFilter,\n })\n ).pipe(\n mergeMap(({ perPage, elements: libraryPanels, page, totalCount }) =>\n of(searchCompleted({ libraryPanels, page, perPage, totalCount }))\n ),\n catchError((err) => {\n console.error(err);\n return of(searchCompleted({ ...initialLibraryPanelsViewState, page: args.page, perPage: args.perPage }));\n }),\n finalize(() => subscription.unsubscribe()), // make sure we unsubscribe\n share()\n );\n\n subscription.add(\n // If 50ms without a response dispatch a loading state\n // mapTo will translate the timer event into a loading state\n // takeUntil will cancel the timer emit when first response is received on the dataObservable\n merge(timer(50).pipe(mapTo(initSearch()), takeUntil(dataObservable)), dataObservable).subscribe(dispatch)\n );\n };\n}\n\nexport function deleteLibraryPanel(uid: string, args: SearchArgs): DispatchResult {\n return async function (dispatch) {\n try {\n await apiDeleteLibraryPanel(uid);\n searchForLibraryPanels(args)(dispatch);\n } catch (e) {\n console.error(e);\n }\n };\n}\n\nexport function asyncDispatcher(dispatch: Dispatch) {\n return function (action: any) {\n if (action instanceof Function) {\n return action(dispatch);\n }\n return dispatch(action);\n };\n}\n","import { DashboardSearchHit } from 'app/features/search/types';\nimport { LoadingState } from '@grafana/data';\nimport { AnyAction } from 'redux';\nimport { createAction } from '@reduxjs/toolkit';\n\nexport interface DeleteLibraryPanelModalState {\n loadingState: LoadingState;\n dashboardTitles: string[];\n}\n\nexport const initialDeleteLibraryPanelModalState: DeleteLibraryPanelModalState = {\n loadingState: LoadingState.Loading,\n dashboardTitles: [],\n};\n\nexport const searchCompleted = createAction<{ dashboards: DashboardSearchHit[] }>(\n 'libraryPanels/delete/searchCompleted'\n);\n\nexport const deleteLibraryPanelModalReducer = (\n state: DeleteLibraryPanelModalState = initialDeleteLibraryPanelModalState,\n action: AnyAction\n): DeleteLibraryPanelModalState => {\n if (searchCompleted.match(action)) {\n return {\n ...state,\n dashboardTitles: action.payload.dashboards.map((d) => d.title),\n loadingState: LoadingState.Done,\n };\n }\n\n return state;\n};\n","import React, { FC, useEffect, useMemo, useReducer } from 'react';\nimport { Button, Modal, useStyles } from '@grafana/ui';\nimport { LoadingState } from '@grafana/data';\n\nimport { LibraryElementDTO } from '../../types';\nimport { asyncDispatcher } from '../LibraryPanelsView/actions';\nimport { deleteLibraryPanelModalReducer, initialDeleteLibraryPanelModalState } from './reducer';\nimport { getConnectedDashboards } from './actions';\nimport { getModalStyles } from '../../styles';\n\ninterface Props {\n libraryPanel: LibraryElementDTO;\n onConfirm: () => void;\n onDismiss: () => void;\n}\n\nexport const DeleteLibraryPanelModal: FC = ({ libraryPanel, onDismiss, onConfirm }) => {\n const styles = useStyles(getModalStyles);\n const [{ dashboardTitles, loadingState }, dispatch] = useReducer(\n deleteLibraryPanelModalReducer,\n initialDeleteLibraryPanelModalState\n );\n const asyncDispatch = useMemo(() => asyncDispatcher(dispatch), [dispatch]);\n useEffect(() => {\n asyncDispatch(getConnectedDashboards(libraryPanel));\n }, [asyncDispatch, libraryPanel]);\n const connected = Boolean(dashboardTitles.length);\n const done = loadingState === LoadingState.Done;\n\n return (\n \n {!done ? : null}\n {done ? (\n
\n {connected ? : null}\n {!connected ? : null}\n\n \n \n \n \n
\n ) : null}\n
\n );\n};\n\nconst LoadingIndicator: FC = () => Loading library panel...;\n\nconst Confirm: FC = () => {\n const styles = useStyles(getModalStyles);\n\n return
Do you want to delete this panel?
;\n};\n\nconst HasConnectedDashboards: FC<{ dashboardTitles: string[] }> = ({ dashboardTitles }) => {\n const styles = useStyles(getModalStyles);\n const suffix = dashboardTitles.length === 1 ? 'dashboard.' : 'dashboards.';\n const message = `${dashboardTitles.length} ${suffix}`;\n if (dashboardTitles.length === 0) {\n return null;\n }\n\n return (\n
\n

\n {'This library panel can not be deleted because it is connected to '}\n {message}\n {' Remove the library panel from the dashboards listed below and retry.'}\n

\n \n \n \n \n \n \n \n {dashboardTitles.map((title, i) => (\n \n \n \n ))}\n \n
Dashboard name
{title}
\n
\n );\n};\n","import { DispatchResult, LibraryElementDTO } from '../../types';\nimport { getConnectedDashboards as apiGetConnectedDashboards } from '../../state/api';\nimport { searchCompleted } from './reducer';\n\nexport function getConnectedDashboards(libraryPanel: LibraryElementDTO): DispatchResult {\n return async function (dispatch) {\n const dashboards = await apiGetConnectedDashboards(libraryPanel.uid);\n dispatch(searchCompleted({ dashboards }));\n };\n}\n","import React, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Icon, Link, useStyles2 } from '@grafana/ui';\nimport { LibraryElementDTO } from '../../types';\nimport { PanelTypeCard } from 'app/features/dashboard/components/VizTypePicker/PanelTypeCard';\nimport { DeleteLibraryPanelModal } from '../DeleteLibraryPanelModal/DeleteLibraryPanelModal';\nimport { config } from '@grafana/runtime';\nimport { getPanelPluginNotFound } from 'app/features/dashboard/dashgrid/PanelPluginError';\n\nexport interface LibraryPanelCardProps {\n libraryPanel: LibraryElementDTO;\n onClick: (panel: LibraryElementDTO) => void;\n onDelete?: (panel: LibraryElementDTO) => void;\n showSecondaryActions?: boolean;\n}\n\nexport const LibraryPanelCard: React.FC = ({\n libraryPanel,\n onClick,\n onDelete,\n showSecondaryActions,\n}) => {\n const [showDeletionModal, setShowDeletionModal] = useState(false);\n\n const onDeletePanel = () => {\n onDelete?.(libraryPanel);\n setShowDeletionModal(false);\n };\n\n const panelPlugin = config.panels[libraryPanel.model.type] ?? getPanelPluginNotFound(libraryPanel.model.type).meta;\n\n return (\n <>\n onClick(libraryPanel)}\n onDelete={showSecondaryActions ? () => setShowDeletionModal(true) : undefined}\n >\n \n \n {showDeletionModal && (\n setShowDeletionModal(false)}\n />\n )}\n \n );\n};\n\ninterface FolderLinkProps {\n libraryPanel: LibraryElementDTO;\n}\n\nfunction FolderLink({ libraryPanel }: FolderLinkProps): JSX.Element {\n const styles = useStyles2(getStyles);\n\n if (!libraryPanel.meta.folderUid) {\n return (\n \n \n {libraryPanel.meta.folderName}\n \n );\n }\n\n return (\n \n \n \n {libraryPanel.meta.folderName}\n \n \n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n metaContainer: css`\n display: flex;\n align-items: center;\n color: ${theme.colors.text.secondary};\n font-size: ${theme.typography.bodySmall.fontSize};\n padding-top: ${theme.spacing(0.5)};\n\n svg {\n margin-right: ${theme.spacing(0.5)};\n margin-bottom: 3px;\n }\n `,\n };\n}\n","import React, { useMemo, useReducer } from 'react';\nimport { useDebounce } from 'react-use';\nimport { css, cx } from '@emotion/css';\nimport { Pagination, useStyles } from '@grafana/ui';\nimport { GrafanaTheme, LoadingState } from '@grafana/data';\n\nimport { LibraryPanelCard } from '../LibraryPanelCard/LibraryPanelCard';\nimport { LibraryElementDTO } from '../../types';\nimport { changePage, initialLibraryPanelsViewState, libraryPanelsViewReducer } from './reducer';\nimport { asyncDispatcher, deleteLibraryPanel, searchForLibraryPanels } from './actions';\n\ninterface LibraryPanelViewProps {\n className?: string;\n onClickCard: (panel: LibraryElementDTO) => void;\n showSecondaryActions?: boolean;\n currentPanelId?: string;\n searchString: string;\n sortDirection?: string;\n panelFilter?: string[];\n folderFilter?: string[];\n perPage?: number;\n}\n\nexport const LibraryPanelsView: React.FC = ({\n className,\n onClickCard,\n searchString,\n sortDirection,\n panelFilter,\n folderFilter,\n showSecondaryActions,\n currentPanelId: currentPanel,\n perPage: propsPerPage = 40,\n}) => {\n const styles = useStyles(getPanelViewStyles);\n const [{ libraryPanels, page, perPage, numberOfPages, loadingState, currentPanelId }, dispatch] = useReducer(\n libraryPanelsViewReducer,\n {\n ...initialLibraryPanelsViewState,\n currentPanelId: currentPanel,\n perPage: propsPerPage,\n }\n );\n const asyncDispatch = useMemo(() => asyncDispatcher(dispatch), [dispatch]);\n useDebounce(\n () =>\n asyncDispatch(\n searchForLibraryPanels({\n searchString,\n sortDirection,\n panelFilter,\n folderFilter,\n page,\n perPage,\n currentPanelId,\n })\n ),\n 300,\n [searchString, sortDirection, panelFilter, folderFilter, page, asyncDispatch]\n );\n const onDelete = ({ uid }: LibraryElementDTO) =>\n asyncDispatch(deleteLibraryPanel(uid, { searchString, page, perPage }));\n const onPageChange = (page: number) => asyncDispatch(changePage({ page }));\n\n return (\n
\n
\n {loadingState === LoadingState.Loading ? (\n

Loading library panels...

\n ) : libraryPanels.length < 1 ? (\n

No library panels found.

\n ) : (\n libraryPanels?.map((item, i) => (\n \n ))\n )}\n
\n {libraryPanels.length ? (\n
\n \n
\n ) : null}\n
\n );\n};\n\nconst getPanelViewStyles = (theme: GrafanaTheme) => {\n return {\n container: css`\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n `,\n libraryPanelList: css`\n max-width: 100%;\n display: grid;\n grid-gap: ${theme.spacing.sm};\n `,\n searchHeader: css`\n display: flex;\n `,\n newPanelButton: css`\n margin-top: 10px;\n align-self: flex-start;\n `,\n pagination: css`\n align-self: center;\n margin-top: ${theme.spacing.sm};\n `,\n noPanelsFound: css`\n label: noPanelsFound;\n min-height: 200px;\n `,\n };\n};\n","import { css } from '@emotion/css';\nimport { GrafanaTheme } from '@grafana/data';\n\nexport function getModalStyles(theme: GrafanaTheme) {\n return {\n myTable: css`\n max-height: 204px;\n overflow-y: auto;\n margin-top: 11px;\n margin-bottom: 28px;\n border-radius: ${theme.border.radius.sm};\n border: 1px solid ${theme.colors.bg3};\n background: ${theme.colors.bg1};\n color: ${theme.colors.textSemiWeak};\n font-size: ${theme.typography.size.md};\n width: 100%;\n\n thead {\n color: #538ade;\n font-size: ${theme.typography.size.sm};\n }\n\n th,\n td {\n padding: 6px 13px;\n height: ${theme.spacing.xl};\n }\n\n tbody > tr:nth-child(odd) {\n background: ${theme.colors.bg2};\n }\n `,\n noteTextbox: css`\n margin-bottom: ${theme.spacing.xl};\n `,\n textInfo: css`\n color: ${theme.colors.textSemiWeak};\n font-size: ${theme.typography.size.sm};\n `,\n dashboardSearch: css`\n margin-top: ${theme.spacing.md};\n `,\n modal: css`\n width: 500px;\n `,\n modalText: css`\n font-size: ${theme.typography.heading.h4};\n color: ${theme.colors.link};\n margin-bottom: calc(${theme.spacing.d} * 2);\n padding-top: ${theme.spacing.d};\n `,\n };\n}\n","import React, { FC } from 'react';\nimport { Badge, BadgeProps } from '@grafana/ui';\nimport { PluginState } from '@grafana/data';\n\ninterface Props {\n state?: PluginState;\n}\n\nexport const PluginStateInfo: FC = (props) => {\n const display = getFeatureStateInfo(props.state);\n\n if (!display) {\n return null;\n }\n\n return ;\n};\n\nfunction getFeatureStateInfo(state?: PluginState): BadgeProps | null {\n switch (state) {\n case PluginState.deprecated:\n return {\n text: 'Deprecated',\n color: 'red',\n tooltip: `This feature is deprecated and will be removed in a future release`,\n };\n case PluginState.alpha:\n return {\n text: 'Alpha',\n color: 'blue',\n tooltip: `This feature is experimental and future updates might not be backward compatible`,\n };\n case PluginState.beta:\n return {\n text: 'Beta',\n color: 'blue',\n tooltip: `This feature is close to complete but not fully tested`,\n };\n default:\n return null;\n }\n}\n"],"names":["PanelTypeFilter","onChange","propsOnChange","maxMenuHeight","plugins","useMemo","getAllPanelPluginMeta","options","map","p","label","name","imgUrl","info","logos","small","value","sort","a","b","localeCompare","setValue","useState","useCallback","changedPlugins","plugin","push","styles","useStyles2","getStyles","selectOptions","defaultOptions","getOptionLabel","i","getOptionValue","noOptionsMessage","placeholder","resetSelectStyles","className","container","length","clear","onClick","MultiSelect","menuShouldPortal","prefix","Icon","theme","css","spacing","colors","text","link","maxContrast","PanelTypeCard","isCurrent","title","onDelete","disabled","showBadge","description","children","cssClass","cx","item","state","PluginState","current","selectors","undefined","img","src","alt","itemContent","badge","PanelPluginBadge","IconButton","e","stopPropagation","displayName","background","secondary","shape","borderRadius","shadows","z1","transitions","create","duration","short","emphasize","primary","border","action","selected","typography","size","sm","fontWeightMedium","bodySmall","fontSize","fontWeightLight","isUnsignedPluginSignature","signature","PluginSignatureBadge","status","VizTypePickerPlugin","allPanels","config","Object","keys","filter","key","filterPluginList","pluginsList","searchQuery","id","query","toLowerCase","first","match","idx","indexOf","concat","VizTypePicker","onTypeChange","useTheme","getFilteredPluginList","filteredPluginList","hasResults","renderList","grid","index","matchesQuery","Boolean","metaKey","ctrlKey","altKey","renderVizPlugin","EmptySearchResult","stylesFactory","FolderFilter","loading","setLoading","getOptions","searchString","async","params","type","permission","PermissionLevelString","getBackendSrv","search","d","includes","unshift","getFoldersAsOptions","debouncedLoadOptions","debounce","folders","changedFolders","folder","isMulti","AsyncMultiSelect","isLoading","loadOptions","initialLibraryPanelsSearchState","panelFilter","folderFilter","sortDirection","searchChanged","createAction","sortChanged","panelFilterChanged","folderFilterChanged","libraryPanelsSearchReducer","payload","f","String","LibraryPanelsSearchVariant","LibraryPanelsSearch","variant","Spacious","currentPanelId","currentFolderId","perPage","DEFAULT_PER_PAGE_PAGINATION","showPanelFilter","showFolderFilter","showSort","showSecondaryActions","dispatch","useReducer","toString","onFilterChange","onSortChange","sorting","onFolderFilterChange","onPanelFilterChange","VerticalGroup","FilterInput","width","HorizontalGroup","justify","SortPicker","libraryPanelsView","LibraryPanelsView","onClickCard","buttonRow","tightFilter","tightSortFilter","initialLibraryPanelsViewState","loadingState","LoadingState","libraryPanels","totalCount","page","numberOfPages","initSearch","searchCompleted","changePage","libraryPanelsViewReducer","Math","ceil","searchForLibraryPanels","args","subscription","Subscription","dataObservable","from","getLibraryPanels","excludeUid","typeFilter","pipe","mergeMap","elements","of","catchError","err","console","error","finalize","unsubscribe","share","add","merge","timer","mapTo","takeUntil","subscribe","asyncDispatcher","Function","initialDeleteLibraryPanelModalState","dashboardTitles","deleteLibraryPanelModalReducer","dashboards","DeleteLibraryPanelModal","libraryPanel","onDismiss","onConfirm","useStyles","getModalStyles","asyncDispatch","useEffect","apiGetConnectedDashboards","uid","getConnectedDashboards","connected","done","Modal","modal","icon","isOpen","LoadingIndicator","HasConnectedDashboards","Confirm","Button","fill","modalText","suffix","message","textInfo","myTable","LibraryPanelCard","showDeletionModal","setShowDeletionModal","panelPlugin","model","getPanelPluginNotFound","meta","FolderLink","folderUid","metaContainer","Link","href","folderName","currentPanel","propsPerPage","getPanelViewStyles","useDebounce","apiDeleteLibraryPanel","deleteLibraryPanel","libraryPanelList","noPanelsFound","pagination","Pagination","currentPage","onNavigate","hideWhenSinglePage","searchHeader","newPanelButton","radius","bg3","bg1","textSemiWeak","md","xl","bg2","noteTextbox","dashboardSearch","heading","h4","PluginStateInfo","props","display","color","tooltip","getFeatureStateInfo","Badge"],"sourceRoot":""}