UNPKG

vexip-ui

Version:

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

1 lines 25.8 kB
{"version":3,"file":"transfer.mjs","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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"}