import { __decorate } from "tslib";
import { Vue, Component, Prop, Model, Emit } from 'vue-property-decorator';
import { AppComponentService } from '../../app-service';
import RawEditor from './raw-editor/raw-editor';
import RateEditor from './rate-editor/rate-editor';
import SliderEditor from './slider-editor/slider-editor';
import SpanEditor from './span-editor/span-editor';
import StepperEditor from './stepper-editor/stepper-editor';
import TextboxEditor from './textbox-editor/textbox-editor';
import AutocompleteEditor from './autocomplete-editor/autocomplete-editor';
import HtmlEditor from './html-editor/html-editor';
import UploadEditor from './upload-editor/upload-editor';
import CheckboxEditor from './checkbox-editor/checkbox-editor';
import DropdownListEditor from './dropdown-list-editor/dropdown-list-editor';
import DatePickerEditor from './date-picker-editor/date-picker-editor';
import DataPickerEditor from './data-picker-editor/data-picker-editor';
import SwitchEditor from './switch-editor/switch-editor';
import IpAddressEditor from './ipaddress-editor/ipaddress-editor';
import CodeEditor from './code-editor/code-editor';
import { LogUtil } from '@ibizstudio/runtime';
/**
 * editor解析器
 *
 * @export
 * @class AppDefaultEditor
 * @extends {Vue}
 */
