@stories-js/core
Version:
Stories web components to build stories
67 lines • 2.09 kB
JavaScript
/*!
* (C) StoriesJS https://storiesjs.org - GPL-2.0 License
*/
/* eslint-disable @typescript-eslint/no-explicit-any */
import { state } from '../store';
import { ensurePanel } from "../utils";
export const addonsAPI = {
registerAddon: (addon) => {
const addons = Object.assign({}, state.addons);
addons[addon.id] = addon;
state.addons = addons;
},
unregisterAddon: (addon) => {
state.addons = Object.keys(state.addons).filter(id => id !== addon.id).reduce((addons, id) => {
addons[id] = state.addons[id];
return addons;
}, {});
},
getPanels() {
return Object.keys(state.addons).filter(addonId => state.addons[addonId].type === 'panel').reduce((addons, id) => {
addons[id] = state.addons[id];
return addons;
}, {});
},
getTools() {
return Object.keys(state.addons).filter(addonId => state.addons[addonId].type === 'tool').reduce((addons, id) => {
addons[id] = state.addons[id];
return addons;
}, {});
},
getStoryPanels: () => {
const allPanels = addonsAPI.getPanels();
const { story } = state;
if (!allPanels || !story) {
return allPanels;
}
const { parameters } = story;
const filteredPanels = {};
Object.entries(allPanels).forEach(([id, panel]) => {
const { paramKey } = panel;
if (paramKey &&
parameters &&
parameters[paramKey] &&
parameters[paramKey].disable) {
return;
}
filteredPanels[id] = panel;
});
return filteredPanels;
},
getSelectedPanel: () => {
const { selectedPanel } = state;
return ensurePanel(addonsAPI.getPanels(), selectedPanel, selectedPanel);
},
setSelectedPanel: (panelName) => {
state.selectedPanel = panelName;
},
getAddonState: (addonId) => {
return state.addons[addonId].state;
},
setAddonState(addonId, addonState) {
const addon = Object.assign({}, state.addons[addonId]);
addon.state = addonState;
state.addons = Object.assign(Object.assign({}, state.addons), { [addonId]: addon });
},
};
//# sourceMappingURL=addons.js.map