@hkyhy/marsun-components-core 0.1.28 → 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.
Files changed (44) hide show
  1. package/dist/components/Auth/UserProfileCard/UserProfileCard.d.ts +7 -1
  2. package/dist/components/Auth/UserProfileCard/UserProfileCard.js +59 -28
  3. package/dist/components/Auth/UserProfileCard/UserProfileCard.js.map +1 -1
  4. package/dist/components/Auth/UserProfileCard/style.module.scss.js +16 -10
  5. package/dist/components/Auth/UserProfileCard/style.module.scss.js.map +1 -1
  6. package/dist/components/Filter/CommonFilter/index.js +88 -53
  7. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  8. package/dist/components/Filter/FilterDatePicker/index.js +102 -84
  9. package/dist/components/Filter/FilterDatePicker/index.js.map +1 -1
  10. package/dist/components/Filter/FilterDateRange/index.js +84 -66
  11. package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
  12. package/dist/components/Filter/FilterInput/index.js +51 -33
  13. package/dist/components/Filter/FilterInput/index.js.map +1 -1
  14. package/dist/components/Filter/FilterNumberRange/index.d.ts +8 -0
  15. package/dist/components/Filter/FilterNumberRange/index.js +133 -59
  16. package/dist/components/Filter/FilterNumberRange/index.js.map +1 -1
  17. package/dist/components/Filter/FilterNumberRange/style.module.scss.js +7 -5
  18. package/dist/components/Filter/FilterNumberRange/style.module.scss.js.map +1 -1
  19. package/dist/components/Filter/FilterPopover/index.d.ts +2 -2
  20. package/dist/components/Filter/FilterPopover/index.js +7 -7
  21. package/dist/components/Filter/FilterPopover/index.js.map +1 -1
  22. package/dist/components/Filter/FilterSelect/index.d.ts +14 -2
  23. package/dist/components/Filter/FilterSelect/index.js +216 -177
  24. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  25. package/dist/components/Filter/FilterSelect/style.module.scss.js +15 -14
  26. package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
  27. package/dist/components/Filter/FilterTreeSelect/index.d.ts +12 -1
  28. package/dist/components/Filter/FilterTreeSelect/index.js +233 -190
  29. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  30. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +14 -13
  31. package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -1
  32. package/dist/components/Filter/FilterTrigger/index.js +34 -14
  33. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  34. package/dist/components/Filter/index.d.ts +4 -3
  35. package/dist/components/Filter/types.d.ts +27 -1
  36. package/dist/components/Filter/types.js +24 -7
  37. package/dist/components/Filter/types.js.map +1 -1
  38. package/dist/components/Filter/useFilterState.d.ts +37 -5
  39. package/dist/components/Filter/useFilterState.js +74 -23
  40. package/dist/components/Filter/useFilterState.js.map +1 -1
  41. package/dist/index.js +170 -164
  42. package/dist/marsun-components-core.css +1 -1
  43. package/dist/styles/global.css +1 -1
  44. package/package.json +1 -1
