UNPKG

hongluan-ui

Version:
1 lines 7.11 kB
{"version":3,"file":"transfer2.mjs","sources":["../../../../../../packages/components/transfer/src/transfer.vue"],"sourcesContent":["<template>\n <div\n :class=\"[\n namespace,\n !showButtons ? 'no-buttons' : '',\n block ? 'block' : '',\n ]\"\n :style=\"[\n gap ? `--transfer-gap: ${gap}` : '',\n listGap ? `--transfer-list-gap: ${listGap}` : '',\n itemGap ? `--transfer-item-gap: ${itemGap}` : '',\n ]\"\n >\n <transfer-panel\n ref=\"leftPanel\"\n mark=\"left\"\n :data=\"sourceData\"\n :option-render=\"optionRender\"\n :placeholder=\"panelFilterPlaceholder\"\n :title=\"leftPanelTitle\"\n :filterable=\"filterable\"\n :format=\"format\"\n :filter-method=\"filterMethod\"\n :filter-props=\"filterProps\"\n :confirm-method=\"confirmMethod\"\n :default-checked=\"leftDefaultChecked\"\n :show-buttons=\"showButtons\"\n :props=\"props.props\"\n @checked-change=\"onSourceCheckedChange\"\n >\n <slot name=\"left-footer\"></slot>\n </transfer-panel>\n <slot name=\"buttons\">\n <hl-group\n v-if=\"showButtons\"\n align=\"items-center\"\n dir=\"vertical\"\n gap=\"var(--md)\"\n class=\"transfer-buttons\"\n >\n <hl-button\n :class=\"['transfer-button', hasButtonTexts ? 'is-with-texts' : '']\"\n :disabled=\"isEmpty(checkedState.rightChecked)\"\n :equal=\"!hasButtonTexts\"\n icon-position=\"left\"\n @click=\"addToLeft\"\n >\n <hl-icon>\n <system-arrow-left />\n </hl-icon>\n <span v-if=\"!isUndefined(buttonTexts[0])\">{{ buttonTexts[0] }}</span>\n </hl-button>\n <hl-button\n :class=\"['transfer-button', hasButtonTexts ? 'is-with-texts' : '']\"\n :disabled=\"isEmpty(checkedState.leftChecked)\"\n :equal=\"!hasButtonTexts\"\n icon-position=\"right\"\n @click=\"addToRight\"\n >\n <span v-if=\"!isUndefined(buttonTexts[1])\">{{ buttonTexts[1] }}</span>\n <hl-icon>\n <system-arrow-right />\n </hl-icon>\n </hl-button>\n </hl-group>\n </slot>\n <transfer-panel\n ref=\"rightPanel\"\n mark=\"right\"\n :data=\"targetData\"\n :option-render=\"optionRender\"\n :placeholder=\"panelFilterPlaceholder\"\n :filterable=\"filterable\"\n :format=\"format\"\n :filter-method=\"filterMethod\"\n :filter-props=\"filterProps\"\n :confirm-method=\"confirmMethod\"\n :title=\"rightPanelTitle\"\n :default-checked=\"rightDefaultChecked\"\n :show-buttons=\"showButtons\"\n :props=\"props.props\"\n @checked-change=\"onTargetCheckedChange\"\n >\n <slot name=\"right-footer\"></slot>\n </transfer-panel>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed, h, reactive, ref, useSlots, watch } from 'vue'\nimport { debugWarn, isEmpty, isUndefined } from '@hongluan-ui/utils'\nimport { useFormItem, useLocale, useNamespace } from '@hongluan-ui/hooks'\nimport { FormItemEvents } from '@hongluan-ui/tokens'\nimport HlGroup from '@hongluan-ui/components/group'\nimport HlButton from '@hongluan-ui/components/button'\nimport HlIcon from '@hongluan-ui/components/icon'\nimport { SystemArrowLeft, SystemArrowRight } from '@hongluan-ui/components/system-icon'\nimport { transferEmits, transferProps } 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} from './transfer'\nimport type { TransferPanelInstance } from './transfer-panel'\n\n\ndefineOptions({\n name: 'Transfer',\n})\n\nconst props = defineProps(transferProps)\nconst emit = defineEmits(transferEmits)\nconst slots = useSlots()\n\nconst { t } = useLocale()\nconst { namespace } = 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 { addToLeft, addToRight } = useMove(props, checkedState, emit)\n\nconst { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(\n checkedState,\n emit,\n props,\n addToLeft,\n addToRight,\n)\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('hl.transfer.titles.0'),\n)\n\nconst rightPanelTitle = computed(\n () => props.titles[1] || t('hl.transfer.titles.1'),\n)\n\nconst panelFilterPlaceholder = computed(\n () => props.filterPlaceholder || t('hl.transfer.filterPlaceholder'),\n)\n\nwatch(\n () => props.modelValue,\n () => {\n if (props.validateEvent) {\n formItem?.validate?.(FormItemEvents.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 if (slots.default) return slots.default({ option })\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 left panel ref */\n rightPanel,\n /** @description add items to left */\n addToLeft,\n /** @description add items to right */\n addToRight,\n})\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;oCAkHc;AAAA,EACZ,MAAM;AACR;;;;;;;AAIA,UAAM,QAAQ;AAEd,UAAM,EAAE,MAAM;AACd,UAAM,EAAE,cAAc,aAAa,UAAU;AAC7C,UAAM,EAAE,aAAa;AAErB,UAAM,eAAe,SAA+B;AAAA,MAClD,aAAa;AAAC,MACd,cAAc;AAAC,KAChB;AAED,UAAM,aAAa,cAAc,KAAK;AAEtC,UAAM,EAAE,YAAY,eAAe,gBAAgB,KAAK;AAExD,UAAM,EAAE,WAAW,eAAe,QAAQ,OAAO,cAAc,IAAI;AAEnE,UAAM,EAAE,uBAAuB,0BAA0B,iBACvD,cACA,MACA,OACA,WACA,UACF;AAEA,UAAM,YAAY;AAClB,UAAM,aAAa;AAEnB,UAAM,aAAa,CAAC,UAA6B;AAC/C,cAAQ;AAAA,aACD;AACH,oBAAU,MAAO,QAAQ;AACzB;AAAA,aACG;AACH,qBAAW,MAAO,QAAQ;AAC1B;AAAA;AAAA;AAIN,UAAM,iBAAiB,SAAS,MAAM,MAAM,YAAY,WAAW,CAAC;AAEpE,UAAM,iBAAiB,SACrB,MAAM,MAAM,OAAO,MAAM,EAAE,sBAAsB,CACnD;AAEA,UAAM,kBAAkB,SACtB,MAAM,MAAM,OAAO,MAAM,EAAE,sBAAsB,CACnD;AAEA,UAAM,yBAAyB,SAC7B,MAAM,MAAM,qBAAqB,EAAE,+BAA+B,CACpE;AAEA,UACE,MAAM,MAAM,YACZ,MAAM;AACJ,UAAI;AACF,6BAAqB;AAAkD;AACzE;AAIJ;AACE,UAAI;AAAqB,eAAO;AAEhC;AAAmB,eAAO;AAE1B,eACE,0BACkB;AACpB;AAGF;AAAa;AAEX,MAEA;AAAA,MAEA;AAAA,MAEA;AAAA,MAEA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}