import type { LensExtensionId } from "./lens-extension"; import { BaseStore } from "../common/base-store"; import { action, computed, observable, toJS } from "mobx"; export interface LensExtensionsStoreModel { extensions: Record; } export interface LensExtensionState { enabled?: boolean; name: string; } export class ExtensionsStore extends BaseStore { constructor() { super({ configName: "lens-extensions", }); } @computed get enabledExtensions() { return Array.from(this.state.values()) .filter(({enabled}) => enabled) .map(({name}) => name); } protected state = observable.map(); isEnabled(extId: LensExtensionId): boolean { const state = this.state.get(extId); // By default false, so that copied extensions are disabled by default. // If user installs the extension from the UI, the Extensions component will specifically enable it. return Boolean(state?.enabled); } @action mergeState(extensionsState: Record) { this.state.merge(extensionsState); } @action protected fromStore({ extensions }: LensExtensionsStoreModel) { this.state.merge(extensions); } toJSON(): LensExtensionsStoreModel { return toJS({ extensions: this.state.toJSON(), }, { recurseEverything: true }); } } export const extensionsStore = new ExtensionsStore();