898bab4d-e4fd-4d02-8de7-aea3ee47c481.js 3.66 KB
"use strict";
cc._RF.push(module, '898batN5P1NAo3nrqPuR8SB', 'PresenterBase');
// script/common/classbase/PresenterBase.ts

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Presenter = exports.Subpresenter = exports.createPresenter = exports.setSubpresenterwFactory = exports.setPresenterViewFactory = void 0;
const ViewBase_1 = require("./ViewBase");
const simba_eventkit_1 = require("simba-eventkit");
let presenterViewFactory;
function setPresenterViewFactory(factory) {
    presenterViewFactory = factory;
}
exports.setPresenterViewFactory = setPresenterViewFactory;
let subpresenterFactory;
function setSubpresenterwFactory(factory) {
    subpresenterFactory = factory;
}
exports.setSubpresenterwFactory = setSubpresenterwFactory;
let currentCreatingPresenter;
async function createPresenter(presenterCls) {
    await presenterViewFactory.preloadView(presenterCls);
    if (currentCreatingPresenter) {
        console.warn("create presenter simultaneously will cause sub presenters error!");
    }
    let presenter = currentCreatingPresenter = new presenterCls;
    let view = await presenterViewFactory(presenterCls);
    presenter.attachView(view);
    currentCreatingPresenter = undefined;
    return presenter;
}
exports.createPresenter = createPresenter;
ViewBase_1.OnSubviewCreated.on((subview) => {
    if (!currentCreatingPresenter) {
        return;
    }
    let presenter = subpresenterFactory(subview);
    presenter.owner = currentCreatingPresenter;
    currentCreatingPresenter._subpresenters.push(presenter);
});
class PresenterBase {
    onShow() {
    }
    onHide() {
    }
}
class Subpresenter extends PresenterBase {
    get view() { return this._view; }
    attachView(view) {
        this._view = view;
    }
    onOpen() {
        this._disposable = new simba_eventkit_1.CompositeDisposable;
        this._disposable.add(this._view.onShow.on(() => this.onShow()));
        this._disposable.add(this._view.onHide.on(() => this.onHide()));
    }
    onClose() {
        this._disposable.dispose();
    }
    onOwnerShow() {
    }
    onOwnerHide() {
    }
    onOwnerEnterForeground() {
    }
    onOwnerEnterBackground() {
    }
}
exports.Subpresenter = Subpresenter;
class Presenter extends PresenterBase {
    constructor() {
        super(...arguments);
        this._isInBackground = false;
        this._subpresenters = [];
        this.open = (parent, props) => {
            this._view.open(parent);
            this.onOpen(props);
        };
    }
    get view() { return this._view; }
    attachView(view) {
        this._view = view;
    }
    onOpen(props) {
        this._disposable = new simba_eventkit_1.CompositeDisposable;
        this._disposable.add(this._view.onClose.on(() => this.onClose()));
        this._disposable.add(this._view.onShow.on(() => this.onShow()));
        this._disposable.add(this._view.onHide.on(() => this.onHide()));
        this._subpresenters.forEach((p) => {
            p.onOpen();
        });
    }
    onClose() {
        this._disposable.dispose();
        this._subpresenters.forEach((p) => {
            p.onClose();
        });
    }
    onShow() {
        this._subpresenters.forEach((p) => {
            p.onOwnerShow();
        });
    }
    onHide() {
        this._subpresenters.forEach((p) => {
            p.onOwnerHide();
        });
    }
    onEnterForeground() {
        this._isInBackground = false;
        this._subpresenters.forEach((p) => {
            p.onOwnerEnterForeground();
        });
    }
    onEnterBackground() {
        this._isInBackground = true;
        this._subpresenters.forEach((p) => {
            p.onOwnerEnterBackground();
        });
    }
}
exports.Presenter = Presenter;

cc._RF.pop();