@kinvolk/headlamp-plugin
Version:
The needed infrastructure for building Headlamp plugins.
61 lines (60 loc) • 2.25 kB
JavaScript
/*
* 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;