UNPKG

element-plus

Version:

A Component Library for Vue 3

244 lines (239 loc) 8.47 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var index = require('../../button/index.js'); var index$1 = require('../../icon/index.js'); require('../../../constants/index.js'); require('../../../hooks/index.js'); require('../../../tokens/index.js'); var iconsVue = require('@element-plus/icons-vue'); require('../../../utils/index.js'); var transferPanel = require('./transfer-panel.js'); var useComputedData = require('./useComputedData.js'); var useCheckedChange = require('./useCheckedChange.js'); var useMove = require('./useMove.js'); require('./transfer.js'); var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js'); var event = require('../../../constants/event.js'); var index$2 = require('../../../hooks/use-locale/index.js'); var index$3 = require('../../../hooks/use-namespace/index.js'); var form = require('../../../tokens/form.js'); var error = require('../../../utils/error.js'); const _sfc_main = vue.defineComponent({ name: "ElTransfer", components: { TransferPanel: transferPanel["default"], ElButton: index.ElButton, ElIcon: index$1.ElIcon, ArrowLeft: iconsVue.ArrowLeft, ArrowRight: iconsVue.ArrowRight }, props: { data: { type: Array, default: () => [] }, titles: { type: Array, default: () => [] }, buttonTexts: { type: Array, default: () => [] }, filterPlaceholder: { type: String, default: "" }, filterMethod: Function, leftDefaultChecked: { type: Array, default: () => [] }, rightDefaultChecked: { type: Array, default: () => [] }, renderContent: Function, modelValue: { type: Array, default: () => [] }, format: { type: Object, default: () => ({}) }, filterable: { type: Boolean, default: false }, props: { type: Object, default: () => ({ label: "label", key: "key", disabled: "disabled" }) }, targetOrder: { type: String, default: "original", validator: (val) => { return ["original", "push", "unshift"].includes(val); } } }, emits: [ event.UPDATE_MODEL_EVENT, event.CHANGE_EVENT, useCheckedChange.LEFT_CHECK_CHANGE_EVENT, useCheckedChange.RIGHT_CHECK_CHANGE_EVENT ], setup(props, { emit, slots }) { const { t } = index$2.useLocale(); const ns = index$3.useNamespace("transfer"); const elFormItem = vue.inject(form.formItemContextKey, {}); const checkedState = vue.reactive({ leftChecked: [], rightChecked: [] }); const { propsKey, sourceData, targetData } = useComputedData.useComputedData(props); const { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange.useCheckedChange(checkedState, emit); const { addToLeft, addToRight } = useMove.useMove(props, checkedState, propsKey, emit); const leftPanel = vue.ref(); const rightPanel = vue.ref(); const clearQuery = (which) => { switch (which) { case "left": leftPanel.value.query = ""; break; case "right": rightPanel.value.query = ""; break; } }; const hasButtonTexts = vue.computed(() => props.buttonTexts.length === 2); const leftPanelTitle = vue.computed(() => props.titles[0] || t("el.transfer.titles.0")); const rightPanelTitle = vue.computed(() => props.titles[1] || t("el.transfer.titles.1")); const panelFilterPlaceholder = vue.computed(() => props.filterPlaceholder || t("el.transfer.filterPlaceholder")); vue.watch(() => props.modelValue, () => { var _a; (_a = elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => error.debugWarn(err)); }); const optionRender = vue.computed(() => (option) => { if (props.renderContent) return props.renderContent(vue.h, option); if (slots.default) return slots.default({ option }); return vue.h("span", option[props.props.label] || option[props.props.key]); }); return { ns, sourceData, targetData, onSourceCheckedChange, onTargetCheckedChange, addToLeft, addToRight, ...vue.toRefs(checkedState), hasButtonTexts, leftPanelTitle, rightPanelTitle, panelFilterPlaceholder, clearQuery, leftPanel, rightPanel, optionRender }; } }); const _hoisted_1 = { key: 0 }; const _hoisted_2 = { key: 0 }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_transfer_panel = vue.resolveComponent("transfer-panel"); const _component_arrow_left = vue.resolveComponent("arrow-left"); const _component_el_icon = vue.resolveComponent("el-icon"); const _component_el_button = vue.resolveComponent("el-button"); const _component_arrow_right = vue.resolveComponent("arrow-right"); return vue.openBlock(), vue.createElementBlock("div", { class: vue.normalizeClass(_ctx.ns.b()) }, [ vue.createVNode(_component_transfer_panel, { ref: "leftPanel", data: _ctx.sourceData, "option-render": _ctx.optionRender, placeholder: _ctx.panelFilterPlaceholder, title: _ctx.leftPanelTitle, filterable: _ctx.filterable, format: _ctx.format, "filter-method": _ctx.filterMethod, "default-checked": _ctx.leftDefaultChecked, props: _ctx.props, onCheckedChange: _ctx.onSourceCheckedChange }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "left-footer") ]), _: 3 }, 8, ["data", "option-render", "placeholder", "title", "filterable", "format", "filter-method", "default-checked", "props", "onCheckedChange"]), vue.createElementVNode("div", { class: vue.normalizeClass(_ctx.ns.e("buttons")) }, [ vue.createVNode(_component_el_button, { type: "primary", class: vue.normalizeClass([_ctx.ns.e("button"), _ctx.ns.is("with-texts", _ctx.hasButtonTexts)]), disabled: _ctx.rightChecked.length === 0, onClick: _ctx.addToLeft }, { default: vue.withCtx(() => [ vue.createVNode(_component_el_icon, null, { default: vue.withCtx(() => [ vue.createVNode(_component_arrow_left) ]), _: 1 }), _ctx.buttonTexts[0] !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_1, vue.toDisplayString(_ctx.buttonTexts[0]), 1)) : vue.createCommentVNode("v-if", true) ]), _: 1 }, 8, ["class", "disabled", "onClick"]), vue.createVNode(_component_el_button, { type: "primary", class: vue.normalizeClass([_ctx.ns.e("button"), _ctx.ns.is("with-texts", _ctx.hasButtonTexts)]), disabled: _ctx.leftChecked.length === 0, onClick: _ctx.addToRight }, { default: vue.withCtx(() => [ _ctx.buttonTexts[1] !== void 0 ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2, vue.toDisplayString(_ctx.buttonTexts[1]), 1)) : vue.createCommentVNode("v-if", true), vue.createVNode(_component_el_icon, null, { default: vue.withCtx(() => [ vue.createVNode(_component_arrow_right) ]), _: 1 }) ]), _: 1 }, 8, ["class", "disabled", "onClick"]) ], 2), vue.createVNode(_component_transfer_panel, { ref: "rightPanel", data: _ctx.targetData, "option-render": _ctx.optionRender, placeholder: _ctx.panelFilterPlaceholder, filterable: _ctx.filterable, format: _ctx.format, "filter-method": _ctx.filterMethod, title: _ctx.rightPanelTitle, "default-checked": _ctx.rightDefaultChecked, props: _ctx.props, onCheckedChange: _ctx.onTargetCheckedChange }, { default: vue.withCtx(() => [ vue.renderSlot(_ctx.$slots, "right-footer") ]), _: 3 }, 8, ["data", "option-render", "placeholder", "filterable", "format", "filter-method", "title", "default-checked", "props", "onCheckedChange"]) ], 2); } var Transfer = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["render", _sfc_render], ["__file", "/home/runner/work/element-plus/element-plus/packages/components/transfer/src/index.vue"]]); exports["default"] = Transfer; //# sourceMappingURL=index.js.map