{{define "promptModal"}}
<a-modal id="prompt-modal" v-model="promptModal.visible" :title="promptModal.title"
         :closable="true" @ok="promptModal.ok" :mask-closable="false"
         :confirm-loading="promptModal.confirmLoading"
         :ok-text="promptModal.okText" cancel-text='{{ i18n "cancel" }}' :class="themeSwitcher.currentTheme">
    <a-input id="prompt-modal-input" :type="promptModal.type"
             v-model="promptModal.value"
             :autosize="{minRows: 10, maxRows: 20}"
             @keydown.enter.native="promptModal.keyEnter"
             @keydown.ctrl.83="promptModal.ctrlS"></a-input>
</a-modal>

<script>

    const promptModal = {
        title: '',
        type: '',
        value: '',
        okText: '{{ i18n "sure"}}',
        visible: false,
        confirmLoading: false,
        keyEnter(e) {
            if (this.type !== 'textarea') {
                e.preventDefault();
                this.ok();
            }
        },
        ctrlS(e) {
            if (this.type === 'textarea') {
                e.preventDefault();
                promptModal.confirm(promptModal.value);
            }
        },
        ok() {
            promptModal.confirm(promptModal.value);
        },
        confirm() {},
        open({
            title = '',
            type = 'text',
            value = '',
            okText = '{{ i18n "sure"}}',
            confirm = () => {},
        }) {
            this.title = title;
            this.type = type;
            this.value = value;
            this.okText = okText;
            this.confirm = confirm;
            this.visible = true;
            promptModalApp.$nextTick(() => {
                document.querySelector('#prompt-modal-input').focus();
            });
        },
        close() {
            this.visible = false;
        },
        loading(loading=true) {
            this.confirmLoading = loading;
        },
    };

    const promptModalApp = new Vue({
        el: '#prompt-modal',
        data: {
            promptModal: promptModal,
        },
    });

</script>
{{end}}