import { Util } from '@ibizstudio/runtime';
import { MainControlBase } from "./main-control-base";
/**
 * 数据关系分页部件基类
 *
 * @export
 * @class DrtabControlBase
 * @extends {MainControlBase}
 */
export class DrtabControlBase extends MainControlBase {
    constructor() {
        super(...arguments);
        /**
         * 是否显示插槽
         *
         * @type {boolean}
         * @memberof DrtabControlBase
         */
        this.isShowSlot = true;
        /**
         * 计数器数据
         *
         * @type {any}
         * @memberof DrtabControlBase
         */
        this.counterData = null;
    }
    /**
     * 监听静态参数变化
     *
     * @memberof DrtabControlBase
     */
    onStaticPropsChange(newVal, oldVal) {
        this.isShowSlot = newVal.isShowSlot === false ? false : true;
        super.onStaticPropsChange(newVal, oldVal);
    }
    /**
     * 初始化数据关系分页部件模型
     *
     * @type {*}
     * @memberof DrtabControlBase
     */
    async ctrlModelInit() {
        await super.ctrlModelInit();
        this.initDrtabBasicData();
        this.initCounterData();
    }
    /**
     * 数据关系分页部件初始化
     *
     * @memberof DrtabControlBase
     */
    ctrlInit(args) {
        super.ctrlInit(args);
    }
    viewStateAction(tag, action, data) {
        if (!Object.is(tag, this.name)) {
            return;
        }
        super.viewStateAction(tag, action, data);
        if (Object.is('state', action)) {
            this.handleFormChange(data);
        }
    }
    /**
     * 初始化数据关系分页部件基础数据
     *
     * @memberof DrtabControlBase
     */
    initDrtabBasicData() {
        if (this.controlInstance.getPSDEDRTabPages() && this.controlInstance.getPSDEDRTabPages().length > 0) {
            this.drtabItems = [];
            this.controlInstance.getPSDEDRTabPages().forEach((element) => {
                this.drtabItems.push(Object.assign(element, { disabled: true }));
            });
        }
    }
    /**
     * 初始化数据关系部件计数器数据
     *
     * @memberof DrtabControlBase
     */
    initCounterData() {
        var _a, _b, _c;
        const counterRef = (_b = (_a = this.controlInstance).getPSAppCounterRef) === null || _b === void 0 ? void 0 : _b.call(_a);
        if (counterRef) {
            const targetCounterService = (_c = Util.findElementByField(this.counterServiceArray, 'id', counterRef.id)) === null || _c === void 0 ? void 0 : _c.service;
            this.counterData = targetCounterService === null || targetCounterService === void 0 ? void 0 : targetCounterService.counterData;
        }
    }
    /**
     * 选中项
     *
     * @param {string} tabPaneName 分页name
     * @memberof DrtabControlBase
     */
    tabPanelClick(tabPaneName) {
        this.onCtrlEvent(this.controlInstance.name, 'selectionchange', [{ id: tabPaneName }]);
    }
    /**
     * 处理表单数据变更
     *
     * @param {any} args 表单数据
     * @memberof AppDrtabBase
     */
    handleFormChange(args) {
        if (args && Object.is(args.srfuf, '1')) {
            this.drtabItems.forEach((drtabItem) => {
                var _a, _b;
                // 取消禁用
                drtabItem.disabled = false;
                // 设置导航参数
                if (drtabItem.getPSNavigateContexts() &&
                    ((_a = drtabItem === null || drtabItem === void 0 ? void 0 : drtabItem.getPSNavigateContexts()) === null || _a === void 0 ? void 0 : _a.length) > 0) {
                    const localContext = Util.formatNavParam(drtabItem.getPSNavigateContexts());
                    let _context = Util.computedNavData(args, this.context, this.viewparams, localContext);
                    drtabItem.localContext = _context;
                }
                if ((drtabItem === null || drtabItem === void 0 ? void 0 : drtabItem.getPSNavigateParams()) &&
                    ((_b = drtabItem.getPSNavigateParams()) === null || _b === void 0 ? void 0 : _b.length) > 0) {
                    const localViewParam = Util.formatNavParam(drtabItem.getPSNavigateParams());
                    let _param = Util.computedNavData(args, this.context, this.viewparams, localViewParam);
                    drtabItem.localViewParam = _param;
                }
            });
        }
        this.$forceUpdate();
    }
}
