@hkyhy/marsun-components-core 0.1.29 → 0.1.31
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/FilterCascader/index.d.ts +40 -0
- package/dist/components/Filter/FilterCascader/index.js +318 -0
- package/dist/components/Filter/FilterCascader/index.js.map +1 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js +14 -0
- package/dist/components/Filter/FilterCascader/style.module.scss.js.map +1 -0
- 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/FilterPopover/index.d.ts +2 -0
- package/dist/components/Filter/FilterPopover/index.js +22 -21
- package/dist/components/Filter/FilterPopover/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/index.d.ts +20 -2
- package/dist/components/Filter/FilterSelect/index.js +237 -194
- package/dist/components/Filter/FilterSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -14
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/index.d.ts +18 -1
- package/dist/components/Filter/FilterTreeSelect/index.js +278 -218
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +15 -13
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/index.d.ts +3 -0
- package/dist/components/Filter/FilterTrigger/index.js +59 -26
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +5 -4
- package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -1
- package/dist/components/Filter/index.d.ts +7 -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/components/Table/ColumnConfigPanel.d.ts +13 -0
- package/dist/components/Table/ColumnConfigPanel.js +260 -0
- package/dist/components/Table/ColumnConfigPanel.js.map +1 -0
- package/dist/components/Table/Table.d.ts +16 -2
- package/dist/components/Table/Table.js +106 -28
- package/dist/components/Table/Table.js.map +1 -1
- package/dist/components/Table/columnConfig.module.scss.js +38 -0
- package/dist/components/Table/columnConfig.module.scss.js.map +1 -0
- package/dist/components/Table/columnConfigTypes.d.ts +22 -0
- package/dist/components/Table/columnConfigUtils.d.ts +25 -0
- package/dist/components/Table/columnConfigUtils.js +141 -0
- package/dist/components/Table/columnConfigUtils.js.map +1 -0
- package/dist/components/Table/index.d.ts +2 -1
- package/dist/index.js +289 -276
- package/dist/index.js.map +1 -1
- 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/FilterDatePicker/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/** 单值快捷选项 */\ninterface SingleQuickOption {\n key: string;\n label: string;\n getValue: () => Dayjs;\n}\n\ninterface FilterDatePickerProps extends BaseFilterProps {\n value?: string | null;\n onChange?: (value: string | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认值:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string;\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: SingleQuickOption[];\n placeholder?: string;\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction getBuiltInQuickOptions(picker: DatePickerGranularity): SingleQuickOption[] {\n const now = dayjs();\n if (picker === 'year') {\n return [{ key: 'thisYear', label: '今年', getValue: () => now.startOf('year') }];\n }\n if (picker === 'month') {\n return [{ key: 'thisMonth', label: '本月', getValue: () => now.startOf('month') }];\n }\n return [{ key: 'today', label: '今天', getValue: () => now.startOf('day') }];\n}\n\nfunction isSamePickerValue(a?: string | null, b?: string): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a === b;\n}\n\nfunction findMatchingQuickKey(\n value: string | null | undefined,\n picker: DatePickerGranularity,\n opts: SingleQuickOption[],\n): string | null {\n if (!value) return null;\n const current = parsePickerValue(value, picker);\n if (!current.isValid()) return null;\n for (const opt of opts) {\n const candidate = opt.getValue();\n const unit = picker === 'year' ? 'year' : picker === 'month' ? 'month' : 'day';\n if (candidate.isSame(current, unit)) return opt.key;\n }\n return null;\n}\n\nconst FilterDatePicker: React.FC<FilterDatePickerProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = false,\n quickOptions,\n placeholder,\n disabledDate,\n active,\n hidden,\n}) => {\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Dayjs | null>(value ? parsePickerValue(value, picker) : null);\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () => quickOptions ?? (showQuickOptions ? getBuiltInQuickOptions(picker) : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (nextValue: string | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(nextValue, picker, opts));\n };\n\n const revertToCommitted = () => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, picker, opts]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value\n : !!value && !isSamePickerValue(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value) return '';\n return value;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (draft) {\n onChange?.(formatPickerValue(draft, picker));\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 ? (\n <div\n className={classNames(\n 'filter-date-picker-quick-options',\n styles['filter-date-picker-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-picker-quick-option',\n styles['filter-date-picker-quick-option'],\n activeQuickKey === opt.key && 'filter-date-picker-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-picker-quick-option-active'],\n )}\n onClick={() => {\n const next = opt.getValue();\n setDraft(next);\n setActiveQuickKey(opt.key);\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n ) : null}\n <DatePicker\n className={classNames('filter-date-picker', styles['filter-date-picker'])}\n picker={picker}\n value={draft}\n placeholder={placeholder}\n disabledDate={disabledDate}\n onChange={(next) => {\n setDraft(next);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDatePicker;\nexport type { FilterDatePickerProps, SingleQuickOption };\nexport { findMatchingQuickKey, getBuiltInQuickOptions, isSamePickerValue };\n"],"names":["getBuiltInQuickOptions","picker","now","dayjs","isSamePickerValue","a","b","findMatchingQuickKey","value","opts","current","parsePickerValue","opt","candidate","unit","FilterDatePicker","filterKey","label","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","placeholder","disabledDate","active","hidden","open","setOpen","useState","draft","setDraft","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","nextValue","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","next","DatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDatePicker/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { type Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\n/** 单值快捷选项 */\ninterface SingleQuickOption {\n key: string;\n label: string;\n getValue: () => Dayjs;\n}\n\ninterface FilterDatePickerProps extends BaseFilterProps {\n value?: string | null;\n onChange?: (value: string | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认值:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: string;\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: SingleQuickOption[];\n placeholder?: string;\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction getBuiltInQuickOptions(picker: DatePickerGranularity): SingleQuickOption[] {\n const now = dayjs();\n if (picker === 'year') {\n return [{ key: 'thisYear', label: '今年', getValue: () => now.startOf('year') }];\n }\n if (picker === 'month') {\n return [{ key: 'thisMonth', label: '本月', getValue: () => now.startOf('month') }];\n }\n return [{ key: 'today', label: '今天', getValue: () => now.startOf('day') }];\n}\n\nfunction isSamePickerValue(a?: string | null, b?: string): boolean {\n if (!a && !b) return true;\n if (!a || !b) return false;\n return a === b;\n}\n\nfunction findMatchingQuickKey(\n value: string | null | undefined,\n picker: DatePickerGranularity,\n opts: SingleQuickOption[],\n): string | null {\n if (!value) return null;\n const current = parsePickerValue(value, picker);\n if (!current.isValid()) return null;\n for (const opt of opts) {\n const candidate = opt.getValue();\n const unit = picker === 'year' ? 'year' : picker === 'month' ? 'month' : 'day';\n if (candidate.isSame(current, unit)) return opt.key;\n }\n return null;\n}\n\nconst FilterDatePicker: React.FC<FilterDatePickerProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = false,\n quickOptions,\n placeholder,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [draft, setDraft] = useState<Dayjs | null>(value ? parsePickerValue(value, picker) : null);\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () => quickOptions ?? (showQuickOptions ? getBuiltInQuickOptions(picker) : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (nextValue: string | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(nextValue, picker, opts));\n };\n\n const revertToCommitted = () => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value) {\n setDraft(parsePickerValue(value, picker));\n syncActiveQuickKey(value);\n } else {\n setDraft(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, picker, opts]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value\n : !!value && !isSamePickerValue(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value) return '';\n return value;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (draft) {\n onChange?.(formatPickerValue(draft, picker));\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 ? (\n <div\n className={classNames(\n 'filter-date-picker-quick-options',\n styles['filter-date-picker-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-picker-quick-option',\n styles['filter-date-picker-quick-option'],\n activeQuickKey === opt.key && 'filter-date-picker-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-picker-quick-option-active'],\n )}\n onClick={() => {\n const next = opt.getValue();\n setDraft(next);\n setActiveQuickKey(opt.key);\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n ) : null}\n <DatePicker\n className={classNames('filter-date-picker', styles['filter-date-picker'])}\n picker={picker}\n value={draft}\n placeholder={placeholder}\n disabledDate={disabledDate}\n onChange={(next) => {\n setDraft(next);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDatePicker;\nexport type { FilterDatePickerProps, SingleQuickOption };\nexport { findMatchingQuickKey, getBuiltInQuickOptions, isSamePickerValue };\n"],"names":["getBuiltInQuickOptions","picker","now","dayjs","isSamePickerValue","a","b","findMatchingQuickKey","value","opts","current","parsePickerValue","opt","candidate","unit","FilterDatePicker","filterKey","label","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","placeholder","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","draft","setDraft","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","nextValue","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","next","DatePicker"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { DatePicker as
|
|
1
|
+
import { jsxs as W, jsx as R } from "react/jsx-runtime";
|
|
2
|
+
import { DatePicker as $ } from "antd";
|
|
3
3
|
import d from "dayjs";
|
|
4
|
-
import { useState as
|
|
5
|
-
import { parsePickerValue as f, formatPickerValue as
|
|
6
|
-
import
|
|
7
|
-
import { resolveHidden as
|
|
8
|
-
import { useFilterRegister as
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
const { RangePicker:
|
|
4
|
+
import { useState as q, useRef as E, useMemo as x, useEffect as A } from "react";
|
|
5
|
+
import { parsePickerValue as f, formatPickerValue as B } from "../../../utils/pickerDate.js";
|
|
6
|
+
import H from "../FilterPopover/index.js";
|
|
7
|
+
import { resolveHidden as L } from "../types.js";
|
|
8
|
+
import { useFilterFieldBridge as Y, useFilterRegister as z } from "../useFilterState.js";
|
|
9
|
+
import O from "./style.module.scss.js";
|
|
10
|
+
import w from "classnames";
|
|
11
|
+
const { RangePicker: G } = $, J = [
|
|
12
12
|
{
|
|
13
13
|
key: "lastWeek",
|
|
14
14
|
label: "上周",
|
|
@@ -23,7 +23,7 @@ const { RangePicker: W } = B, $ = [
|
|
|
23
23
|
getValue: () => [d().startOf("week"), d().endOf("week")]
|
|
24
24
|
}
|
|
25
25
|
];
|
|
26
|
-
function
|
|
26
|
+
function K() {
|
|
27
27
|
const e = d().startOf("month");
|
|
28
28
|
return [
|
|
29
29
|
{ key: "1m", label: "近1月", getValue: () => [e, e] },
|
|
@@ -39,93 +39,111 @@ function E() {
|
|
|
39
39
|
}
|
|
40
40
|
];
|
|
41
41
|
}
|
|
42
|
-
function
|
|
42
|
+
function X(e, r) {
|
|
43
43
|
return !(e != null && e[0]) || !(e != null && e[1]) ? !(r != null && r[0]) || !(r != null && r[1]) : !(r != null && r[0]) || !(r != null && r[1]) ? !1 : e[0] === r[0] && e[1] === r[1];
|
|
44
44
|
}
|
|
45
|
-
function
|
|
45
|
+
function Z(e) {
|
|
46
46
|
return e === "month" ? "month" : e === "year" ? "year" : "day";
|
|
47
47
|
}
|
|
48
|
-
function
|
|
48
|
+
function b(e, r, t) {
|
|
49
49
|
if (!(e != null && e[0]) || !(e != null && e[1])) return null;
|
|
50
|
-
const i = f(e[0], t), n = f(e[1], t),
|
|
51
|
-
for (const
|
|
52
|
-
const c =
|
|
53
|
-
if (c && c[0].isSame(i,
|
|
54
|
-
return
|
|
50
|
+
const i = f(e[0], t), n = f(e[1], t), u = Z(t);
|
|
51
|
+
for (const k of r) {
|
|
52
|
+
const c = k.getValue();
|
|
53
|
+
if (c && c[0].isSame(i, u) && c[1].isSame(n, u))
|
|
54
|
+
return k.key;
|
|
55
55
|
}
|
|
56
56
|
return null;
|
|
57
57
|
}
|
|
58
|
-
const
|
|
58
|
+
const dt = ({
|
|
59
59
|
filterKey: e,
|
|
60
60
|
label: r,
|
|
61
61
|
value: t,
|
|
62
62
|
onChange: i,
|
|
63
63
|
picker: n = "date",
|
|
64
|
-
defaultValue:
|
|
65
|
-
showDefaultAsSelected:
|
|
64
|
+
defaultValue: u,
|
|
65
|
+
showDefaultAsSelected: k = !1,
|
|
66
66
|
showQuickOptions: c = !0,
|
|
67
|
-
quickOptions:
|
|
67
|
+
quickOptions: S,
|
|
68
68
|
disabledDate: M,
|
|
69
69
|
active: Q,
|
|
70
|
-
hidden:
|
|
70
|
+
hidden: V,
|
|
71
|
+
dependsOn: T,
|
|
72
|
+
clearOnDepsChange: _ = !0
|
|
71
73
|
}) => {
|
|
72
|
-
const [
|
|
74
|
+
const [U, a] = q(!1), [o, m] = q(
|
|
73
75
|
t ? [f(t[0], n), f(t[1], n)] : null
|
|
74
|
-
), [
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
76
|
+
), [g, l] = q(null), y = E(i);
|
|
77
|
+
y.current = i;
|
|
78
|
+
const { resolvedLabel: N } = Y({
|
|
79
|
+
filterKey: e,
|
|
80
|
+
value: t,
|
|
81
|
+
label: r,
|
|
82
|
+
dependsOn: T,
|
|
83
|
+
clearOnDepsChange: _,
|
|
84
|
+
onDepsClear: () => {
|
|
85
|
+
var s;
|
|
86
|
+
return (s = y.current) == null ? void 0 : s.call(y, null);
|
|
87
|
+
}
|
|
88
|
+
}), p = z(), D = x(
|
|
89
|
+
() => S ?? (c ? n === "month" ? K() : J : []),
|
|
90
|
+
[S, c, n]
|
|
91
|
+
), h = (s) => {
|
|
92
|
+
l(b(s, D, n));
|
|
93
|
+
}, I = () => {
|
|
94
|
+
t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), h(t)) : (m(null), l(null));
|
|
81
95
|
};
|
|
82
|
-
|
|
83
|
-
t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]),
|
|
84
|
-
}, [t,
|
|
85
|
-
const
|
|
86
|
-
return
|
|
87
|
-
if (
|
|
88
|
-
if (
|
|
89
|
-
|
|
96
|
+
A(() => {
|
|
97
|
+
t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), h(t)) : (m(null), l(null));
|
|
98
|
+
}, [t, D, n]);
|
|
99
|
+
const F = k ? !!(t != null && t[0]) : !!(t != null && t[0]) && !X(t, u), P = x(() => !F || !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [F, t]);
|
|
100
|
+
return A(() => {
|
|
101
|
+
if (p) {
|
|
102
|
+
if (L(V)) {
|
|
103
|
+
p.unregister(e);
|
|
90
104
|
return;
|
|
91
105
|
}
|
|
92
|
-
|
|
106
|
+
P ? p.register(e, {
|
|
107
|
+
label: N,
|
|
108
|
+
valueLabel: P,
|
|
109
|
+
onRemove: () => i == null ? void 0 : i(null)
|
|
110
|
+
}) : p.unregister(e);
|
|
93
111
|
}
|
|
94
|
-
}, [
|
|
95
|
-
|
|
112
|
+
}, [P, e, N, V]), L(V) ? null : /* @__PURE__ */ W(
|
|
113
|
+
H,
|
|
96
114
|
{
|
|
97
|
-
label:
|
|
98
|
-
active: Q ||
|
|
99
|
-
open:
|
|
115
|
+
label: N,
|
|
116
|
+
active: Q || F,
|
|
117
|
+
open: U,
|
|
100
118
|
onOpenChange: (s) => {
|
|
101
|
-
|
|
119
|
+
I(), a(s);
|
|
102
120
|
},
|
|
103
121
|
onConfirm: () => {
|
|
104
|
-
o != null && o[0] && (o != null && o[1]) ? i == null || i([
|
|
122
|
+
o != null && o[0] && (o != null && o[1]) ? i == null || i([B(o[0], n), B(o[1], n)]) : i == null || i(null), a(!1);
|
|
105
123
|
},
|
|
106
124
|
onReset: () => {
|
|
107
|
-
|
|
125
|
+
I(), a(!1);
|
|
108
126
|
},
|
|
109
127
|
children: [
|
|
110
|
-
|
|
128
|
+
D.length > 0 && /* @__PURE__ */ R(
|
|
111
129
|
"div",
|
|
112
130
|
{
|
|
113
|
-
className:
|
|
131
|
+
className: w(
|
|
114
132
|
"filter-date-range-quick-options",
|
|
115
|
-
|
|
133
|
+
O["filter-date-range-quick-options"]
|
|
116
134
|
),
|
|
117
|
-
children:
|
|
135
|
+
children: D.map((s) => /* @__PURE__ */ R(
|
|
118
136
|
"span",
|
|
119
137
|
{
|
|
120
|
-
className:
|
|
138
|
+
className: w(
|
|
121
139
|
"filter-date-range-quick-option",
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
140
|
+
O["filter-date-range-quick-option"],
|
|
141
|
+
g === s.key && "filter-date-range-quick-option-active",
|
|
142
|
+
g === s.key && O["filter-date-range-quick-option-active"]
|
|
125
143
|
),
|
|
126
144
|
onClick: () => {
|
|
127
|
-
const
|
|
128
|
-
|
|
145
|
+
const j = s.getValue();
|
|
146
|
+
j && (m(j), l(s.key));
|
|
129
147
|
},
|
|
130
148
|
children: s.label
|
|
131
149
|
},
|
|
@@ -133,10 +151,10 @@ const it = ({
|
|
|
133
151
|
))
|
|
134
152
|
}
|
|
135
153
|
),
|
|
136
|
-
/* @__PURE__ */
|
|
137
|
-
|
|
154
|
+
/* @__PURE__ */ R(
|
|
155
|
+
G,
|
|
138
156
|
{
|
|
139
|
-
className:
|
|
157
|
+
className: w("filter-date-range-picker", O["filter-date-range-picker"]),
|
|
140
158
|
picker: n,
|
|
141
159
|
value: o,
|
|
142
160
|
disabledDate: M,
|
|
@@ -150,9 +168,9 @@ const it = ({
|
|
|
150
168
|
);
|
|
151
169
|
};
|
|
152
170
|
export {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
171
|
+
dt as default,
|
|
172
|
+
b as findMatchingQuickKey,
|
|
173
|
+
K as getBuiltInMonthOptions,
|
|
174
|
+
X as isSameRange
|
|
157
175
|
};
|
|
158
176
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项(日粒度) */\nconst BUILT_IN_DAY_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\nfunction getBuiltInMonthOptions(): QuickOption[] {\n const end = dayjs().startOf('month');\n return [\n { key: '1m', label: '近1月', getValue: () => [end, end] },\n {\n key: '3m',\n label: '近3月',\n getValue: () => [end.subtract(2, 'month'), end],\n },\n {\n key: '6m',\n label: '近6月',\n getValue: () => [end.subtract(5, 'month'), end],\n },\n ];\n}\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction rangeUnit(picker: DatePickerGranularity): 'day' | 'month' | 'year' {\n if (picker === 'month') return 'month';\n if (picker === 'year') return 'year';\n return 'day';\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n picker: DatePickerGranularity,\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = parsePickerValue(range[0], picker);\n const end = parsePickerValue(range[1], picker);\n const unit = rangeUnit(picker);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, unit) && v[1].isSame(end, unit)) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n disabledDate,\n active,\n hidden,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () =>\n quickOptions ??\n (showQuickOptions\n ? picker === 'month'\n ? getBuiltInMonthOptions()\n : BUILT_IN_DAY_OPTIONS\n : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts, picker));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts, picker]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, { label, valueLabel, onRemove: () => onChange?.(null) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, label, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([formatPickerValue(dates[0], picker), formatPickerValue(dates[1], picker)]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n picker={picker}\n value={dates}\n disabledDate={disabledDate}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange, getBuiltInMonthOptions };\n"],"names":["RangePicker","DatePicker","BUILT_IN_DAY_OPTIONS","dayjs","getBuiltInMonthOptions","end","isSameRange","a","b","rangeUnit","picker","findMatchingQuickKey","range","opts","start","parsePickerValue","unit","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","disabledDate","active","hidden","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","vals"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterDateRange/index.tsx"],"sourcesContent":["import { DatePicker } from 'antd';\nimport dayjs, { Dayjs } from 'dayjs';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n formatPickerValue,\n parsePickerValue,\n type DatePickerGranularity,\n} from '@/utils/pickerDate';\nimport FilterPopover from '../FilterPopover';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\nconst { RangePicker } = DatePicker;\n\n/** 快捷选项配置类型 */\ninterface QuickOption {\n key: string;\n label: string;\n getValue: () => [Dayjs, Dayjs] | null;\n}\n\n/** 内置快捷选项(日粒度) */\nconst BUILT_IN_DAY_OPTIONS: QuickOption[] = [\n {\n key: 'lastWeek',\n label: '上周',\n getValue: () => [\n dayjs().subtract(1, 'week').startOf('week'),\n dayjs().subtract(1, 'week').endOf('week'),\n ],\n },\n {\n key: 'thisWeek',\n label: '本周',\n getValue: () => [dayjs().startOf('week'), dayjs().endOf('week')],\n },\n];\n\nfunction getBuiltInMonthOptions(): QuickOption[] {\n const end = dayjs().startOf('month');\n return [\n { key: '1m', label: '近1月', getValue: () => [end, end] },\n {\n key: '3m',\n label: '近3月',\n getValue: () => [end.subtract(2, 'month'), end],\n },\n {\n key: '6m',\n label: '近6月',\n getValue: () => [end.subtract(5, 'month'), end],\n },\n ];\n}\n\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n /** 选择粒度:日 / 月 / 年 */\n picker?: DatePickerGranularity;\n /** 默认区间:与默认相同时视为未筛选(除非 showDefaultAsSelected) */\n defaultValue?: [string, string];\n /** 为 true 时,value 等于 defaultValue 仍展示在已选 Tag 中 */\n showDefaultAsSelected?: boolean;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n disabledDate?: (current: Dayjs) => boolean;\n}\n\nfunction isSameRange(a?: [string, string] | null, b?: [string, string]): boolean {\n if (!a?.[0] || !a?.[1]) return !b?.[0] || !b?.[1];\n if (!b?.[0] || !b?.[1]) return false;\n return a[0] === b[0] && a[1] === b[1];\n}\n\nfunction rangeUnit(picker: DatePickerGranularity): 'day' | 'month' | 'year' {\n if (picker === 'month') return 'month';\n if (picker === 'year') return 'year';\n return 'day';\n}\n\nfunction findMatchingQuickKey(\n range: [string, string] | null | undefined,\n opts: QuickOption[],\n picker: DatePickerGranularity,\n): string | null {\n if (!range?.[0] || !range?.[1]) return null;\n const start = parsePickerValue(range[0], picker);\n const end = parsePickerValue(range[1], picker);\n const unit = rangeUnit(picker);\n for (const opt of opts) {\n const v = opt.getValue();\n if (v && v[0].isSame(start, unit) && v[1].isSame(end, unit)) {\n return opt.key;\n }\n }\n return null;\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n picker = 'date',\n defaultValue,\n showDefaultAsSelected = false,\n showQuickOptions = true,\n quickOptions,\n disabledDate,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [open, setOpen] = useState(false);\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(null),\n });\n\n const registerFn = useFilterRegister();\n const opts = useMemo(\n () =>\n quickOptions ??\n (showQuickOptions\n ? picker === 'month'\n ? getBuiltInMonthOptions()\n : BUILT_IN_DAY_OPTIONS\n : []),\n [quickOptions, showQuickOptions, picker],\n );\n\n const syncActiveQuickKey = (range: [string, string] | null | undefined) => {\n setActiveQuickKey(findMatchingQuickKey(range, opts, picker));\n };\n\n const revertToCommitted = () => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n };\n\n useEffect(() => {\n if (value?.[0] && value?.[1]) {\n setDates([parsePickerValue(value[0], picker), parsePickerValue(value[1], picker)]);\n syncActiveQuickKey(value);\n } else {\n setDates(null);\n setActiveQuickKey(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, opts, picker]);\n\n const hasNonDefaultValue = showDefaultAsSelected\n ? !!value?.[0]\n : !!value?.[0] && !isSameRange(value, defaultValue);\n\n const valueLabel = useMemo(() => {\n if (!hasNonDefaultValue || !value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [hasNonDefaultValue, value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (valueLabel) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel,\n onRemove: () => onChange?.(null),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [valueLabel, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([formatPickerValue(dates[0], picker), formatPickerValue(dates[1], picker)]);\n } else {\n onChange?.(null);\n }\n setOpen(false);\n };\n\n const handleDiscardDraft = () => {\n revertToCommitted();\n setOpen(false);\n };\n\n const handleOpenChange = (nextOpen: boolean) => {\n revertToCommitted();\n setOpen(nextOpen);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || hasNonDefaultValue}\n open={open}\n onOpenChange={handleOpenChange}\n onConfirm={handleConfirm}\n onReset={handleDiscardDraft}\n >\n {opts.length > 0 && (\n <div\n className={classNames(\n 'filter-date-range-quick-options',\n styles['filter-date-range-quick-options'],\n )}\n >\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames(\n 'filter-date-range-quick-option',\n styles['filter-date-range-quick-option'],\n activeQuickKey === opt.key && 'filter-date-range-quick-option-active',\n activeQuickKey === opt.key && styles['filter-date-range-quick-option-active'],\n )}\n onClick={() => {\n const v = opt.getValue();\n if (v) {\n setDates(v);\n setActiveQuickKey(opt.key);\n }\n }}\n >\n {opt.label}\n </span>\n ))}\n </div>\n )}\n <RangePicker\n className={classNames('filter-date-range-picker', styles['filter-date-range-picker'])}\n picker={picker}\n value={dates}\n disabledDate={disabledDate}\n onChange={(vals) => {\n setDates(vals as [Dayjs | null, Dayjs | null] | null);\n setActiveQuickKey(null);\n }}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterDateRange;\nexport type { FilterDateRangeProps, QuickOption };\nexport { findMatchingQuickKey, isSameRange, getBuiltInMonthOptions };\n"],"names":["RangePicker","DatePicker","BUILT_IN_DAY_OPTIONS","dayjs","getBuiltInMonthOptions","end","isSameRange","a","b","rangeUnit","picker","findMatchingQuickKey","range","opts","start","parsePickerValue","unit","opt","v","FilterDateRange","filterKey","label","value","onChange","defaultValue","showDefaultAsSelected","showQuickOptions","quickOptions","disabledDate","active","hidden","dependsOn","clearOnDepsChange","open","setOpen","useState","dates","setDates","activeQuickKey","setActiveQuickKey","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useMemo","syncActiveQuickKey","revertToCommitted","useEffect","hasNonDefaultValue","valueLabel","resolveHidden","jsxs","FilterPopover","nextOpen","formatPickerValue","jsx","classNames","styles","vals"],"mappings":"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"}
|
|
@@ -1,56 +1,74 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { Input as
|
|
3
|
-
import { useState as
|
|
4
|
-
import
|
|
5
|
-
import { useFilterRegister as
|
|
6
|
-
import { resolveHidden as
|
|
7
|
-
const
|
|
1
|
+
import { jsx as d } from "react/jsx-runtime";
|
|
2
|
+
import { Input as E } from "antd";
|
|
3
|
+
import { useState as L, useRef as P, useEffect as f } from "react";
|
|
4
|
+
import V from "../FilterPopover/index.js";
|
|
5
|
+
import { useFilterFieldBridge as j, useFilterRegister as w } from "../useFilterState.js";
|
|
6
|
+
import { resolveHidden as F } from "../types.js";
|
|
7
|
+
const q = ({
|
|
8
8
|
filterKey: e,
|
|
9
|
-
label:
|
|
9
|
+
label: v,
|
|
10
10
|
value: t,
|
|
11
11
|
onChange: r,
|
|
12
|
-
placeholder:
|
|
13
|
-
active:
|
|
14
|
-
hidden:
|
|
12
|
+
placeholder: R,
|
|
13
|
+
active: b,
|
|
14
|
+
hidden: u,
|
|
15
|
+
dependsOn: I,
|
|
16
|
+
clearOnDepsChange: x = !0
|
|
15
17
|
}) => {
|
|
16
|
-
const [
|
|
17
|
-
|
|
18
|
+
const [p, m] = L(t ?? ""), s = P(r);
|
|
19
|
+
s.current = r;
|
|
20
|
+
const { resolvedLabel: i } = j({
|
|
21
|
+
filterKey: e,
|
|
22
|
+
value: t,
|
|
23
|
+
label: v,
|
|
24
|
+
dependsOn: I,
|
|
25
|
+
clearOnDepsChange: x,
|
|
26
|
+
onDepsClear: () => {
|
|
27
|
+
var l;
|
|
28
|
+
return (l = s.current) == null ? void 0 : l.call(s, void 0);
|
|
29
|
+
}
|
|
30
|
+
}), o = w();
|
|
31
|
+
if (f(() => {
|
|
18
32
|
m(t ?? "");
|
|
19
|
-
}, [t]),
|
|
20
|
-
if (
|
|
21
|
-
if (
|
|
22
|
-
|
|
33
|
+
}, [t]), f(() => {
|
|
34
|
+
if (o) {
|
|
35
|
+
if (F(u)) {
|
|
36
|
+
o.unregister(e);
|
|
23
37
|
return;
|
|
24
38
|
}
|
|
25
|
-
t ?
|
|
39
|
+
t ? o.register(e, {
|
|
40
|
+
label: i,
|
|
41
|
+
valueLabel: t,
|
|
42
|
+
onRemove: () => r == null ? void 0 : r(void 0)
|
|
43
|
+
}) : o.unregister(e);
|
|
26
44
|
}
|
|
27
|
-
}, [t, e,
|
|
28
|
-
const
|
|
29
|
-
r == null || r(
|
|
45
|
+
}, [t, e, i, u]), F(u)) return null;
|
|
46
|
+
const c = () => {
|
|
47
|
+
r == null || r(p || void 0);
|
|
30
48
|
};
|
|
31
|
-
return /* @__PURE__ */
|
|
32
|
-
|
|
49
|
+
return /* @__PURE__ */ d(
|
|
50
|
+
V,
|
|
33
51
|
{
|
|
34
|
-
label:
|
|
35
|
-
active:
|
|
36
|
-
onConfirm:
|
|
52
|
+
label: i,
|
|
53
|
+
active: b || !!t,
|
|
54
|
+
onConfirm: c,
|
|
37
55
|
onReset: () => {
|
|
38
56
|
m(""), r == null || r(void 0);
|
|
39
57
|
},
|
|
40
|
-
children: /* @__PURE__ */
|
|
41
|
-
|
|
58
|
+
children: /* @__PURE__ */ d(
|
|
59
|
+
E,
|
|
42
60
|
{
|
|
43
|
-
placeholder:
|
|
61
|
+
placeholder: R ?? `请输入${i}`,
|
|
44
62
|
allowClear: !0,
|
|
45
|
-
value:
|
|
46
|
-
onChange: (
|
|
47
|
-
onPressEnter:
|
|
63
|
+
value: p,
|
|
64
|
+
onChange: (l) => m(l.target.value),
|
|
65
|
+
onPressEnter: c
|
|
48
66
|
}
|
|
49
67
|
)
|
|
50
68
|
}
|
|
51
69
|
);
|
|
52
70
|
};
|
|
53
71
|
export {
|
|
54
|
-
|
|
72
|
+
q as default
|
|
55
73
|
};
|
|
56
74
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterInput/index.tsx"],"sourcesContent":["import { Input } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport { useFilterRegister } from '../useFilterState';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\n\ninterface FilterInputProps extends BaseFilterProps {\n value?: string;\n onChange?: (value: string | undefined) => void;\n placeholder?: string;\n}\n\nconst FilterInput: React.FC<FilterInputProps> = ({\n filterKey,\n label,\n value,\n onChange,\n placeholder,\n active,\n hidden,\n}) => {\n const [inputValue, setInputValue] = useState(value ?? '');\n\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterInput/index.tsx"],"sourcesContent":["import { Input } from 'antd';\nimport React, { useEffect, useRef, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport { useFilterFieldBridge, useFilterRegister } from '../useFilterState';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\n\ninterface FilterInputProps extends BaseFilterProps {\n value?: string;\n onChange?: (value: string | undefined) => void;\n placeholder?: string;\n}\n\nconst FilterInput: React.FC<FilterInputProps> = ({\n filterKey,\n label,\n value,\n onChange,\n placeholder,\n active,\n hidden,\n dependsOn,\n clearOnDepsChange = true,\n}) => {\n const [inputValue, setInputValue] = useState(value ?? '');\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const { resolvedLabel } = useFilterFieldBridge({\n filterKey,\n value,\n label,\n dependsOn,\n clearOnDepsChange,\n onDepsClear: () => onChangeRef.current?.(undefined),\n });\n\n const registerFn = useFilterRegister();\n\n useEffect(() => {\n setInputValue(value ?? '');\n }, [value]);\n\n useEffect(() => {\n if (!registerFn) return;\n if (resolveHidden(hidden)) {\n registerFn.unregister(filterKey);\n return;\n }\n if (value) {\n registerFn.register(filterKey, {\n label: resolvedLabel,\n valueLabel: value,\n onRemove: () => onChange?.(undefined),\n });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, filterKey, resolvedLabel, hidden]);\n\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n onChange?.(inputValue || undefined);\n };\n\n const handleReset = () => {\n setInputValue('');\n onChange?.(undefined);\n };\n\n return (\n <FilterPopover\n label={resolvedLabel}\n active={active || !!value}\n onConfirm={handleConfirm}\n onReset={handleReset}\n >\n <Input\n placeholder={placeholder ?? `请输入${resolvedLabel}`}\n allowClear\n value={inputValue}\n onChange={(e) => setInputValue(e.target.value)}\n onPressEnter={handleConfirm}\n />\n </FilterPopover>\n );\n};\n\nexport default FilterInput;\nexport type { FilterInputProps };\n"],"names":["FilterInput","filterKey","label","value","onChange","placeholder","active","hidden","dependsOn","clearOnDepsChange","inputValue","setInputValue","useState","onChangeRef","useRef","resolvedLabel","useFilterFieldBridge","_a","registerFn","useFilterRegister","useEffect","resolveHidden","handleConfirm","jsx","FilterPopover","Input","e"],"mappings":";;;;;;AAaA,MAAMA,IAA0C,CAAC;AAAA,EAC/C,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC;AAAA,EACA,QAAAC;AAAA,EACA,WAAAC;AAAA,EACA,mBAAAC,IAAoB;AACtB,MAAM;AACJ,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAST,KAAS,EAAE,GAElDU,IAAcC,EAAOV,CAAQ;AACnC,EAAAS,EAAY,UAAUT;AAEtB,QAAM,EAAE,eAAAW,EAAA,IAAkBC,EAAqB;AAAA,IAC7C,WAAAf;AAAA,IACA,OAAAE;AAAA,IACA,OAAAD;AAAA,IACA,WAAAM;AAAA,IACA,mBAAAC;AAAA,IACA,aAAa,MAAA;;AAAM,cAAAQ,IAAAJ,EAAY,YAAZ,gBAAAI,EAAA,KAAAJ,GAAsB;AAAA;AAAA,EAAS,CACnD,GAEKK,IAAaC,EAAA;AAwBnB,MAtBAC,EAAU,MAAM;AACd,IAAAT,EAAcR,KAAS,EAAE;AAAA,EAC3B,GAAG,CAACA,CAAK,CAAC,GAEViB,EAAU,MAAM;AACd,QAAKF,GACL;AAAA,UAAIG,EAAcd,CAAM,GAAG;AACzB,QAAAW,EAAW,WAAWjB,CAAS;AAC/B;AAAA,MACF;AACA,MAAIE,IACFe,EAAW,SAASjB,GAAW;AAAA,QAC7B,OAAOc;AAAA,QACP,YAAYZ;AAAA,QACZ,UAAU,MAAMC,KAAA,gBAAAA,EAAW;AAAA,MAAS,CACrC,IAEDc,EAAW,WAAWjB,CAAS;AAAA;AAAA,EAGnC,GAAG,CAACE,GAAOF,GAAWc,GAAeR,CAAM,CAAC,GAExCc,EAAcd,CAAM,EAAG,QAAO;AAElC,QAAMe,IAAgB,MAAM;AAC1B,IAAAlB,KAAA,QAAAA,EAAWM,KAAc;AAAA,EAC3B;AAOA,SACE,gBAAAa;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOT;AAAA,MACP,QAAQT,KAAU,CAAC,CAACH;AAAA,MACpB,WAAWmB;AAAA,MACX,SAVgB,MAAM;AACxB,QAAAX,EAAc,EAAE,GAChBP,KAAA,QAAAA,EAAW;AAAA,MACb;AAAA,MASI,UAAA,gBAAAmB;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,aAAapB,KAAe,MAAMU,CAAa;AAAA,UAC/C,YAAU;AAAA,UACV,OAAOL;AAAA,UACP,UAAU,CAACgB,MAAMf,EAAce,EAAE,OAAO,KAAK;AAAA,UAC7C,cAAcJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB;AAAA,EAAA;AAGN;"}
|