@edifice.io/react 2.2.3-develop-b2school.20250418161733 → 2.2.3-develop-b2school.20250422110318
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/hooks/useWorkspaceFolders/index.d.ts +2 -1
- package/dist/hooks/useWorkspaceFolders/useWorkspaceFolders.d.ts +2 -25
- package/dist/hooks/useWorkspaceFolders/useWorkspaceFolders.js +14 -55
- package/dist/hooks/useWorkspaceFolders/useWorkspaceFoldersTree.d.ts +13 -0
- package/dist/hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js +51 -0
- package/dist/index.js +44 -42
- package/dist/modules/multimedia/WorkspaceFolders/WorkspaceFolders.js +18 -11
- package/package.json +6 -6
|
@@ -1,33 +1,10 @@
|
|
|
1
|
-
import { IUserInfo } from '@edifice.io/client';
|
|
2
|
-
interface FolderTreeNode {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
children?: FolderTreeNode[];
|
|
6
|
-
canCopyFileInto: boolean;
|
|
7
|
-
disabled?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare const WORKSPACE_OWNER_FOLDER_ID = "workspace-owner-folder-id";
|
|
10
|
-
export declare const WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
|
|
11
1
|
declare function useWorkspaceFolders(): {
|
|
12
|
-
|
|
13
|
-
id: string;
|
|
14
|
-
name: string;
|
|
15
|
-
children: FolderTreeNode[];
|
|
16
|
-
canCopyFileInto: boolean;
|
|
17
|
-
disabled?: undefined;
|
|
18
|
-
} | {
|
|
19
|
-
id: string;
|
|
20
|
-
name: string;
|
|
21
|
-
children: FolderTreeNode[];
|
|
22
|
-
canCopyFileInto: boolean;
|
|
23
|
-
disabled: boolean;
|
|
24
|
-
})[];
|
|
25
|
-
setSearchQuery: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
26
|
-
user: IUserInfo | undefined;
|
|
2
|
+
folders: import('@edifice.io/client').WorkspaceElement[];
|
|
27
3
|
createFolderMutation: import('../../node_modules/@tanstack/react-query').UseMutationResult<any, Error, {
|
|
28
4
|
folderName: string;
|
|
29
5
|
folderParentId?: string;
|
|
30
6
|
}, unknown>;
|
|
7
|
+
canCopyFileIntoFolder: (folderId: string) => boolean;
|
|
31
8
|
isLoading: boolean;
|
|
32
9
|
};
|
|
33
10
|
export default useWorkspaceFolders;
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import { odeServices } from "@edifice.io/client";
|
|
2
2
|
import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
|
|
3
|
-
import {
|
|
4
|
-
import { useTranslation } from "react-i18next";
|
|
3
|
+
import { useMemo, useCallback } from "react";
|
|
5
4
|
import { useEdificeClient } from "../../providers/EdificeClientProvider/EdificeClientProvider.hook.js";
|
|
6
|
-
const WORKSPACE_OWNER_FOLDER_ID = "workspace-owner-folder-id", WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
|
|
7
5
|
function useWorkspaceFolders() {
|
|
8
|
-
const {
|
|
9
|
-
t
|
|
10
|
-
} = useTranslation(), {
|
|
6
|
+
const queryClient = useQueryClient(), {
|
|
11
7
|
user
|
|
12
|
-
} = useEdificeClient(),
|
|
8
|
+
} = useEdificeClient(), {
|
|
13
9
|
data: ownerWorkspaceData = [],
|
|
14
10
|
isLoading: isLoadingOwner
|
|
15
11
|
} = useQuery({
|
|
@@ -31,59 +27,22 @@ function useWorkspaceFolders() {
|
|
|
31
27
|
queryKey: ["workspace", "folders"]
|
|
32
28
|
});
|
|
33
29
|
}
|
|
34
|
-
}), [
|
|
30
|
+
}), folders = useMemo(() => [...ownerWorkspaceData, ...sharedWorkspaceData], [ownerWorkspaceData, sharedWorkspaceData]), canCopyFileIntoFolder = useCallback((folderId) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const folder = folders.find((folder2) => folder2._id === folderId);
|
|
33
|
+
if (!folder || !user) return !1;
|
|
34
|
+
const userId = user.userId;
|
|
35
|
+
if (folder.owner === userId) return !0;
|
|
36
|
+
const userRights = (_a = folder.inheritedShares) == null ? void 0 : _a.filter((right) => right.userId === userId || user.groupsIds.includes(right.groupId)), contrib = "org-entcore-workspace-controllers-WorkspaceController|updateDocument";
|
|
37
|
+
return !!(userRights != null && userRights.find((right) => right[contrib]));
|
|
38
|
+
}, [folders, user]);
|
|
35
39
|
return {
|
|
36
|
-
|
|
37
|
-
const buildWorkspaceTree = (ownerTree, sharedTree) => [{
|
|
38
|
-
id: WORKSPACE_OWNER_FOLDER_ID,
|
|
39
|
-
name: t("workspace.myDocuments"),
|
|
40
|
-
children: ownerTree,
|
|
41
|
-
canCopyFileInto: !0
|
|
42
|
-
}, {
|
|
43
|
-
id: WORKSPACE_SHARED_FOLDER_ID,
|
|
44
|
-
name: t("workspace.sharedDocuments"),
|
|
45
|
-
children: sharedTree,
|
|
46
|
-
canCopyFileInto: !1,
|
|
47
|
-
disabled: !0
|
|
48
|
-
}], ownerFolders = buildTree(ownerWorkspaceData, user), sharedFolders = buildTree(sharedWorkspaceData, user);
|
|
49
|
-
return buildWorkspaceTree(searchQuery ? filterTree(ownerFolders, searchQuery) : ownerFolders, searchQuery ? filterTree(sharedFolders, searchQuery) : sharedFolders);
|
|
50
|
-
}, [ownerWorkspaceData, sharedWorkspaceData, searchQuery, user]),
|
|
51
|
-
setSearchQuery,
|
|
52
|
-
user,
|
|
40
|
+
folders,
|
|
53
41
|
createFolderMutation,
|
|
42
|
+
canCopyFileIntoFolder,
|
|
54
43
|
isLoading: isLoadingOwner || isLoadingShared
|
|
55
44
|
};
|
|
56
45
|
}
|
|
57
|
-
const buildTree = (workspaceData, user) => {
|
|
58
|
-
const nodes = /* @__PURE__ */ new Map(), fullTree = [];
|
|
59
|
-
return workspaceData.forEach((item) => {
|
|
60
|
-
const canCopyFileInto = user && canWriteOnFolder(item, user.userId, user.groupsIds);
|
|
61
|
-
nodes.set(item._id, {
|
|
62
|
-
id: item._id,
|
|
63
|
-
name: item.name,
|
|
64
|
-
children: [],
|
|
65
|
-
canCopyFileInto,
|
|
66
|
-
expandedNodes: ["0576e0dd-129b-4244-b36a-49bda713d273", "50c1b81b-d8b7-4474-9d69-b5e441b31a8c", "a1aac5c0-6bfe-4308-8c43-812378e2d9bf"]
|
|
67
|
-
});
|
|
68
|
-
}), workspaceData.forEach((item) => {
|
|
69
|
-
var _a;
|
|
70
|
-
const nodeItem = nodes.get(item._id);
|
|
71
|
-
nodeItem.canCopyFileInto && (item.eParent && nodes.has(item.eParent) ? (_a = nodes.get(item.eParent)) == null || _a.children.push(nodeItem) : fullTree.push(nodeItem));
|
|
72
|
-
}), fullTree;
|
|
73
|
-
}, filterTree = (nodes, search) => nodes.map((node) => {
|
|
74
|
-
const filteredChildren = node.children ? filterTree(node.children, search) : [];
|
|
75
|
-
return node.name.toLowerCase().includes(search.toLowerCase()) || filteredChildren.length > 0 ? {
|
|
76
|
-
...node,
|
|
77
|
-
children: filteredChildren
|
|
78
|
-
} : null;
|
|
79
|
-
}).filter((node) => node !== null), canWriteOnFolder = (folderData, userId, userGroupsIds) => {
|
|
80
|
-
var _a;
|
|
81
|
-
if (folderData.owner === userId) return !0;
|
|
82
|
-
const userRights = (_a = folderData.inheritedShares) == null ? void 0 : _a.filter((right) => right.userId === userId || userGroupsIds.includes(right.groupId)), contrib = "org-entcore-workspace-controllers-WorkspaceController|updateDocument";
|
|
83
|
-
return !!(userRights != null && userRights.find((right) => right[contrib]));
|
|
84
|
-
};
|
|
85
46
|
export {
|
|
86
|
-
WORKSPACE_OWNER_FOLDER_ID,
|
|
87
|
-
WORKSPACE_SHARED_FOLDER_ID,
|
|
88
47
|
useWorkspaceFolders as default
|
|
89
48
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { WorkspaceElement } from '@edifice.io/client';
|
|
2
|
+
interface FolderTreeNode {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
children?: FolderTreeNode[];
|
|
6
|
+
}
|
|
7
|
+
export declare const WORKSPACE_USER_FOLDER_ID = "workspace-user-folder-id";
|
|
8
|
+
export declare const WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
|
|
9
|
+
declare function useWorkspaceFoldersTree(folders?: WorkspaceElement[]): {
|
|
10
|
+
foldersTree: FolderTreeNode[];
|
|
11
|
+
filterTree: import('react').Dispatch<import('react').SetStateAction<string>>;
|
|
12
|
+
};
|
|
13
|
+
export default useWorkspaceFoldersTree;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { useState, useMemo } from "react";
|
|
2
|
+
import { useTranslation } from "react-i18next";
|
|
3
|
+
import { useEdificeClient } from "../../providers/EdificeClientProvider/EdificeClientProvider.hook.js";
|
|
4
|
+
const WORKSPACE_USER_FOLDER_ID = "workspace-user-folder-id", WORKSPACE_SHARED_FOLDER_ID = "workspace-shared-folder-id";
|
|
5
|
+
function useWorkspaceFoldersTree(folders) {
|
|
6
|
+
const {
|
|
7
|
+
t
|
|
8
|
+
} = useTranslation(), {
|
|
9
|
+
user
|
|
10
|
+
} = useEdificeClient(), [searchQuery, setSearchQuery] = useState("");
|
|
11
|
+
return {
|
|
12
|
+
foldersTree: useMemo(() => {
|
|
13
|
+
const userTreeLabel = t("workspace.myDocuments"), sharedTreeLabel = t("workspace.sharedDocuments"), foldersTree = buildTree(folders || [], userTreeLabel, sharedTreeLabel);
|
|
14
|
+
return searchQuery ? filterTree(foldersTree, searchQuery) : foldersTree;
|
|
15
|
+
}, [folders, searchQuery, user]),
|
|
16
|
+
filterTree: setSearchQuery
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const buildTree = (workspaceData, userTreeLabel, sharedTreeLabel) => {
|
|
20
|
+
const nodes = /* @__PURE__ */ new Map(), userTree = [], sharedTree = [];
|
|
21
|
+
return workspaceData.forEach((item) => {
|
|
22
|
+
nodes.set(item._id, {
|
|
23
|
+
id: item._id,
|
|
24
|
+
name: item.name,
|
|
25
|
+
children: []
|
|
26
|
+
});
|
|
27
|
+
}), workspaceData.forEach((item) => {
|
|
28
|
+
var _a;
|
|
29
|
+
const nodeItem = nodes.get(item._id);
|
|
30
|
+
item.eParent && nodes.has(item.eParent) ? (_a = nodes.get(item.eParent)) == null || _a.children.push(nodeItem) : item.isShared ? sharedTree.push(nodeItem) : userTree.push(nodeItem);
|
|
31
|
+
}), [{
|
|
32
|
+
id: WORKSPACE_USER_FOLDER_ID,
|
|
33
|
+
name: userTreeLabel,
|
|
34
|
+
children: userTree
|
|
35
|
+
}, {
|
|
36
|
+
id: WORKSPACE_SHARED_FOLDER_ID,
|
|
37
|
+
name: sharedTreeLabel,
|
|
38
|
+
children: sharedTree
|
|
39
|
+
}];
|
|
40
|
+
}, filterTree = (nodes, search) => nodes.map((node) => {
|
|
41
|
+
const filteredChildren = node.children ? filterTree(node.children, search) : [];
|
|
42
|
+
return node.name.toLowerCase().includes(search.toLowerCase()) || filteredChildren.length > 0 ? {
|
|
43
|
+
...node,
|
|
44
|
+
children: filteredChildren
|
|
45
|
+
} : null;
|
|
46
|
+
}).filter((node) => node !== null);
|
|
47
|
+
export {
|
|
48
|
+
WORKSPACE_SHARED_FOLDER_ID,
|
|
49
|
+
WORKSPACE_USER_FOLDER_ID,
|
|
50
|
+
useWorkspaceFoldersTree as default
|
|
51
|
+
};
|
package/dist/index.js
CHANGED
|
@@ -72,27 +72,28 @@ import { default as default71 } from "./hooks/useUpload/useUpload.js";
|
|
|
72
72
|
import { default as default72 } from "./hooks/useUploadFiles/useUploadFiles.js";
|
|
73
73
|
import { default as default73 } from "./hooks/useUser/useUser.js";
|
|
74
74
|
import { default as default74 } from "./hooks/useWorkspaceFile/useWorkspaceFile.js";
|
|
75
|
-
import {
|
|
76
|
-
import { default as default76 } from "./hooks/
|
|
77
|
-
import { default as default77 } from "./hooks/
|
|
78
|
-
import { default as default78 } from "./hooks/
|
|
79
|
-
import { default as default79 } from "./
|
|
80
|
-
import { default as default80 } from "./modules/modals/
|
|
81
|
-
import { default as default81 } from "./modules/modals/
|
|
82
|
-
import { default as default82 } from "./modules/modals/
|
|
83
|
-
import { default as default83 } from "./modules/modals/ResourceModal/
|
|
84
|
-
import { default as default84 } from "./modules/modals/
|
|
85
|
-
import { default as default85 } from "./modules/modals/ShareModal/
|
|
86
|
-
import { default as default86 } from "./modules/modals/ShareModal/
|
|
87
|
-
import { default as default87 } from "./modules/
|
|
88
|
-
import { default as default88 } from "./modules/multimedia/
|
|
89
|
-
import { default as default89 } from "./modules/multimedia/
|
|
90
|
-
import { default as default90 } from "./modules/multimedia/
|
|
91
|
-
import { default as default91 } from "./modules/multimedia/
|
|
92
|
-
import { default as default92 } from "./modules/multimedia/
|
|
93
|
-
import { default as default93 } from "./modules/multimedia/
|
|
94
|
-
import { default as default94 } from "./modules/multimedia/
|
|
95
|
-
import { default as default95 } from "./modules/multimedia/
|
|
75
|
+
import { default as default75 } from "./hooks/useWorkspaceFolders/useWorkspaceFolders.js";
|
|
76
|
+
import { WORKSPACE_SHARED_FOLDER_ID, WORKSPACE_USER_FOLDER_ID, default as default76 } from "./hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js";
|
|
77
|
+
import { default as default77 } from "./hooks/useWorkspaceSearch/useWorkspaceSearch.js";
|
|
78
|
+
import { default as default78 } from "./hooks/useXitiTrackPageLoad/useXitiTrackPageLoad.js";
|
|
79
|
+
import { default as default79 } from "./hooks/useZendeskGuide/useZendeskGuide.js";
|
|
80
|
+
import { default as default80 } from "./modules/modals/ConfirmModal/ConfirmModal.js";
|
|
81
|
+
import { default as default81 } from "./modules/modals/OnboardingModal/OnboardingModal.js";
|
|
82
|
+
import { default as default82 } from "./modules/modals/PublishModal/PublishModal.js";
|
|
83
|
+
import { default as default83 } from "./modules/modals/ResourceModal/apps/BlogPublic.js";
|
|
84
|
+
import { default as default84 } from "./modules/modals/ResourceModal/hooks/useUpdateMutation.js";
|
|
85
|
+
import { default as default85 } from "./modules/modals/ShareModal/ShareModal.js";
|
|
86
|
+
import { default as default86 } from "./modules/modals/ShareModal/apps/ShareBlog.js";
|
|
87
|
+
import { default as default87 } from "./modules/modals/ShareModal/hooks/useShareMutation.js";
|
|
88
|
+
import { default as default88 } from "./modules/multimedia/AudioRecorder/AudioRecorder.js";
|
|
89
|
+
import { default as default89 } from "./modules/multimedia/Embed/Embed.js";
|
|
90
|
+
import { default as default90 } from "./modules/multimedia/ImageEditor/components/ImageEditor.js";
|
|
91
|
+
import { default as default91 } from "./modules/multimedia/ImagePicker/ImagePicker.js";
|
|
92
|
+
import { default as default92 } from "./modules/multimedia/MediaLibrary/MediaLibrary.js";
|
|
93
|
+
import { default as default93 } from "./modules/multimedia/VideoEmbed/VideoEmbed.js";
|
|
94
|
+
import { default as default94 } from "./modules/multimedia/VideoRecorder/VideoRecorder.js";
|
|
95
|
+
import { default as default95 } from "./modules/multimedia/Workspace/Workspace.js";
|
|
96
|
+
import { default as default96 } from "./modules/multimedia/WorkspaceFolders/WorkspaceFolders.js";
|
|
96
97
|
import { AccessiblePalette, DefaultPalette } from "./components/ColorPicker/ColorPalette.js";
|
|
97
98
|
import { DropzoneContext, useDropzoneContext } from "./components/Dropzone/DropzoneContext.js";
|
|
98
99
|
import { Column, Grid } from "./components/Grid/Grid.js";
|
|
@@ -128,11 +129,11 @@ export {
|
|
|
128
129
|
default4 as AppHeader,
|
|
129
130
|
default5 as AppIcon,
|
|
130
131
|
default6 as Attachment,
|
|
131
|
-
|
|
132
|
+
default88 as AudioRecorder,
|
|
132
133
|
default7 as Avatar,
|
|
133
134
|
default8 as AvatarGroup,
|
|
134
135
|
default9 as Badge,
|
|
135
|
-
|
|
136
|
+
default83 as BlogPublic,
|
|
136
137
|
default10 as Breadcrumb,
|
|
137
138
|
default11 as Button,
|
|
138
139
|
default14 as Card,
|
|
@@ -141,7 +142,7 @@ export {
|
|
|
141
142
|
default17 as ColorPickerItem,
|
|
142
143
|
Column,
|
|
143
144
|
default18 as Combobox,
|
|
144
|
-
|
|
145
|
+
default80 as ConfirmModal,
|
|
145
146
|
DefaultPalette,
|
|
146
147
|
DndTree,
|
|
147
148
|
default19 as Dropdown,
|
|
@@ -151,7 +152,7 @@ export {
|
|
|
151
152
|
EdificeClientProvider,
|
|
152
153
|
EdificeThemeContext,
|
|
153
154
|
EdificeThemeProvider,
|
|
154
|
-
|
|
155
|
+
default89 as Embed,
|
|
155
156
|
default21 as EmptyScreen,
|
|
156
157
|
ExternalLinker,
|
|
157
158
|
default23 as FormControl,
|
|
@@ -160,8 +161,8 @@ export {
|
|
|
160
161
|
default24 as Heading,
|
|
161
162
|
default12 as IconButton,
|
|
162
163
|
default25 as Image,
|
|
163
|
-
|
|
164
|
-
|
|
164
|
+
default90 as ImageEditor,
|
|
165
|
+
default91 as ImagePicker,
|
|
165
166
|
default26 as Input,
|
|
166
167
|
InternalLinker,
|
|
167
168
|
default27 as Label,
|
|
@@ -170,24 +171,24 @@ export {
|
|
|
170
171
|
default28 as Loading,
|
|
171
172
|
default29 as LoadingScreen,
|
|
172
173
|
default30 as Logo,
|
|
173
|
-
|
|
174
|
+
default92 as MediaLibrary,
|
|
174
175
|
Menu,
|
|
175
176
|
MockedProvider,
|
|
176
177
|
default31 as Modal,
|
|
177
|
-
|
|
178
|
+
default81 as OnboardingModal,
|
|
178
179
|
Popover,
|
|
179
180
|
PopoverBody,
|
|
180
181
|
PopoverFooter,
|
|
181
182
|
PopoverHeader,
|
|
182
183
|
default32 as PreventPropagation,
|
|
183
|
-
|
|
184
|
+
default82 as PublishModal,
|
|
184
185
|
default33 as Radio,
|
|
185
186
|
ResourceModal,
|
|
186
187
|
default34 as SearchBar,
|
|
187
188
|
default13 as SearchButton,
|
|
188
189
|
default35 as Select,
|
|
189
|
-
|
|
190
|
-
|
|
190
|
+
default86 as ShareBlog,
|
|
191
|
+
default85 as ShareModal,
|
|
191
192
|
default41 as SortableTree,
|
|
192
193
|
default36 as StackedGroup,
|
|
193
194
|
default37 as Switch,
|
|
@@ -200,13 +201,13 @@ export {
|
|
|
200
201
|
TreeNode,
|
|
201
202
|
TreeNodeFolderWrapper,
|
|
202
203
|
default43 as TreeView,
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
default93 as VideoEmbed,
|
|
205
|
+
default94 as VideoRecorder,
|
|
205
206
|
default44 as VisuallyHidden,
|
|
206
|
-
WORKSPACE_OWNER_FOLDER_ID,
|
|
207
207
|
WORKSPACE_SHARED_FOLDER_ID,
|
|
208
|
-
|
|
209
|
-
default95 as
|
|
208
|
+
WORKSPACE_USER_FOLDER_ID,
|
|
209
|
+
default95 as Workspace,
|
|
210
|
+
default96 as WorkspaceFolders,
|
|
210
211
|
addNode,
|
|
211
212
|
arrayUnique,
|
|
212
213
|
buildTree,
|
|
@@ -259,7 +260,7 @@ export {
|
|
|
259
260
|
default63 as useLibraryUrl,
|
|
260
261
|
default64 as useMediaLibrary,
|
|
261
262
|
default65 as useScrollToTop,
|
|
262
|
-
|
|
263
|
+
default87 as useShareMutation,
|
|
263
264
|
default66 as useTitle,
|
|
264
265
|
default67 as useToast,
|
|
265
266
|
default68 as useToggle,
|
|
@@ -267,14 +268,15 @@ export {
|
|
|
267
268
|
default70 as useTrashedResource,
|
|
268
269
|
useTreeSortable,
|
|
269
270
|
useTreeView,
|
|
270
|
-
|
|
271
|
+
default84 as useUpdateMutation,
|
|
271
272
|
default71 as useUpload,
|
|
272
273
|
default72 as useUploadFiles,
|
|
273
274
|
default73 as useUser,
|
|
274
275
|
default74 as useWorkspaceFile,
|
|
275
276
|
default75 as useWorkspaceFolders,
|
|
276
|
-
default76 as
|
|
277
|
-
default77 as
|
|
278
|
-
default78 as
|
|
277
|
+
default76 as useWorkspaceFoldersTree,
|
|
278
|
+
default77 as useWorkspaceSearch,
|
|
279
|
+
default78 as useXitiTrackPageLoad,
|
|
280
|
+
default79 as useZendeskGuide,
|
|
279
281
|
wrapTreeNode
|
|
280
282
|
};
|
|
@@ -3,7 +3,8 @@ import { useState } from "react";
|
|
|
3
3
|
import { useTranslation } from "react-i18next";
|
|
4
4
|
import SvgIconFolderAdd from "../../icons/components/IconFolderAdd.js";
|
|
5
5
|
import NewFolderForm from "./components/NewFolderForm.js";
|
|
6
|
-
import useWorkspaceFolders
|
|
6
|
+
import useWorkspaceFolders from "../../../hooks/useWorkspaceFolders/useWorkspaceFolders.js";
|
|
7
|
+
import useWorkspaceFoldersTree, { WORKSPACE_USER_FOLDER_ID, WORKSPACE_SHARED_FOLDER_ID } from "../../../hooks/useWorkspaceFolders/useWorkspaceFoldersTree.js";
|
|
7
8
|
import SearchBar from "../../../components/SearchBar/SearchBar.js";
|
|
8
9
|
import Loading from "../../../components/Loading/Loading.js";
|
|
9
10
|
import Tree from "../../../components/Tree/components/Tree.js";
|
|
@@ -14,16 +15,22 @@ function WorkspaceFolders({
|
|
|
14
15
|
const {
|
|
15
16
|
t
|
|
16
17
|
} = useTranslation(), {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
} = useWorkspaceFolders(),
|
|
18
|
+
folders,
|
|
19
|
+
isLoading,
|
|
20
|
+
canCopyFileIntoFolder
|
|
21
|
+
} = useWorkspaceFolders(), {
|
|
22
|
+
foldersTree,
|
|
23
|
+
filterTree
|
|
24
|
+
} = useWorkspaceFoldersTree(folders), [shouldExpandAllNodes, setShouldExpandAllNodes] = useState(!1), [searchValue, setSearchValue] = useState(""), [selectedFolderId, setSelectedFolderId] = useState(void 0), [showNewFolderForm, setShowNewFolderForm] = useState(!1), [canCreateFolderIntoSelectedFolder, setCanCreateFolderIntoSelectedFolder] = useState(!1), handleSearchChange = (e) => {
|
|
21
25
|
setSearchValue(e.target.value);
|
|
22
26
|
}, handleSearchSubmit = () => {
|
|
23
|
-
|
|
27
|
+
filterTree(searchValue), setShouldExpandAllNodes(searchValue !== "");
|
|
24
28
|
}, handleFolderSelected = (folderId) => {
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
setShowNewFolderForm(!1);
|
|
30
|
+
const newSelectedFolderId = folderId === WORKSPACE_USER_FOLDER_ID ? "" : folderId;
|
|
31
|
+
setSelectedFolderId(newSelectedFolderId);
|
|
32
|
+
const canCopyFileInto = folderId === WORKSPACE_USER_FOLDER_ID || canCopyFileIntoFolder(folderId) && folderId !== WORKSPACE_SHARED_FOLDER_ID;
|
|
33
|
+
setCanCreateFolderIntoSelectedFolder(canCopyFileInto), onFolderSelected(newSelectedFolderId, canCopyFileInto);
|
|
27
34
|
}, handleNewFolderClick = () => {
|
|
28
35
|
setShowNewFolderForm(!0);
|
|
29
36
|
};
|
|
@@ -31,10 +38,10 @@ function WorkspaceFolders({
|
|
|
31
38
|
/* @__PURE__ */ jsx("p", { children: t("attachments.add.to.folder.modal.description") }),
|
|
32
39
|
/* @__PURE__ */ jsx(SearchBar, { onChange: handleSearchChange, isVariant: !1, placeholder: t("search"), onClick: handleSearchSubmit }),
|
|
33
40
|
/* @__PURE__ */ jsxs("div", { className: "border border-gray-400 rounded", children: [
|
|
34
|
-
/* @__PURE__ */ jsx("div", { className: "p-12", children: isLoading ? /* @__PURE__ */ jsx(Loading, { isLoading: !0, className: "justify-content-center" }) : /* @__PURE__ */ jsx(Tree, { nodes:
|
|
41
|
+
/* @__PURE__ */ jsx("div", { className: "p-12", children: isLoading ? /* @__PURE__ */ jsx(Loading, { isLoading: !0, className: "justify-content-center" }) : /* @__PURE__ */ jsx(Tree, { nodes: foldersTree, onTreeItemClick: handleFolderSelected, shouldExpandAllNodes }) }),
|
|
35
42
|
/* @__PURE__ */ jsxs("div", { className: "d-flex justify-content-end border-top border-gray-400 px-8 py-4 ", children: [
|
|
36
|
-
!showNewFolderForm && /* @__PURE__ */ jsx(Button, { color: "primary", variant: "ghost", leftIcon: /* @__PURE__ */ jsx(SvgIconFolderAdd, {}), onClick: handleNewFolderClick, disabled:
|
|
37
|
-
selectedFolderId
|
|
43
|
+
!showNewFolderForm && /* @__PURE__ */ jsx(Button, { color: "primary", variant: "ghost", leftIcon: /* @__PURE__ */ jsx(SvgIconFolderAdd, {}), onClick: handleNewFolderClick, disabled: !canCreateFolderIntoSelectedFolder, children: t("workspace.folder.create") }),
|
|
44
|
+
showNewFolderForm && selectedFolderId !== void 0 && /* @__PURE__ */ jsx(NewFolderForm, { onClose: () => setShowNewFolderForm(!1), folderParentId: selectedFolderId })
|
|
38
45
|
] })
|
|
39
46
|
] })
|
|
40
47
|
] }) });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@edifice.io/react",
|
|
3
|
-
"version": "2.2.3-develop-b2school.
|
|
3
|
+
"version": "2.2.3-develop-b2school.20250422110318",
|
|
4
4
|
"description": "Edifice React Library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -118,9 +118,9 @@
|
|
|
118
118
|
"react-slugify": "^3.0.3",
|
|
119
119
|
"swiper": "^10.1.0",
|
|
120
120
|
"ua-parser-js": "^1.0.36",
|
|
121
|
-
"@edifice.io/bootstrap": "2.2.3-develop-b2school.
|
|
122
|
-
"@edifice.io/tiptap-extensions": "2.2.3-develop-b2school.
|
|
123
|
-
"@edifice.io/utilities": "2.2.3-develop-b2school.
|
|
121
|
+
"@edifice.io/bootstrap": "2.2.3-develop-b2school.20250422110318",
|
|
122
|
+
"@edifice.io/tiptap-extensions": "2.2.3-develop-b2school.20250422110318",
|
|
123
|
+
"@edifice.io/utilities": "2.2.3-develop-b2school.20250422110318"
|
|
124
124
|
},
|
|
125
125
|
"devDependencies": {
|
|
126
126
|
"@babel/plugin-transform-react-pure-annotations": "^7.23.3",
|
|
@@ -151,8 +151,8 @@
|
|
|
151
151
|
"vite": "^5.4.11",
|
|
152
152
|
"vite-plugin-dts": "^4.1.0",
|
|
153
153
|
"vite-tsconfig-paths": "^5.0.1",
|
|
154
|
-
"@edifice.io/client": "2.2.3-develop-b2school.
|
|
155
|
-
"@edifice.io/config": "2.2.3-develop-b2school.
|
|
154
|
+
"@edifice.io/client": "2.2.3-develop-b2school.20250422110318",
|
|
155
|
+
"@edifice.io/config": "2.2.3-develop-b2school.20250422110318"
|
|
156
156
|
},
|
|
157
157
|
"peerDependencies": {
|
|
158
158
|
"@react-spring/web": "^9.7.5",
|