import { Store } from './Store.js' import { ElProps } from './ContentInjector.js' export type CustomRenderingHandler = (customRender: CustomRendering) => void export interface CustomRendering extends ElProps { id: string // TODO: need this? Map can be responsible for storing key? isActive: boolean containerEl: HTMLElement reportNewContainerEl: (el: HTMLElement | null) => void generatorName: string generatorMeta: any // could be as simple as boolean renderProps: RenderProps } /* Subscribers will get a LIST of CustomRenderings */ export class CustomRenderingStore extends Store>> { private map = new Map>() // for consistent order handle(customRendering: CustomRendering): void { const { map } = this let updated = false if (customRendering.isActive) { map.set(customRendering.id, customRendering as CustomRendering) updated = true } else if (map.has(customRendering.id)) { map.delete(customRendering.id) updated = true } if (updated) { this.set(map) } } }