@extclp/vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 36.5 kB
Source Map (JSON)
{"version":3,"file":"transfer-panel.mjs","sources":["../../../components/transfer/transfer-panel.tsx"],"sourcesContent":["import { Checkbox } from '@/components/checkbox'\nimport { CollapseTransition } from '@/components/collapse-transition'\nimport { Icon } from '@/components/icon'\nimport { Input } from '@/components/input'\nimport { NumberInput } from '@/components/number-input'\nimport { ResizeObserver } from '@/components/resize-observer'\nimport { VirtualList } from '@/components/virtual-list'\n\nimport {\n computed,\n defineComponent,\n reactive,\n ref,\n renderSlot,\n toRef,\n watch,\n watchEffect\n} from 'vue'\n\nimport { stateProp, useIcons, useNameHelper } from '@vexip-ui/config'\nimport { useModifier, useRtl } from '@vexip-ui/hooks'\nimport { boundRange, decide } from '@vexip-ui/utils'\n\nimport type { PropType } from 'vue'\nimport type { VirtualListExposed } from '@/components/virtual-list'\nimport type { LocaleConfig } from '@vexip-ui/config'\nimport type { TransferOptionState } from './symbol'\n\nexport default defineComponent({\n name: 'TransferPanel',\n props: {\n type: {\n type: String as PropType<'source' | 'target'>,\n default: null\n },\n state: {\n type: stateProp,\n default: 'default'\n },\n selected: {\n type: Set as PropType<Set<string | number>>,\n default: () => new Set()\n },\n paged: {\n type: Boolean,\n default: false\n },\n filter: {\n type: Function as PropType<(value: string, options: TransferOptionState) => boolean>,\n default: null\n },\n disabled: {\n type: Boolean,\n default: false\n },\n title: {\n type: String,\n default: ''\n },\n options: {\n type: Array as PropType<TransferOptionState[]>,\n default: () => []\n },\n emptyText: {\n type: String,\n default: '暂无数据'\n },\n optionHeight: {\n type: Number,\n default: 32\n },\n deepState: {\n type: Boolean,\n default: false\n },\n loading: {\n type: Boolean,\n default: false\n },\n loadingIcon: {\n type: [Object, Function],\n default: null\n },\n loadingLock: {\n type: Boolean,\n default: false\n },\n loadingEffect: {\n type: String,\n default: null\n },\n locale: {\n type: Object as PropType<LocaleConfig['transfer']>,\n default: () => ({})\n }\n },\n emits: ['update:selected', 'select', 'enter', 'switch'],\n setup(props, { slots, emit }) {\n const nh = useNameHelper('transfer')\n const icons = useIcons()\n\n const { isRtl } = useRtl()\n\n const currentSelected = ref(new Set(props.selected))\n const pageSize = ref(10)\n const currentPage = ref(1)\n const currentMark = ref<string | number | null>(null)\n const currentHitting = ref(-1)\n const currentFilter = ref('')\n const searching = ref(false)\n\n const header = ref<HTMLElement>()\n const body = ref<HTMLElement>()\n const footer = ref<HTMLElement>()\n const search = ref<HTMLElement>()\n const input = ref<InstanceType<typeof Input>>()\n const list = ref<VirtualListExposed>()\n\n let bodyRealHeight = 0\n let lastSelected: string | number | null = null\n let keyUsed = false\n\n const { target: wrapper, modifier } = useModifier({\n passive: false,\n onKeyDown: (event, modifier) => {\n decide(\n [\n [\n () => modifier.up || modifier.down,\n () => {\n if (!keyUsed && currentHitting.value < 0) {\n keyUsed = true\n\n if (lastSelected) {\n currentHitting.value = props.options.findIndex(\n option => option.value === lastSelected\n )\n } else if (list.value) {\n currentHitting.value = Math.round(list.value.scrollOffset / props.optionHeight)\n }\n\n currentHitting.value = currentHitting.value === -1 ? 0 : currentHitting.value\n } else {\n currentHitting.value = boundRange(\n findEnabledIndex(\n currentHitting.value + (modifier.up ? -1 : 1),\n modifier.up ? -1 : 1\n ),\n 0,\n currentOptions.value.length - 1\n )\n }\n\n if (!props.paged) {\n ensureOptionInView(currentHitting.value, modifier.up ? 'top' : 'bottom')\n }\n }\n ],\n [\n () => props.paged && (modifier.left || modifier.right) && event.ctrlKey,\n () => {\n handlePageChange(currentPage.value + (modifier.left ? -1 : 1))\n currentHitting.value = 0\n }\n ],\n [\n () =>\n (props.type === 'source' && modifier.right) ||\n (props.type === 'target' && modifier.left),\n () => {\n keyUsed = false\n currentHitting.value = -1\n lastSelected = null\n emit('switch')\n }\n ],\n [\n () => modifier.space,\n () => {\n const option = currentOptions.value[currentHitting.value]\n\n if (option) {\n currentSelected.value[currentSelected.value.has(option.value) ? 'delete' : 'add'](\n option.value\n )\n emitSelectedChange()\n }\n }\n ],\n [() => modifier.enter, () => emit('enter')],\n [\n () => typeof props.filter === 'function' && !!input.value && modifier['ctrl+f'],\n () => {\n event.stopPropagation()\n input.value!.focus()\n }\n ]\n ],\n {\n beforeMatchAny: () => event.preventDefault(),\n afterMatchAny: modifier.resetAll\n }\n )\n }\n })\n\n const className = computed(() => {\n return {\n [nh.be('panel')]: true,\n [nh.bem('panel', props.state)]: props.state !== 'default',\n [nh.bem('panel', 'disabled')]: props.disabled\n }\n })\n const visibleOptions = computed(() => {\n const filter = props.filter\n const filterValue = currentFilter.value\n\n if (filter && filterValue) {\n return props.options.filter(option => filter(filterValue, option))\n }\n\n return props.options\n })\n const optionSize = computed(() => visibleOptions.value.length)\n const pagedOptions = computed(() => {\n return visibleOptions.value.slice(\n (currentPage.value - 1) * pageSize.value,\n currentPage.value * pageSize.value\n )\n })\n const currentOptions = computed(() => (props.paged ? pagedOptions.value : visibleOptions.value))\n const totalPages = computed(() => Math.ceil(optionSize.value / (pageSize.value || 1)))\n\n watch(\n () => props.selected,\n value => {\n currentSelected.value = value\n }\n )\n watch(optionSize, () => {\n keyUsed = false\n currentHitting.value = -1\n lastSelected = null\n })\n\n const partial = ref(false)\n const allSelected = ref(false)\n\n watchEffect(() => {\n const options = visibleOptions.value\n const selected = currentSelected.value\n\n let hasSelected = false\n let hasUnselected = false\n\n for (let i = 0, len = optionSize.value; i < len; ++i) {\n const option = options[i]\n\n if (!option.disabled) {\n if (selected.has(option.value)) {\n hasSelected = true\n } else {\n hasUnselected = true\n }\n }\n\n if (hasSelected && hasUnselected) {\n break\n }\n }\n\n allSelected.value = hasSelected && !hasUnselected\n partial.value = !allSelected.value && selected.size > 0\n })\n\n function computePageSize() {\n requestAnimationFrame(() => {\n const bodyEl = body.value || list.value?.wrapper\n\n if (bodyEl) {\n const style = getComputedStyle(bodyEl)\n const paddingTop = parseInt(style.paddingTop)\n const paddingBottom = parseInt(style.paddingBottom)\n const innerHeight = bodyEl.offsetHeight - paddingTop - paddingBottom\n\n bodyRealHeight = innerHeight\n pageSize.value = Math.floor(innerHeight / (props.optionHeight || 1))\n }\n })\n }\n\n function toggleSelect(option: TransferOptionState) {\n if (props.disabled || option.disabled) return\n\n if (currentMark.value && modifier.shift) {\n handleRangeSelect(currentMark.value, option.value)\n return\n }\n\n if (currentSelected.value.has(option.value)) {\n currentSelected.value.delete(option.value)\n } else {\n currentSelected.value.add(option.value)\n }\n\n keyUsed = false\n currentHitting.value = -1\n lastSelected = option.value\n currentMark.value = option.value\n emitSelectedChange()\n }\n\n function handleRangeSelect(start: string | number, end: string | number) {\n const options = visibleOptions.value\n\n let startIndex = -1\n let endIndex = -1\n\n for (let i = 0, len = options.length; i < len; ++i) {\n const option = options[i]\n\n if (option.value === start) {\n startIndex = i\n } else if (option.value === end) {\n endIndex = i\n }\n\n if (startIndex > 0 && endIndex > 0) break\n }\n\n const method = currentSelected.value.has(options[startIndex]?.value) ? 'add' : 'delete'\n\n if (startIndex > endIndex) {\n ;[startIndex, endIndex] = [endIndex, startIndex]\n }\n\n for (let i = startIndex; i <= endIndex; ++i) {\n const option = options[i]\n\n if (!option.disabled) {\n currentSelected.value[method](option.value)\n }\n }\n\n emitSelectedChange()\n }\n\n function toggleSelectAll(event?: Event) {\n event?.preventDefault()\n\n if (props.disabled) return\n\n if (allSelected.value) {\n for (const option of visibleOptions.value) {\n !option.disabled && currentSelected.value.delete(option.value)\n }\n } else {\n for (const option of visibleOptions.value) {\n !option.disabled && currentSelected.value.add(option.value)\n }\n }\n\n currentMark.value = null\n emitSelectedChange()\n }\n\n function handleReverse() {\n if (props.disabled) return\n\n if (partial.value) {\n const prevSelected = new Set(currentSelected.value)\n\n for (const option of visibleOptions.value) {\n if (!option.disabled) {\n if (prevSelected.has(option.value)) {\n currentSelected.value.delete(option.value)\n } else {\n currentSelected.value.add(option.value)\n }\n }\n }\n\n currentMark.value = null\n emitSelectedChange()\n } else {\n toggleSelectAll()\n }\n }\n\n function handleBlur() {\n currentMark.value = null\n modifier.resetAll()\n }\n\n function emitSelectedChange() {\n emit('update:selected', currentSelected.value)\n emit('select')\n }\n\n function handlePageChange(page: number) {\n currentPage.value = boundRange(page, 1, totalPages.value)\n }\n\n function queryEnabledIndex(index: number, step: number) {\n const options = currentOptions.value\n step = step / Math.abs(step)\n\n while (options[index]?.disabled) {\n index += step\n\n if (index < 0 || index >= options.length) break\n }\n\n return index\n }\n\n function findEnabledIndex(index: number, sign: 1 | -1 = 1) {\n const options = currentOptions.value\n\n if (options[index]?.disabled) {\n index = queryEnabledIndex(index, sign)\n\n if (sign > 0 ? index >= options.length : index < 0) {\n index = queryEnabledIndex(index, -sign)\n\n // 全禁用\n if (sign > 0 ? index < 0 : index >= options.length) index = -1\n }\n }\n\n return index\n }\n\n function ensureOptionInView(index: number, direction: 'top' | 'bottom') {\n const option = props.options[index]\n\n if (props.paged || !option || !list.value) return\n\n if (direction === 'bottom') {\n const target = (index + 1) * props.optionHeight\n\n if (list.value.scrollOffset + bodyRealHeight < target) {\n list.value.scrollTo((index - pageSize.value + 1) * props.optionHeight)\n }\n } else {\n const target = index * props.optionHeight\n\n if (list.value.scrollOffset > target) {\n list.value.scrollTo(target)\n }\n }\n }\n\n const slotParams = reactive({\n type: toRef(props, 'type'),\n currentPage,\n pageSize,\n totalPages,\n allSelected,\n partial,\n selected: computed(() => Array.from(currentSelected.value)),\n options: computed(() => visibleOptions.value),\n toggleSelectAll,\n handleReverse\n })\n\n function renderOption({ option, index }: { option: TransferOptionState, index: number }) {\n const disabled = props.disabled || option.disabled\n const handleCheck = (event: MouseEvent) => {\n event.preventDefault()\n event.stopPropagation()\n toggleSelect(option)\n }\n\n return (\n <li\n class={{\n [nh.be('option')]: true,\n [nh.bem('option', 'disabled')]: disabled,\n [nh.bem('option', 'hitting')]: currentHitting.value === index\n }}\n role={'option'}\n aria-disabled={disabled ? 'true' : undefined}\n onClick={() => toggleSelect(option)}\n >\n {renderSlot(slots, 'option', { type: props.type, option, index }, () => [\n <Checkbox\n key={1}\n class={nh.be('checkbox')}\n state={props.deepState ? props.state : undefined}\n checked={currentSelected.value.has(option.value)}\n disabled={disabled}\n tab-index={-1}\n onClick={handleCheck}\n ></Checkbox>,\n <span key={2} class={nh.be('label')}>\n {renderSlot(slots, 'label', { type: props.type, option, index }, () => [\n option.label\n ])}\n </span>\n ])}\n </li>\n )\n }\n\n function renderHeader() {\n return (\n <div ref={header} class={nh.be('header')}>\n {renderSlot(slots, 'header', slotParams, () => [\n <>\n <Checkbox\n inherit\n control\n class={nh.be('checkbox')}\n state={props.deepState ? props.state : undefined}\n checked={allSelected.value}\n partial={partial.value}\n disabled={props.disabled}\n tab-index={-1}\n onClick={toggleSelectAll}\n ></Checkbox>\n <div\n class={[nh.be('reverse'), props.disabled && nh.bem('reverse', 'disabled')]}\n title={props.locale.reverse}\n onClick={handleReverse}\n >\n <Icon\n {...icons.value.retweet}\n scale={+(icons.value.retweet.scale || 1) * 1.2}\n ></Icon>\n </div>\n <div class={nh.be('counter')}>\n {`${currentSelected.value.size}/${visibleOptions.value.length}`}\n </div>\n {(props.title || slots.title) && (\n <span class={nh.be('title')}>\n {renderSlot(slots, 'title', slotParams, () => [props.title])}\n </span>\n )}\n <CollapseTransition appear horizontal fade-effect>\n {props.loading && (\n <div class={nh.be('loading')}>\n <Icon\n {...icons.value.loading}\n effect={props.loadingEffect || icons.value.loading.effect}\n icon={props.loadingIcon || icons.value.loading.icon}\n label={'loading'}\n ></Icon>\n </div>\n )}\n </CollapseTransition>\n </>\n ])}\n </div>\n )\n }\n\n function renderFilter() {\n if (typeof props.filter !== 'function') return null\n\n const stop = (e: Event) => e.stopPropagation()\n // const setFilter = (value: string) => (currentFilter.value = value)\n\n return (\n <div ref={search} class={nh.be('filter')}>\n <Input\n ref={input}\n v-model:value={currentFilter.value}\n inherit\n clearable\n sync\n disabled={props.disabled}\n placeholder={searching.value ? undefined : props.locale.search}\n onKeydown={stop}\n onFocus={() => (searching.value = true)}\n onBlur={() => (searching.value = false)}\n >\n {{\n suffix: () => <Icon {...icons.value.search}></Icon>\n }}\n </Input>\n </div>\n )\n }\n\n function renderBody() {\n if (props.paged || slots.body) {\n return (\n <ResizeObserver throttle onResize={computePageSize}>\n <ul ref={body} class={nh.be('body')} role={'listbox'}>\n {renderSlot(slots, 'body', slotParams, () => [\n pagedOptions.value.length ? (\n pagedOptions.value.map((option, index) => renderOption({ option, index }))\n ) : (\n <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\n )\n ])}\n </ul>\n </ResizeObserver>\n )\n }\n\n return (\n <VirtualList\n ref={list}\n inherit\n class={nh.be('body')}\n items={visibleOptions.value}\n item-size={props.optionHeight}\n item-fixed\n use-y-bar\n id-key={'value'}\n items-attrs={{ role: 'listbox', ariaLabel: props.type }}\n onResize={computePageSize}\n >\n {{\n default: ({ item, index }: { item: TransferOptionState, index: number }) =>\n renderOption({ option: item, index }),\n empty: () => <div class={nh.be('empty')}>{props.emptyText || props.locale.empty}</div>\n }}\n </VirtualList>\n )\n }\n\n function renderFooter() {\n if (!props.paged && !slots.footer) return null\n\n return (\n <div ref={footer} class={nh.be('footer')}>\n {renderSlot(slots, 'footer', slotParams, () => [\n <div class={nh.be('pagination')}>\n <Icon\n {...(isRtl.value ? icons.value.angleRight : icons.value.angleLeft)}\n class={[\n nh.be('page-plus'),\n currentPage.value <= 1 && nh.bem('page-plus', 'disabled')\n ]}\n onClick={() => handlePageChange(currentPage.value - 1)}\n ></Icon>\n <NumberInput\n inherit\n value={currentPage.value}\n class={nh.be('page-input')}\n size={'small'}\n min={1}\n max={totalPages.value}\n onChange={handlePageChange}\n ></NumberInput>\n <span style={'margin: 0 4px'}>{'/'}</span>\n <span>{totalPages.value}</span>\n <Icon\n {...(isRtl.value ? icons.value.angleLeft : icons.value.angleRight)}\n class={[\n nh.be('page-minus'),\n currentPage.value >= totalPages.value && nh.bem('page-minus', 'disabled')\n ]}\n onClick={() => handlePageChange(currentPage.value + 1)}\n ></Icon>\n </div>\n ])}\n </div>\n )\n }\n\n return () => (\n <div ref={wrapper} class={className.value} tabindex={0} onBlur={handleBlur}>\n {renderHeader()}\n {renderFilter()}\n {renderBody()}\n {renderFooter()}\n </div>\n )\n }\n})\n"],"names":["defineComponent","name","props","type","String","default","state","stateProp","selected","Set","paged","Boolean","filter","Function","disabled","title","options","Array","emptyText","optionHeight","Number","deepState","loading","loadingIcon","Object","loadingLock","loadingEffect","locale","emits","setup","slots","emit","nh","useNameHelper","icons","useIcons","isRtl","useRtl","currentSelected","ref","pageSize","currentPage","currentMark","currentHitting","currentFilter","searching","header","body","footer","search","input","list","bodyRealHeight","lastSelected","keyUsed","target","wrapper","modifier","useModifier","passive","onKeyDown","event","decide","up","down","value","findIndex","option","Math","round","scrollOffset","boundRange","findEnabledIndex","currentOptions","length","ensureOptionInView","left","right","ctrlKey","handlePageChange","space","has","emitSelectedChange","enter","stopPropagation","focus","beforeMatchAny","preventDefault","afterMatchAny","resetAll","className","computed","be","bem","visibleOptions","filterValue","optionSize","pagedOptions","slice","totalPages","ceil","watch","partial","allSelected","watchEffect","hasSelected","hasUnselected","i","len","size","computePageSize","requestAnimationFrame","bodyEl","style","getComputedStyle","paddingTop","parseInt","paddingBottom","innerHeight","offsetHeight","floor","toggleSelect","shift","handleRangeSelect","delete","add","start","end","startIndex","endIndex","method","toggleSelectAll","handleReverse","prevSelected","handleBlur","page","queryEnabledIndex","index","step","abs","sign","direction","scrollTo","slotParams","reactive","toRef","from","renderOption","handleCheck","_createVNode","undefined","onClick","renderSlot","Checkbox","label","renderHeader","_Fragment","reverse","Icon","_mergeProps","retweet","scale","CollapseTransition","effect","icon","renderFilter","stop","e","Input","$event","onFocus","onBlur","suffix","renderBody","ResizeObserver","map","empty","VirtualList","role","ariaLabel","item","renderFooter","angleRight","angleLeft","NumberInput"],"mappings":"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"}