armisa-models
Version:
models of armisa!
72 lines (61 loc) • 2.51 kB
text/typescript
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();
}
}