UNPKG

@kinvolk/headlamp-plugin

Version:

The needed infrastructure for building Headlamp plugins.

61 lines (60 loc) 2.25 kB
/* * Copyright 2025 The Kubernetes Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { createSlice } from '@reduxjs/toolkit'; const initialState = { /** Once the plugins have been fetched and executed. */ loaded: false, /** If plugin settings are saved use those. */ pluginSettings: JSON.parse(localStorage.getItem('headlampPluginSettings') || '[]'), }; export const pluginsSlice = createSlice({ name: 'plugins', initialState, reducers: { pluginsLoaded(state) { state.loaded = true; }, /** * Save the plugin settings. To both the store, and localStorage. */ setPluginSettings(state, action) { state.pluginSettings = action.payload; localStorage.setItem('headlampPluginSettings', JSON.stringify(action.payload)); }, /** Reloads the browser page */ reloadPage() { window.location.reload(); }, /** * Set the plugin settings component. */ setPluginSettingsComponent(state, action) { const { name, component, displaySaveButton } = action.payload; state.pluginSettings = state.pluginSettings.map(plugin => { if (plugin.name === name) { return { ...plugin, settingsComponent: component, displaySettingsComponentWithSaveButton: displaySaveButton, }; } return plugin; }); }, }, }); export const { pluginsLoaded, setPluginSettings, setPluginSettingsComponent, reloadPage } = pluginsSlice.actions; export default pluginsSlice.reducer;