@@ -1,117 +1,135 @@
1
- import { jsxs as E, jsx as h } from "react/jsx-runtime";
2
- import { DatePicker as H } from "antd";
3
- import I from "dayjs";
4
- import { useState as O, useMemo as g, useEffect as j } from "react";
5
- import { parsePickerValue as u, formatPickerValue as K } from "../../../utils/pickerDate.js";
6
- import L from "../FilterPopover/index.js";
7
- import { resolveHidden as M } from "../types.js";
8
- import { useFilterRegister as T } from "../useFilterState.js";
9
- import c from "./style.module.scss.js";
10
- import P from "classnames";
11
- function Y(r) {
12
- const e = I();
13
- return r === "year" ? [{ key: "thisYear", label: "今年", getValue: () => e.startOf("year") }] : r === "month" ? [{ key: "thisMonth", label: "本月", getValue: () => e.startOf("month") }] : [{ key: "today", label: "今天", getValue: () => e.startOf("day") }];
1
+ import { jsxs as T, jsx as O } from "react/jsx-runtime";
2
+ import { DatePicker as Y } from "antd";
3
+ import w from "dayjs";
4
+ import { useState as P, useRef as z, useMemo as M, useEffect as R } from "react";
5
+ import { parsePickerValue as m, formatPickerValue as G } from "../../../utils/pickerDate.js";
6
+ import J from "../FilterPopover/index.js";
7
+ import { resolveHidden as S } from "../types.js";
8
+ import { useFilterFieldBridge as K, useFilterRegister as U } from "../useFilterState.js";
9
+ import u from "./style.module.scss.js";
10
+ import q from "classnames";
11
+ function W(t) {
12
+ const l = w();
13
+ return t === "year" ? [{ key: "thisYear", label: "今年", getValue: () => l.startOf("year") }] : t === "month" ? [{ key: "thisMonth", label: "本月", getValue: () => l.startOf("month") }] : [{ key: "today", label: "今天", getValue: () => l.startOf("day") }];
14
14
  }
15
- function w(r, e) {
16
- return !r && !e ? !0 : !r || !e ? !1 : r === e;
15
+ function X(t, l) {
16
+ return !t && !l ? !0 : !t || !l ? !1 : t === l;
17
17
  }
18
- function z(r, e, t) {
19
- if (!r) return null;
20
- const i = u(r, e);
18
+ function Z(t, l, e) {
19
+ if (!t) return null;
20
+ const i = m(t, l);
21
21
  if (!i.isValid()) return null;
22
- for (const n of t) {
23
- const m = n.getValue(), d = e === "year" ? "year" : e === "month" ? "month" : "day";
24
- if (m.isSame(i, d)) return n.key;
22
+ for (const s of e) {
23
+ const d = s.getValue(), k = l === "year" ? "year" : l === "month" ? "month" : "day";
24
+ if (d.isSame(i, k)) return s.key;
25
25
  }
26
26
  return null;
27
27
  }
28
- const it = ({
29
- filterKey: r,
30
- label: e,
31
- value: t,
28
+ const ae = ({
29
+ filterKey: t,
30
+ label: l,
31
+ value: e,
32
32
  onChange: i,
33
- picker: n = "date",
34
- defaultValue: m,
35
- showDefaultAsSelected: d = !1,
36
- showQuickOptions: q = !1,
37
- quickOptions: N,
38
- placeholder: R,
39
- disabledDate: S,
40
- active: A,
41
- hidden: k
33
+ picker: s = "date",
34
+ defaultValue: d,
35
+ showDefaultAsSelected: k = !1,
36
+ showQuickOptions: N = !1,
37
+ quickOptions: x,
38
+ placeholder: A,
39
+ disabledDate: B,
40
+ active: L,
41
+ hidden: p,
42
+ dependsOn: g,
43
+ clearOnDepsChange: E = !0
42
44
  }) => {
43
- const [b, p] = O(!1), [y, l] = O(t ? u(t, n) : null), [x, o] = O(null), f = T(), a = g(
44
- () => N ?? (q ? Y(n) : []),
45
- [N, q, n]
46
- ), F = (s) => {
47
- o(z(s, n, a));
48
- }, Q = () => {
49
- t ? (l(u(t, n)), F(t)) : (l(null), o(null));
45
+ const [H, y] = P(!1), [V, n] = P(e ? m(e, s) : null), [Q, o] = P(null), c = z(i);
46
+ c.current = i;
47
+ const { resolvedLabel: D } = K({
48
+ filterKey: t,
49
+ value: e,
50
+ label: l,
51
+ dependsOn: g,
52
+ clearOnDepsChange: E,
53
+ onDepsClear: () => {
54
+ var r;
55
+ return (r = c.current) == null ? void 0 : r.call(c, null);
56
+ }
57
+ }), a = U(), f = M(
58
+ () => x ?? (N ? W(s) : []),
59
+ [x, N, s]
60
+ ), h = (r) => {
61
+ o(Z(r, s, f));
62
+ }, j = () => {
63
+ e ? (n(m(e, s)), h(e)) : (n(null), o(null));
50
64
  };
51
- j(() => {
52
- t ? (l(u(t, n)), F(t)) : (l(null), o(null));
53
- }, [t, n, a]);
54
- const V = d ? !!t : !!t && !w(t, m), D = g(() => !V || !t ? "" : t, [V, t]);
55
- return j(() => {
56
- if (f) {
57
- if (M(k)) {
58
- f.unregister(r);
65
+ R(() => {
66
+ e ? (n(m(e, s)), h(e)) : (n(null), o(null));
67
+ }, [e, s, f]);
68
+ const b = k ? !!e : !!e && !X(e, d), F = M(() => !b || !e ? "" : e, [b, e]);
69
+ return R(() => {
70
+ if (a) {
71
+ if (S(p)) {
72
+ a.unregister(t);
59
73
  return;
60
74
  }
61
- D ? f.register(r, { label: e, valueLabel: D, onRemove: () => i == null ? void 0 : i(null) }) : f.unregister(r);
75
+ F ? a.register(t, {
76
+ label: D,
77
+ valueLabel: F,
78
+ onRemove: () => i == null ? void 0 : i(null)
79
+ }) : a.unregister(t);
62
80
  }
63
- }, [D, r, e, k]), M(k) ? null : /* @__PURE__ */ E(
64
- L,
81
+ }, [F, t, D, p]), S(p) ? null : /* @__PURE__ */ T(
82
+ J,
65
83
  {
66
- label: e,
67
- active: A || V,
68
- open: b,
69
- onOpenChange: (s) => {
70
- Q(), p(s);
84
+ label: D,
85
+ active: L || b,
86
+ open: H,
87
+ onOpenChange: (r) => {
88
+ j(), y(r);
71
89
  },
72
90
  onConfirm: () => {
73
- y ? i == null || i(K(y, n)) : i == null || i(null), p(!1);
91
+ V ? i == null || i(G(V, s)) : i == null || i(null), y(!1);
74
92
  },
75
93
  onReset: () => {
76
- Q(), p(!1);
94
+ j(), y(!1);
77
95
  },
78
96
  children: [
79
- a.length > 0 ? /* @__PURE__ */ h(
97
+ f.length > 0 ? /* @__PURE__ */ O(
80
98
  "div",
81
99
  {
82
- className: P(
100
+ className: q(
83
101
  "filter-date-picker-quick-options",
84
- c["filter-date-picker-quick-options"]
102
+ u["filter-date-picker-quick-options"]
85
103
  ),
86
- children: a.map((s) => /* @__PURE__ */ h(
104
+ children: f.map((r) => /* @__PURE__ */ O(
87
105
  "span",
88
106
  {
89
- className: P(
107
+ className: q(
90
108
  "filter-date-picker-quick-option",
91
- c["filter-date-picker-quick-option"],
92
- x === s.key && "filter-date-picker-quick-option-active",
93
- x === s.key && c["filter-date-picker-quick-option-active"]
109
+ u["filter-date-picker-quick-option"],
110
+ Q === r.key && "filter-date-picker-quick-option-active",
111
+ Q === r.key && u["filter-date-picker-quick-option-active"]
94
112
  ),
95
113
  onClick: () => {
96
- const B = s.getValue();
97
- l(B), o(s.key);
114
+ const I = r.getValue();
115
+ n(I), o(r.key);
98
116
  },
99
- children: s.label
117
+ children: r.label
100
118
  },
101
- s.key
119
+ r.key
102
120
  ))
103
121
  }
104
122
  ) : null,
105
- /* @__PURE__ */ h(
106
- H,
123
+ /* @__PURE__ */ O(
124
+ Y,
107
125
  {
108
- className: P("filter-date-picker", c["filter-date-picker"]),
109
- picker: n,
110
- value: y,
111
- placeholder: R,
112
- disabledDate: S,
113
- onChange: (s) => {
114
- l(s), o(null);
126
+ className: q("filter-date-picker", u["filter-date-picker"]),
127
+ picker: s,
128
+ value: V,
129
+ placeholder: A,
130
+ disabledDate: B,
131
+ onChange: (r) => {
132
+ n(r), o(null);
115
133
  }
116
134
  }
117
135
  )
@@ -120,9 +138,9 @@ const it = ({
120
138
  );
121
139
  };
122
140
  export {
123
- it as default,
124
- z as findMatchingQuickKey,
125
- Y as getBuiltInQuickOptions,
126
- w as isSamePickerValue
141
+ ae as default,
142
+ Z as findMatchingQuickKey,
143
+ W as getBuiltInQuickOptions,
144
+ X as isSamePickerValue
127
145
  };
128
146
  //# sourceMappingURL=index.js.map
@@ -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 _, jsx as a } from "react/jsx-runtime";
2
- import { DatePicker as B } from "antd";
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 g, useMemo as I, useEffect as j } from "react";
5
- import { parsePickerValue as f, formatPickerValue as x } from "../../../utils/pickerDate.js";
6
- import L from "../FilterPopover/index.js";
7
- import { resolveHidden as A } from "../types.js";
8
- import { useFilterRegister as U } from "../useFilterState.js";
9
- import V from "./style.module.scss.js";
10
- import P from "classnames";
11
- const { RangePicker: W } = B, $ = [
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 E() {
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 H(e, r) {
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 K(e) {
45
+ function Z(e) {
46
46
  return e === "month" ? "month" : e === "year" ? "year" : "day";
47
47
  }
48
- function Y(e, r, t) {
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), k = K(t);
51
- for (const y of r) {
52
- const c = y.getValue();
53
- if (c && c[0].isSame(i, k) && c[1].isSame(n, k))
54
- return y.key;
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 it = ({
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: k,
65
- showDefaultAsSelected: y = !1,
64
+ defaultValue: u,
65
+ showDefaultAsSelected: k = !1,
66
66
  showQuickOptions: c = !0,
67
- quickOptions: R,
67
+ quickOptions: S,
68
68
  disabledDate: M,
69
69
  active: Q,
70
- hidden: p
70
+ hidden: V,
71
+ dependsOn: T,
72
+ clearOnDepsChange: _ = !0
71
73
  }) => {
72
- const [T, D] = g(!1), [o, m] = g(
74
+ const [U, a] = q(!1), [o, m] = q(
73
75
  t ? [f(t[0], n), f(t[1], n)] : null
74
- ), [q, l] = g(null), u = U(), O = I(
75
- () => R ?? (c ? n === "month" ? E() : $ : []),
76
- [R, c, n]
77
- ), w = (s) => {
78
- l(Y(s, O, n));
79
- }, S = () => {
80
- t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), w(t)) : (m(null), l(null));
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
- j(() => {
83
- t != null && t[0] && (t != null && t[1]) ? (m([f(t[0], n), f(t[1], n)]), w(t)) : (m(null), l(null));
84
- }, [t, O, n]);
85
- const h = y ? !!(t != null && t[0]) : !!(t != null && t[0]) && !H(t, k), N = I(() => !h || !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [h, t]);
86
- return j(() => {
87
- if (u) {
88
- if (A(p)) {
89
- u.unregister(e);
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
- N ? u.register(e, { label: r, valueLabel: N, onRemove: () => i == null ? void 0 : i(null) }) : u.unregister(e);
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
- }, [N, e, r, p]), A(p) ? null : /* @__PURE__ */ _(
95
- L,
112
+ }, [P, e, N, V]), L(V) ? null : /* @__PURE__ */ W(
113
+ H,
96
114
  {
97
- label: r,
98
- active: Q || h,
99
- open: T,
115
+ label: N,
116
+ active: Q || F,
117
+ open: U,
100
118
  onOpenChange: (s) => {
101
- S(), D(s);
119
+ I(), a(s);
102
120
  },
103
121
  onConfirm: () => {
104
- o != null && o[0] && (o != null && o[1]) ? i == null || i([x(o[0], n), x(o[1], n)]) : i == null || i(null), D(!1);
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
- S(), D(!1);
125
+ I(), a(!1);
108
126
  },
109
127
  children: [
110
- O.length > 0 && /* @__PURE__ */ a(
128
+ D.length > 0 && /* @__PURE__ */ R(
111
129
  "div",
112
130
  {
113
- className: P(
131
+ className: w(
114
132
  "filter-date-range-quick-options",
115
- V["filter-date-range-quick-options"]
133
+ O["filter-date-range-quick-options"]
116
134
  ),
117
- children: O.map((s) => /* @__PURE__ */ a(
135
+ children: D.map((s) => /* @__PURE__ */ R(
118
136
  "span",
119
137
  {
120
- className: P(
138
+ className: w(
121
139
  "filter-date-range-quick-option",
122
- V["filter-date-range-quick-option"],
123
- q === s.key && "filter-date-range-quick-option-active",
124
- q === s.key && V["filter-date-range-quick-option-active"]
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 F = s.getValue();
128
- F && (m(F), l(s.key));
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__ */ a(
137
- W,
154
+ /* @__PURE__ */ R(
155
+ G,
138
156
  {
139
- className: P("filter-date-range-picker", V["filter-date-range-picker"]),
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
- it as default,
154
- Y as findMatchingQuickKey,
155
- E as getBuiltInMonthOptions,
156
- H as isSameRange
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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"}