import { __decorate } from "tslib";
import { Vue, Component, Prop } from 'vue-property-decorator';
import { DataTypes, ModelTool, Util } from '@ibizstudio/runtime';
let AppDefaultGridColumn = class AppDefaultGridColumn extends Vue {
    /**
     * 绘制
     *
     * @memberof AppDefaultGridColumn
     */
    render() {
        var _a;
        const uiAction = this.columnInstance.getPSDEUIAction();
        if (uiAction && uiAction.uIActionTag) {
            return (<a v-show={this.row[uiAction.uIActionTag] && this.row[uiAction.uIActionTag].visabled === false ? false : true} disabled={(_a = this.row[uiAction.uIActionTag]) === null || _a === void 0 ? void 0 : _a.disabled} style="{'display': 'block'}" on-click={($event) => { this.onClick($event); }}>
                    {this.renderGridColumn()}
                </a>);
        }
        else {
            return this.renderGridColumn();
        }
    }
    /**
     * 绘制表格列
     *
     * @memberof AppDefaultGridColumn
     */
    renderGridColumn() {
        const columnModel = this.columnInstance;
        const { cLConvertMode, enableLinkView, name } = columnModel;
        const codeList = columnModel.getPSAppCodeList();
        if (codeList && cLConvertMode == "FRONT") { //  代码表
            return (<codelist value={this.row[name]} codeList={codeList}>
                </codelist>);
        }
        else if (enableLinkView && columnModel.getLinkPSAppView()) { //  链接视图
            const linkView = columnModel.getLinkPSAppView();
            let view = {
                viewname: 'app-view-shell',
                height: linkView.height,
                width: linkView.width,
                title: linkView.title,
                isRedirectView: linkView.redirectView ? true : false,
                placement: linkView.openMode ? linkView.openMode : '',
                viewpath: linkView.modelFilePath,
            };
            Object.defineProperty(view, 'viewModel', { enumerable: false, writable: true, value: linkView });
            this.handleLinkViewParams(linkView, view);
            return this.renderLinkView(linkView, view);
        }
        else { //常规显示
            return this.renderDefault();
        }
    }
    /**
     * 计算路由参数
     *
     * @param linkView 链接视图
     * @param view 模型
     * @param entity 链接视图实体
     */
    handleLinkViewParams(linkView, view) {
        var _a, _b, _c, _d;
        const entity = linkView.getPSAppDataEntity();
        //获取父关系路由参数
        let tempDeResParameters = [];
        //视图本身路由参数
        let tempParameters = [];
        if (entity && entity.codeName) {
            tempDeResParameters = Util.formatAppDERSPath(this.context, linkView.getPSAppDERSPaths());
            tempParameters.push({
                pathName: Util.srfpluralize(entity.codeName).toLowerCase(),
                parameterName: entity.codeName.toLowerCase()
            });
            tempParameters.push({
                pathName: (_a = linkView.getPSDEViewCodeName()) === null || _a === void 0 ? void 0 : _a.toLowerCase(),
                parameterName: (_b = linkView.getPSDEViewCodeName()) === null || _b === void 0 ? void 0 : _b.toLowerCase()
            });
        }
        else {
            tempParameters.push({
                pathName: (_c = linkView.codeName) === null || _c === void 0 ? void 0 : _c.toLowerCase(),
                parameterName: (_d = linkView.codeName) === null || _d === void 0 ? void 0 : _d.toLowerCase()
            });
        }
        Object.assign(view, {
            parameters: tempParameters,
            deResParameters: tempDeResParameters
        });
    }
    /**
     * 绘制常规显示内容
     *
     * @memberof AppDefaultGridColumn
     */
    renderDefault() {
        const editItem = ModelTool.getGridItemByCodeName(this.columnInstance.codeName, this.gridInstance);
        const editor = editItem === null || editItem === void 0 ? void 0 : editItem.getPSEditor();
        const appDEField = (editItem ? editItem.getPSAppDEField() : this.columnInstance.getPSAppDEField());
        const { stdDataType, precision, valueFormat } = appDEField;
        const name = this.columnInstance.name;
        if (editor && editor.editorType) {
            return (<app-span name={editor.name} editorType={editor.editorType} value={this.row[editor.name]} dataType={stdDataType ? DataTypes.toString(stdDataType) : "text"} precision={precision || 0}>
                </app-span>);
        }
        else if (valueFormat && valueFormat != '%1$s') {
            return (<app-format-data format={valueFormat} data={this.row[name]}>
                </app-format-data>);
        }
        else if (stdDataType && DataTypes.toString(stdDataType) && (DataTypes.toString(stdDataType) == "FLOAT" || DataTypes.toString(stdDataType) == "CURRENCY" || DataTypes.toString(stdDataType) == "DECIMAL")) {
            return (<app-format-data dataType={DataTypes.toString(stdDataType)} precision={precision ? precision : 0} data={this.row[name]}>
            </app-format-data>);
        }
        else {
            return (<span>{this.row[name]}</span>);
        }
    }
    /**
     * 绘制链接视图内容
     *
     * @memberof AppDefaultGridColumn
     */
    renderLinkView(linkView, view) {
        var _a, _b;
        const linkViewEntity = linkView.getPSAppDataEntity();
        const editInstance = (_a = ModelTool.getGridItemByCodeName(this.columnInstance.codeName, this.gridInstance)) === null || _a === void 0 ? void 0 : _a.getPSEditor();
        const name = this.columnInstance.name.toLowerCase();
        let tempContext = Util.deepCopy(this.context);
        if (view.viewpath) {
            Object.assign(tempContext, { viewpath: view.viewpath });
        }
        let tempViewParam = Util.deepCopy(this.viewparams);
        return (<app-column-link deKeyField={linkViewEntity && linkViewEntity.codeName ? (_b = linkViewEntity.codeName) === null || _b === void 0 ? void 0 : _b.toLowerCase() : ""} context={tempContext} viewparams={tempViewParam} data={this.row} linkview={view} appUIService={this.appUIService} valueitem={this.columnInstance.linkValueItem}>
                {editInstance && editInstance.editorType ?
                <app-span name={name} editorType={editInstance.editorType} value={this.row[name]}>
                    </app-span> :
                <span>
                        {this.row[name]}
                    </span>}
            </app-column-link>);
    }
    /**
     * 链接点击
     *
     * @param {*} row 当前行数据
     * @param {*} tag 标识
     * @param {*} $event 点击Event
     * @memberof AppDefaultGridColumn
     */
    onClick($event) {
        this.$emit("uiAction", $event);
    }
};
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "columnInstance", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "gridInstance", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "row", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "index", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "context", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "viewparams", void 0);
__decorate([
    Prop()
], AppDefaultGridColumn.prototype, "appUIService", void 0);
AppDefaultGridColumn = __decorate([
    Component({})
], AppDefaultGridColumn);
export { AppDefaultGridColumn };