let AppDefaultEditor = class AppDefaultEditor extends Vue {
    constructor() {
        super(...arguments);
        /**
         * 编辑器解析器模型映射集合
         *
         * @type {*}
         * @memberof AppDefaultEditor
         */
        this.AppDefaultEditorModels = new Map([
            ['autocomplete-editor', ['AC', 'AC_FS', 'AC_NOBUTTON', 'AC_FS_NOBUTTON']],
            ['raw-editor', ['RAW']],
            ['stepper-editor', ['STEPPER']],
            ['slider-editor', ['SLIDER']],
            ['switch-editor', ['SWITCH']],
            ['rate-editor', ['RATING']],
            ['html-editor', [
                    'HTMLEDITOR',
                    "HTMLEDITOR_INFO"
                ]],
            ['ipaddress-editor', ['IPADDRESSTEXTBOX']],
            ['span-editor', ['SPANEX', 'SPAN', 'SPAN_COLORSPAN', 'SPAN_LINK']],
            ['upload-editor', [
                    'FILEUPLOADER',
                    'PICTURE',
                    'PICTURE_ONE',
                    'FILEUPLOADER_DISK',
                    'PICTURE_ROMATE',
                    'PICTURE_DISKPIC',
                    'FILEUPLOADER_DRAG',
                    'PICTURE_INFO',
                    'FILEUPLOADER_INFO',
                    'FILEUPLOADER_CAMERA',
                    'FILEUPLOADER_ONE',
                    'FILEUPLOADER_USEWORKTEMP'
                ]],
            ['checkbox-editor', [
                    'RADIOBUTTONLIST',
                    'CHECKBOX',
                    'CHECKBOXLIST',
                    'LISTBOX',
                    'LISTBOXPICKUP',
                ]],
            ['dropdown-list-editor', [
                    'DROPDOWNLIST',
                    'DROPDOWNLIST_100',
                    'MDROPDOWNLIST',
                    'MDROPDOWNLIST_CRONEDITOR',
                    'DROPDOWNLIST_HIDDEN',
                    'MDROPDOWNLIST_TRANSFER'
                ]],
            ['textbox-editor', [
                    'TEXTBOX',
                    'PASSWORD',
                    'TEXTAREA',
                    'TEXTAREA_10',
                    'MARKDOWN',
                    'NUMBER',
                    "TEXTBOX_COLORPICKER",
                    'TEXTAREA_WFAPPROVAL',
                    "TEXTAREA_WFAPPROVALTIMELINE",
                    "TEXTAREA_WFAPPROVALEXTENDTIMELINE"
                ]],
            ['date-picker-editor', [
                    'DATEPICKEREX',
                    'DATEPICKEREX_MINUTE',
                    'DATEPICKEREX_SECOND',
                    'DATEPICKEREX_NODAY',
                    'DATEPICKEREX_NODAY_NOSECOND',
                    'DATEPICKEREX_NOTIME',
                    'DATEPICKEREX_HOUR',
                    'DATEPICKER',
                ]],
            ['data-picker-editor', [
                    'PICKEREX_LINKONLY',
                    'PICKER',
                    'PICKEREX_NOAC_LINK',
                    'PICKEREX_TRIGGER_LINK',
                    'PICKEREX_TRIGGER',
                    'PICKEREX_NOAC',
                    'PICKEREX_LINK',
                    'PICKEREX_DROPDOWNVIEW',
                    'PICKEREX_DROPDOWNVIEW_LINK',
                    'PICKUPVIEW',
                    'PICKEREX_NOBUTTON',
                    'ADDRESSPICKUP',
                    'ADDRESSPICKUP_AC',
                    'PICKER_ORGSELECT',
                    'PICKER_ORGMULTIPLE',
                    'PICKER_ALLORGSELECT',
                    'PICKER_ALLORGMULTIPLE',
                    'PICKER_ALLDEPTPERSONSELECT',
                    'PICKER_ALLDEPTPERSONMULTIPLE',
                    'PICKER_DEPTPERSONSELECT',
                    'PICKER_DEPTPERSONMULTIPLE',
                    'PICKER_ALLEMPSELECT',
                    'PICKER_ALLEMPMULTIPLE',
                    'PICKER_EMPSELECT',
                    'PICKER_EMPMULTIPLE',
                    'PICKER_ALLDEPATMENTSELECT',
                    'PICKER_ALLDEPATMENTMULTIPLE',
                    'PICKER_DEPATMENTSELECT',
                    'PICKER_DEPATMENTMULTIPLE',
                    'PICKER_COMMONMICROCOM',
                ]],
            ['code-editor', [
                    'CODE',
                ]],
        ]);
    }
    /**
     * 编辑器change事件
     *
     * @param {*} value
     * @memberof AppDefaultEditor
     */
    editorChange(value) { }
    /**
     * 编辑器enter事件
     *
     * @memberof AppDefaultEditor
     */
    editorEnter() {
        this.$emit('enter', arguments);
    }
    /**
     * 绘制未支持的编辑器类型
     *
     * @param {*} editor
     * @returns {*}
     * @memberof AppDynamicForm
     */
    renderUnSupportEditorType(editor) {
        return <div class='unsupport'>{`${this.$t('app.editor.unsupport')}${editor.editorType}`}</div>;
    }
    /**
     * 通过编辑器类型绘制编辑器
     *
     * @param {*} editor 编辑器实例对象
     * @returns {*}
     * @memberof AppDynamicForm
     */
    renderByEditorType(editor) {
        var _a, _b, _c;
        if (!editor || !editor.editorType || editor.editorType == 'HIDDEN') {
            return;
        }
        let editorName = '';
        this.AppDefaultEditorModels.forEach((editorTypes, key) => {
            if (editorTypes.indexOf(editor.editorType) > -1) {
                editorName = key;
            }
        });
        if (editorName || editor.editorType == 'USERCONTROL') {
            let editorComponentName = '';
            if (!editorName || ((_a = editor.getPSSysPFPlugin()) === null || _a === void 0 ? void 0 : _a.pluginCode)) {
                editorComponentName = AppComponentService.getEditorComponents(editor.editorType, editor.editorStyle);
                if (!editorComponentName) {
                    LogUtil.warn(this.$t('app.editor.nofind'));
                    return;
                }
            }
            else {
                editorComponentName = editorName;
            }
            return this.$createElement(editorComponentName, {
                class: (_c = (_b = this.editorInstance) === null || _b === void 0 ? void 0 : _b.getPSSysCss()) === null || _c === void 0 ? void 0 : _c.cssName,
                props: {
                    editorInstance: editor,
                    containerCtrl: this.containerCtrl,
                    parentItem: this.parentItem,
                    context: this.context,
                    value: this.value,
                    valueFormat: this.valueFormat,
                    viewparams: this.viewparams,
                    contextData: this.contextData,
                    isDebounce: this.isDebounce,
                    service: this.service,
                    disabled: this.disabled,
                    ignorefieldvaluechange: this.ignorefieldvaluechange,
                    rowPreview: this.rowPreview,
                },
                on: {
                    change: this.editorChange,
                    enter: this.editorEnter,
                }
            });
        }
        return this.renderUnSupportEditorType(editor);
    }
    /**
     * 绘制内容
     *
     * @returns {*}
     * @memberof AppDynamicForm
     */
    render() {
        if (this.editorInstance) {
            return this.renderByEditorType(this.editorInstance);
        }
        else {
            return this.$t('app.editor.noexist');
        }
    }
};
__decorate([
    Model('change')
], AppDefaultEditor.prototype, "value", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "editorInstance", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "containerCtrl", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "parentItem", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "context", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "viewparams", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "contextData", void 0);
__decorate([
    Prop({ default: false })
], AppDefaultEditor.prototype, "disabled", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "service", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "ignorefieldvaluechange", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "rowPreview", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "valueFormat", void 0);
__decorate([
    Prop()
], AppDefaultEditor.prototype, "isDebounce", void 0);
__decorate([
    Emit('change')
], AppDefaultEditor.prototype, "editorChange", null);
AppDefaultEditor = __decorate([
    Component({
        components: {
            'textbox-editor': TextboxEditor,
            'slider-editor': SliderEditor,
            'rate-editor': RateEditor,
            'raw-editor': RawEditor,
            'span-editor': SpanEditor,
            'stepper-editor': StepperEditor,
            'autocomplete-editor': AutocompleteEditor,
            'html-editor': HtmlEditor,
            'upload-editor': UploadEditor,
            'checkbox-editor': CheckboxEditor,
            'dropdown-list-editor': DropdownListEditor,
            'date-picker-editor': DatePickerEditor,
            'data-picker-editor': DataPickerEditor,
            'switch-editor': SwitchEditor,
            'ipaddress-editor': IpAddressEditor,
            'code-editor': CodeEditor,
        },
    })
], AppDefaultEditor);
export { AppDefaultEditor };
