UNPKG

@extclp/vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 26.7 kB
{"version":3,"file":"transfer.mjs","sources":["../../../components/transfer/transfer.tsx"],"sourcesContent":["import { Button } from '@/components/button'\r\nimport { Icon } from '@/components/icon'\r\nimport { Renderer } from '@/components/renderer'\r\nimport { useFieldStore } from '@/components/form'\r\n\r\nimport {\r\n computed,\r\n defineComponent,\r\n reactive,\r\n ref,\r\n renderSlot,\r\n toRef,\r\n watch,\r\n watchEffect,\r\n} from 'vue'\r\n\r\nimport {\r\n createIconProp,\r\n createStateProp,\r\n emitEvent,\r\n useIcons,\r\n useLocale,\r\n useNameHelper,\r\n useProps,\r\n} from '@vexip-ui/config'\r\nimport { isNull } from '@vexip-ui/utils'\r\nimport { createSlotRender, useRtl } from '@vexip-ui/hooks'\r\nimport TransferPanel from './transfer-panel'\r\nimport { transferProps } from './props'\r\n\r\nimport type { TransferKeyConfig, TransferOptionState, TransferSlots } from './symbol'\r\n\r\nconst defaultKeyConfig: Required<TransferKeyConfig> = {\r\n value: 'value',\r\n label: 'label',\r\n disabled: 'disabled',\r\n}\r\n\r\nexport default defineComponent({\r\n name: 'Transfer',\r\n props: transferProps,\r\n emits: ['update:value'],\r\n setup(_props, { slots, emit, expose }) {\r\n const {\r\n idFor,\r\n labelId,\r\n state,\r\n disabled,\r\n loading,\r\n validateField,\r\n getFieldValue,\r\n setFieldValue,\r\n } = useFieldStore<(string | number)[]>(() => source.value?.$el?.focus())\r\n\r\n const props = useProps('transfer', _props, {\r\n state: createStateProp(state),\r\n locale: null,\r\n options: {\r\n default: () => [],\r\n static: true,\r\n },\r\n value: {\r\n default: () => getFieldValue(),\r\n static: true,\r\n },\r\n disabled: () => disabled.value,\r\n paged: false,\r\n filter: false,\r\n emptyText: null,\r\n keyConfig: () => ({}),\r\n optionHeight: {\r\n default: 32,\r\n validator: value => value > 0,\r\n },\r\n ignoreCase: false,\r\n sourceTitle: null,\r\n targetTitle: null,\r\n deepState: false,\r\n loading: () => loading.value,\r\n loadingIcon: createIconProp(),\r\n loadingLock: false,\r\n loadingEffect: null,\r\n slots: () => ({}),\r\n })\r\n\r\n const { isRtl } = useRtl()\r\n\r\n const nh = useNameHelper('transfer')\r\n const locale = useLocale('transfer', toRef(props, 'locale'))\r\n const icons = useIcons()\r\n\r\n const currentValue = ref<Set<string | number>>(null!)\r\n const sourceSelected = ref(new Set<string | number>())\r\n const targetSelected = ref(new Set<string | number>())\r\n const sourceOptions = ref<TransferOptionState[]>([])\r\n const targetOptions = ref<TransferOptionState[]>([])\r\n const optionStates = ref<TransferOptionState[]>([])\r\n\r\n const source = ref<InstanceType<typeof TransferPanel>>()\r\n const target = ref<InstanceType<typeof TransferPanel>>()\r\n\r\n const keyConfig = computed(() => ({ ...defaultKeyConfig, ...props.keyConfig }))\r\n\r\n let optionValueMap = new Map<string | number, TransferOptionState>()\r\n let emittedValue = props.value\r\n\r\n const updateTrigger = ref(0)\r\n\r\n watchEffect(() => {\r\n /* eslint-disable @typescript-eslint/no-unused-expressions */\r\n props.keyConfig.value\r\n props.keyConfig.label\r\n props.keyConfig.disabled\r\n\r\n for (let i = 0, len = props.options.length; i < len; ++i) {\r\n props.options[i]\r\n }\r\n /* eslint-enable */\r\n\r\n updateTrigger.value++\r\n })\r\n\r\n watch(updateTrigger, initOptions, { immediate: true })\r\n\r\n watchEffect(() => {\r\n if (!currentValue.value.size) {\r\n sourceOptions.value = Array.from(optionStates.value)\r\n targetOptions.value = []\r\n return\r\n }\r\n\r\n const selectedValues = new Set(currentValue.value)\r\n const target: TransferOptionState[] = []\r\n const source: TransferOptionState[] = []\r\n\r\n for (const option of optionStates.value) {\r\n if (selectedValues.has(option.value)) {\r\n target.push(option)\r\n } else {\r\n source.push(option)\r\n }\r\n }\r\n\r\n targetOptions.value = target\r\n sourceOptions.value = source\r\n })\r\n\r\n function initOptions() {\r\n const { value: valueKey, label: labelKey, disabled: disabledKey } = keyConfig.value\r\n const oldMap = optionValueMap\r\n const map = new Map<string | number, TransferOptionState>()\r\n\r\n props.options.forEach(option => {\r\n const rawOption = typeof option === 'string' ? { [valueKey]: option } : option\r\n const value = rawOption[valueKey]\r\n\r\n if (isNull(value)) return\r\n\r\n const label = rawOption[labelKey] || String(value)\r\n const { [disabledKey]: disabled = false } = rawOption\r\n const oldState = oldMap.get(rawOption.value)\r\n const optionState = reactive({\r\n disabled,\r\n value,\r\n label,\r\n hidden: oldState?.hidden ?? false,\r\n hitting: oldState?.hitting ?? false,\r\n data: option,\r\n })\r\n\r\n map.set(value, optionState)\r\n })\r\n\r\n optionValueMap = map\r\n optionStates.value = Array.from(map.values())\r\n currentValue.value = new Set(emittedValue)\r\n }\r\n\r\n const readonly = computed(() => props.loading && props.loadingLock)\r\n const className = computed(() => {\r\n return [\r\n nh.b(),\r\n nh.bs('vars'),\r\n {\r\n [nh.bm('inherit')]: props.inherit,\r\n [nh.bm(props.state)]: props.state !== 'default',\r\n [nh.bm('readonly')]: readonly.value,\r\n [nh.bm('loading')]: props.loading,\r\n },\r\n ]\r\n })\r\n const actionType = computed(() => {\r\n return props.deepState && props.state !== 'default' ? props.state : 'primary'\r\n })\r\n const toTargetEnabled = computed(() => !!sourceSelected.value.size)\r\n const toSourceEnabled = computed(() => !!targetSelected.value.size)\r\n const defaultFilter = computed(() => {\r\n return props.ignoreCase\r\n ? (value: string, option: TransferOptionState) =>\r\n option.label.toLocaleLowerCase().includes(value)\r\n : (value: string, option: TransferOptionState) => option.label.includes(value)\r\n })\r\n const sourceFilter = computed(() => getFilterMethod('source'))\r\n const targetFilter = computed(() => getFilterMethod('target'))\r\n\r\n watch(\r\n () => props.value,\r\n value => {\r\n emittedValue = value\r\n currentValue.value = new Set(emittedValue)\r\n },\r\n )\r\n\r\n expose({\r\n handleToTarget,\r\n handleToSource,\r\n handlePanelFocus,\r\n handlePanelBlur,\r\n focus: (options?: FocusOptions) => source.value?.$el?.focus(options),\r\n blur: () => {\r\n source.value?.$el?.blur()\r\n target.value?.$el?.blur()\r\n },\r\n })\r\n\r\n function getFilterMethod(type: 'source' | 'target') {\r\n const filter = props.filter\r\n\r\n if (!filter) return undefined\r\n\r\n if (typeof filter === 'function') {\r\n return (value: string, option: TransferOptionState) => filter(value, option, type)\r\n }\r\n\r\n return defaultFilter.value\r\n }\r\n\r\n function handleChange() {\r\n emittedValue = Array.from(currentValue.value)\r\n\r\n emit('update:value', emittedValue)\r\n setFieldValue(emittedValue)\r\n emitEvent(props.onChange, emittedValue)\r\n validateField()\r\n }\r\n\r\n function handleToTarget() {\r\n for (const value of sourceSelected.value) {\r\n currentValue.value.add(value)\r\n }\r\n\r\n sourceSelected.value.clear()\r\n handleChange()\r\n }\r\n\r\n function handleToSource() {\r\n for (const value of targetSelected.value) {\r\n currentValue.value.delete(value)\r\n }\r\n\r\n targetSelected.value.clear()\r\n handleChange()\r\n }\r\n\r\n function handleSelect(type: 'source' | 'target') {\r\n const selected = {\r\n source: Array.from(sourceSelected.value),\r\n target: Array.from(targetSelected.value),\r\n }\r\n const data = {\r\n source: selected.source.map(value => optionValueMap.get(value)?.data ?? ''),\r\n target: selected.target.map(value => optionValueMap.get(value)?.data ?? ''),\r\n }\r\n\r\n emitEvent(props.onSelect, type, selected, data)\r\n }\r\n\r\n function handlePanelFocus(type: 'source' | 'target') {\r\n if (type === 'source') {\r\n source.value?.$el.focus()\r\n } else {\r\n target.value?.$el.focus()\r\n }\r\n }\r\n\r\n function handlePanelBlur() {\r\n source.value?.$el.blur()\r\n target.value?.$el.blur()\r\n }\r\n\r\n function getSlotRender(names: string[]) {\r\n let renderer: unknown = createSlotRender(slots, names)\r\n\r\n if (!renderer) {\r\n for (const name of names) {\r\n renderer = props.slots[name as keyof TransferSlots]\r\n if (typeof renderer === 'function') {\r\n break\r\n }\r\n }\r\n\r\n return typeof renderer === 'function'\r\n ? (params: any) => <Renderer renderer={renderer as any} data={params}></Renderer>\r\n : null\r\n }\r\n\r\n return null\r\n }\r\n\r\n return () => {\r\n return (\r\n <div\r\n id={idFor.value}\r\n class={className.value}\r\n role={'application'}\r\n aria-labelledby={labelId.value}\r\n >\r\n <TransferPanel\r\n ref={source}\r\n v-model:selected={sourceSelected.value}\r\n type={'source'}\r\n class={nh.bem('panel', 'source')}\r\n state={props.state}\r\n paged={props.paged}\r\n filter={sourceFilter.value}\r\n disabled={props.disabled}\r\n title={props.sourceTitle || locale.value.source}\r\n options={sourceOptions.value}\r\n empty-text={props.emptyText || locale.value.empty}\r\n option-height={props.optionHeight}\r\n ignore-case={props.ignoreCase}\r\n deep-state={props.deepState}\r\n loading={props.loading}\r\n loading-icon={props.loadingIcon}\r\n loading-lock={props.loadingLock}\r\n loading-effect={props.loadingEffect}\r\n locale={locale.value}\r\n onSelect={() => handleSelect('source')}\r\n onEnter={handleToTarget}\r\n onSwitch={() => handlePanelFocus('target')}\r\n >\r\n {{\r\n header: getSlotRender(['source-header', 'sourceHeader', 'header']),\r\n title: getSlotRender(['source-title', 'sourceTitle', 'title']),\r\n body: getSlotRender(['source-body', 'sourceBody', 'body']),\r\n footer: getSlotRender(['source-footer', 'sourceFooter', 'footer']),\r\n option: getSlotRender(['source-option', 'sourceOption', 'option']),\r\n label: getSlotRender(['source-label', 'sourceLabel', 'label']),\r\n }}\r\n </TransferPanel>\r\n <div class={nh.be('actions')}>\r\n {renderSlot(slots, 'actions', { handleToTarget, handleToSource }, () => [\r\n <Renderer renderer={props.slots.actions} data={{ handleToTarget, handleToSource }}>\r\n <Button\r\n key={1}\r\n inherit\r\n class={nh.be('action')}\r\n type={actionType.value}\r\n size={'small'}\r\n disabled={props.disabled || !toTargetEnabled.value}\r\n loading={readonly.value}\r\n loading-icon={props.loadingIcon}\r\n loading-effect={props.loadingEffect}\r\n style={{ marginBottom: '6px' }}\r\n onClick={handleToTarget}\r\n >\r\n {{\r\n icon: () => (\r\n <Icon\r\n {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\r\n label={isRtl.value ? 'to left' : 'to right'}\r\n ></Icon>\r\n ),\r\n }}\r\n </Button>\r\n <Button\r\n key={2}\r\n inherit\r\n class={nh.be('action')}\r\n type={actionType.value}\r\n size={'small'}\r\n disabled={props.disabled || !toSourceEnabled.value}\r\n loading={readonly.value}\r\n loading-icon={props.loadingIcon}\r\n loading-effect={props.loadingEffect}\r\n style={{ margin: '0' }}\r\n onClick={handleToSource}\r\n >\r\n {{\r\n icon: () => (\r\n <Icon\r\n {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\r\n label={isRtl.value ? 'to right' : 'to left'}\r\n ></Icon>\r\n ),\r\n }}\r\n </Button>\r\n </Renderer>,\r\n ])}\r\n </div>\r\n <TransferPanel\r\n ref={target}\r\n v-model:selected={targetSelected.value}\r\n type={'target'}\r\n class={nh.bem('panel', 'target')}\r\n state={props.state}\r\n paged={props.paged}\r\n filter={targetFilter.value}\r\n disabled={props.disabled}\r\n title={props.targetTitle || locale.value.target}\r\n options={targetOptions.value}\r\n empty-text={props.emptyText || locale.value.empty}\r\n option-height={props.optionHeight}\r\n ignore-case={props.ignoreCase}\r\n deep-state={props.deepState}\r\n loading={props.loading}\r\n loading-icon={props.loadingIcon}\r\n loading-lock={props.loadingLock}\r\n loading-effect={props.loadingEffect}\r\n locale={locale.value}\r\n onSelect={() => handleSelect('target')}\r\n onEnter={handleToSource}\r\n onSwitch={() => handlePanelFocus('source')}\r\n >\r\n {{\r\n header: getSlotRender(['target-header', 'targetHeader', 'header']),\r\n title: getSlotRender(['target-title', 'targetTitle', 'title']),\r\n body: getSlotRender(['target-body', 'targetBody', 'body']),\r\n footer: getSlotRender(['target-footer', 'targetFooter', 'footer']),\r\n option: getSlotRender(['target-option', 'targetOption', 'option']),\r\n label: getSlotRender(['target-label', 'targetLabel', 'label']),\r\n }}\r\n </TransferPanel>\r\n </div>\r\n )\r\n }\r\n },\r\n})\r\n"],"names":["defaultKeyConfig","value","label","disabled","defineComponent","name","props","transferProps","emits","setup","_props","slots","emit","expose","idFor","labelId","state","loading","validateField","getFieldValue","setFieldValue","useFieldStore","source","$el","focus","useProps","createStateProp","locale","options","default","static","paged","filter","emptyText","keyConfig","optionHeight","validator","ignoreCase","sourceTitle","targetTitle","deepState","loadingIcon","createIconProp","loadingLock","loadingEffect","isRtl","useRtl","nh","useNameHelper","useLocale","toRef","icons","useIcons","currentValue","ref","sourceSelected","Set","targetSelected","sourceOptions","targetOptions","optionStates","target","computed","optionValueMap","Map","emittedValue","updateTrigger","watchEffect","i","len","length","watch","initOptions","immediate","size","Array","from","selectedValues","option","has","push","valueKey","labelKey","disabledKey","oldMap","map","forEach","rawOption","isNull","String","oldState","get","optionState","reactive","hidden","hitting","data","set","values","readonly","className","b","bs","bm","inherit","actionType","toTargetEnabled","toSourceEnabled","defaultFilter","toLocaleLowerCase","includes","sourceFilter","getFilterMethod","targetFilter","handleToTarget","handleToSource","handlePanelFocus","handlePanelBlur","blur","type","handleChange","emitEvent","onChange","add","clear","delete","handleSelect","selected","onSelect","getSlotRender","names","renderer","createSlotRender","params","_createVNode","Renderer","TransferPanel","$event","bem","empty","onSwitch","header","title","body","footer","be","renderSlot","actions","Button","marginBottom","icon","Icon","_mergeProps","angleLeft","angleRight","margin"],"mappings":"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"}