import { destroy, detach, types } from "mobx-state-tree"; import { SharedStoreModel } from "./model"; import { Stores } from "./mixin"; /** * StoreExtender injects into the AnnotationStore and holds every created SharedStore. * * Underlying tags that use SharedStoreMixin have access to methods of this mixin to add * their SharedStore instances. */ export const StoreExtender = types .model("StoreExtender", { sharedStores: types.optional(types.map(SharedStoreModel), {}), }) .actions((self) => ({ addSharedStore(store) { self.sharedStores.set(store.id, store); }, beforeReset() { self.sharedStores.forEach((store) => { detach(store); }); self.sharedStores.clear(); }, afterReset() { Stores.forEach((store) => { self.addSharedStore(store); }); }, beforeDestroy() { self.sharedStores.forEach((store) => { detach(store); destroy(store); }); self.sharedStores.clear(); }, }));