import { AnyAction, createSlice, PayloadAction, Reducer } from '@reduxjs/toolkit'; import { PluginMeta, PanelPlugin, PluginError } from '@grafana/data'; import { PluginsState } from 'app/types'; import { config } from 'app/core/config'; import { reducer as pluginCatalogReducer } from '../admin/state/reducer'; import { PluginDashboard } from '../../../types/plugins'; export const initialState: PluginsState = { plugins: [], errors: [], searchQuery: '', hasFetched: false, dashboards: [], isLoadingPluginDashboards: false, panels: {}, }; const pluginsSlice = createSlice({ name: 'plugins', initialState, reducers: { pluginsLoaded: (state, action: PayloadAction) => { state.hasFetched = true; state.plugins = action.payload; }, pluginsErrorsLoaded: (state, action: PayloadAction) => { state.errors = action.payload; }, setPluginsSearchQuery: (state, action: PayloadAction) => { state.searchQuery = action.payload; }, pluginDashboardsLoad: (state, action: PayloadAction) => { state.isLoadingPluginDashboards = true; state.dashboards = []; }, pluginDashboardsLoaded: (state, action: PayloadAction) => { state.isLoadingPluginDashboards = false; state.dashboards = action.payload; }, panelPluginLoaded: (state, action: PayloadAction) => { state.panels[action.payload.meta!.id] = action.payload; }, }, }); export const { pluginsLoaded, pluginsErrorsLoaded, pluginDashboardsLoad, pluginDashboardsLoaded, setPluginsSearchQuery, panelPluginLoaded, } = pluginsSlice.actions; export const pluginsReducer: Reducer = config.pluginAdminEnabled ? ((pluginCatalogReducer as unknown) as Reducer) : pluginsSlice.reducer; export default { plugins: pluginsReducer, };