@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.
@@ -1,2 +1,3 @@
1
1
  export { default as useWorkspaceFolders } from './useWorkspaceFolders';
2
- export * from './useWorkspaceFolders';
2
+ export { default as useWorkspaceFoldersTree } from './useWorkspaceFoldersTree';
3
+ export * from './useWorkspaceFoldersTree';
@@ -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
- folderTree: ({
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 { useState, useMemo } from "react";
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(), queryClient = useQueryClient(), {
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
- }), [searchQuery, setSearchQuery] = useState("");
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
- folderTree: useMemo(() => {
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 { WORKSPACE_OWNER_FOLDER_ID, WORKSPACE_SHARED_FOLDER_ID, default as default75 } from "./hooks/useWorkspaceFolders/useWorkspaceFolders.js";
76
- import { default as default76 } from "./hooks/useWorkspaceSearch/useWorkspaceSearch.js";
77
- import { default as default77 } from "./hooks/useXitiTrackPageLoad/useXitiTrackPageLoad.js";
78
- import { default as default78 } from "./hooks/useZendeskGuide/useZendeskGuide.js";
79
- import { default as default79 } from "./modules/modals/ConfirmModal/ConfirmModal.js";
80
- import { default as default80 } from "./modules/modals/OnboardingModal/OnboardingModal.js";
81
- import { default as default81 } from "./modules/modals/PublishModal/PublishModal.js";
82
- import { default as default82 } from "./modules/modals/ResourceModal/apps/BlogPublic.js";
83
- import { default as default83 } from "./modules/modals/ResourceModal/hooks/useUpdateMutation.js";
84
- import { default as default84 } from "./modules/modals/ShareModal/ShareModal.js";
85
- import { default as default85 } from "./modules/modals/ShareModal/apps/ShareBlog.js";
86
- import { default as default86 } from "./modules/modals/ShareModal/hooks/useShareMutation.js";
87
- import { default as default87 } from "./modules/multimedia/AudioRecorder/AudioRecorder.js";
88
- import { default as default88 } from "./modules/multimedia/Embed/Embed.js";
89
- import { default as default89 } from "./modules/multimedia/ImageEditor/components/ImageEditor.js";
90
- import { default as default90 } from "./modules/multimedia/ImagePicker/ImagePicker.js";
91
- import { default as default91 } from "./modules/multimedia/MediaLibrary/MediaLibrary.js";
92
- import { default as default92 } from "./modules/multimedia/VideoEmbed/VideoEmbed.js";
93
- import { default as default93 } from "./modules/multimedia/VideoRecorder/VideoRecorder.js";
94
- import { default as default94 } from "./modules/multimedia/Workspace/Workspace.js";
95
- import { default as default95 } from "./modules/multimedia/WorkspaceFolders/WorkspaceFolders.js";
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
- default87 as AudioRecorder,
132
+ default88 as AudioRecorder,
132
133
  default7 as Avatar,
133
134
  default8 as AvatarGroup,
134
135
  default9 as Badge,
135
- default82 as BlogPublic,
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
- default79 as ConfirmModal,
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
- default88 as Embed,
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
- default89 as ImageEditor,
164
- default90 as ImagePicker,
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
- default91 as MediaLibrary,
174
+ default92 as MediaLibrary,
174
175
  Menu,
175
176
  MockedProvider,
176
177
  default31 as Modal,
177
- default80 as OnboardingModal,
178
+ default81 as OnboardingModal,
178
179
  Popover,
179
180
  PopoverBody,
180
181
  PopoverFooter,
181
182
  PopoverHeader,
182
183
  default32 as PreventPropagation,
183
- default81 as PublishModal,
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
- default85 as ShareBlog,
190
- default84 as ShareModal,
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
- default92 as VideoEmbed,
204
- default93 as VideoRecorder,
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
- default94 as Workspace,
209
- default95 as WorkspaceFolders,
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
- default86 as useShareMutation,
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
- default83 as useUpdateMutation,
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 useWorkspaceSearch,
277
- default77 as useXitiTrackPageLoad,
278
- default78 as useZendeskGuide,
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, { WORKSPACE_SHARED_FOLDER_ID, WORKSPACE_OWNER_FOLDER_ID } from "../../../hooks/useWorkspaceFolders/useWorkspaceFolders.js";
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
- folderTree,
18
- setSearchQuery,
19
- isLoading
20
- } = useWorkspaceFolders(), [shouldExpandAllNodes, setShouldExpandAllNodes] = useState(!1), [searchValue, setSearchValue] = useState(""), [selectedFolderId, setSelectedFolderId] = useState(void 0), [showNewFolderForm, setShowNewFolderForm] = useState(!1), handleSearchChange = (e) => {
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
- setSearchQuery(searchValue), setShouldExpandAllNodes(searchValue !== "");
27
+ filterTree(searchValue), setShouldExpandAllNodes(searchValue !== "");
24
28
  }, handleFolderSelected = (folderId) => {
25
- const newSelectedFolderId = folderId === WORKSPACE_OWNER_FOLDER_ID ? "" : folderId, canCopyFileInto = folderId != WORKSPACE_SHARED_FOLDER_ID;
26
- onFolderSelected(newSelectedFolderId, canCopyFileInto), setSelectedFolderId(newSelectedFolderId);
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: folderTree, onTreeItemClick: handleFolderSelected, shouldExpandAllNodes }) }),
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: [WORKSPACE_SHARED_FOLDER_ID, void 0].includes(selectedFolderId), children: t("workspace.folder.create") }),
37
- selectedFolderId != null && showNewFolderForm && /* @__PURE__ */ jsx(NewFolderForm, { onClose: () => setShowNewFolderForm(!1), folderParentId: 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.20250418161733",
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.20250418161733",
122
- "@edifice.io/tiptap-extensions": "2.2.3-develop-b2school.20250418161733",
123
- "@edifice.io/utilities": "2.2.3-develop-b2school.20250418161733"
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.20250418161733",
155
- "@edifice.io/config": "2.2.3-develop-b2school.20250418161733"
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",