element-plus
Version:
A Component Library for Vue 3
1 lines • 10.4 kB
Source Map (JSON)
{"version":3,"file":"transfer.vue2.mjs","sources":["../../../../../../packages/components/transfer/src/transfer.vue"],"sourcesContent":["<template>\n <div :class=\"ns.b()\">\n <transfer-panel\n ref=\"leftPanel\"\n :data=\"sourceData\"\n :option-render=\"optionRender\"\n :placeholder=\"panelFilterPlaceholder\"\n :title=\"leftPanelTitle\"\n :filterable=\"filterable\"\n :format=\"format\"\n :filter-method=\"filterMethod\"\n :default-checked=\"leftDefaultChecked\"\n :props=\"props.props\"\n @checked-change=\"onSourceCheckedChange\"\n >\n <template #empty>\n <slot name=\"left-empty\" />\n </template>\n <slot name=\"left-footer\" />\n </transfer-panel>\n <div :class=\"ns.e('buttons')\">\n <el-button\n type=\"primary\"\n :class=\"[ns.e('button'), ns.is('with-texts', hasButtonTexts)]\"\n :disabled=\"isEmpty(checkedState.rightChecked)\"\n @click=\"addToLeft\"\n >\n <el-icon><arrow-left /></el-icon>\n <span v-if=\"!isUndefined(buttonTexts[0])\">{{ buttonTexts[0] }}</span>\n </el-button>\n <el-button\n type=\"primary\"\n :class=\"[ns.e('button'), ns.is('with-texts', hasButtonTexts)]\"\n :disabled=\"isEmpty(checkedState.leftChecked)\"\n @click=\"addToRight\"\n >\n <span v-if=\"!isUndefined(buttonTexts[1])\">{{ buttonTexts[1] }}</span>\n <el-icon><arrow-right /></el-icon>\n </el-button>\n </div>\n <transfer-panel\n ref=\"rightPanel\"\n :data=\"targetData\"\n :option-render=\"optionRender\"\n :placeholder=\"panelFilterPlaceholder\"\n :filterable=\"filterable\"\n :format=\"format\"\n :filter-method=\"filterMethod\"\n :title=\"rightPanelTitle\"\n :default-checked=\"rightDefaultChecked\"\n :props=\"props.props\"\n @checked-change=\"onTargetCheckedChange\"\n >\n <template #empty>\n <slot name=\"right-empty\" />\n </template>\n <slot name=\"right-footer\" />\n </transfer-panel>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { Comment, computed, h, reactive, ref, useSlots, watch } from 'vue'\nimport { debugWarn, isEmpty, isUndefined } from '@element-plus/utils'\nimport { useLocale, useNamespace } from '@element-plus/hooks'\nimport { ElButton } from '@element-plus/components/button'\nimport { ElIcon } from '@element-plus/components/icon'\nimport { useFormItem } from '@element-plus/components/form'\nimport { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'\nimport { transferEmits } from './transfer'\nimport {\n useCheckedChange,\n useComputedData,\n useMove,\n usePropsAlias,\n} from './composables'\nimport TransferPanel from './transfer-panel.vue'\n\nimport type {\n TransferCheckedState,\n TransferDataItem,\n TransferDirection,\n TransferProps,\n} from './transfer'\nimport type { TransferPanelInstance } from './transfer-panel'\n\ndefineOptions({\n name: 'ElTransfer',\n})\n\nconst props = withDefaults(defineProps<TransferProps>(), {\n data: () => [],\n titles: () => [] as unknown as [string, string],\n buttonTexts: () => [] as unknown as [string, string],\n leftDefaultChecked: () => [],\n rightDefaultChecked: () => [],\n modelValue: () => [],\n format: () => ({}),\n props: () => ({\n label: 'label',\n key: 'key',\n disabled: 'disabled',\n }),\n targetOrder: 'original',\n validateEvent: true,\n})\nconst emit = defineEmits(transferEmits)\nconst slots = useSlots()\n\nconst { t } = useLocale()\nconst ns = useNamespace('transfer')\nconst { formItem } = useFormItem()\n\nconst checkedState = reactive<TransferCheckedState>({\n leftChecked: [],\n rightChecked: [],\n})\n\nconst propsAlias = usePropsAlias(props)\n\nconst { sourceData, targetData } = useComputedData(props)\n\nconst { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(\n checkedState,\n emit\n)\n\nconst { addToLeft, addToRight } = useMove(props, checkedState, emit)\n\nconst leftPanel = ref<TransferPanelInstance>()\nconst rightPanel = ref<TransferPanelInstance>()\n\nconst clearQuery = (which: TransferDirection) => {\n switch (which) {\n case 'left':\n leftPanel.value!.query = ''\n break\n case 'right':\n rightPanel.value!.query = ''\n break\n }\n}\n\nconst hasButtonTexts = computed(() => props.buttonTexts.length === 2)\n\nconst leftPanelTitle = computed(\n () => props.titles[0] || t('el.transfer.titles.0')\n)\n\nconst rightPanelTitle = computed(\n () => props.titles[1] || t('el.transfer.titles.1')\n)\n\nconst panelFilterPlaceholder = computed(\n () => props.filterPlaceholder || t('el.transfer.filterPlaceholder')\n)\n\nwatch(\n () => props.modelValue,\n () => {\n if (props.validateEvent) {\n formItem?.validate?.('change').catch((err) => debugWarn(err))\n }\n }\n)\n\nconst optionRender = computed(() => (option: TransferDataItem) => {\n if (props.renderContent) return props.renderContent(h, option)\n\n const defaultSlotVNodes = (slots.default?.({ option }) || []).filter(\n (node) => node.type !== Comment\n )\n if (defaultSlotVNodes.length) {\n return defaultSlotVNodes\n }\n\n return h(\n 'span',\n option[propsAlias.value.label] || option[propsAlias.value.key]\n )\n})\n\ndefineExpose({\n /** @description clear the filter keyword of a certain panel */\n clearQuery,\n /** @description left panel ref */\n leftPanel,\n /** @description right panel ref */\n rightPanel,\n})\n</script>\n"],"names":["_createElementBlock","_normalizeClass","_unref","_createVNode","TransferPanel","_renderSlot","_createElementVNode","_openBlock"],"mappings":"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"}