@graphiql/react
Version:
[Changelog](https://github.com/graphql/graphiql/blob/main/packages/graphiql-react/CHANGELOG.md) | [API Docs](https://graphiql-test.netlify.app/typedoc/modules/graphiql_react.html) | [NPM](https://www.npmjs.com/package/@graphiql/react)
51 lines (50 loc) • 1.51 kB
JavaScript
import { STORAGE_KEY } from "../constants.js";
const createPluginSlice = (initial) => (set) => ({
plugins: [],
visiblePlugin: null,
...initial,
actions: {
setVisiblePlugin(plugin = null) {
set((current) => {
const {
visiblePlugin: currentVisiblePlugin,
plugins,
onTogglePluginVisibility,
storage
} = current;
const byTitle = typeof plugin === "string";
const newVisiblePlugin = plugin && plugins.find((p) => (byTitle ? p.title : p) === plugin) || null;
if (newVisiblePlugin === currentVisiblePlugin) {
return current;
}
onTogglePluginVisibility == null ? void 0 : onTogglePluginVisibility(newVisiblePlugin);
storage.set(STORAGE_KEY.visiblePlugin, (newVisiblePlugin == null ? void 0 : newVisiblePlugin.title) ?? "");
return {
visiblePlugin: newVisiblePlugin
};
});
},
setPlugins(plugins) {
const seenTitles = /* @__PURE__ */ new Set();
const msg = "All GraphiQL plugins must have a unique title";
for (const {
title
} of plugins) {
if (typeof title !== "string" || !title) {
throw new Error(msg);
}
if (seenTitles.has(title)) {
throw new Error(`${msg}, found two plugins with the title '${title}'`);
}
seenTitles.add(title);
}
set({
plugins
});
}
}
});
export {
createPluginSlice
};
//# sourceMappingURL=plugin.js.map