UNPKG

vexip-ui

Version:

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

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