@hkyhy/marsun-components-core 0.1.29 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Auth/UserProfileCard/UserProfileCard.d.ts +7 -1
- package/dist/components/Auth/UserProfileCard/UserProfileCard.js +59 -28
- package/dist/components/Auth/UserProfileCard/UserProfileCard.js.map +1 -1
- package/dist/components/Auth/UserProfileCard/style.module.scss.js +16 -10
- package/dist/components/Auth/UserProfileCard/style.module.scss.js.map +1 -1
- package/dist/components/Filter/CommonFilter/index.js +88 -53
- package/dist/components/Filter/CommonFilter/index.js.map +1 -1
- package/dist/components/Filter/FilterDatePicker/index.js +102 -84
- package/dist/components/Filter/FilterDatePicker/index.js.map +1 -1
- package/dist/components/Filter/FilterDateRange/index.js +84 -66
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
- package/dist/components/Filter/FilterInput/index.js +51 -33
- package/dist/components/Filter/FilterInput/index.js.map +1 -1
- package/dist/components/Filter/FilterNumberRange/index.js +87 -69
- package/dist/components/Filter/FilterNumberRange/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.d.ts +14 -2
- package/dist/components/Filter/FilterSelect/index.js +216 -177
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/style.module.scss.js +15 -14
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/index.d.ts +12 -1
- package/dist/components/Filter/FilterTreeSelect/index.js +233 -190
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +14 -13
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.js +34 -14
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Filter/index.d.ts +4 -3
- package/dist/components/Filter/types.d.ts +27 -1
- package/dist/components/Filter/types.js +24 -7
- package/dist/components/Filter/types.js.map +1 -1
- package/dist/components/Filter/useFilterState.d.ts +37 -5
- package/dist/components/Filter/useFilterState.js +74 -23
- package/dist/components/Filter/useFilterState.js.map +1 -1
- package/dist/index.js +170 -164
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(a?: (string | number)[], b?: (string | number)[]): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n options: FilterOption[];\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValues?: (string | number)[];\n /** 为 true 时,value 等于默认仍展示在「您已选择」并保持选中态 */\n showDefaultAsSelected?: boolean;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n}\n\nfunction toMultiArray(value: FilterSelectValue): (string | number)[] {\n if (Array.isArray(value)) return value;\n if (value != null && value !== '') return [value];\n return [];\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n showDefaultAsSelected: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = toMultiArray(value);\n // 等于默认集合时:对外视为「未筛选」(不亮 trigger / 不进「您已选择」)\n if (!showDefaultAsSelected && defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (!showDefaultAsSelected && defaultValue !== undefined && value === defaultValue) {\n return undefined;\n }\n return value;\n}\n\n/** 草稿/面板用真实 value,避免 defaultValues 折叠成 [] 后全选勾选丢失 */\nfunction toDraftValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return toMultiArray(value);\n return toDisplayValue(value, defaultValue, defaultValues, false, true);\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n defaultValues?: (string | number)[],\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n if (!arr.length) return '';\n // 全选默认集合时用「全部」,避免「您已选择」被几十个厂名撑满\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return '全部';\n }\n return arr\n .map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v))\n .join('、');\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options = [],\n value,\n onChange,\n defaultValue,\n defaultValues,\n showDefaultAsSelected = false,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n const displayValue = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n () => toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove = !multiple || minSelection == null || selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n setLocalValue(\n toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue(多选用真实 value,保留 defaultValues 全选勾选)\n useEffect(() => {\n const nextDraft = toDraftValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDraft ?? (multiple ? [] : undefined));\n const nextDisplay = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n if (\n nextDisplay === undefined ||\n nextDisplay === null ||\n (Array.isArray(nextDisplay) && nextDisplay.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple, showDefaultAsSelected]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant, defaultValues),\n [options, displayValue, multiple, isPersonVariant, defaultValues],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable = !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, label, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const has = arr.some((v) => String(v) === String(optVal));\n if (has && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = has ? arr.filter((v) => String(v) !== String(optVal)) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const localMultiArr = (Array.isArray(localValue) ? localValue : []) as (string | number)[];\n const filteredSelectedCount = filteredOptions.filter((opt) =>\n localMultiArr.some((v) => String(v) === String(opt.value)),\n ).length;\n const allFilteredSelected =\n filteredOptions.length > 0 && filteredSelectedCount === filteredOptions.length;\n const someFilteredSelected = filteredSelectedCount > 0 && !allFilteredSelected;\n\n const handleToggleAll = (checked: boolean) => {\n const arr = localMultiArr;\n const filteredVals = filteredOptions.map((o) => o.value);\n if (checked) {\n const seen = new Set(arr.map(String));\n const next = [...arr];\n for (const v of filteredVals) {\n if (!seen.has(String(v))) {\n next.push(v);\n seen.add(String(v));\n }\n }\n setLocalValue(next);\n return;\n }\n const removeSet = new Set(filteredVals.map(String));\n let next = arr.filter((v) => !removeSet.has(String(v)));\n if (minSelection != null && next.length < minSelection) {\n next = arr.slice(0, minSelection);\n }\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={label}\n active={active || isActive}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${label}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {multiple && filteredOptions.length > 0 && (\n <div\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n 'filter-select-select-all',\n styles['filter-select-select-all'],\n )}\n onClick={() => handleToggleAll(!allFilteredSelected)}\n >\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected}\n onChange={(e) => handleToggleAll(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\n <span>全选</span>\n </div>\n )}\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames(\n 'filter-select-option-selected',\n styles['filter-select-option-selected'],\n ),\n )}\n onClick={() => (multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value))}\n >\n {multiple && (\n <Checkbox\n checked={localMultiArr.some((v) => String(v) === String(opt.value))}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check\n className={classNames(\n 'filter-select-option-check',\n styles['filter-select-option-check'],\n )}\n />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>\n 暂无数据\n </div>\n )}\n </div>\n\n {multiple && localMultiArr.length > 0 && (\n <div\n className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}\n >\n <div\n className={classNames(\n 'filter-select-selected-label',\n styles['filter-select-selected-label'],\n )}\n >\n 已选:\n </div>\n <div\n className={classNames(\n 'filter-select-selected-tags',\n styles['filter-select-selected-tags'],\n )}\n >\n <Space size={[4, 4]} wrap>\n {localMultiArr.map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const tagRemovable = minSelection == null || localMultiArr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","i","toMultiArray","value","toDisplayValue","defaultValue","defaultValues","multiple","showDefaultAsSelected","arr","toDraftValue","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","onChange","searchable","minSelection","variant","active","hidden","display","open","setOpen","useState","searchText","setSearchText","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","onChangeRef","useRef","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","useEffect","nextDraft","nextDisplay","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","next","handleToggleMulti","has","localMultiArr","filteredSelectedCount","allFilteredSelected","someFilteredSelected","handleToggleAll","checked","filteredVals","seen","removeSet","isActive","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterSelect/index.tsx"],"sourcesContent":["import { Check, X } from '@/components/Icons';\nimport { Checkbox, Input, Space } from 'antd';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport PersonOptionRow from '../../Form/PersonOptionRow';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps, FilterLoadDataContext, FilterOption, PersonOption } from '../types';\nimport { resolveFilterVisible } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { Search } = Input;\n\nfunction formatPersonValueLabel(opt: PersonOption): string {\n const parts = [opt.label];\n if (opt.departmentName) parts.push(opt.departmentName);\n return parts.join(' · ');\n}\n\nfunction matchPersonOptionSearch(opt: PersonOption, keyword: string): boolean {\n const lower = keyword.toLowerCase();\n return [opt.label, opt.departmentName, opt.email, opt.phone, opt.employeeId]\n .filter(Boolean)\n .some((s) => String(s).toLowerCase().includes(lower));\n}\n\ntype FilterSelectValue = string | number | (string | number)[] | undefined;\n\nexport type { FilterSelectValue };\n\nfunction arraysEqual(a?: (string | number)[], b?: (string | number)[]): boolean {\n if (!a?.length && !b?.length) return true;\n if (!a || !b || a.length !== b.length) return false;\n const sortedA = [...a].map(String).sort();\n const sortedB = [...b].map(String).sort();\n return sortedA.every((v, i) => v === sortedB[i]);\n}\n\ninterface FilterSelectProps extends BaseFilterProps {\n /** 静态选项;与 loadData 二选一(同时存在时以 options 为准) */\n options?: FilterOption[];\n /** 按依赖值动态拉取选项 */\n loadData?: (ctx: FilterLoadDataContext) => Promise<FilterOption[]>;\n /** loadData 是否启用;默认 true */\n enabled?: boolean;\n value?: FilterSelectValue;\n onChange?: (value: FilterSelectValue) => void;\n /** 默认值:与默认值相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string | number;\n /** 多选默认值:与默认集合相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValues?: (string | number)[];\n /** 为 true 时,value 等于默认仍展示在「您已选择」并保持选中态 */\n showDefaultAsSelected?: boolean;\n placeholder?: string;\n searchable?: boolean;\n /** 是否多选 */\n multiple?: boolean;\n /** 多选至少保留项数;达到下限时不允许移除已选标签 */\n minSelection?: number;\n /** 人员选项:展示部门与联系方式 */\n variant?: 'default' | 'person';\n /**\n * 面板内嵌从属条件(与 search 同层:search 下方、选项列表上方)。\n * 禁止再嵌 Filter*(双重 Popover)。\n */\n panelExtra?: React.ReactNode;\n /** 面板宽度;有 panelExtra 时默认 460 */\n panelWidth?: number;\n}\n\nfunction toMultiArray(value: FilterSelectValue): (string | number)[] {\n if (Array.isArray(value)) return value;\n if (value != null && value !== '') return [value];\n return [];\n}\n\nfunction toDisplayValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n showDefaultAsSelected: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) {\n const arr = toMultiArray(value);\n // 等于默认集合时:对外视为「未筛选」(不亮 trigger / 不进「您已选择」)\n if (!showDefaultAsSelected && defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return [];\n }\n return arr;\n }\n if (!showDefaultAsSelected && defaultValue !== undefined && value === defaultValue) {\n return undefined;\n }\n return value;\n}\n\n/** 草稿/面板用真实 value,避免 defaultValues 折叠成 [] 后全选勾选丢失 */\nfunction toDraftValue(\n value: FilterSelectValue,\n defaultValue: string | number | undefined,\n defaultValues: (string | number)[] | undefined,\n multiple: boolean,\n): string | number | (string | number)[] | undefined {\n if (multiple) return toMultiArray(value);\n return toDisplayValue(value, defaultValue, defaultValues, false, true);\n}\n\nfunction formatValueLabel(\n displayVal: string | number | (string | number)[] | undefined,\n options: FilterOption[],\n multiple: boolean,\n isPersonVariant: boolean,\n defaultValues?: (string | number)[],\n): string {\n if (multiple) {\n const arr = (displayVal as (string | number)[]) || [];\n if (!arr.length) return '';\n // 全选默认集合时用「全部」,避免「您已选择」被几十个厂名撑满\n if (defaultValues?.length && arraysEqual(arr, defaultValues)) {\n return '全部';\n }\n return arr\n .map((v) => options.find((o) => String(o.value) === String(v))?.label ?? String(v))\n .join('、');\n }\n if (displayVal == null) return '';\n const opt = options.find((o) => String(o.value) === String(displayVal));\n if (!opt) return String(displayVal);\n return isPersonVariant ? formatPersonValueLabel(opt as PersonOption) : opt.label;\n}\n\nconst FilterSelect: React.FC<FilterSelectProps> = ({\n filterKey,\n label,\n options: optionsProp,\n loadData,\n enabled = true,\n value,\n onChange,\n defaultValue,\n defaultValues,\n showDefaultAsSelected = false,\n searchable = false,\n multiple = false,\n minSelection,\n variant = 'default',\n active,\n hidden,\n display,\n dependsOn,\n clearOnDepsChange = true,\n panelExtra,\n panelWidth,\n}) => {\n const isPersonVariant = variant === 'person';\n const [open, setOpen] = useState(false);\n const [searchText, setSearchText] = useState('');\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const resolvedPanelWidth = panelWidth ?? (panelExtra ? 460 : undefined);\n\n const { resolvedLabel, values, depsKey } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const [loadedOptions, setLoadedOptions] = useState<FilterOption[]>([]);\n const loadDataRef = useRef(loadData);\n loadDataRef.current = loadData;\n\n useEffect(() => {\n if (!loadDataRef.current || optionsProp != null || !enabled) return;\n let cancelled = false;\n (async () => {\n try {\n const next = await loadDataRef.current!({ values });\n if (!cancelled) setLoadedOptions(next ?? []);\n } catch {\n if (!cancelled) setLoadedOptions([]);\n }\n })();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [depsKey, enabled, optionsProp, loadData]);\n\n const options = optionsProp ?? loadedOptions;\n\n const displayValue = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n const [localValue, setLocalValue] = useState<string | number | (string | number)[] | undefined>(\n () => toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n const handleRemove = useMemo(() => {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const canRemove = !multiple || minSelection == null || selectedArr.length > minSelection;\n return () => {\n if (!canRemove) return;\n onChangeRef.current?.(undefined);\n };\n }, [displayValue, minSelection, multiple]);\n\n const revertToCommitted = () => {\n setLocalValue(\n toDraftValue(value, defaultValue, defaultValues, multiple) ?? (multiple ? [] : undefined),\n );\n setSearchText('');\n };\n\n // 同步外部 value 到内部 localValue(多选用真实 value,保留 defaultValues 全选勾选)\n useEffect(() => {\n const nextDraft = toDraftValue(value, defaultValue, defaultValues, multiple);\n setLocalValue(nextDraft ?? (multiple ? [] : undefined));\n const nextDisplay = toDisplayValue(\n value,\n defaultValue,\n defaultValues,\n multiple,\n showDefaultAsSelected,\n );\n if (\n nextDisplay === undefined ||\n nextDisplay === null ||\n (Array.isArray(nextDisplay) && nextDisplay.length === 0)\n ) {\n setSearchText('');\n }\n }, [value, defaultValue, defaultValues, multiple, showDefaultAsSelected]);\n\n const committedValueLabel = useMemo(\n () => formatValueLabel(displayValue, options, multiple, isPersonVariant, defaultValues),\n [options, displayValue, multiple, isPersonVariant, defaultValues],\n );\n\n useEffect(() => {\n if (!registerFn) return;\n const ctx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, ctx)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (committedValueLabel) {\n const selectedArr = Array.isArray(displayValue)\n ? displayValue\n : displayValue != null && displayValue !== ''\n ? [displayValue]\n : [];\n const removable = !multiple || minSelection == null || selectedArr.length > minSelection;\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: committedValueLabel,\n onRemove: handleRemove,\n removable,\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [committedValueLabel, filterKey, resolvedLabel, hidden, display, handleRemove]);\n\n const visibilityCtx = { filterKey, label: resolvedLabel, value };\n if (!resolveFilterVisible({ display, hidden }, visibilityCtx)) return null;\n\n const filteredOptions = searchText\n ? options.filter((opt) =>\n isPersonVariant\n ? matchPersonOptionSearch(opt as PersonOption, searchText)\n : opt.label.toLowerCase().includes(searchText.toLowerCase()),\n )\n : options;\n\n const handleConfirm = () => {\n onChange?.(localValue as FilterSelectValue);\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n if (!nextOpen && multiple) {\n revertToCommitted();\n }\n setOpen(nextOpen);\n };\n\n const handleClickOption = (optVal: string | number) => {\n if (!multiple) {\n const isDefaultOption = defaultValue !== undefined && optVal === defaultValue;\n let next: string | number | undefined;\n if (localValue === optVal || isDefaultOption) {\n next = undefined;\n } else {\n next = optVal;\n }\n setLocalValue(next);\n onChange?.(next);\n setOpen(false);\n }\n };\n\n const handleToggleMulti = (optVal: string | number) => {\n const arr = (localValue as (string | number)[]) || [];\n const has = arr.some((v) => String(v) === String(optVal));\n if (has && minSelection != null && arr.length <= minSelection) {\n return;\n }\n const next = has ? arr.filter((v) => String(v) !== String(optVal)) : [...arr, optVal];\n setLocalValue(next);\n };\n\n const localMultiArr = (Array.isArray(localValue) ? localValue : []) as (string | number)[];\n const filteredSelectedCount = filteredOptions.filter((opt) =>\n localMultiArr.some((v) => String(v) === String(opt.value)),\n ).length;\n const allFilteredSelected =\n filteredOptions.length > 0 && filteredSelectedCount === filteredOptions.length;\n const someFilteredSelected = filteredSelectedCount > 0 && !allFilteredSelected;\n\n const handleToggleAll = (checked: boolean) => {\n const arr = localMultiArr;\n const filteredVals = filteredOptions.map((o) => o.value);\n if (checked) {\n const seen = new Set(arr.map(String));\n const next = [...arr];\n for (const v of filteredVals) {\n if (!seen.has(String(v))) {\n next.push(v);\n seen.add(String(v));\n }\n }\n setLocalValue(next);\n return;\n }\n const removeSet = new Set(filteredVals.map(String));\n let next = arr.filter((v) => !removeSet.has(String(v)));\n if (minSelection != null && next.length < minSelection) {\n next = arr.slice(0, minSelection);\n }\n setLocalValue(next);\n };\n\n const isActive = multiple\n ? Array.isArray(displayValue) && displayValue.length > 0\n : displayValue != null && displayValue !== '';\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || isActive}\n open={open}\n onOpenChange={handleOpenChange}\n width={resolvedPanelWidth}\n onConfirm={multiple ? handleConfirm : undefined}\n onReset={multiple ? handleDiscardDraft : undefined}\n >\n {searchable && (\n <Search\n placeholder={`搜索${resolvedLabel}`}\n allowClear\n size=\"middle\"\n className={classNames('filter-select-search', styles['filter-select-search'])}\n value={searchText}\n onChange={(e) => setSearchText(e.target.value)}\n />\n )}\n {panelExtra ? (\n <div\n className={classNames('filter-select-panel-extra', styles['filter-select-panel-extra'])}\n >\n {panelExtra}\n </div>\n ) : null}\n\n <div className={classNames('filter-select-options', styles['filter-select-options'])}>\n {multiple && filteredOptions.length > 0 && (\n <div\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n 'filter-select-select-all',\n styles['filter-select-select-all'],\n )}\n onClick={() => handleToggleAll(!allFilteredSelected)}\n >\n <Checkbox\n checked={allFilteredSelected}\n indeterminate={someFilteredSelected}\n onChange={(e) => handleToggleAll(e.target.checked)}\n onClick={(e) => e.stopPropagation()}\n />\n <span>全选</span>\n </div>\n )}\n {filteredOptions.map((opt) => (\n <div\n key={String(opt.value)}\n className={classNames(\n 'filter-select-option',\n styles['filter-select-option'],\n !multiple &&\n localValue === opt.value &&\n classNames(\n 'filter-select-option-selected',\n styles['filter-select-option-selected'],\n ),\n )}\n onClick={() => (multiple ? handleToggleMulti(opt.value) : handleClickOption(opt.value))}\n >\n {multiple && (\n <Checkbox\n checked={localMultiArr.some((v) => String(v) === String(opt.value))}\n onChange={() => handleToggleMulti(opt.value)}\n onClick={(e) => e.stopPropagation()}\n />\n )}\n {isPersonVariant ? (\n <PersonOptionRow option={opt as PersonOption} />\n ) : (\n <span>{opt.label}</span>\n )}\n {!multiple && !isPersonVariant && localValue === opt.value && (\n <Check\n className={classNames(\n 'filter-select-option-check',\n styles['filter-select-option-check'],\n )}\n />\n )}\n </div>\n ))}\n {filteredOptions.length === 0 && (\n <div className={classNames('filter-select-empty', styles['filter-select-empty'])}>\n 暂无数据\n </div>\n )}\n </div>\n\n {multiple && localMultiArr.length > 0 && (\n <div\n className={classNames('filter-select-selected-bar', styles['filter-select-selected-bar'])}\n >\n <div\n className={classNames(\n 'filter-select-selected-label',\n styles['filter-select-selected-label'],\n )}\n >\n 已选:\n </div>\n <div\n className={classNames(\n 'filter-select-selected-tags',\n styles['filter-select-selected-tags'],\n )}\n >\n <Space size={[4, 4]} wrap>\n {localMultiArr.map((v) => {\n const opt = options.find((o) => String(o.value) === String(v));\n const tagRemovable = minSelection == null || localMultiArr.length > minSelection;\n return (\n <span\n key={String(v)}\n className={classNames(\n 'filter-select-selected-tag',\n styles['filter-select-selected-tag'],\n !tagRemovable && styles['filter-select-selected-tag-disabled'],\n )}\n onClick={() => tagRemovable && handleToggleMulti(v)}\n >\n {opt?.label ?? String(v)}\n <X\n className={classNames(\n 'filter-select-selected-remove',\n styles['filter-select-selected-remove'],\n !tagRemovable && styles['filter-select-selected-remove-disabled'],\n )}\n />\n </span>\n );\n })}\n </Space>\n </div>\n </div>\n )}\n </FilterPopover>\n );\n};\n\nexport default FilterSelect;\nexport type { FilterSelectProps };\n"],"names":["Search","Input","formatPersonValueLabel","opt","parts","matchPersonOptionSearch","keyword","lower","s","arraysEqual","a","b","sortedA","sortedB","v","toMultiArray","value","toDisplayValue","defaultValue","defaultValues","multiple","showDefaultAsSelected","arr","toDraftValue","formatValueLabel","displayVal","options","isPersonVariant","_a","o","FilterSelect","filterKey","label","optionsProp","loadData","enabled","onChange","searchable","minSelection","variant","active","hidden","display","dependsOn","clearOnDepsChange","panelExtra","panelWidth","open","setOpen","useState","searchText","setSearchText","onChangeRef","useRef","resolvedPanelWidth","resolvedLabel","values","depsKey","useFilterFieldBridge","loadedOptions","setLoadedOptions","loadDataRef","useEffect","cancelled","next","displayValue","localValue","setLocalValue","registerFn","useFilterRegister","handleRemove","useMemo","selectedArr","canRemove","revertToCommitted","nextDraft","nextDisplay","committedValueLabel","resolveFilterVisible","removable","filteredOptions","handleConfirm","handleDiscardDraft","handleOpenChange","nextOpen","handleClickOption","optVal","isDefaultOption","handleToggleMulti","has","localMultiArr","filteredSelectedCount","allFilteredSelected","someFilteredSelected","handleToggleAll","checked","filteredVals","seen","removeSet","isActive","jsxs","FilterPopover","jsx","classNames","styles","Checkbox","e","PersonOptionRow","Check","Space","tagRemovable","X"],"mappings":"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"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
const e = {
|
|
2
|
-
"filter-select-search": "_filter-select-
|
|
3
|
-
"filter-select-
|
|
4
|
-
"filter-select-
|
|
5
|
-
"filter-select-option
|
|
6
|
-
"filter-select-option-
|
|
7
|
-
"filter-select-
|
|
8
|
-
"filter-select-
|
|
9
|
-
"filter-select-
|
|
10
|
-
"filter-select-selected-
|
|
11
|
-
"filter-select-selected-
|
|
12
|
-
"filter-select-selected-
|
|
13
|
-
"filter-select-selected-tag
|
|
14
|
-
"filter-select-selected-
|
|
15
|
-
"filter-select-selected-remove
|
|
2
|
+
"filter-select-search": "_filter-select-search_1lhta_1",
|
|
3
|
+
"filter-select-panel-extra": "_filter-select-panel-extra_1lhta_5",
|
|
4
|
+
"filter-select-options": "_filter-select-options_1lhta_9",
|
|
5
|
+
"filter-select-option": "_filter-select-option_1lhta_9",
|
|
6
|
+
"filter-select-option-selected": "_filter-select-option-selected_1lhta_27",
|
|
7
|
+
"filter-select-option-check": "_filter-select-option-check_1lhta_32",
|
|
8
|
+
"filter-select-empty": "_filter-select-empty_1lhta_38",
|
|
9
|
+
"filter-select-select-all": "_filter-select-select-all_1lhta_46",
|
|
10
|
+
"filter-select-selected-bar": "_filter-select-selected-bar_1lhta_54",
|
|
11
|
+
"filter-select-selected-label": "_filter-select-selected-label_1lhta_61",
|
|
12
|
+
"filter-select-selected-tags": "_filter-select-selected-tags_1lhta_67",
|
|
13
|
+
"filter-select-selected-tag": "_filter-select-selected-tag_1lhta_67",
|
|
14
|
+
"filter-select-selected-tag-disabled": "_filter-select-selected-tag-disabled_1lhta_85",
|
|
15
|
+
"filter-select-selected-remove": "_filter-select-selected-remove_1lhta_90",
|
|
16
|
+
"filter-select-selected-remove-disabled": "_filter-select-selected-remove-disabled_1lhta_94"
|
|
16
17
|
};
|
|
17
18
|
export {
|
|
18
19
|
e as default
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as React } from 'react';
|
|
2
|
-
import { BaseFilterProps } from '../types';
|
|
2
|
+
import { BaseFilterProps, FilterLoadDataContext } from '../types';
|
|
3
3
|
export interface TreeFilterNode {
|
|
4
4
|
id: string;
|
|
5
5
|
name: string;
|
|
@@ -10,6 +10,10 @@ export interface FilterTreeSelectProps extends BaseFilterProps {
|
|
|
10
10
|
fetchUrl?: string;
|
|
11
11
|
fetchOptions?: RequestInit;
|
|
12
12
|
transformData?: (raw: unknown) => TreeFilterNode[];
|
|
13
|
+
/**
|
|
14
|
+
* 按依赖值动态拉取树数据(优先于 fetchUrl;若同时传 treeData 则仍以 treeData 为准)。
|
|
15
|
+
*/
|
|
16
|
+
loadData?: (ctx: FilterLoadDataContext) => Promise<TreeFilterNode[]>;
|
|
13
17
|
enabled?: boolean;
|
|
14
18
|
value?: string | string[] | undefined;
|
|
15
19
|
onChange?: (value: string | string[] | undefined) => void;
|
|
@@ -23,6 +27,13 @@ export interface FilterTreeSelectProps extends BaseFilterProps {
|
|
|
23
27
|
leafOnly?: boolean;
|
|
24
28
|
/** 自定义节点展示标签(默认 name) */
|
|
25
29
|
getNodeLabel?: (node: TreeFilterNode) => string;
|
|
30
|
+
/**
|
|
31
|
+
* 面板内嵌从属条件(与 search 同层:search 下方、树列表上方)。
|
|
32
|
+
* 用于「属性筛服务本树」等场景;禁止再嵌 Filter*(双重 Popover)。
|
|
33
|
+
*/
|
|
34
|
+
panelExtra?: React.ReactNode;
|
|
35
|
+
/** 面板宽度;有 panelExtra 时默认 460 */
|
|
36
|
+
panelWidth?: number;
|
|
26
37
|
}
|
|
27
38
|
declare const FilterTreeSelect: React.FC<FilterTreeSelectProps>;
|
|
28
39
|
export default FilterTreeSelect;
|