{"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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"}