@fe-free/core 2.8.1 → 2.8.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/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # @fe-free/core
2
2
 
3
+ ## 2.8.2
4
+
5
+ ### Patch Changes
6
+
7
+ - fix: tree
8
+ - @fe-free/tool@2.8.2
9
+
3
10
  ## 2.8.1
4
11
 
5
12
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fe-free/core",
3
- "version": "2.8.1",
3
+ "version": "2.8.2",
4
4
  "description": "",
5
5
  "main": "./src/index.ts",
6
6
  "author": "",
@@ -41,7 +41,7 @@
41
41
  "remark-gfm": "^4.0.1",
42
42
  "vanilla-jsoneditor": "^0.23.1",
43
43
  "zustand": "^4.5.4",
44
- "@fe-free/tool": "2.8.1"
44
+ "@fe-free/tool": "2.8.2"
45
45
  },
46
46
  "peerDependencies": {
47
47
  "@ant-design/pro-components": "2.8.9",
@@ -92,8 +92,30 @@ export const Default: Story = {
92
92
  key: '4',
93
93
  children: [],
94
94
  },
95
+ {
96
+ title: 'more operateIsDisabled',
97
+ key: '5',
98
+ children: [],
99
+ },
100
+ {
101
+ title: 'more operateIsHidden',
102
+ key: '6',
103
+ children: [],
104
+ },
95
105
  ],
96
106
  },
107
+ createProps: {
108
+ operateIsDisabled: (nodeData) => nodeData?.key === '5',
109
+ operateIsHidden: (nodeData) => nodeData?.key === '6',
110
+ },
111
+ updateProps: {
112
+ operateIsDisabled: (nodeData) => nodeData.key === '5',
113
+ operateIsHidden: (nodeData) => nodeData.key === '6',
114
+ },
115
+ deleteProps: {
116
+ operateIsDisabled: (nodeData) => nodeData.key === '5',
117
+ operateIsHidden: (nodeData) => nodeData.key === '6',
118
+ },
97
119
  },
98
120
  };
99
121
 
@@ -16,6 +16,20 @@ interface FileTreeProps<D extends DataNode> extends TreeProps<D> {
16
16
  requestCreateByValues?: (values: { key?: string; title: string }) => Promise<false | void>;
17
17
  requestUpdateByValues?: (values: { key: string; title: string }) => Promise<false | void>;
18
18
  requestDeleteByRecord?: (values: { key: string }) => Promise<void>;
19
+ /** 注意,没法控制 title 区域的添加(由 actions 来控制) */
20
+ createProps?: {
21
+ operateIsDisabled?: (nodeData: D) => boolean;
22
+
23
+ operateIsHidden?: (nodeData: D) => boolean;
24
+ };
25
+ updateProps?: {
26
+ operateIsDisabled?: (nodeData: D) => boolean;
27
+ operateIsHidden?: (nodeData: D) => boolean;
28
+ };
29
+ deleteProps?: {
30
+ operateIsDisabled?: (nodeData: D) => boolean;
31
+ operateIsHidden?: (nodeData: D) => boolean;
32
+ };
19
33
  }
20
34
 
