@voplus/morpho-workspace 10.0.21 → 10.0.23
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/es/modules/my-document/DataViewToolbar/index.d.ts +5 -0
- package/es/modules/my-document/DataViewToolbar/index.js +23 -0
- package/es/modules/my-document/DataViewToolbar/index.js.map +1 -0
- package/es/modules/my-document/DocumentTableGroup/DocumentSection.d.ts +4 -4
- package/es/modules/my-document/DocumentTableGroup/DocumentSection.js +129 -31
- package/es/modules/my-document/DocumentTableGroup/DocumentSection.js.map +1 -1
- package/es/modules/my-document/DocumentTableGroup/FilterPillsBar.d.ts +19 -0
- package/es/modules/my-document/DocumentTableGroup/FilterPillsBar.js +17 -0
- package/es/modules/my-document/DocumentTableGroup/FilterPillsBar.js.map +1 -0
- package/es/modules/my-document/DocumentTableGroup/index.d.ts +4 -0
- package/es/modules/my-document/DocumentTableGroup/index.js +7 -22
- package/es/modules/my-document/DocumentTableGroup/index.js.map +1 -1
- package/es/modules/my-document/DocumentViewContext.d.ts +18 -1
- package/es/modules/my-document/DocumentViewContext.js +105 -3
- package/es/modules/my-document/DocumentViewContext.js.map +1 -1
- package/es/modules/my-document/FilterTabsBar/index.d.ts +1 -1
- package/es/modules/my-document/FilterTabsBar/index.js +12 -28
- package/es/modules/my-document/FilterTabsBar/index.js.map +1 -1
- package/es/modules/my-document/FilterUI/TeamFilter/index.js +9 -16
- package/es/modules/my-document/FilterUI/TeamFilter/index.js.map +1 -1
- package/es/modules/my-document/FilterUI/WorkspaceFilter/index.js +9 -16
- package/es/modules/my-document/FilterUI/WorkspaceFilter/index.js.map +1 -1
- package/es/modules/my-document/FilterUI/index.d.ts +2 -0
- package/es/modules/my-document/FilterUI/index.js +35 -51
- package/es/modules/my-document/FilterUI/index.js.map +1 -1
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/TableCell.d.ts +20 -0
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/TableCell.js +160 -0
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/TableCell.js.map +1 -0
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/index.css +40 -0
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/index.d.ts +5 -10
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/index.js +103 -174
- package/es/modules/my-document/SectionTemplate/DocumentTableUI/index.js.map +1 -1
- package/es/modules/my-document/SectionTemplate/DocumentViewClass/index.d.ts +7 -6
- package/es/modules/my-document/SectionTemplate/DocumentViewClass/index.js +3 -20
- package/es/modules/my-document/SectionTemplate/DocumentViewClass/index.js.map +1 -1
- package/es/modules/my-document/SectionTemplate/GridUI/index.d.ts +5 -9
- package/es/modules/my-document/SectionTemplate/GridUI/index.js +49 -37
- package/es/modules/my-document/SectionTemplate/GridUI/index.js.map +1 -1
- package/es/modules/my-document/SectionTemplate/documentGroups.d.ts +39 -0
- package/es/modules/my-document/SectionTemplate/documentGroups.js +40 -0
- package/es/modules/my-document/SectionTemplate/documentGroups.js.map +1 -0
- package/es/modules/my-document/SectionTemplate/documentGroups.test.d.ts +1 -0
- package/es/modules/my-document/SectionTemplate/documentGroups.test.js +64 -0
- package/es/modules/my-document/SectionTemplate/documentGroups.test.js.map +1 -0
- package/es/modules/my-document/index.js +21 -14
- package/es/modules/my-document/index.js.map +1 -1
- package/es/modules/my-document/tabClasses.d.ts +3 -0
- package/es/modules/my-document/tabClasses.js +4 -0
- package/es/modules/my-document/tabClasses.js.map +1 -0
- package/es/modules/pin/components/MyPinned/index.css +2 -2
- package/es/modules/tasks/components/TaskItem/subTaskItem.css +0 -2
- package/es/modules/work/components/WorkListHeader/index.js +1 -1
- package/es/modules/work/components/WorkTableCard/TableCellDetail.js +3 -3
- package/es/modules/work/components/WorkTableCard/TableCellDetail.js.map +1 -1
- package/es/modules/work/components/WorkTableList/TableCell.js +1 -1
- package/es/modules/work/components/WorkTableList/TableCell.js.map +1 -1
- package/es/modules/work/components/WorkTableListCard/TableCellDetails.js +2 -2
- package/es/modules/work/components/WorkTableListCard/TableCellDetails.js.map +1 -1
- package/es/modules/work/components/WorkTableListCard/index.css +0 -9
- package/es/modules/work/components/WorkTableListCardPage/index.js +1 -1
- package/es/modules/work/work-type/components/WorkTypeItem/index.d.ts +0 -1
- package/es/modules/work/work-type/components/WorkTypeItem/index.js +17 -12
- package/es/modules/work/work-type/components/WorkTypeItem/index.js.map +1 -1
- package/es/obsolete/space/components/Notes/index.js +1 -1
- package/es/obsolete/space/components/Notes/index.js.map +1 -1
- package/package.json +1 -1
- package/es/controls/Corner/index.css +0 -5
- package/es/controls/Corner/index.d.ts +0 -9
- package/es/controls/Corner/index.js +0 -10
- package/es/controls/Corner/index.js.map +0 -1
- package/es/controls/StickyAddButton/index.css +0 -18
- package/es/controls/StickyAddButton/index.d.ts +0 -9
- package/es/controls/StickyAddButton/index.js +0 -12
- package/es/controls/StickyAddButton/index.js.map +0 -1
- package/es/modules/work/work-type/components/WorkTypeItem/index.css +0 -45
|
@@ -1,37 +1,21 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { Button } from "antd";
|
|
3
2
|
import { observe } from "@voplus/morpho-ui";
|
|
4
3
|
import { useDocumentViewContext } from "../DocumentViewContext";
|
|
5
|
-
import { FontAwesomeIcon as FAIcon,
|
|
4
|
+
import { FontAwesomeIcon as FAIcon, faStarSolid } from "@voplus/morpho-ui/es/faIcons";
|
|
6
5
|
import WorkspacesFilter from "../FilterUI/WorkspaceFilter";
|
|
7
6
|
import TeamFilter from "../FilterUI/TeamFilter";
|
|
7
|
+
import classnames from "classnames";
|
|
8
|
+
import { tabBtnBaseClass, tabBtnDefaultClass, tabBtnActiveClass } from "../tabClasses";
|
|
8
9
|
const FilterTabsBar = (props) => {
|
|
9
|
-
const {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
React.createElement(FAIcon, { icon: faUserSolid, className: "mr-2" }),
|
|
19
|
-
"Personal"),
|
|
20
|
-
React.createElement(TeamFilter, null),
|
|
21
|
-
React.createElement(WorkspacesFilter, null)),
|
|
22
|
-
React.createElement("div", { className: "flex items-center gap-3" },
|
|
23
|
-
React.createElement("div", { className: "flex items-center gap-1 bg-slate-100 rounded-lg p-1" },
|
|
24
|
-
React.createElement("button", { className: `w-6 h-6 flex items-center justify-center rounded transition-colors ${viewType === "table"
|
|
25
|
-
? "bg-white text-slate-900 shadow-sm"
|
|
26
|
-
: "text-slate-500 hover:text-slate-700"}`, title: "List View", onClick: () => setViewType("table") },
|
|
27
|
-
React.createElement(FAIcon, { icon: faListUlRegular, className: "text-sm" })),
|
|
28
|
-
React.createElement("button", { className: `w-6 h-6 flex items-center justify-center rounded transition-colors ${viewType === "grid"
|
|
29
|
-
? "bg-white text-slate-900 shadow-sm"
|
|
30
|
-
: "text-slate-500 hover:text-slate-700"}`, title: "Grid View", onClick: () => setViewType("grid") },
|
|
31
|
-
React.createElement(FAIcon, { icon: faThLargeSolid, className: "text-sm" }))),
|
|
32
|
-
React.createElement(Button, { type: "primary", onClick: onAdd },
|
|
33
|
-
React.createElement(FAIcon, { icon: faPlusRegular }),
|
|
34
|
-
"New"))))));
|
|
10
|
+
const { activeTab, setActiveTab } = useDocumentViewContext();
|
|
11
|
+
return observe(() => (React.createElement("div", { className: "flex items-center gap-5 px-5 py-4 shrink-0" },
|
|
12
|
+
React.createElement("button", { className: classnames(tabBtnBaseClass, "w-[45px]", activeTab === "pinned" ? tabBtnActiveClass : tabBtnDefaultClass), onClick: () => setActiveTab("pinned") },
|
|
13
|
+
React.createElement(FAIcon, { icon: faStarSolid })),
|
|
14
|
+
React.createElement("span", { className: "h-11 w-px bg-border" }),
|
|
15
|
+
React.createElement("button", { className: classnames(tabBtnBaseClass, "px-5 uppercase", activeTab === "personal" ? tabBtnActiveClass : tabBtnDefaultClass), onClick: () => setActiveTab("personal") }, "Personal"),
|
|
16
|
+
React.createElement(TeamFilter, null),
|
|
17
|
+
React.createElement(WorkspacesFilter, null),
|
|
18
|
+
props.headerTool)));
|
|
35
19
|
};
|
|
36
20
|
export default FilterTabsBar;
|
|
37
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/my-document/FilterTabsBar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/my-document/FilterTabsBar/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACtF,OAAO,gBAAgB,MAAM,6BAA6B,CAAC;AAC3D,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvF,MAAM,aAAa,GAAG,CAAC,KAAuC,EAAE,EAAE;IACjE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAE7D,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CACpB,6BAAK,SAAS,EAAC,4CAA4C;QAC1D,gCACC,SAAS,EAAE,UAAU,CACpB,eAAe,EACf,UAAU,EACV,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAC/D,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC;YAErC,oBAAC,MAAM,IAAC,IAAI,EAAE,WAAW,GAAI,CACrB;QAET,8BAAM,SAAS,EAAC,qBAAqB,GAAQ;QAE7C,gCACC,SAAS,EAAE,UAAU,CACpB,eAAe,EACf,gBAAgB,EAChB,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CACjE,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,eAG/B;QAET,oBAAC,UAAU,OAAG;QACd,oBAAC,gBAAgB,OAAG;QACnB,KAAK,CAAC,UAAU,CAWZ,CACN,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Checkbox } from "antd";
|
|
3
|
-
import { useDocumentViewContext } from "../../DocumentViewContext";
|
|
3
|
+
import { useDocumentViewContext, teamItemsToFilterOption } from "../../DocumentViewContext";
|
|
4
4
|
import { observe, useRenderOnChange } from "@voplus/morpho-ui";
|
|
5
5
|
import { useCreateListDataState } from "@voplus/morpho-ui/es/data";
|
|
6
6
|
import { useUnitListEffect } from "@voplus/morpho-org";
|
|
7
|
-
import { FontAwesomeIcon as FAIcon,
|
|
7
|
+
import { FontAwesomeIcon as FAIcon, faFilterSolid } from "@voplus/morpho-ui/es/faIcons";
|
|
8
8
|
import FilterUI from "..";
|
|
9
9
|
const TeamFilter = () => {
|
|
10
|
-
const { onApplyFilter, activeTab } = useDocumentViewContext();
|
|
10
|
+
const { onApplyFilter, activeTab, teamItems } = useDocumentViewContext();
|
|
11
11
|
const [showOnlyMyTeams, setShowOnlyMyTeams] = React.useState(true);
|
|
12
|
+
/** 受控回显用的选中 id(context teamItems 变化时才重建引用,避免 wipe 用户下拉草稿) */
|
|
13
|
+
const selectedIds = React.useMemo(() => teamItems.map((item) => item.id), [teamItems]);
|
|
12
14
|
const list = useCreateListDataState({
|
|
13
15
|
filterDefaults: {
|
|
14
16
|
filters: showOnlyMyTeams
|
|
@@ -36,20 +38,11 @@ const TeamFilter = () => {
|
|
|
36
38
|
useRenderOnChange(() => list.filters.options);
|
|
37
39
|
/** 把ListDataState传给useContactListEffect,使之可以自動更新loading, hasmore. */
|
|
38
40
|
useUnitListEffect(list, (result) => list.union(result), list.filters.options);
|
|
39
|
-
return observe(() => (React.createElement(FilterUI, { multiple: true, label: "
|
|
40
|
-
React.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" },
|
|
41
|
+
return observe(() => (React.createElement(FilterUI, { multiple: true, label: "Team", list: list, active: activeTab === "team", searchPlaceholder: "Search teams...", customDropdownItem: React.createElement("div", { className: "px-4 py-2.5 bg-bg border-b border-border" },
|
|
42
|
+
React.createElement("label", { className: "flex items-center gap-2 cursor-pointer group text-font-grey text-sm font-medium" },
|
|
41
43
|
React.createElement(Checkbox, { checked: showOnlyMyTeams, onChange: (e) => setShowOnlyMyTeams(e.target.checked) }),
|
|
42
|
-
React.createElement(FAIcon, { icon: faFilterSolid
|
|
43
|
-
React.createElement("span", { className: "
|
|
44
|
-
? [
|
|
45
|
-
{
|
|
46
|
-
c: "ParentNodeId",
|
|
47
|
-
o: "contains",
|
|
48
|
-
l: "And",
|
|
49
|
-
v1: JSON.stringify(items.map((item) => item.containerId)),
|
|
50
|
-
},
|
|
51
|
-
]
|
|
52
|
-
: []) })));
|
|
44
|
+
React.createElement(FAIcon, { icon: faFilterSolid }),
|
|
45
|
+
React.createElement("span", { className: "group-hover:text-font-primary" }, "Show only my teams"))), selectedIds: selectedIds, onFilter: (items) => onApplyFilter("team", teamItemsToFilterOption(items), items) })));
|
|
53
46
|
};
|
|
54
47
|
export default TeamFilter;
|
|
55
48
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/my-document/FilterUI/TeamFilter/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/my-document/FilterUI/TeamFilter/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAC5F,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAS,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AACxF,OAAO,QAAQ,MAAM,IAAI,CAAC;AAE1B,MAAM,UAAU,GAAG,GAAG,EAAE;IACvB,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAEzE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnE,6DAA6D;IAC7D,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvF,MAAM,IAAI,GAAG,sBAAsB,CAClC;QACC,cAAc,EAAE;YACf,OAAO,EAAE,eAAe;gBACvB,CAAC,CAAC;oBACA,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE;oBACvE;wBACC,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,UAAU;wBACb,CAAC,EAAE,KAAK;wBACR,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;qBAC5B;iBACD;gBACF,CAAC,CAAC;oBACA;wBACC,CAAC,EAAE,MAAM;wBACT,CAAC,EAAE,UAAU;wBACb,CAAC,EAAE,KAAK;wBACR,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;qBAC5B;iBACD;YACH,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE;SAChC;KACD,EACD,CAAC,eAAe,CAAC,CACjB,CAAC;IAEF,sEAAsE;IACtE,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9C,qEAAqE;IACrE,iBAAiB,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9E,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CACpB,oBAAC,QAAQ,IACR,QAAQ,QACR,KAAK,EAAC,MAAM,EACZ,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,SAAS,KAAK,MAAM,EAC5B,iBAAiB,EAAC,iBAAiB,EACnC,kBAAkB,EACjB,6BAAK,SAAS,EAAC,0CAA0C;YACxD,+BAAO,SAAS,EAAC,iFAAiF;gBACjG,oBAAC,QAAQ,IACR,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GACpD;gBACF,oBAAC,MAAM,IAAC,IAAI,EAAE,aAAa,GAAI;gBAC/B,8BAAM,SAAS,EAAC,+BAA+B,yBAA0B,CAClE,CACH,EAEP,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,uBAAuB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,GAChF,CACF,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { Checkbox } from "antd";
|
|
3
|
-
import { useDocumentViewContext } from "../../DocumentViewContext";
|
|
3
|
+
import { useDocumentViewContext, workspaceItemsToFilterOption } from "../../DocumentViewContext";
|
|
4
4
|
import { observe, useRenderOnChange } from "@voplus/morpho-ui";
|
|
5
5
|
import { useCreateListDataState } from "@voplus/morpho-ui/es/data";
|
|
6
6
|
import { useWorkspaceListEffect } from "../../../../data/workspace";
|
|
7
7
|
import { useAutoUpdateListData } from "../../../../data/workspace/workspace-events";
|
|
8
|
-
import { FontAwesomeIcon as FAIcon,
|
|
8
|
+
import { FontAwesomeIcon as FAIcon, faFilterSolid, } from "@voplus/morpho-ui/es/faIcons";
|
|
9
9
|
import FilterUI from "..";
|
|
10
10
|
const WorkspaceFilter = () => {
|
|
11
|
-
const { onApplyFilter, activeTab } = useDocumentViewContext();
|
|
11
|
+
const { onApplyFilter, activeTab, workspaceItems } = useDocumentViewContext();
|
|
12
12
|
const [showOnlyMyWorkspaces, setShowOnlyMyWorkspaces] = React.useState(true);
|
|
13
|
+
/** 受控回显用的选中 id(context workspaceItems 变化时才重建引用,避免 wipe 用户下拉草稿) */
|
|
14
|
+
const selectedIds = React.useMemo(() => workspaceItems.map((item) => item.id), [workspaceItems]);
|
|
13
15
|
/** 建立 ListView 和useWorkspaceListEffect所需的ListDataState. 会根据state.id重建所以不需reset. */
|
|
14
16
|
const list = useCreateListDataState({
|
|
15
17
|
filterDefaults: {
|
|
@@ -25,20 +27,11 @@ const WorkspaceFilter = () => {
|
|
|
25
27
|
useWorkspaceListEffect(list, (result) => list.union(result), list.filters.options);
|
|
26
28
|
/** useOnNewWorkspace, useOnDeleteWorkspace的sugar syntax 自動更新list. */
|
|
27
29
|
useAutoUpdateListData(list, (d) => true);
|
|
28
|
-
return observe(() => (React.createElement(FilterUI, { multiple: true, label: "
|
|
29
|
-
React.createElement("label", { className: "flex items-center gap-2 cursor-pointer group" },
|
|
30
|
+
return observe(() => (React.createElement(FilterUI, { multiple: true, label: "Workspace", active: activeTab === "workspace", list: list, searchPlaceholder: "Search workspaces...", customDropdownItem: React.createElement("div", { className: "px-4 py-2.5 bg-bg border-b border-border" },
|
|
31
|
+
React.createElement("label", { className: "flex items-center gap-2 cursor-pointer group text-font-grey text-sm font-medium" },
|
|
30
32
|
React.createElement(Checkbox, { checked: showOnlyMyWorkspaces, onChange: (e) => setShowOnlyMyWorkspaces(e.target.checked) }),
|
|
31
|
-
React.createElement(FAIcon, { icon: faFilterSolid
|
|
32
|
-
React.createElement("span", { className: "
|
|
33
|
-
? [
|
|
34
|
-
{
|
|
35
|
-
c: "ParentNodeId",
|
|
36
|
-
o: "contains",
|
|
37
|
-
l: "And",
|
|
38
|
-
v1: JSON.stringify(items.map((item) => item.id)),
|
|
39
|
-
},
|
|
40
|
-
]
|
|
41
|
-
: []) })));
|
|
33
|
+
React.createElement(FAIcon, { icon: faFilterSolid }),
|
|
34
|
+
React.createElement("span", { className: "group-hover:text-font-primary" }, "Show only my workspaces"))), selectedIds: selectedIds, onFilter: (items) => onApplyFilter("workspace", workspaceItemsToFilterOption(items), items) })));
|
|
42
35
|
};
|
|
43
36
|
export default WorkspaceFilter;
|
|
44
37
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/my-document/FilterUI/WorkspaceFilter/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/modules/my-document/FilterUI/WorkspaceFilter/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,5 +13,7 @@ declare const FilterUI: <T extends {
|
|
|
13
13
|
searchPlaceholder?: string;
|
|
14
14
|
customDropdownItem?: React.ReactNode;
|
|
15
15
|
onFilter?: (selectedArr: T[]) => void;
|
|
16
|
+
/** 外部驱动的选中 id(pill 关闭等路径变更时同步本地勾选状态) */
|
|
17
|
+
selectedIds?: string[];
|
|
16
18
|
}) => React.JSX.Element;
|
|
17
19
|
export default FilterUI;
|
|
@@ -2,77 +2,61 @@ import React, { useEffect, useRef, useState } from "react";
|
|
|
2
2
|
import { debounce } from "lodash-es";
|
|
3
3
|
import { observe } from "@voplus/morpho-ui";
|
|
4
4
|
import { FontAwesomeIcon as FAIcon, faChevronDownRegular, faChevronUpRegular, } from "@voplus/morpho-ui/es/faIcons";
|
|
5
|
-
import {
|
|
5
|
+
import { Input, Checkbox, Skeleton, Dropdown } from "antd";
|
|
6
|
+
import { tabBtnBaseClass, tabBtnDefaultClass, tabBtnActiveClass } from "../tabClasses";
|
|
7
|
+
import FilterDropdown from "@voplus/morpho-ui/es/controls/FilterDropdown";
|
|
8
|
+
import classnames from "classnames";
|
|
6
9
|
import "./index.css";
|
|
7
10
|
const FilterUI = (props) => {
|
|
8
|
-
const { label, icon, list, active = false, searchPlaceholder = "Search...", multiple = false, onFilter, } = props;
|
|
11
|
+
const { label, icon, list, active = false, searchPlaceholder = "Search...", multiple = false, onFilter, selectedIds, } = props;
|
|
9
12
|
const [showDropdown, setShowDropdown] = useState(false);
|
|
10
|
-
const [
|
|
13
|
+
const [selectedIdsLocal, setSelectedIdsLocal] = useState([]);
|
|
14
|
+
// 外部选中项变化时同步本地勾选(如 pill 关闭清空后,下拉不再残留勾选)
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
if (selectedIds)
|
|
17
|
+
setSelectedIdsLocal(selectedIds);
|
|
18
|
+
}, [selectedIds]);
|
|
11
19
|
// 处理选中逻辑
|
|
12
20
|
const handleCheckboxChange = (id) => {
|
|
13
21
|
if (multiple) {
|
|
14
|
-
|
|
22
|
+
setSelectedIdsLocal((prev) => prev.includes(id) ? prev.filter((v) => v !== id) : [...prev, id]);
|
|
15
23
|
}
|
|
16
24
|
else {
|
|
17
|
-
|
|
25
|
+
setSelectedIdsLocal((prev) => (prev.includes(id) ? [] : [id]));
|
|
18
26
|
}
|
|
19
27
|
};
|
|
20
28
|
const handleReset = () => {
|
|
21
|
-
|
|
29
|
+
setSelectedIdsLocal([]);
|
|
22
30
|
// onFilter?.([]);
|
|
23
31
|
};
|
|
24
32
|
const handleApply = () => {
|
|
25
|
-
onFilter === null || onFilter === void 0 ? void 0 : onFilter(list.data.filter((item) =>
|
|
33
|
+
onFilter === null || onFilter === void 0 ? void 0 : onFilter(list.data.filter((item) => selectedIdsLocal.includes(item.id)));
|
|
26
34
|
setShowDropdown(false);
|
|
27
35
|
};
|
|
28
|
-
const dropdownRef = useRef(null);
|
|
29
36
|
// 防抖处理 search input
|
|
30
37
|
const debouncedSearch = useRef(debounce((value) => {
|
|
31
38
|
list.triggerSearch(value !== null && value !== void 0 ? value : "");
|
|
32
39
|
}, 500)).current;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
React.createElement("h3", { className: "text-sm font-semibold text-slate-900 mb-2" },
|
|
54
|
-
"Select ",
|
|
55
|
-
label),
|
|
56
|
-
React.createElement("div", { className: "relative" },
|
|
57
|
-
React.createElement("i", { className: "fas fa-search absolute left-3 top-1/2 transform -translate-y-1/2 text-slate-400 text-sm" }),
|
|
58
|
-
React.createElement(Input, { placeholder: searchPlaceholder, className: "w-full pl-9 pr-3 py-2 border border-slate-300 rounded-lg text-sm focus:outline-none focus:ring-2 focus:ring-blue-500", onChange: (e) => debouncedSearch(e.target.value) }))),
|
|
59
|
-
React.createElement("div", { className: "max-h-80 overflow-y-auto scrollbar-hide" },
|
|
60
|
-
React.createElement(Skeleton, { loading: list.loading, active: true },
|
|
61
|
-
props.customDropdownItem ? props.customDropdownItem : null,
|
|
62
|
-
list.data.length > 0 ? (list.data.map((opt) => (React.createElement("div", { key: opt.id, className: "flex items-center gap-3 px-4 py-2.5 hover:bg-slate-50 cursor-pointer" },
|
|
63
|
-
React.createElement(Checkbox, { checked: selectedIds.includes(opt.id), onChange: () => handleCheckboxChange(opt.id) }),
|
|
64
|
-
React.createElement("div", { className: "flex-1" },
|
|
65
|
-
React.createElement("div", { className: "text-sm font-medium text-slate-900" }, opt.name)))))) : (React.createElement("div", { className: "px-4 py-8 text-center text-sm text-slate-500" },
|
|
66
|
-
"No ",
|
|
67
|
-
label.toLowerCase(),
|
|
68
|
-
" found")))),
|
|
69
|
-
React.createElement("div", { className: "p-3 border-t border-slate-200 flex items-center justify-between" },
|
|
70
|
-
React.createElement("span", { className: "text-xs text-slate-600" },
|
|
71
|
-
selectedIds.length,
|
|
72
|
-
" selected"),
|
|
73
|
-
React.createElement(Space, null,
|
|
74
|
-
React.createElement(Button, { type: "link", size: "small", className: "text-xs font-medium", onClick: handleReset }, "Clear"),
|
|
75
|
-
React.createElement(Button, { type: "link", size: "small", className: "text-xs text-blue-600 hover:text-blue-700 font-medium", onClick: handleApply }, "Apply"))))))));
|
|
40
|
+
const overlay = observe(() => (React.createElement(FilterDropdown, { className: "w-74", title: `Select ${label}`, clearText: "Clear", onClear: handleReset, onApply: handleApply },
|
|
41
|
+
React.createElement(Input, { className: classnames("h-10 bg-bg-table! [&_input::placeholder]:text-font-grey!"), prefix: " ", placeholder: searchPlaceholder, onChange: (e) => debouncedSearch(e.target.value) }),
|
|
42
|
+
React.createElement("div", { className: "max-h-80 mt-3 overflow-y-auto scrollbar-hide" },
|
|
43
|
+
React.createElement(Skeleton, { loading: list.loading, active: true },
|
|
44
|
+
props.customDropdownItem ? props.customDropdownItem : null,
|
|
45
|
+
list.data.length > 0 ? (list.data.map((opt) => (React.createElement("div", { key: opt.id, className: "px-4 py-2.5 hover:bg-bg-blue cursor-pointer" },
|
|
46
|
+
React.createElement(Checkbox, { checked: selectedIdsLocal.includes(opt.id), onChange: () => handleCheckboxChange(opt.id) },
|
|
47
|
+
React.createElement("div", { className: "text-sm font-medium text-font-primary" }, opt.name)))))) : (React.createElement("div", { className: "px-4 py-8 text-center text-sm text-font-grey" },
|
|
48
|
+
"No ",
|
|
49
|
+
label.toLowerCase(),
|
|
50
|
+
" found")))),
|
|
51
|
+
React.createElement("div", { className: "text-sm text-font-grey pt-2" },
|
|
52
|
+
selectedIdsLocal.length,
|
|
53
|
+
" selected"))));
|
|
54
|
+
return observe(() => (React.createElement("div", { className: "relative" },
|
|
55
|
+
React.createElement(Dropdown, { popupRender: (menu) => overlay, trigger: ["click"], open: showDropdown, destroyOnHidden: true, onOpenChange: (open) => setShowDropdown(open) },
|
|
56
|
+
React.createElement("button", { className: classnames(tabBtnBaseClass, "px-5", active ? tabBtnActiveClass : tabBtnDefaultClass) },
|
|
57
|
+
icon,
|
|
58
|
+
label,
|
|
59
|
+
showDropdown ? (React.createElement(FAIcon, { icon: faChevronUpRegular, className: "ml-2 text-xs" })) : (React.createElement(FAIcon, { icon: faChevronDownRegular, className: "ml-2 text-xs" })))))));
|
|
76
60
|
};
|
|
77
61
|
export default FilterUI;
|
|
78
62
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/my-document/FilterUI/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACN,eAAe,IAAI,MAAM,EACzB,oBAAoB,EACpB,kBAAkB,GAClB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/my-document/FilterUI/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** 列定义(render 可选:分组行首列由 TableUI 覆盖渲染 GroupTitle) */
|
|
3
|
+
export type TableCellColumn = {
|
|
4
|
+
title: React.ReactNode;
|
|
5
|
+
dataIndex: string;
|
|
6
|
+
width?: string | number;
|
|
7
|
+
fixed?: "start" | "end";
|
|
8
|
+
render?: (value: unknown, record: any) => React.ReactNode;
|
|
9
|
+
};
|
|
10
|
+
/** 完整列表列定义 */
|
|
11
|
+
export declare const columnsList: TableCellColumn[];
|
|
12
|
+
/** 侧栏打开时的精简列定义 */
|
|
13
|
+
export declare const columnsSimpleList: TableCellColumn[];
|
|
14
|
+
/** 分组行标题内容(渲染在首列,与展开图标并排) */
|
|
15
|
+
export declare const GroupTitle: ({ record }: {
|
|
16
|
+
record: any;
|
|
17
|
+
}) => React.JSX.Element;
|
|
18
|
+
/** 表格单元格组件:文档行渲染各列内容,分组行渲染标题/图标/计数(整行其余单元格留空) */
|
|
19
|
+
declare const TableCell: (props: any) => React.JSX.Element;
|
|
20
|
+
export default TableCell;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { faCalendarSolid, faFileSolid, faBarsProgressSolid, faUserSolid, faClockSolid, faFolderSolid, faStarSolid, faExclamationCircleSolid, FontAwesomeIcon as FAIcon, } from "@voplus/morpho-ui/es/faIcons";
|
|
2
|
+
import TagView from "@voplus/morpho-org/es/modules/tag/TagView";
|
|
3
|
+
import { Restore, Open, Versions, Download, } from "@voplus/morpho-document/es/controls/DocumentToolbar/buttons";
|
|
4
|
+
import DocumentToolbar from "@voplus/morpho-document/es/controls/DocumentToolbar";
|
|
5
|
+
import { observe } from "@voplus/morpho-ui";
|
|
6
|
+
import UnitAvatar from "@voplus/morpho-org/es/components/UnitAvatar/LoadedUnitAvatar";
|
|
7
|
+
import UnitNameNoteAlert from "@voplus/morpho-org/es/components/UnitNameNoteAlert";
|
|
8
|
+
import UTCShortDate from "@voplus/morpho-ui/es/controls/UTCShortDate";
|
|
9
|
+
import DocumentReference from "@voplus/morpho-document/es/controls/DocumentReference";
|
|
10
|
+
import { useMetaStore, useDocumentStore } from "@voplus/morpho-document-core";
|
|
11
|
+
import React from "react";
|
|
12
|
+
/** 完整列表列定义 */
|
|
13
|
+
export const columnsList = [
|
|
14
|
+
{
|
|
15
|
+
title: (React.createElement(React.Fragment, null,
|
|
16
|
+
React.createElement(FAIcon, { icon: faFileSolid }),
|
|
17
|
+
" File Name")),
|
|
18
|
+
dataIndex: "name",
|
|
19
|
+
width: "26%",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: (React.createElement(React.Fragment, null,
|
|
23
|
+
React.createElement(FAIcon, { icon: faCalendarSolid }),
|
|
24
|
+
" CREATED DATE")),
|
|
25
|
+
dataIndex: "createDate",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: (React.createElement(React.Fragment, null,
|
|
29
|
+
React.createElement(FAIcon, { icon: faClockSolid }),
|
|
30
|
+
" DOCUMENT DATE")),
|
|
31
|
+
dataIndex: "documentDate",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
title: (React.createElement(React.Fragment, null,
|
|
35
|
+
React.createElement(FAIcon, { icon: faFolderSolid }),
|
|
36
|
+
" Folder")),
|
|
37
|
+
dataIndex: "folder",
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
title: (React.createElement(React.Fragment, null,
|
|
41
|
+
React.createElement(FAIcon, { icon: faBarsProgressSolid }),
|
|
42
|
+
" TAG")),
|
|
43
|
+
dataIndex: "tag",
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
title: (React.createElement(React.Fragment, null,
|
|
47
|
+
React.createElement(FAIcon, { icon: faUserSolid }),
|
|
48
|
+
" CREATED BY")),
|
|
49
|
+
dataIndex: "by",
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
title: "",
|
|
53
|
+
dataIndex: "menu",
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
/** 侧栏打开时的精简列定义 */
|
|
57
|
+
export const columnsSimpleList = [
|
|
58
|
+
{
|
|
59
|
+
title: (React.createElement(React.Fragment, null,
|
|
60
|
+
React.createElement(FAIcon, { icon: faFileSolid }),
|
|
61
|
+
" File Name")),
|
|
62
|
+
dataIndex: "detail",
|
|
63
|
+
width: "35%",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
title: (React.createElement(React.Fragment, null,
|
|
67
|
+
React.createElement(FAIcon, { icon: faFolderSolid }),
|
|
68
|
+
" Folder")),
|
|
69
|
+
dataIndex: "folder",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
title: (React.createElement(React.Fragment, null,
|
|
73
|
+
React.createElement(FAIcon, { icon: faBarsProgressSolid }),
|
|
74
|
+
" TAG")),
|
|
75
|
+
dataIndex: "tag",
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
title: " ",
|
|
79
|
+
dataIndex: "menu",
|
|
80
|
+
},
|
|
81
|
+
];
|
|
82
|
+
/** 分组行图标(按 flag 映射;None 无图标) */
|
|
83
|
+
const groupFlagIcon = (flag) => {
|
|
84
|
+
switch (flag) {
|
|
85
|
+
case "Star":
|
|
86
|
+
return React.createElement(FAIcon, { icon: faStarSolid });
|
|
87
|
+
case "Urgent":
|
|
88
|
+
return React.createElement(FAIcon, { icon: faExclamationCircleSolid });
|
|
89
|
+
default:
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
/** 分组行标题内容(渲染在首列,与展开图标并排) */
|
|
94
|
+
export const GroupTitle = ({ record }) => {
|
|
95
|
+
var _a;
|
|
96
|
+
return (React.createElement("div", { className: "flex items-center gap-2 text-sm text-font-primary font-semibold" },
|
|
97
|
+
groupFlagIcon(record === null || record === void 0 ? void 0 : record.flag),
|
|
98
|
+
React.createElement("span", null, record === null || record === void 0 ? void 0 :
|
|
99
|
+
record.name,
|
|
100
|
+
" (", (_a = record === null || record === void 0 ? void 0 : record.count) !== null && _a !== void 0 ? _a : 0,
|
|
101
|
+
")")));
|
|
102
|
+
};
|
|
103
|
+
/** 表格单元格组件:文档行渲染各列内容,分组行渲染标题/图标/计数(整行其余单元格留空) */
|
|
104
|
+
const TableCell = (props) => {
|
|
105
|
+
const { dataIndex, record, children, firstDataIndex, ...restProps } = props;
|
|
106
|
+
const meta = useMetaStore();
|
|
107
|
+
const store = useDocumentStore();
|
|
108
|
+
return observe(() => {
|
|
109
|
+
if (record === null || record === void 0 ? void 0 : record.isGroup) {
|
|
110
|
+
if (dataIndex && dataIndex === firstDataIndex) {
|
|
111
|
+
// children 含 rc-table 注入的展开图标(appendNode),必须渲染
|
|
112
|
+
return React.createElement("td", { ...restProps }, children);
|
|
113
|
+
}
|
|
114
|
+
return React.createElement("td", { ...restProps });
|
|
115
|
+
}
|
|
116
|
+
const renderContent = () => {
|
|
117
|
+
var _a;
|
|
118
|
+
switch (dataIndex) {
|
|
119
|
+
case "name":
|
|
120
|
+
return React.createElement("div", { className: "font-semibold text-font-primary uppercase" }, record.name);
|
|
121
|
+
case "detail":
|
|
122
|
+
return (React.createElement("div", { className: "flex flex-col gap-1" },
|
|
123
|
+
React.createElement("div", { className: "field-label truncate" }, record.name),
|
|
124
|
+
React.createElement("div", { className: "flex items-center gap-5 text-sm text-font-grey font-medium" },
|
|
125
|
+
React.createElement("div", { className: "flex items-center gap-1" },
|
|
126
|
+
React.createElement(FAIcon, { icon: faCalendarSolid }),
|
|
127
|
+
React.createElement(UTCShortDate, { value: record.createDate, format: "DD MMM YYYY" })),
|
|
128
|
+
React.createElement("div", { className: "flex items-center gap-1" },
|
|
129
|
+
React.createElement(FAIcon, { icon: faUserSolid }),
|
|
130
|
+
record.createdBy ? (React.createElement(UnitNameNoteAlert, { id: record.createdBy.id, name: record.createdBy.name })) : ("__")))));
|
|
131
|
+
case "createDate":
|
|
132
|
+
return (React.createElement(UTCShortDate, { value: record.createDate, format: "DD MMM YYYY", className: "text-sm font-medium tracking-wide text-font-primary" }));
|
|
133
|
+
case "documentDate":
|
|
134
|
+
return (React.createElement(UTCShortDate, { value: record.date, format: "DD MMM YYYY", className: "text-sm font-medium tracking-wide text-font-primary" }));
|
|
135
|
+
case "folder":
|
|
136
|
+
return record.folder ? (React.createElement("div", { onClick: (e) => e.stopPropagation() },
|
|
137
|
+
React.createElement(DocumentReference, { id: record.parentId, type: "link" }))) : ("__");
|
|
138
|
+
case "by":
|
|
139
|
+
return (React.createElement("div", { className: "flex min-w-0 items-center gap-1 font-medium text-font-primary" },
|
|
140
|
+
record.createdBy && (React.createElement("div", { className: "shrink-0" },
|
|
141
|
+
React.createElement(UnitAvatar, { unit: record.createdBy }))),
|
|
142
|
+
React.createElement("div", { className: "min-w-0 whitespace-normal wrap-break-word line-clamp-2 text-font-secondary underline" }, record.createdBy ? (React.createElement(UnitNameNoteAlert, { id: record.createdBy.id, name: record.createdBy.name })) : null)));
|
|
143
|
+
case "tag":
|
|
144
|
+
return (React.createElement(React.Fragment, null, ((_a = record.tags) === null || _a === void 0 ? void 0 : _a.length) ? (React.createElement(TagView, { id: record.id, tags: record.tags, items: store.items, maxCount: 1, tagClassName: "primary-tag" })) : ("__")));
|
|
145
|
+
case "menu":
|
|
146
|
+
return (React.createElement("div", { className: "flex justify-end", onClick: (e) => e.stopPropagation() },
|
|
147
|
+
React.createElement(DocumentToolbar, { id: record.id },
|
|
148
|
+
React.createElement(Open, { url: meta.getRoute(record) }),
|
|
149
|
+
record.status === "Archived" && React.createElement(Restore, null),
|
|
150
|
+
React.createElement(Versions, null),
|
|
151
|
+
record.type === "File" && React.createElement(Download, null))));
|
|
152
|
+
default:
|
|
153
|
+
return children;
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
return React.createElement("td", { ...restProps }, renderContent());
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
export default TableCell;
|
|
160
|
+
//# sourceMappingURL=TableCell.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableCell.js","sourceRoot":"","sources":["../../../../../src/modules/my-document/SectionTemplate/DocumentTableUI/TableCell.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
.document-table-ui-hide-scrollbar {
|
|
2
2
|
/* 兼容 antd Table 横向滚动条隐藏 */
|
|
3
|
+
|
|
4
|
+
.prosemirror-mention-node {
|
|
5
|
+
background: transparent;
|
|
6
|
+
color: var(--color-font-secondary);
|
|
7
|
+
font-weight: 500;
|
|
8
|
+
margin: 0;
|
|
9
|
+
padding: 0;
|
|
10
|
+
}
|
|
3
11
|
}
|
|
4
12
|
|
|
5
13
|
.document-table-ui-hide-scrollbar .ant-table-content,
|
|
@@ -13,3 +21,35 @@
|
|
|
13
21
|
.document-table-ui-hide-scrollbar .ant-table-body::-webkit-scrollbar {
|
|
14
22
|
height: 0 !important;
|
|
15
23
|
}
|
|
24
|
+
|
|
25
|
+
/* 分组行(group-Star/Urgent/None):
|
|
26
|
+
1) 图标左移对齐复选框左缘,与普通行复选框/文件名对齐线垂直一致。
|
|
27
|
+
保留 selection 列 td 占位(不使用 display:none,避免影响表格列宽/滚动测量):
|
|
28
|
+
左移量 = selection 列宽 45px + 首列 td 左 padding 16px - selection 列左 padding 8px = 53px
|
|
29
|
+
2) 移除行间分割边框
|
|
30
|
+
3) 背景继承 tr 的 bg-slate-50 铺满整行(覆盖 antd 固定列的白底) */
|
|
31
|
+
.document-table-ui-hide-scrollbar .ant-table-row[data-row-key^="group-"] .ant-table-row-indent {
|
|
32
|
+
display: none;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.document-table-ui-hide-scrollbar
|
|
36
|
+
.ant-table-row[data-row-key^="group-"]
|
|
37
|
+
.ant-table-cell-with-append
|
|
38
|
+
> div {
|
|
39
|
+
margin-inline-start: -42px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.document-table-ui-hide-scrollbar .ant-table-row[data-row-key^="group-"] > td {
|
|
43
|
+
background: inherit !important;
|
|
44
|
+
border-bottom: none !important;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* 表头 selection 列与 tbody 复选框对齐:
|
|
48
|
+
- RegisterTable 自带 [&_.ant-table-thead>tr>th]:p-5!(Tailwind @layer utilities 内的 !important,padding 20px),
|
|
49
|
+
非 layer 的 !important 规则在层叠中输给 layer 内的 !important 规则,因此必须放入 @layer utilities 才能覆盖;
|
|
50
|
+
- 同 layer 内比 specificity 即可获胜,强制表头 selection 列与 tbody 一致(居中 + 水平 padding 8px) */
|
|
51
|
+
@layer utilities {
|
|
52
|
+
.document-table-ui-hide-scrollbar .ant-table-tbody .ant-table-selection-column {
|
|
53
|
+
padding: 16px 20px !important;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import {
|
|
3
|
-
import { ListDataContextState } from "@voplus/morpho-ui/es/data/ListDataContext";
|
|
2
|
+
import { type DocumentGroup } from "../documentGroups";
|
|
4
3
|
import "./index.css";
|
|
4
|
+
/** 分组表格视图:将 Star/Urgent/None 分组合并为树形 RegisterTable,默认全部展开,可折叠;多选工具条复用 morpho-ui 批量操作组件 */
|
|
5
5
|
declare const TableView: (props: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
page?: {
|
|
10
|
-
Page: number;
|
|
11
|
-
PageSize: number;
|
|
12
|
-
};
|
|
6
|
+
/** 分组列表(Star/Urgent/None) */
|
|
7
|
+
groups: DocumentGroup[];
|
|
8
|
+
/** 文档行点击回调 */
|
|
13
9
|
onItemClick?: (id?: string) => void;
|
|
14
|
-
onPageChange?: (page: number, pageSize: number) => void;
|
|
15
10
|
}) => React.JSX.Element;
|
|
16
11
|
export default TableView;
|