@hkyhy/marsun-components-core 0.1.2
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/README.md +99 -0
- package/dist/components/AgentHub/AgentHubAccessGuard.js +12 -0
- package/dist/components/AgentHub/AgentHubAccessGuard.js.map +1 -0
- package/dist/components/AgentHub/AgentHubIndexRedirect.js +11 -0
- package/dist/components/AgentHub/AgentHubIndexRedirect.js.map +1 -0
- package/dist/components/AgentHub/ChatSessionAccessGuard.js +11 -0
- package/dist/components/AgentHub/ChatSessionAccessGuard.js.map +1 -0
- package/dist/components/Auth/PermissionGuard.js +18 -0
- package/dist/components/Auth/PermissionGuard.js.map +1 -0
- package/dist/components/Auth/ProtectedRoute.js +21 -0
- package/dist/components/Auth/ProtectedRoute.js.map +1 -0
- package/dist/components/Auth/hasPermission.js +7 -0
- package/dist/components/Auth/hasPermission.js.map +1 -0
- package/dist/components/Descriptions/CommonDescriptions.js +14 -0
- package/dist/components/Descriptions/CommonDescriptions.js.map +1 -0
- package/dist/components/File/FileItem/index.js +82 -0
- package/dist/components/File/FileItem/index.js.map +1 -0
- package/dist/components/File/FileItem/style.module.scss.js +18 -0
- package/dist/components/File/FileItem/style.module.scss.js.map +1 -0
- package/dist/components/File/FileLink/index.js +27 -0
- package/dist/components/File/FileLink/index.js.map +1 -0
- package/dist/components/File/FileLink/style.module.scss.js +10 -0
- package/dist/components/File/FileLink/style.module.scss.js.map +1 -0
- package/dist/components/File/FilePreview/index.js +49 -0
- package/dist/components/File/FilePreview/index.js.map +1 -0
- package/dist/components/File/FilePreview/style.module.scss.js +5 -0
- package/dist/components/File/FilePreview/style.module.scss.js.map +1 -0
- package/dist/components/File/FilePreviewModal/index.js +12 -0
- package/dist/components/File/FilePreviewModal/index.js.map +1 -0
- package/dist/components/File/fileDisplay.js +67 -0
- package/dist/components/File/fileDisplay.js.map +1 -0
- package/dist/components/Filter/CommonFilter/index.js +81 -0
- package/dist/components/Filter/CommonFilter/index.js.map +1 -0
- package/dist/components/Filter/CommonFilter/style.module.scss.js +20 -0
- package/dist/components/Filter/CommonFilter/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterDateRange/index.js +97 -0
- package/dist/components/Filter/FilterDateRange/index.js.map +1 -0
- package/dist/components/Filter/FilterDateRange/style.module.scss.js +10 -0
- package/dist/components/Filter/FilterDateRange/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterInput/index.js +56 -0
- package/dist/components/Filter/FilterInput/index.js.map +1 -0
- package/dist/components/Filter/FilterNumberRange/index.js +81 -0
- package/dist/components/Filter/FilterNumberRange/index.js.map +1 -0
- package/dist/components/Filter/FilterNumberRange/style.module.scss.js +9 -0
- package/dist/components/Filter/FilterNumberRange/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPanel/index.js +21 -0
- package/dist/components/Filter/FilterPanel/index.js.map +1 -0
- package/dist/components/Filter/FilterPanel/style.module.scss.js +8 -0
- package/dist/components/Filter/FilterPanel/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterPopover/index.js +52 -0
- package/dist/components/Filter/FilterPopover/index.js.map +1 -0
- package/dist/components/Filter/FilterSelect/index.js +160 -0
- package/dist/components/Filter/FilterSelect/index.js.map +1 -0
- package/dist/components/Filter/FilterSelect/style.module.scss.js +16 -0
- package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterTreeSelect/index.js +249 -0
- package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -0
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js +19 -0
- package/dist/components/Filter/FilterTreeSelect/style.module.scss.js.map +1 -0
- package/dist/components/Filter/FilterTrigger/index.js +31 -0
- package/dist/components/Filter/FilterTrigger/index.js.map +1 -0
- package/dist/components/Filter/FilterTrigger/style.module.scss.js +10 -0
- package/dist/components/Filter/FilterTrigger/style.module.scss.js.map +1 -0
- package/dist/components/Filter/types.js +12 -0
- package/dist/components/Filter/types.js.map +1 -0
- package/dist/components/Filter/useFilterState.js +35 -0
- package/dist/components/Filter/useFilterState.js.map +1 -0
- package/dist/components/Form/FetchSelect.js +37 -0
- package/dist/components/Form/FetchSelect.js.map +1 -0
- package/dist/components/Form/FetchTreeSelect.js +28 -0
- package/dist/components/Form/FetchTreeSelect.js.map +1 -0
- package/dist/components/Form/PersonOptionRow/index.js +37 -0
- package/dist/components/Form/PersonOptionRow/index.js.map +1 -0
- package/dist/components/Form/PersonOptionRow/style.module.scss.js +11 -0
- package/dist/components/Form/PersonOptionRow/style.module.scss.js.map +1 -0
- package/dist/components/Form/StepForm.js +34 -0
- package/dist/components/Form/StepForm.js.map +1 -0
- package/dist/components/Icons/index.js +245 -0
- package/dist/components/Icons/index.js.map +1 -0
- package/dist/components/Layout/PageHeaderLayout/index.js +41 -0
- package/dist/components/Layout/PageHeaderLayout/index.js.map +1 -0
- package/dist/components/Layout/PageHeaderLayout/style.module.scss.js +10 -0
- package/dist/components/Layout/PageHeaderLayout/style.module.scss.js.map +1 -0
- package/dist/components/Modal/StepModal/index.js +64 -0
- package/dist/components/Modal/StepModal/index.js.map +1 -0
- package/dist/components/Modal/StepModal/style.module.scss.js +9 -0
- package/dist/components/Modal/StepModal/style.module.scss.js.map +1 -0
- package/dist/components/Stat/StatCard/index.js +34 -0
- package/dist/components/Stat/StatCard/index.js.map +1 -0
- package/dist/components/Stat/StatCard/style.module.scss.js +7 -0
- package/dist/components/Stat/StatCard/style.module.scss.js.map +1 -0
- package/dist/components/Stat/StatCardList.js +20 -0
- package/dist/components/Stat/StatCardList.js.map +1 -0
- package/dist/components/Stat/StatPendingBreakdown/index.js +38 -0
- package/dist/components/Stat/StatPendingBreakdown/index.js.map +1 -0
- package/dist/components/Stat/StatPendingBreakdown/style.module.scss.js +9 -0
- package/dist/components/Stat/StatPendingBreakdown/style.module.scss.js.map +1 -0
- package/dist/components/Tag/FileTags.js +8 -0
- package/dist/components/Tag/FileTags.js.map +1 -0
- package/dist/components/Tag/SemanticTag.js +92 -0
- package/dist/components/Tag/SemanticTag.js.map +1 -0
- package/dist/components/Tag/Tags/index.js +32 -0
- package/dist/components/Tag/Tags/index.js.map +1 -0
- package/dist/components/Tag/Tags/style.module.scss.js +9 -0
- package/dist/components/Tag/Tags/style.module.scss.js.map +1 -0
- package/dist/components/TooltipInfo/TooltipInfo.js +31 -0
- package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -0
- package/dist/components/Tour/AppTour/index.js +40 -0
- package/dist/components/Tour/AppTour/index.js.map +1 -0
- package/dist/components/Tour/AppTour/style.module.scss.js +7 -0
- package/dist/components/Tour/AppTour/style.module.scss.js.map +1 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/index.js +97 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/index.js.map +1 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/style.module.scss.js +12 -0
- package/dist/components/VirtualScrollbar/VirtualScrollbar/style.module.scss.js.map +1 -0
- package/dist/components/VirtualScrollbar/useVirtualScrollbar.js +97 -0
- package/dist/components/VirtualScrollbar/useVirtualScrollbar.js.map +1 -0
- package/dist/hooks/useFetchData.js +69 -0
- package/dist/hooks/useFetchData.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +182 -0
- package/dist/index.js.map +1 -0
- package/dist/marsun-components-core.css +1 -0
- package/dist/provider/MarsunCoreProvider.js +51 -0
- package/dist/provider/MarsunCoreProvider.js.map +1 -0
- package/dist/provider/context.js +27 -0
- package/dist/provider/context.js.map +1 -0
- package/dist/theme/constants.js +15 -0
- package/dist/theme/constants.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/theme/index.js +9 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/theme.js +286 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/utils/format.js +9 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/resolveMaybeFn.js +11 -0
- package/dist/utils/resolveMaybeFn.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsxs as o, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { X as T } from "../../Icons/index.js";
|
|
3
|
+
import { Space as k, Tooltip as E, Button as x } from "antd";
|
|
4
|
+
import e from "classnames";
|
|
5
|
+
import F, { useMemo as L } from "react";
|
|
6
|
+
import t from "./style.module.scss.js";
|
|
7
|
+
import { useFilterState as S, FilterProvider as _ } from "../useFilterState.js";
|
|
8
|
+
import D from "../../Tag/SemanticTag.js";
|
|
9
|
+
const j = 20;
|
|
10
|
+
function z(c, r) {
|
|
11
|
+
return c.length <= r ? { display: c, truncated: !1 } : { display: `${c.slice(0, r)}...`, truncated: !0 };
|
|
12
|
+
}
|
|
13
|
+
const I = ({
|
|
14
|
+
children: c,
|
|
15
|
+
list: r,
|
|
16
|
+
extra: n,
|
|
17
|
+
onClearAll: i,
|
|
18
|
+
label: u = "筛选",
|
|
19
|
+
selectedTagMaxLength: h = j
|
|
20
|
+
}) => {
|
|
21
|
+
const { selectedItems: a, register: s, unregister: d, clearAll: f } = S(), N = L(() => ({ register: s, unregister: d }), [s, d]), v = F.useCallback(() => {
|
|
22
|
+
f(), i == null || i();
|
|
23
|
+
}, [f, i]);
|
|
24
|
+
return /* @__PURE__ */ o("div", { className: e("common-filter-root", t["common-filter-root"]), children: [
|
|
25
|
+
/* @__PURE__ */ o("div", { className: e("common-filter-container", t["common-filter-container"]), children: [
|
|
26
|
+
/* @__PURE__ */ l("span", { className: e("common-filter-label", t["common-filter-label"]), children: u }),
|
|
27
|
+
/* @__PURE__ */ l(_, { ctx: N, children: /* @__PURE__ */ o("div", { className: e("common-filter-content", t["common-filter-content"]), children: [
|
|
28
|
+
/* @__PURE__ */ o("div", { className: e("common-filter-items", t["common-filter-items"]), children: [
|
|
29
|
+
r,
|
|
30
|
+
c
|
|
31
|
+
] }),
|
|
32
|
+
n && /* @__PURE__ */ l("div", { className: e("common-filter-extra", t["common-filter-extra"]), children: n })
|
|
33
|
+
] }) })
|
|
34
|
+
] }),
|
|
35
|
+
a.length > 0 && /* @__PURE__ */ o("div", { className: e("common-filter-selected", t["common-filter-selected"]), children: [
|
|
36
|
+
/* @__PURE__ */ o("div", { className: e("common-filter-selected-main", t["common-filter-selected-main"]), children: [
|
|
37
|
+
/* @__PURE__ */ l("span", { className: e("common-filter-selected-title", t["common-filter-selected-title"]), children: "您已选择" }),
|
|
38
|
+
/* @__PURE__ */ l(k, { size: [8, 8], wrap: !0, className: e("common-filter-selected-tags", t["common-filter-selected-tags"]), children: a.map((m) => {
|
|
39
|
+
const { display: p, truncated: g } = z(m.valueLabel, h), b = g ? /* @__PURE__ */ l(E, { title: m.valueLabel, children: /* @__PURE__ */ l("span", { children: p }) }) : /* @__PURE__ */ l("span", { children: p });
|
|
40
|
+
return /* @__PURE__ */ l(D, { color: "primary", children: /* @__PURE__ */ o("span", { className: e("common-filter-tag", t["common-filter-tag"]), children: [
|
|
41
|
+
/* @__PURE__ */ o(
|
|
42
|
+
"span",
|
|
43
|
+
{
|
|
44
|
+
className: e("common-filter-tag-label", t["common-filter-tag-label"]),
|
|
45
|
+
style: { color: "var(--font-color)" },
|
|
46
|
+
children: [
|
|
47
|
+
m.label,
|
|
48
|
+
":"
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
),
|
|
52
|
+
b,
|
|
53
|
+
/* @__PURE__ */ l(
|
|
54
|
+
T,
|
|
55
|
+
{
|
|
56
|
+
className: e("common-filter-tag-close", t["common-filter-tag-close"]),
|
|
57
|
+
onClick: (y) => {
|
|
58
|
+
y.preventDefault(), m.onRemove();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
] }) }, m.key);
|
|
63
|
+
}) })
|
|
64
|
+
] }),
|
|
65
|
+
/* @__PURE__ */ l(
|
|
66
|
+
x,
|
|
67
|
+
{
|
|
68
|
+
type: "link",
|
|
69
|
+
size: "small",
|
|
70
|
+
onClick: v,
|
|
71
|
+
className: e("common-filter-clear-btn", t["common-filter-clear-btn"]),
|
|
72
|
+
children: "清空全部"
|
|
73
|
+
}
|
|
74
|
+
)
|
|
75
|
+
] })
|
|
76
|
+
] });
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
I as default
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/CommonFilter/index.tsx"],"sourcesContent":["import { SemanticTag } from '@/components/Tag';\nimport { X } from '@/components/Icons';\nimport { Button, Space, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport React, { useMemo } from 'react';\nimport styles from './style.module.scss';\nimport { FilterProvider, useFilterState } from '../useFilterState';\n\nconst DEFAULT_SELECTED_TAG_MAX_LENGTH = 20;\n\nfunction truncateText(text: string, maxLength: number) {\n if (text.length <= maxLength) {\n return { display: text, truncated: false };\n }\n return { display: `${text.slice(0, maxLength)}...`, truncated: true };\n}\n\ninterface CommonFilterProps {\n children?: React.ReactNode;\n /** 筛选项 JSX 数组,如 [<FilterInput .../>, <FilterSelect .../>] */\n list?: React.ReactNode[];\n /** 右侧额外内容(与筛选项两端对齐) */\n extra?: React.ReactNode;\n /** 清空全部回调 */\n onClearAll?: () => void;\n /** 左侧标签文字 */\n label?: string;\n /** 已选标签 value 最大字符数,超出显示 ... 并在 hover 时展示完整内容 */\n selectedTagMaxLength?: number;\n}\n\n/**\n * 通用筛选栏容器\n *\n * 内部通过 useFilterState 管理各子组件的注册状态,\n * 子组件(FilterInput / FilterSelect / FilterTreeSelect)自行通过 useFilterRegister 注册选中项。\n * 外部不再需要手动维护 selectedItems 数组。\n *\n * 用法一(children 模式):\n * ```tsx\n * <CommonFilter label=\"筛选\">\n * <FilterInput filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />\n * <FilterSelect filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />\n * </CommonFilter>\n * ```\n *\n * 用法二(list 模式):\n * ```tsx\n * const filterList = [\n * <FilterInput key=\"keyword\" filterKey=\"keyword\" label=\"关键词\" value={keyword} onChange={setKeyword} />,\n * <FilterSelect key=\"status\" filterKey=\"status\" label=\"状态\" options={options} value={status} onChange={setStatus} />,\n * ];\n * <CommonFilter label=\"筛选\" list={filterList} extra={<Button>导出</Button>} />\n * ```\n */\nconst CommonFilter: React.FC<CommonFilterProps> = ({\n children,\n list,\n extra,\n onClearAll,\n label = '筛选',\n selectedTagMaxLength = DEFAULT_SELECTED_TAG_MAX_LENGTH,\n}) => {\n const { selectedItems, register, unregister, clearAll } = useFilterState();\n\n const filterCtx = useMemo(() => ({ register, unregister }), [register, unregister]);\n\n // 合并外部 onClearAll 和内部的 clearAll\n const handleClearAll = React.useCallback(() => {\n clearAll();\n onClearAll?.();\n }, [clearAll, onClearAll]);\n\n return (\n <div className={classNames('common-filter-root', styles['common-filter-root'])}>\n {/* 筛选行 */}\n <div className={classNames('common-filter-container', styles['common-filter-container'])}>\n <span className={classNames('common-filter-label', styles['common-filter-label'])}>{label}</span>\n <FilterProvider ctx={filterCtx}>\n <div className={classNames('common-filter-content', styles['common-filter-content'])}>\n <div className={classNames('common-filter-items', styles['common-filter-items'])}>\n {list}\n {children}\n </div>\n {extra && (\n <div className={classNames('common-filter-extra', styles['common-filter-extra'])}>{extra}</div>\n )}\n </div>\n </FilterProvider>\n </div>\n\n {/* 已选择行 */}\n {selectedItems.length > 0 && (\n <div className={classNames('common-filter-selected', styles['common-filter-selected'])}>\n <div className={classNames('common-filter-selected-main', styles['common-filter-selected-main'])}>\n <span className={classNames('common-filter-selected-title', styles['common-filter-selected-title'])}>\n 您已选择\n </span>\n <Space size={[8, 8]} wrap className={classNames('common-filter-selected-tags', styles['common-filter-selected-tags'])}>\n {selectedItems.map((s) => {\n const { display, truncated } = truncateText(s.valueLabel, selectedTagMaxLength);\n const valueNode = truncated ? (\n <Tooltip title={s.valueLabel}>\n <span>{display}</span>\n </Tooltip>\n ) : (\n <span>{display}</span>\n );\n\n return (\n <SemanticTag key={s.key} color=\"primary\">\n <span className={classNames('common-filter-tag', styles['common-filter-tag'])}>\n <span\n className={classNames('common-filter-tag-label', styles['common-filter-tag-label'])}\n style={{ color: 'var(--font-color)' }}\n >\n {s.label}:\n </span>\n {valueNode}\n <X\n className={classNames('common-filter-tag-close', styles['common-filter-tag-close'])}\n onClick={(e) => {\n e.preventDefault();\n s.onRemove();\n }}\n />\n </span>\n </SemanticTag>\n );\n })}\n </Space>\n </div>\n <Button\n type=\"link\"\n size=\"small\"\n onClick={handleClearAll}\n className={classNames('common-filter-clear-btn', styles['common-filter-clear-btn'])}\n >\n 清空全部\n </Button>\n </div>\n )}\n </div>\n );\n};\n\nexport default CommonFilter;\nexport type { CommonFilterProps };\n"],"names":["DEFAULT_SELECTED_TAG_MAX_LENGTH","truncateText","text","maxLength","CommonFilter","children","list","extra","onClearAll","label","selectedTagMaxLength","selectedItems","register","unregister","clearAll","useFilterState","filterCtx","useMemo","handleClearAll","React","jsxs","classNames","styles","jsx","FilterProvider","Space","s","display","truncated","valueNode","Tooltip","SemanticTag","X","e","Button"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const o = {
|
|
2
|
+
"common-filter-root": "_common-filter-root_kdoz3_1",
|
|
3
|
+
"common-filter-container": "_common-filter-container_kdoz3_6",
|
|
4
|
+
"common-filter-label": "_common-filter-label_kdoz3_12",
|
|
5
|
+
"common-filter-content": "_common-filter-content_kdoz3_19",
|
|
6
|
+
"common-filter-items": "_common-filter-items_kdoz3_26",
|
|
7
|
+
"common-filter-extra": "_common-filter-extra_kdoz3_34",
|
|
8
|
+
"common-filter-selected": "_common-filter-selected_kdoz3_39",
|
|
9
|
+
"common-filter-selected-main": "_common-filter-selected-main_kdoz3_46",
|
|
10
|
+
"common-filter-selected-title": "_common-filter-selected-title_kdoz3_52",
|
|
11
|
+
"common-filter-selected-tags": "_common-filter-selected-tags_kdoz3_58",
|
|
12
|
+
"common-filter-tag": "_common-filter-tag_kdoz3_62",
|
|
13
|
+
"common-filter-tag-label": "_common-filter-tag-label_kdoz3_68",
|
|
14
|
+
"common-filter-tag-close": "_common-filter-tag-close_kdoz3_72",
|
|
15
|
+
"common-filter-clear-btn": "_common-filter-clear-btn_kdoz3_82"
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
o as default
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsxs as F, jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { DatePicker as P } from "antd";
|
|
3
|
+
import s from "dayjs";
|
|
4
|
+
import { useState as D, useEffect as q, useMemo as j } from "react";
|
|
5
|
+
import x from "../FilterPopover/index.js";
|
|
6
|
+
import { resolveHidden as w } from "../types.js";
|
|
7
|
+
import { useFilterRegister as I } from "../useFilterState.js";
|
|
8
|
+
import l from "./style.module.scss.js";
|
|
9
|
+
import d from "classnames";
|
|
10
|
+
const { RangePicker: V } = P, L = [
|
|
11
|
+
{
|
|
12
|
+
key: "lastWeek",
|
|
13
|
+
label: "上周",
|
|
14
|
+
getValue: () => [
|
|
15
|
+
s().subtract(1, "week").startOf("week"),
|
|
16
|
+
s().subtract(1, "week").endOf("week")
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
key: "thisWeek",
|
|
21
|
+
label: "本周",
|
|
22
|
+
getValue: () => [s().startOf("week"), s().endOf("week")]
|
|
23
|
+
}
|
|
24
|
+
], E = ({
|
|
25
|
+
filterKey: f,
|
|
26
|
+
label: m,
|
|
27
|
+
value: t,
|
|
28
|
+
onChange: e,
|
|
29
|
+
showQuickOptions: N = !0,
|
|
30
|
+
quickOptions: O,
|
|
31
|
+
active: R,
|
|
32
|
+
hidden: k
|
|
33
|
+
}) => {
|
|
34
|
+
const [r, c] = D(
|
|
35
|
+
t ? [s(t[0]), s(t[1])] : null
|
|
36
|
+
), [a, n] = D(null), o = I();
|
|
37
|
+
q(() => {
|
|
38
|
+
c(t ? [s(t[0]), s(t[1])] : null);
|
|
39
|
+
}, [t]);
|
|
40
|
+
const p = j(() => !(t != null && t[0]) || !(t != null && t[1]) ? "" : `${t[0]} ~ ${t[1]}`, [t]);
|
|
41
|
+
if (q(() => {
|
|
42
|
+
if (o) {
|
|
43
|
+
if (w(k)) {
|
|
44
|
+
o.unregister(f);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
p ? o.register(f, { label: m, valueLabel: p, onRemove: () => e == null ? void 0 : e(null) }) : o.unregister(f);
|
|
48
|
+
}
|
|
49
|
+
}, [p, f, m, k]), w(k)) return null;
|
|
50
|
+
const M = () => {
|
|
51
|
+
r != null && r[0] && (r != null && r[1]) ? e == null || e([r[0].format("YYYY-MM-DD"), r[1].format("YYYY-MM-DD")]) : e == null || e(null);
|
|
52
|
+
}, b = () => {
|
|
53
|
+
c(null), n(null), e == null || e(null);
|
|
54
|
+
}, Y = O ?? (N ? L : []);
|
|
55
|
+
return /* @__PURE__ */ F(
|
|
56
|
+
x,
|
|
57
|
+
{
|
|
58
|
+
label: m,
|
|
59
|
+
active: R || !!(t != null && t[0]),
|
|
60
|
+
onConfirm: M,
|
|
61
|
+
onReset: b,
|
|
62
|
+
children: [
|
|
63
|
+
Y.length > 0 && /* @__PURE__ */ u("div", { className: d("filter-date-range-quick-options", l["filter-date-range-quick-options"]), children: Y.map((i) => /* @__PURE__ */ u(
|
|
64
|
+
"span",
|
|
65
|
+
{
|
|
66
|
+
className: d(
|
|
67
|
+
"filter-date-range-quick-option",
|
|
68
|
+
l["filter-date-range-quick-option"],
|
|
69
|
+
a === i.key && "filter-date-range-quick-option-active",
|
|
70
|
+
a === i.key && l["filter-date-range-quick-option-active"]
|
|
71
|
+
),
|
|
72
|
+
onClick: () => {
|
|
73
|
+
const y = i.getValue();
|
|
74
|
+
y && (c(y), n(i.key));
|
|
75
|
+
},
|
|
76
|
+
children: i.label
|
|
77
|
+
},
|
|
78
|
+
i.key
|
|
79
|
+
)) }),
|
|
80
|
+
/* @__PURE__ */ u(
|
|
81
|
+
V,
|
|
82
|
+
{
|
|
83
|
+
className: d("filter-date-range-picker", l["filter-date-range-picker"]),
|
|
84
|
+
value: r,
|
|
85
|
+
onChange: (i) => {
|
|
86
|
+
c(i), n(null);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
);
|
|
93
|
+
};
|
|
94
|
+
export {
|
|
95
|
+
E as default
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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 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_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\ninterface FilterDateRangeProps extends BaseFilterProps {\n value?: [string, string] | null;\n onChange?: (value: [string, string] | null) => void;\n showQuickOptions?: boolean;\n quickOptions?: QuickOption[];\n}\n\nconst FilterDateRange: React.FC<FilterDateRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n showQuickOptions = true,\n quickOptions,\n active,\n hidden,\n}) => {\n const [dates, setDates] = useState<[Dayjs | null, Dayjs | null] | null>(\n value ? [dayjs(value[0]), dayjs(value[1])] : null,\n );\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 dates\n useEffect(() => {\n if (value) {\n setDates([dayjs(value[0]), dayjs(value[1])]);\n } else {\n setDates(null);\n }\n }, [value]);\n\n const valueLabel = useMemo(() => {\n if (!value?.[0] || !value?.[1]) return '';\n return `${value[0]} ~ ${value[1]}`;\n }, [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 // hidden 处理 - 必须在所有 hooks 之后\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (dates?.[0] && dates?.[1]) {\n onChange?.([dates[0].format('YYYY-MM-DD'), dates[1].format('YYYY-MM-DD')]);\n } else {\n onChange?.(null);\n }\n };\n\n const handleReset = () => {\n setDates(null);\n setActiveQuickKey(null);\n onChange?.(null);\n };\n\n const opts = quickOptions ?? (showQuickOptions ? BUILT_IN_OPTIONS : []);\n\n return (\n <FilterPopover\n label={label}\n active={active || !!value?.[0]}\n onConfirm={handleConfirm}\n onReset={handleReset}\n >\n {/* 快捷选项 */}\n {opts.length > 0 && (\n <div className={classNames('filter-date-range-quick-options', styles['filter-date-range-quick-options'])}>\n {opts.map((opt) => (\n <span\n key={opt.key}\n className={classNames('filter-date-range-quick-option', 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 value={dates}\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 };\n"],"names":["RangePicker","DatePicker","BUILT_IN_OPTIONS","dayjs","FilterDateRange","filterKey","label","value","onChange","showQuickOptions","quickOptions","active","hidden","dates","setDates","useState","activeQuickKey","setActiveQuickKey","registerFn","useFilterRegister","useEffect","valueLabel","useMemo","resolveHidden","handleConfirm","handleReset","opts","jsxs","FilterPopover","jsx","classNames","styles","opt","v","vals"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
const t = {
|
|
2
|
+
"filter-date-range-quick-options": "_filter-date-range-quick-options_ctl7u_1",
|
|
3
|
+
"filter-date-range-quick-option": "_filter-date-range-quick-option_ctl7u_1",
|
|
4
|
+
"filter-date-range-quick-option-active": "_filter-date-range-quick-option-active_ctl7u_18",
|
|
5
|
+
"filter-date-range-picker": "_filter-date-range-picker_ctl7u_24"
|
|
6
|
+
};
|
|
7
|
+
export {
|
|
8
|
+
t as default
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as f } from "react/jsx-runtime";
|
|
2
|
+
import { Input as F } from "antd";
|
|
3
|
+
import { useState as I, useEffect as c } from "react";
|
|
4
|
+
import x from "../FilterPopover/index.js";
|
|
5
|
+
import { useFilterRegister as E } from "../useFilterState.js";
|
|
6
|
+
import { resolveHidden as l } from "../types.js";
|
|
7
|
+
const S = ({
|
|
8
|
+
filterKey: e,
|
|
9
|
+
label: s,
|
|
10
|
+
value: t,
|
|
11
|
+
onChange: r,
|
|
12
|
+
placeholder: d,
|
|
13
|
+
active: R,
|
|
14
|
+
hidden: o
|
|
15
|
+
}) => {
|
|
16
|
+
const [u, m] = I(t ?? ""), i = E();
|
|
17
|
+
if (c(() => {
|
|
18
|
+
m(t ?? "");
|
|
19
|
+
}, [t]), c(() => {
|
|
20
|
+
if (i) {
|
|
21
|
+
if (l(o)) {
|
|
22
|
+
i.unregister(e);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
t ? i.register(e, { label: s, valueLabel: t, onRemove: () => r == null ? void 0 : r(void 0) }) : i.unregister(e);
|
|
26
|
+
}
|
|
27
|
+
}, [t, e, s, o]), l(o)) return null;
|
|
28
|
+
const p = () => {
|
|
29
|
+
r == null || r(u || void 0);
|
|
30
|
+
};
|
|
31
|
+
return /* @__PURE__ */ f(
|
|
32
|
+
x,
|
|
33
|
+
{
|
|
34
|
+
label: s,
|
|
35
|
+
active: R || !!t,
|
|
36
|
+
onConfirm: p,
|
|
37
|
+
onReset: () => {
|
|
38
|
+
m(""), r == null || r(void 0);
|
|
39
|
+
},
|
|
40
|
+
children: /* @__PURE__ */ f(
|
|
41
|
+
F,
|
|
42
|
+
{
|
|
43
|
+
placeholder: d ?? `请输入${s}`,
|
|
44
|
+
allowClear: !0,
|
|
45
|
+
value: u,
|
|
46
|
+
onChange: (v) => m(v.target.value),
|
|
47
|
+
onPressEnter: p
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
S as default
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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 // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 inputValue\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, { label, valueLabel: value, onRemove: () => onChange?.(undefined) });\n } else {\n registerFn.unregister(filterKey);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value, filterKey, label, hidden]);\n\n // hidden 处理 - 必须在所有 hooks 之后\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={label}\n active={active || !!value}\n onConfirm={handleConfirm}\n onReset={handleReset}\n >\n <Input\n placeholder={placeholder ?? `请输入${label}`}\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","inputValue","setInputValue","useState","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;AACF,MAAM;AACJ,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAASP,KAAS,EAAE,GAGlDQ,IAAaC,EAAA;AAsBnB,MAnBAC,EAAU,MAAM;AACd,IAAAJ,EAAcN,KAAS,EAAE;AAAA,EAC3B,GAAG,CAACA,CAAK,CAAC,GAEVU,EAAU,MAAM;AACd,QAAKF,GACL;AAAA,UAAIG,EAAcP,CAAM,GAAG;AACzB,QAAAI,EAAW,WAAWV,CAAS;AAC/B;AAAA,MACF;AACA,MAAIE,IACFQ,EAAW,SAASV,GAAW,EAAE,OAAAC,GAAO,YAAYC,GAAO,UAAU,MAAMC,KAAA,gBAAAA,EAAW,QAAS,CAAG,IAElGO,EAAW,WAAWV,CAAS;AAAA;AAAA,EAGnC,GAAG,CAACE,GAAOF,GAAWC,GAAOK,CAAM,CAAC,GAGhCO,EAAcP,CAAM,EAAG,QAAO;AAElC,QAAMQ,IAAgB,MAAM;AAC1B,IAAAX,KAAA,QAAAA,EAAWI,KAAc;AAAA,EAC3B;AAOA,SACE,gBAAAQ;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAAf;AAAA,MACA,QAAQI,KAAU,CAAC,CAACH;AAAA,MACpB,WAAWY;AAAA,MACX,SAVgB,MAAM;AACxB,QAAAN,EAAc,EAAE,GAChBL,KAAA,QAAAA,EAAW;AAAA,MACb;AAAA,MASI,UAAA,gBAAAY;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,aAAab,KAAe,MAAMH,CAAK;AAAA,UACvC,YAAU;AAAA,UACV,OAAOM;AAAA,UACP,UAAU,CAACW,MAAMV,EAAcU,EAAE,OAAO,KAAK;AAAA,UAC7C,cAAcJ;AAAA,QAAA;AAAA,MAAA;AAAA,IAChB;AAAA,EAAA;AAGN;"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { jsx as m, jsxs as w } from "react/jsx-runtime";
|
|
2
|
+
import { Input as x } from "antd";
|
|
3
|
+
import { useState as R, useEffect as F, useMemo as E } from "react";
|
|
4
|
+
import H from "../FilterPopover/index.js";
|
|
5
|
+
import { useFilterRegister as I } from "../useFilterState.js";
|
|
6
|
+
import { resolveHidden as V } from "../types.js";
|
|
7
|
+
import u from "./style.module.scss.js";
|
|
8
|
+
import N from "classnames";
|
|
9
|
+
const G = ({
|
|
10
|
+
filterKey: o,
|
|
11
|
+
label: n,
|
|
12
|
+
value: r,
|
|
13
|
+
onChange: t,
|
|
14
|
+
unit: d,
|
|
15
|
+
minPlaceholder: M = "最低...",
|
|
16
|
+
maxPlaceholder: S = "最高...",
|
|
17
|
+
active: $,
|
|
18
|
+
hidden: c
|
|
19
|
+
}) => {
|
|
20
|
+
const [i, p] = R(r == null ? void 0 : r[0]), [s, l] = R(r == null ? void 0 : r[1]), f = I();
|
|
21
|
+
F(() => {
|
|
22
|
+
p(r == null ? void 0 : r[0]), l(r == null ? void 0 : r[1]);
|
|
23
|
+
}, [r]);
|
|
24
|
+
const b = E(() => {
|
|
25
|
+
if (i === void 0 && s === void 0) return "";
|
|
26
|
+
const e = i !== void 0 ? String(i) : "—", g = s !== void 0 ? String(s) : "—";
|
|
27
|
+
return `${e} ~ ${g}${d ?? ""}`;
|
|
28
|
+
}, [i, s, d]);
|
|
29
|
+
if (F(() => {
|
|
30
|
+
if (f) {
|
|
31
|
+
if (V(c)) {
|
|
32
|
+
f.unregister(o);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
b ? f.register(o, { label: n, valueLabel: b, onRemove: () => t == null ? void 0 : t(null) }) : f.unregister(o);
|
|
36
|
+
}
|
|
37
|
+
}, [b, o, n, c]), V(c)) return null;
|
|
38
|
+
const j = () => {
|
|
39
|
+
i !== void 0 || s !== void 0 ? t == null || t([i, s]) : t == null || t(null);
|
|
40
|
+
}, z = () => {
|
|
41
|
+
p(void 0), l(void 0), t == null || t(null);
|
|
42
|
+
};
|
|
43
|
+
return /* @__PURE__ */ m(
|
|
44
|
+
H,
|
|
45
|
+
{
|
|
46
|
+
label: n,
|
|
47
|
+
active: $ || !!(r != null && r[0]) || !!(r != null && r[1]),
|
|
48
|
+
onConfirm: j,
|
|
49
|
+
onReset: z,
|
|
50
|
+
width: 380,
|
|
51
|
+
children: /* @__PURE__ */ w("div", { className: N("filter-number-range-inputs", u["filter-number-range-inputs"]), children: [
|
|
52
|
+
/* @__PURE__ */ m(
|
|
53
|
+
x,
|
|
54
|
+
{
|
|
55
|
+
size: "middle",
|
|
56
|
+
placeholder: M,
|
|
57
|
+
type: "number",
|
|
58
|
+
value: i,
|
|
59
|
+
onChange: (e) => p(e.target.value ? Number(e.target.value) : void 0)
|
|
60
|
+
}
|
|
61
|
+
),
|
|
62
|
+
/* @__PURE__ */ m("span", { className: N("filter-number-range-separator", u["filter-number-range-separator"]), children: "-" }),
|
|
63
|
+
/* @__PURE__ */ m(
|
|
64
|
+
x,
|
|
65
|
+
{
|
|
66
|
+
size: "middle",
|
|
67
|
+
placeholder: S,
|
|
68
|
+
type: "number",
|
|
69
|
+
value: s,
|
|
70
|
+
onChange: (e) => l(e.target.value ? Number(e.target.value) : void 0)
|
|
71
|
+
}
|
|
72
|
+
),
|
|
73
|
+
d && /* @__PURE__ */ m("span", { className: N("filter-number-range-unit", u["filter-number-range-unit"]), children: d })
|
|
74
|
+
] })
|
|
75
|
+
}
|
|
76
|
+
);
|
|
77
|
+
};
|
|
78
|
+
export {
|
|
79
|
+
G as default
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterNumberRange/index.tsx"],"sourcesContent":["import { Input } from 'antd';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport FilterPopover from '../FilterPopover';\nimport { useFilterRegister } from '../useFilterState';\nimport type { BaseFilterProps } from '../types';\nimport { resolveHidden } from '../types';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\n\ninterface FilterNumberRangeProps extends BaseFilterProps {\n value?: [number | undefined, number | undefined] | null;\n onChange?: (value: [number | undefined, number | undefined] | null) => void;\n unit?: string;\n minPlaceholder?: string;\n maxPlaceholder?: string;\n}\n\nconst FilterNumberRange: React.FC<FilterNumberRangeProps> = ({\n filterKey,\n label,\n value,\n onChange,\n unit,\n minPlaceholder = '最低...',\n maxPlaceholder = '最高...',\n active,\n hidden,\n}) => {\n const [minVal, setMinVal] = useState<number | undefined>(value?.[0]);\n const [maxVal, setMaxVal] = useState<number | undefined>(value?.[1]);\n\n // ── 自动注册到 CommonFilter ──\n const registerFn = useFilterRegister();\n\n // 同步外部 value 到内部 minVal/maxVal\n useEffect(() => {\n setMinVal(value?.[0]);\n setMaxVal(value?.[1]);\n }, [value]);\n\n const valueLabel = useMemo(() => {\n if (minVal === undefined && maxVal === undefined) return '';\n const min = minVal !== undefined ? String(minVal) : '—';\n const max = maxVal !== undefined ? String(maxVal) : '—';\n return `${min} ~ ${max}${unit ?? ''}`;\n }, [minVal, maxVal, unit]);\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 // hidden 处理 - 必须在所有 hooks 之后\n if (resolveHidden(hidden)) return null;\n\n const handleConfirm = () => {\n if (minVal !== undefined || maxVal !== undefined) {\n onChange?.([minVal, maxVal]);\n } else {\n onChange?.(null);\n }\n };\n\n const handleReset = () => {\n setMinVal(undefined);\n setMaxVal(undefined);\n onChange?.(null);\n };\n\n return (\n <FilterPopover\n label={label}\n active={active || !!value?.[0] || !!value?.[1]}\n onConfirm={handleConfirm}\n onReset={handleReset}\n width={380}\n >\n <div className={classNames('filter-number-range-inputs', styles['filter-number-range-inputs'])}>\n <Input\n size=\"middle\"\n placeholder={minPlaceholder}\n type=\"number\"\n value={minVal}\n onChange={(e) => setMinVal(e.target.value ? Number(e.target.value) : undefined)}\n />\n <span className={classNames('filter-number-range-separator', styles['filter-number-range-separator'])}>-</span>\n <Input\n size=\"middle\"\n placeholder={maxPlaceholder}\n type=\"number\"\n value={maxVal}\n onChange={(e) => setMaxVal(e.target.value ? Number(e.target.value) : undefined)}\n />\n {unit && <span className={classNames('filter-number-range-unit', styles['filter-number-range-unit'])}>{unit}</span>}\n </div>\n </FilterPopover>\n );\n};\n\nexport default FilterNumberRange;\nexport type { FilterNumberRangeProps };\n"],"names":["FilterNumberRange","filterKey","label","value","onChange","unit","minPlaceholder","maxPlaceholder","active","hidden","minVal","setMinVal","useState","maxVal","setMaxVal","registerFn","useFilterRegister","useEffect","valueLabel","useMemo","min","max","resolveHidden","handleConfirm","handleReset","jsx","FilterPopover","jsxs","classNames","styles","Input"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const e = {
|
|
2
|
+
"filter-number-range-inputs": "_filter-number-range-inputs_y3pfu_1",
|
|
3
|
+
"filter-number-range-separator": "_filter-number-range-separator_y3pfu_7",
|
|
4
|
+
"filter-number-range-unit": "_filter-number-range-unit_y3pfu_11"
|
|
5
|
+
};
|
|
6
|
+
export {
|
|
7
|
+
e as default
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=style.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsxs as a, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { Button as s } from "antd";
|
|
3
|
+
import t from "classnames";
|
|
4
|
+
import r from "./style.module.scss.js";
|
|
5
|
+
const h = ({
|
|
6
|
+
children: m,
|
|
7
|
+
onConfirm: l,
|
|
8
|
+
onReset: i,
|
|
9
|
+
confirmText: c = "确定",
|
|
10
|
+
width: d = 360
|
|
11
|
+
}) => /* @__PURE__ */ a("div", { style: { maxWidth: d, minWidth: "200px" }, children: [
|
|
12
|
+
/* @__PURE__ */ e("div", { className: t("filter-panel-body", r["filter-panel-body"]), children: m }),
|
|
13
|
+
(l || i) && /* @__PURE__ */ a("div", { className: t("filter-panel-actions", r["filter-panel-actions"]), children: [
|
|
14
|
+
i && /* @__PURE__ */ e(s, { size: "small", onClick: i, children: "取消" }),
|
|
15
|
+
l && /* @__PURE__ */ e(s, { size: "small", type: "primary", onClick: l, children: c })
|
|
16
|
+
] })
|
|
17
|
+
] });
|
|
18
|
+
export {
|
|
19
|
+
h as default
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPanel/index.tsx"],"sourcesContent":["import { Button } from 'antd';\nimport classNames from 'classnames';\nimport type { ReactNode } from 'react';\nimport React from 'react';\nimport styles from './style.module.scss';\n\ninterface FilterPanelProps {\n children: ReactNode;\n onConfirm?: () => void;\n onReset?: () => void;\n confirmText?: string;\n width?: number;\n}\n\nconst FilterPanel: React.FC<FilterPanelProps> = ({\n children,\n onConfirm,\n onReset,\n confirmText = '确定',\n width = 360,\n}) => (\n <div style={{ maxWidth: width, minWidth: '200px' }}>\n <div className={classNames('filter-panel-body', styles['filter-panel-body'])}>{children}</div>\n {(onConfirm || onReset) && (\n <div className={classNames('filter-panel-actions', styles['filter-panel-actions'])}>\n {onReset && (\n <Button size=\"small\" onClick={onReset}>\n 取消\n </Button>\n )}\n {onConfirm && (\n <Button size=\"small\" type=\"primary\" onClick={onConfirm}>\n {confirmText}\n </Button>\n )}\n </div>\n )}\n </div>\n);\n\nexport default FilterPanel;\nexport type { FilterPanelProps };\n"],"names":["FilterPanel","children","onConfirm","onReset","confirmText","width","jsxs","jsx","classNames","styles","Button"],"mappings":";;;;AAcA,MAAMA,IAA0C,CAAC;AAAA,EAC/C,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,OAAAC,IAAQ;AACV,MACE,gBAAAC,EAAC,SAAI,OAAO,EAAE,UAAUD,GAAO,UAAU,WACvC,UAAA;AAAA,EAAA,gBAAAE,EAAC,OAAA,EAAI,WAAWC,EAAW,qBAAqBC,EAAO,mBAAmB,CAAC,GAAI,UAAAR,GAAS;AAAA,GACtFC,KAAaC,MACb,gBAAAG,EAAC,OAAA,EAAI,WAAWE,EAAW,wBAAwBC,EAAO,sBAAsB,CAAC,GAC9E,UAAA;AAAA,IAAAN,uBACEO,GAAA,EAAO,MAAK,SAAQ,SAASP,GAAS,UAAA,MAEvC;AAAA,IAEDD,uBACEQ,GAAA,EAAO,MAAK,SAAQ,MAAK,WAAU,SAASR,GAC1C,UAAAE,EAAA,CACH;AAAA,EAAA,EAAA,CAEJ;AAAA,EAAA,CAEJ;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { Popover as y } from "antd";
|
|
3
|
+
import { useState as h } from "react";
|
|
4
|
+
import v from "../FilterPanel/index.js";
|
|
5
|
+
import x from "../FilterTrigger/index.js";
|
|
6
|
+
const I = ({
|
|
7
|
+
label: p,
|
|
8
|
+
active: a,
|
|
9
|
+
width: i,
|
|
10
|
+
confirmText: d = "确定",
|
|
11
|
+
children: c,
|
|
12
|
+
open: m,
|
|
13
|
+
onOpenChange: l,
|
|
14
|
+
onConfirm: t,
|
|
15
|
+
onReset: e
|
|
16
|
+
}) => {
|
|
17
|
+
const [f, u] = h(!1), s = m ?? f, o = (n) => {
|
|
18
|
+
u(n), l == null || l(n);
|
|
19
|
+
};
|
|
20
|
+
return /* @__PURE__ */ r(
|
|
21
|
+
y,
|
|
22
|
+
{
|
|
23
|
+
open: s,
|
|
24
|
+
onOpenChange: o,
|
|
25
|
+
trigger: "click",
|
|
26
|
+
placement: "bottomLeft",
|
|
27
|
+
destroyOnHidden: !0,
|
|
28
|
+
classNames: { root: "filter-popover-panel" },
|
|
29
|
+
styles: { content: { maxWidth: i || 300, padding: 0 } },
|
|
30
|
+
getPopupContainer: () => document.body,
|
|
31
|
+
content: /* @__PURE__ */ r(
|
|
32
|
+
v,
|
|
33
|
+
{
|
|
34
|
+
onConfirm: t ? () => {
|
|
35
|
+
t == null || t(), o(!1);
|
|
36
|
+
} : void 0,
|
|
37
|
+
onReset: e ? () => {
|
|
38
|
+
e == null || e(), o(!1);
|
|
39
|
+
} : void 0,
|
|
40
|
+
confirmText: d,
|
|
41
|
+
width: i || 300,
|
|
42
|
+
children: c
|
|
43
|
+
}
|
|
44
|
+
),
|
|
45
|
+
children: /* @__PURE__ */ r("span", { style: { display: "inline-flex" }, children: /* @__PURE__ */ r(x, { label: p, active: a, open: s }) })
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
};
|
|
49
|
+
export {
|
|
50
|
+
I as default
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Filter/FilterPopover/index.tsx"],"sourcesContent":["import { Popover } from 'antd';\nimport React, { useState } from 'react';\nimport FilterPanel from '../FilterPanel';\nimport FilterTrigger from '../FilterTrigger';\n\ninterface FilterPopoverProps {\n /** 筛选项标签 */\n label: string;\n /** 是否有值(控制选中态样式) */\n active?: boolean;\n /** 面板宽度 */\n width?: number;\n /** 确定按钮文字 */\n confirmText?: string;\n /** 面板内容 */\n children: React.ReactNode;\n /** 受控打开状态(传入则由外部控制) */\n open?: boolean;\n /** 打开状态变更回调 */\n onOpenChange?: (open: boolean) => void;\n /** 确认回调(不传则无确定/取消按钮) */\n onConfirm?: () => void;\n /** 取消回调 */\n onReset?: () => void;\n}\n\nconst FilterPopover: React.FC<FilterPopoverProps> = ({\n label,\n active,\n width,\n confirmText = '确定',\n children,\n open: controlledOpen,\n onOpenChange,\n onConfirm,\n onReset,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const open = controlledOpen ?? internalOpen;\n\n const setOpen = (value: boolean) => {\n setInternalOpen(value);\n onOpenChange?.(value);\n };\n\n const handleConfirm = () => {\n onConfirm?.();\n setOpen(false);\n };\n\n const handleReset = () => {\n onReset?.();\n setOpen(false);\n };\n\n return (\n <Popover\n open={open}\n onOpenChange={setOpen}\n trigger=\"click\"\n placement=\"bottomLeft\"\n destroyOnHidden\n classNames={{ root: 'filter-popover-panel' }}\n styles={{ content: { maxWidth: width || 300, padding: 0 } }}\n getPopupContainer={() => document.body}\n content={\n <FilterPanel\n onConfirm={onConfirm ? handleConfirm : undefined}\n onReset={onReset ? handleReset : undefined}\n confirmText={confirmText}\n width={width || 300}\n >\n {children}\n </FilterPanel>\n }\n >\n <span style={{ display: 'inline-flex' }}>\n <FilterTrigger label={label} active={active} open={open} />\n </span>\n </Popover>\n );\n};\n\nexport default FilterPopover;\nexport type { FilterPopoverProps };\n"],"names":["FilterPopover","label","active","width","confirmText","children","controlledOpen","onOpenChange","onConfirm","onReset","internalOpen","setInternalOpen","useState","open","setOpen","value","jsx","Popover","FilterPanel","FilterTrigger"],"mappings":";;;;;AA0BA,MAAMA,IAA8C,CAAC;AAAA,EACnD,OAAAC;AAAA,EACA,QAAAC;AAAA,EACA,OAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,UAAAC;AAAA,EACA,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC;AACF,MAAM;AACJ,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChDC,IAAOP,KAAkBI,GAEzBI,IAAU,CAACC,MAAmB;AAClC,IAAAJ,EAAgBI,CAAK,GACrBR,KAAA,QAAAA,EAAeQ;AAAA,EACjB;AAYA,SACE,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAJ;AAAA,MACA,cAAcC;AAAA,MACd,SAAQ;AAAA,MACR,WAAU;AAAA,MACV,iBAAe;AAAA,MACf,YAAY,EAAE,MAAM,uBAAA;AAAA,MACpB,QAAQ,EAAE,SAAS,EAAE,UAAUX,KAAS,KAAK,SAAS,IAAE;AAAA,MACxD,mBAAmB,MAAM,SAAS;AAAA,MAClC,SACE,gBAAAa;AAAA,QAACE;AAAA,QAAA;AAAA,UACC,WAAWV,IAtBG,MAAM;AAC1B,YAAAA,KAAA,QAAAA,KACAM,EAAQ,EAAK;AAAA,UACf,IAmB+C;AAAA,UACvC,SAASL,IAlBG,MAAM;AACxB,YAAAA,KAAA,QAAAA,KACAK,EAAQ,EAAK;AAAA,UACf,IAeyC;AAAA,UACjC,aAAAV;AAAA,UACA,OAAOD,KAAS;AAAA,UAEf,UAAAE;AAAA,QAAA;AAAA,MAAA;AAAA,MAIL,UAAA,gBAAAW,EAAC,QAAA,EAAK,OAAO,EAAE,SAAS,cAAA,GACtB,UAAA,gBAAAA,EAACG,GAAA,EAAc,OAAAlB,GAAc,QAAAC,GAAgB,MAAAW,EAAA,CAAY,EAAA,CAC3D;AAAA,IAAA;AAAA,EAAA;AAGN;"}
|