UNPKG

armisa-models

Version:
72 lines (61 loc) 2.51 kB
import { lazy } from "react"; import { IArmisaPageKey } from "../ArmisaImportPage"; import { MainStateManager } from "../MainStateManager"; import { IMainStateFactory } from "../Types"; import { PageTabingFactory } from "./PageTabingFactory"; import { SubPageFactory } from "./SubPageFactory"; export class PageFactory { public get any(): any { return this; } public mainStateManager: MainStateManager; public mainStateFactory?: IMainStateFactory; public forceUpdate: () => void; public forceUpdateHeadr: () => void; public forceUpdateToolStrip: () => void; public id: string; public Component: React.LazyExoticComponent<React.ComponentType<any>>; #hasChange: boolean; public get hasChange(): boolean { return this.#hasChange; } public get isActivePage(): boolean { return this.tabPageContainer.activeTab === this; } constructor( public tabPageContainer: PageTabingFactory, public pageKey: string, public caption: string, lazyLoadPage: (pageKey: IArmisaPageKey) => React.LazyExoticComponent<React.ComponentType<any>> ) { this.id = Math.random().toString() + '-' + new Date().getMilliseconds().toString(); this.mainStateManager = this.tabPageContainer.mainStateManager; this.Component = lazyLoadPage(this.pageKey as IArmisaPageKey); this.#hasChange = false; this.forceUpdate = () => { }; this.forceUpdateHeadr = () => { }; this.forceUpdateToolStrip = () => { }; } public close() { this.tabPageContainer.closeThisTab(this); } public subPages: SubPageFactory[] = []; public subPagesOrder: SubPageFactory[] = []; public activeSubPage?: SubPageFactory; closeThisSubPage = (subPage: SubPageFactory) => { this.subPages = this.subPages.filter((t) => t !== subPage); this.subPagesOrder = this.subPagesOrder.filter((t) => t !== subPage); if (this.subPagesOrder.length > 0) { this.activeSubPage = this.subPagesOrder[this.subPagesOrder.length - 1]; } else { this.activeSubPage = undefined; } this.forceUpdate(); } selectThisSubPage = (subPage: SubPageFactory) => { const newSubPage = this.subPagesOrder.filter((t) => t !== subPage); newSubPage.push(subPage); this.subPagesOrder = newSubPage; this.forceUpdate(); } }