21
35
  function Detail<D extends DataNode>({
@@ -77,44 +91,69 @@ function More({
77
91
  requestUpdateByValues,
78
92
  requestDeleteByRecord,
79
93
  requestCreateByValues,
94
+ createProps,
95
+ updateProps,
96
+ deleteProps,
80
97
  }) {
98
+ const isCreateDisabled = createProps?.operateIsDisabled?.(nodeData);
99
+ const isCreateHidden = createProps?.operateIsHidden?.(nodeData);
100
+ const isUpdateDisabled = updateProps?.operateIsDisabled?.(nodeData);
101
+ const isUpdateHidden = updateProps?.operateIsHidden?.(nodeData);
102
+ const isDeleteDisabled = deleteProps?.operateIsDisabled?.(nodeData);
103
+ const isDeleteHidden = deleteProps?.operateIsHidden?.(nodeData);
104
+
105
+ const menuItems = [
106
+ actions?.includes('create') &&
107
+ !isCreateHidden && {
108
+ label: isCreateDisabled ? (
109
+ <div className="cursor-not-allowed text-desc">新建子目录</div>
110
+ ) : (
111
+ <Detail
112
+ action="create"
113
+ nodeData={{ key: nodeData.key }}
114
+ requestCreateByValues={(values) => requestCreateByValues?.({ ...values })}
115
+ trigger={<div>新建子目录</div>}
116
+ />
117
+ ),
118
+ key: 'create',
119
+ },
120
+ actions?.includes('update') &&
121
+ !isUpdateHidden && {
122
+ label: isUpdateDisabled ? (
123
+ <div className="cursor-not-allowed text-desc">编辑</div>
124
+ ) : (
125
+ <Detail
126
+ action="update"
127
+ nodeData={nodeData}
128
+ requestUpdateByValues={(values) => requestUpdateByValues?.({ ...values })}
129
+ trigger={<div>编辑</div>}
130
+ />
131
+ ),
132
+ key: 'update',
133
+ },
134
+ actions?.includes('delete') &&
135
+ !isDeleteHidden && {
136
+ label: isDeleteDisabled ? (
137
+ <div className="cursor-not-allowed text-desc">删除</div>
138
+ ) : (
139
+ <OperateDelete
140
+ name={nodeData.title}
141
+ onDelete={() => requestDeleteByRecord?.({ key: nodeData.key })}
142
+ />
143
+ ),
144
+ key: 'delete',
145
+ },
146
+ ].filter(Boolean);
147
+
148
+ if (menuItems.length === 0) {
149
+ return null;
150
+ }
151
+
81
152
  return (
82
153
  <Dropdown
83
154
  placement="bottomRight"
84
155
  menu={{
85
- items: [
86
- actions?.includes('create') && {
87
- label: (
88
- <Detail
89
- action="create"
90
- nodeData={{ key: nodeData.key }}
91
- requestCreateByValues={(values) => requestCreateByValues?.({ ...values })}
92
- trigger={<div>新建子目录</div>}
93
- />
94
- ),
95
- key: 'create',
96
- },
97
- actions?.includes('update') && {
98
- label: (
99
- <Detail
100
- action="update"
101
- nodeData={nodeData}
102
- requestUpdateByValues={(values) => requestUpdateByValues?.({ ...values })}
103
- trigger={<div>编辑</div>}
104
- />
105
- ),
106
- key: 'update',
107
- },
108
- actions?.includes('delete') && {
109
- label: (
110
- <OperateDelete
111
- name={nodeData.title}
112
- onDelete={() => requestDeleteByRecord?.({ key: nodeData.key })}
113
- />
114
- ),
115
- key: 'delete',
116
- },
117
- ].filter(Boolean),
156
+ items: menuItems,
118
157
  }}
119
158
  >
120
159
  <div onClick={(e) => e.preventDefault()}>
@@ -164,6 +203,9 @@ function FileTree<D extends DataNode>(props: FileTreeProps<D>) {
164
203
  requestCreateByValues={props.requestCreateByValues}
165
204
  requestUpdateByValues={props.requestUpdateByValues}
166
205
  requestDeleteByRecord={props.requestDeleteByRecord}
206
+ createProps={props.createProps}
207
+ updateProps={props.updateProps}
208
+ deleteProps={props.deleteProps}
167
209
  />
168
210
  </div>
169
211
  )}
@@ -175,6 +217,9 @@ function FileTree<D extends DataNode>(props: FileTreeProps<D>) {
175
217
  props.requestCreateByValues,
176
218
  props.requestDeleteByRecord,
177
219
  props.requestUpdateByValues,
220
+ props.createProps,
221
+ props.updateProps,
222
+ props.deleteProps,
178
223
  ],
179
224
  );
180
225