@strapi/upload 5.50.2 → 5.51.1

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.
Files changed (154) hide show
  1. package/dist/admin/future/pages/Assets/AssetsPage.js +201 -137
  2. package/dist/admin/future/pages/Assets/AssetsPage.js.map +1 -1
  3. package/dist/admin/future/pages/Assets/AssetsPage.mjs +202 -138
  4. package/dist/admin/future/pages/Assets/AssetsPage.mjs.map +1 -1
  5. package/dist/admin/future/pages/Assets/components/AssetsGrid.js +161 -30
  6. package/dist/admin/future/pages/Assets/components/AssetsGrid.js.map +1 -1
  7. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs +163 -32
  8. package/dist/admin/future/pages/Assets/components/AssetsGrid.mjs.map +1 -1
  9. package/dist/admin/future/pages/Assets/components/AssetsTable.js +222 -59
  10. package/dist/admin/future/pages/Assets/components/AssetsTable.js.map +1 -1
  11. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs +223 -60
  12. package/dist/admin/future/pages/Assets/components/AssetsTable.mjs.map +1 -1
  13. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js +252 -0
  14. package/dist/admin/future/pages/Assets/components/BulkActionsBar.js.map +1 -0
  15. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs +250 -0
  16. package/dist/admin/future/pages/Assets/components/BulkActionsBar.mjs.map +1 -0
  17. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js +209 -0
  18. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.js.map +1 -0
  19. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs +207 -0
  20. package/dist/admin/future/pages/Assets/components/BulkMoveDialog.mjs.map +1 -0
  21. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js +111 -36
  22. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.js.map +1 -1
  23. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs +113 -38
  24. package/dist/admin/future/pages/Assets/components/Dnd/AssetsDndProvider.mjs.map +1 -1
  25. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js +120 -13
  26. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.js.map +1 -1
  27. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs +120 -13
  28. package/dist/admin/future/pages/Assets/components/Dnd/DragOverlayChip.mjs.map +1 -1
  29. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js +71 -0
  30. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.js.map +1 -0
  31. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs +69 -0
  32. package/dist/admin/future/pages/Assets/components/Dnd/buildDragSet.mjs.map +1 -0
  33. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js +34 -0
  34. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.js.map +1 -0
  35. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs +32 -0
  36. package/dist/admin/future/pages/Assets/components/Dnd/computeValidDropTargets.mjs.map +1 -0
  37. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js +15 -0
  38. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.js.map +1 -1
  39. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs +13 -1
  40. package/dist/admin/future/pages/Assets/components/Dnd/dndIds.mjs.map +1 -1
  41. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js +19 -25
  42. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.js.map +1 -1
  43. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs +19 -25
  44. package/dist/admin/future/pages/Assets/components/Dnd/useAssetDnd.mjs.map +1 -1
  45. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js +35 -0
  46. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.js.map +1 -0
  47. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs +33 -0
  48. package/dist/admin/future/pages/Assets/components/Dnd/useFolderTreeDroppable.mjs.map +1 -0
  49. package/dist/admin/future/pages/Assets/components/EmptyState.js +63 -0
  50. package/dist/admin/future/pages/Assets/components/EmptyState.js.map +1 -0
  51. package/dist/admin/future/pages/Assets/components/EmptyState.mjs +61 -0
  52. package/dist/admin/future/pages/Assets/components/EmptyState.mjs.map +1 -0
  53. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js +120 -22
  54. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.js.map +1 -1
  55. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs +121 -23
  56. package/dist/admin/future/pages/Assets/components/FolderTree/FolderTree.mjs.map +1 -1
  57. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js +22 -0
  58. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.js.map +1 -0
  59. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs +19 -0
  60. package/dist/admin/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.mjs.map +1 -0
  61. package/dist/admin/future/pages/Assets/components/SortMenu.js +165 -0
  62. package/dist/admin/future/pages/Assets/components/SortMenu.js.map +1 -0
  63. package/dist/admin/future/pages/Assets/components/SortMenu.mjs +163 -0
  64. package/dist/admin/future/pages/Assets/components/SortMenu.mjs.map +1 -0
  65. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js +59 -0
  66. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.js.map +1 -0
  67. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs +55 -0
  68. package/dist/admin/future/pages/Assets/hooks/useAssetSelection.mjs.map +1 -0
  69. package/dist/admin/future/pages/Assets/hooks/useListSort.js +124 -0
  70. package/dist/admin/future/pages/Assets/hooks/useListSort.js.map +1 -0
  71. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs +120 -0
  72. package/dist/admin/future/pages/Assets/hooks/useListSort.mjs.map +1 -0
  73. package/dist/admin/future/pages/Assets/utils/listQueryKey.js +29 -0
  74. package/dist/admin/future/pages/Assets/utils/listQueryKey.js.map +1 -0
  75. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs +27 -0
  76. package/dist/admin/future/pages/Assets/utils/listQueryKey.mjs.map +1 -0
  77. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js +84 -0
  78. package/dist/admin/future/pages/Assets/utils/mergeMixedList.js.map +1 -0
  79. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs +81 -0
  80. package/dist/admin/future/pages/Assets/utils/mergeMixedList.mjs.map +1 -0
  81. package/dist/admin/future/pages/Assets/utils/selection.js +104 -0
  82. package/dist/admin/future/pages/Assets/utils/selection.js.map +1 -0
  83. package/dist/admin/future/pages/Assets/utils/selection.mjs +94 -0
  84. package/dist/admin/future/pages/Assets/utils/selection.mjs.map +1 -0
  85. package/dist/admin/future/services/assets.js +33 -1
  86. package/dist/admin/future/services/assets.js.map +1 -1
  87. package/dist/admin/future/services/assets.mjs +33 -2
  88. package/dist/admin/future/services/assets.mjs.map +1 -1
  89. package/dist/admin/future/services/folders.js +3 -3
  90. package/dist/admin/future/services/folders.js.map +1 -1
  91. package/dist/admin/future/services/folders.mjs +3 -3
  92. package/dist/admin/future/services/folders.mjs.map +1 -1
  93. package/dist/admin/future/services/uploadFileViaXHR.js +23 -2
  94. package/dist/admin/future/services/uploadFileViaXHR.js.map +1 -1
  95. package/dist/admin/future/services/uploadFileViaXHR.mjs +23 -2
  96. package/dist/admin/future/services/uploadFileViaXHR.mjs.map +1 -1
  97. package/dist/admin/future/utils/buildDragSetFromSelection.js +33 -0
  98. package/dist/admin/future/utils/buildDragSetFromSelection.js.map +1 -0
  99. package/dist/admin/future/utils/buildDragSetFromSelection.mjs +31 -0
  100. package/dist/admin/future/utils/buildDragSetFromSelection.mjs.map +1 -0
  101. package/dist/admin/future/utils/canDropItemOnFolder.js +4 -0
  102. package/dist/admin/future/utils/canDropItemOnFolder.js.map +1 -1
  103. package/dist/admin/future/utils/canDropItemOnFolder.mjs +4 -0
  104. package/dist/admin/future/utils/canDropItemOnFolder.mjs.map +1 -1
  105. package/dist/admin/future/utils/flattenFolderStructure.js +28 -0
  106. package/dist/admin/future/utils/flattenFolderStructure.js.map +1 -0
  107. package/dist/admin/future/utils/flattenFolderStructure.mjs +26 -0
  108. package/dist/admin/future/utils/flattenFolderStructure.mjs.map +1 -0
  109. package/dist/admin/future/utils/formatMoveSuccessMessage.js +19 -0
  110. package/dist/admin/future/utils/formatMoveSuccessMessage.js.map +1 -0
  111. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs +17 -0
  112. package/dist/admin/future/utils/formatMoveSuccessMessage.mjs.map +1 -0
  113. package/dist/admin/future/utils/getFolderLabel.js +31 -0
  114. package/dist/admin/future/utils/getFolderLabel.js.map +1 -0
  115. package/dist/admin/future/utils/getFolderLabel.mjs +29 -0
  116. package/dist/admin/future/utils/getFolderLabel.mjs.map +1 -0
  117. package/dist/admin/hooks/useUpload.js +15 -9
  118. package/dist/admin/hooks/useUpload.js.map +1 -1
  119. package/dist/admin/hooks/useUpload.mjs +17 -11
  120. package/dist/admin/hooks/useUpload.mjs.map +1 -1
  121. package/dist/admin/src/future/pages/Assets/components/AssetsGrid.d.ts +1 -1
  122. package/dist/admin/src/future/pages/Assets/components/AssetsTable.d.ts +7 -1
  123. package/dist/admin/src/future/pages/Assets/components/BulkActionsBar.d.ts +1 -0
  124. package/dist/admin/src/future/pages/Assets/components/BulkMoveDialog.d.ts +13 -0
  125. package/dist/admin/src/future/pages/Assets/components/Dnd/AssetsDndProvider.d.ts +2 -0
  126. package/dist/admin/src/future/pages/Assets/components/Dnd/DragOverlayChip.d.ts +2 -2
  127. package/dist/admin/src/future/pages/Assets/components/Dnd/buildDragSet.d.ts +17 -0
  128. package/dist/admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.d.ts +7 -0
  129. package/dist/admin/src/future/pages/Assets/components/Dnd/dndIds.d.ts +3 -0
  130. package/dist/admin/src/future/pages/Assets/components/Dnd/useAssetDnd.d.ts +3 -1
  131. package/dist/admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.d.ts +19 -0
  132. package/dist/admin/src/future/pages/Assets/components/EmptyState.d.ts +11 -0
  133. package/dist/admin/src/future/pages/Assets/components/FolderTree/useSpringLoadedExpand.d.ts +6 -0
  134. package/dist/admin/src/future/pages/Assets/components/SortMenu.d.ts +17 -0
  135. package/dist/admin/src/future/pages/Assets/hooks/useAssetSelection.d.ts +39 -0
  136. package/dist/admin/src/future/pages/Assets/hooks/useListSort.d.ts +47 -0
  137. package/dist/admin/src/future/pages/Assets/utils/listQueryKey.d.ts +30 -0
  138. package/dist/admin/src/future/pages/Assets/utils/mergeMixedList.d.ts +40 -0
  139. package/dist/admin/src/future/pages/Assets/utils/selection.d.ts +50 -0
  140. package/dist/admin/src/future/services/assets.d.ts +4 -1
  141. package/dist/admin/src/future/services/folders.d.ts +4 -1
  142. package/dist/admin/src/future/services/uploadFileViaXHR.d.ts +1 -17
  143. package/dist/admin/src/future/types/dnd.d.ts +5 -0
  144. package/dist/admin/src/future/utils/buildDragSetFromSelection.d.ts +11 -0
  145. package/dist/admin/src/future/utils/canDropItemOnFolder.d.ts +1 -1
  146. package/dist/admin/src/future/utils/flattenFolderStructure.d.ts +18 -0
  147. package/dist/admin/src/future/utils/formatMoveSuccessMessage.d.ts +14 -0
  148. package/dist/admin/src/future/utils/getFolderLabel.d.ts +11 -0
  149. package/dist/admin/translations/en.json.js +36 -0
  150. package/dist/admin/translations/en.json.js.map +1 -1
  151. package/dist/admin/translations/en.json.mjs +36 -0
  152. package/dist/admin/translations/en.json.mjs.map +1 -1
  153. package/dist/shared/contracts/folders.d.ts +1 -1
  154. package/package.json +8 -8
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var canDropItemOnFolder = require('../../../../utils/canDropItemOnFolder.js');
4
+ var flattenFolderStructure = require('../../../../utils/flattenFolderStructure.js');
5
+
6
+ /**
7
+ * Evaluate destination validity once for the full drag set. Callers look up
8
+ * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.
9
+ */ const computeValidDropTargets = (items, folderStructure)=>{
10
+ const valid = new Set();
11
+ if (items.length === 0) {
12
+ return valid;
13
+ }
14
+ if (canDropItemOnFolder.canDropItemOnFolder({
15
+ items,
16
+ targetFolderId: null,
17
+ folderStructure
18
+ })) {
19
+ valid.add(null);
20
+ }
21
+ for (const { id } of flattenFolderStructure.flattenFolderStructure(folderStructure)){
22
+ if (canDropItemOnFolder.canDropItemOnFolder({
23
+ items,
24
+ targetFolderId: id,
25
+ folderStructure
26
+ })) {
27
+ valid.add(id);
28
+ }
29
+ }
30
+ return valid;
31
+ };
32
+
33
+ exports.computeValidDropTargets = computeValidDropTargets;
34
+ //# sourceMappingURL=computeValidDropTargets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeValidDropTargets.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.ts"],"sourcesContent":["import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\nimport { flattenFolderStructure } from '../../../../utils/flattenFolderStructure';\n\nimport type { FolderNode } from '../../../../../../../shared/contracts/folders';\nimport type { DragItemData } from '../../../../types/dnd';\n\n/**\n * Evaluate destination validity once for the full drag set. Callers look up\n * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.\n */\nexport const computeValidDropTargets = (\n items: DragItemData[],\n folderStructure: FolderNode[]\n): Set<number | null> => {\n const valid = new Set<number | null>();\n\n if (items.length === 0) {\n return valid;\n }\n\n if (canDropItemOnFolder({ items, targetFolderId: null, folderStructure })) {\n valid.add(null);\n }\n\n for (const { id } of flattenFolderStructure(folderStructure)) {\n if (canDropItemOnFolder({ items, targetFolderId: id, folderStructure })) {\n valid.add(id);\n }\n }\n\n return valid;\n};\n"],"names":["computeValidDropTargets","items","folderStructure","valid","Set","length","canDropItemOnFolder","targetFolderId","add","id","flattenFolderStructure"],"mappings":";;;;;AAMA;;;AAGC,IACM,MAAMA,uBAAAA,GAA0B,CACrCC,KAAAA,EACAC,eAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAQ,IAAIC,GAAAA,EAAAA;IAElB,IAAIH,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;QACtB,OAAOF,KAAAA;AACT,IAAA;AAEA,IAAA,IAAIG,uCAAAA,CAAoB;AAAEL,QAAAA,KAAAA;QAAOM,cAAAA,EAAgB,IAAA;AAAML,QAAAA;KAAgB,CAAA,EAAI;AACzEC,QAAAA,KAAAA,CAAMK,GAAG,CAAC,IAAA,CAAA;AACZ,IAAA;AAEA,IAAA,KAAK,MAAM,EAAEC,EAAE,EAAE,IAAIC,8CAAuBR,eAAAA,CAAAA,CAAkB;AAC5D,QAAA,IAAII,uCAAAA,CAAoB;AAAEL,YAAAA,KAAAA;YAAOM,cAAAA,EAAgBE,EAAAA;AAAIP,YAAAA;SAAgB,CAAA,EAAI;AACvEC,YAAAA,KAAAA,CAAMK,GAAG,CAACC,EAAAA,CAAAA;AACZ,QAAA;AACF,IAAA;IAEA,OAAON,KAAAA;AACT;;;;"}
@@ -0,0 +1,32 @@
1
+ import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder.mjs';
2
+ import { flattenFolderStructure } from '../../../../utils/flattenFolderStructure.mjs';
3
+
4
+ /**
5
+ * Evaluate destination validity once for the full drag set. Callers look up
6
+ * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.
7
+ */ const computeValidDropTargets = (items, folderStructure)=>{
8
+ const valid = new Set();
9
+ if (items.length === 0) {
10
+ return valid;
11
+ }
12
+ if (canDropItemOnFolder({
13
+ items,
14
+ targetFolderId: null,
15
+ folderStructure
16
+ })) {
17
+ valid.add(null);
18
+ }
19
+ for (const { id } of flattenFolderStructure(folderStructure)){
20
+ if (canDropItemOnFolder({
21
+ items,
22
+ targetFolderId: id,
23
+ folderStructure
24
+ })) {
25
+ valid.add(id);
26
+ }
27
+ }
28
+ return valid;
29
+ };
30
+
31
+ export { computeValidDropTargets };
32
+ //# sourceMappingURL=computeValidDropTargets.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"computeValidDropTargets.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/computeValidDropTargets.ts"],"sourcesContent":["import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\nimport { flattenFolderStructure } from '../../../../utils/flattenFolderStructure';\n\nimport type { FolderNode } from '../../../../../../../shared/contracts/folders';\nimport type { DragItemData } from '../../../../types/dnd';\n\n/**\n * Evaluate destination validity once for the full drag set. Callers look up\n * targets in O(1) via {@link Set.has} — `null` represents the Home/root drop.\n */\nexport const computeValidDropTargets = (\n items: DragItemData[],\n folderStructure: FolderNode[]\n): Set<number | null> => {\n const valid = new Set<number | null>();\n\n if (items.length === 0) {\n return valid;\n }\n\n if (canDropItemOnFolder({ items, targetFolderId: null, folderStructure })) {\n valid.add(null);\n }\n\n for (const { id } of flattenFolderStructure(folderStructure)) {\n if (canDropItemOnFolder({ items, targetFolderId: id, folderStructure })) {\n valid.add(id);\n }\n }\n\n return valid;\n};\n"],"names":["computeValidDropTargets","items","folderStructure","valid","Set","length","canDropItemOnFolder","targetFolderId","add","id","flattenFolderStructure"],"mappings":";;;AAMA;;;AAGC,IACM,MAAMA,uBAAAA,GAA0B,CACrCC,KAAAA,EACAC,eAAAA,GAAAA;AAEA,IAAA,MAAMC,QAAQ,IAAIC,GAAAA,EAAAA;IAElB,IAAIH,KAAAA,CAAMI,MAAM,KAAK,CAAA,EAAG;QACtB,OAAOF,KAAAA;AACT,IAAA;AAEA,IAAA,IAAIG,mBAAAA,CAAoB;AAAEL,QAAAA,KAAAA;QAAOM,cAAAA,EAAgB,IAAA;AAAML,QAAAA;KAAgB,CAAA,EAAI;AACzEC,QAAAA,KAAAA,CAAMK,GAAG,CAAC,IAAA,CAAA;AACZ,IAAA;AAEA,IAAA,KAAK,MAAM,EAAEC,EAAE,EAAE,IAAIC,uBAAuBR,eAAAA,CAAAA,CAAkB;AAC5D,QAAA,IAAII,mBAAAA,CAAoB;AAAEL,YAAAA,KAAAA;YAAOM,cAAAA,EAAgBE,EAAAA;AAAIP,YAAAA;SAAgB,CAAA,EAAI;AACvEC,YAAAA,KAAAA,CAAMK,GAAG,CAACC,EAAAA,CAAAA;AACZ,QAAA;AACF,IAAA;IAEA,OAAON,KAAAA;AACT;;;;"}
@@ -10,9 +10,24 @@ const parseFolderTargetId = (dndId)=>{
10
10
  const match = /^folder-target:(\d+)$/.exec(dndId);
11
11
  return match ? Number(match[1]) : null;
12
12
  };
13
+ const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
14
+ const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
15
+ const parseFolderTreeTargetId = (dndId)=>{
16
+ if (typeof dndId !== 'string') {
17
+ return null;
18
+ }
19
+ if (dndId === HOME_TREE_TARGET_ID) {
20
+ return 'root';
21
+ }
22
+ const match = /^folder-tree-target:(\d+)$/.exec(dndId);
23
+ return match ? Number(match[1]) : null;
24
+ };
13
25
 
26
+ exports.HOME_TREE_TARGET_ID = HOME_TREE_TARGET_ID;
14
27
  exports.parseFolderTargetId = parseFolderTargetId;
28
+ exports.parseFolderTreeTargetId = parseFolderTreeTargetId;
15
29
  exports.toFileDraggableId = toFileDraggableId;
16
30
  exports.toFolderDraggableId = toFolderDraggableId;
17
31
  exports.toFolderTargetId = toFolderTargetId;
32
+ exports.toFolderTreeTargetId = toFolderTreeTargetId;
18
33
  //# sourceMappingURL=dndIds.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dndIds.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;;;;"}
1
+ {"version":3,"file":"dndIds.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":";;AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;;;;;;;"}
@@ -8,6 +8,18 @@ const parseFolderTargetId = (dndId)=>{
8
8
  const match = /^folder-target:(\d+)$/.exec(dndId);
9
9
  return match ? Number(match[1]) : null;
10
10
  };
11
+ const toFolderTreeTargetId = (id)=>`folder-tree-target:${id}`;
12
+ const HOME_TREE_TARGET_ID = 'folder-tree-target:home';
13
+ const parseFolderTreeTargetId = (dndId)=>{
14
+ if (typeof dndId !== 'string') {
15
+ return null;
16
+ }
17
+ if (dndId === HOME_TREE_TARGET_ID) {
18
+ return 'root';
19
+ }
20
+ const match = /^folder-tree-target:(\d+)$/.exec(dndId);
21
+ return match ? Number(match[1]) : null;
22
+ };
11
23
 
12
- export { parseFolderTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId };
24
+ export { HOME_TREE_TARGET_ID, parseFolderTargetId, parseFolderTreeTargetId, toFileDraggableId, toFolderDraggableId, toFolderTargetId, toFolderTreeTargetId };
13
25
  //# sourceMappingURL=dndIds.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"dndIds.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
1
+ {"version":3,"file":"dndIds.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/dndIds.ts"],"sourcesContent":["export const toFileDraggableId = (id: number) => `file:${id}` as const;\n\nexport const toFolderDraggableId = (id: number) => `folder:${id}` as const;\n\nexport const toFolderTargetId = (id: number) => `folder-target:${id}` as const;\n\nexport const parseFolderTargetId = (dndId: string | number): number | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n const match = /^folder-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n\nexport const toFolderTreeTargetId = (id: number) => `folder-tree-target:${id}` as const;\n\nexport const HOME_TREE_TARGET_ID = 'folder-tree-target:home' as const;\n\nexport const parseFolderTreeTargetId = (dndId: string | number): number | 'root' | null => {\n if (typeof dndId !== 'string') {\n return null;\n }\n\n if (dndId === HOME_TREE_TARGET_ID) {\n return 'root';\n }\n\n const match = /^folder-tree-target:(\\d+)$/.exec(dndId);\n return match ? Number(match[1]) : null;\n};\n"],"names":["toFileDraggableId","id","toFolderDraggableId","toFolderTargetId","parseFolderTargetId","dndId","match","exec","Number","toFolderTreeTargetId","HOME_TREE_TARGET_ID","parseFolderTreeTargetId"],"mappings":"AAAO,MAAMA,oBAAoB,CAACC,EAAAA,GAAe,CAAC,KAAK,EAAEA;AAElD,MAAMC,sBAAsB,CAACD,EAAAA,GAAe,CAAC,OAAO,EAAEA;AAEtD,MAAME,mBAAmB,CAACF,EAAAA,GAAe,CAAC,cAAc,EAAEA;AAE1D,MAAMG,sBAAsB,CAACC,KAAAA,GAAAA;IAClC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;IAEA,MAAMC,KAAAA,GAAQ,uBAAA,CAAwBC,IAAI,CAACF,KAAAA,CAAAA;AAC3C,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;AAEO,MAAMG,uBAAuB,CAACR,EAAAA,GAAe,CAAC,mBAAmB,EAAEA;AAEnE,MAAMS,sBAAsB;AAE5B,MAAMC,0BAA0B,CAACN,KAAAA,GAAAA;IACtC,IAAI,OAAOA,UAAU,QAAA,EAAU;QAC7B,OAAO,IAAA;AACT,IAAA;AAEA,IAAA,IAAIA,UAAUK,mBAAAA,EAAqB;QACjC,OAAO,MAAA;AACT,IAAA;IAEA,MAAMJ,KAAAA,GAAQ,4BAAA,CAA6BC,IAAI,CAACF,KAAAA,CAAAA;AAChD,IAAA,OAAOC,KAAAA,GAAQE,MAAAA,CAAOF,KAAK,CAAC,EAAE,CAAA,GAAI,IAAA;AACpC;;;;"}
@@ -2,11 +2,21 @@
2
2
 
3
3
  var React = require('react');
4
4
  var core = require('@dnd-kit/core');
5
- var folders = require('../../../../services/folders.js');
6
- var canDropItemOnFolder = require('../../../../utils/canDropItemOnFolder.js');
7
5
  var AssetsDndProvider = require('./AssetsDndProvider.js');
8
6
  var dndIds = require('./dndIds.js');
9
7
 
8
+ const getFileFolderId = (folder)=>{
9
+ if (folder == null) {
10
+ return null;
11
+ }
12
+ if (typeof folder === 'object') {
13
+ return folder.id ?? null;
14
+ }
15
+ if (typeof folder === 'number') {
16
+ return folder;
17
+ }
18
+ return Number(folder) || null;
19
+ };
10
20
  const useFileDraggable = (asset)=>{
11
21
  const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
12
22
  isMovePending: false
@@ -15,7 +25,7 @@ const useFileDraggable = (asset)=>{
15
25
  kind: 'file',
16
26
  id: asset.id,
17
27
  name: asset.name,
18
- folderId: asset.folder == null ? null : typeof asset.folder === 'number' ? asset.folder : Number(asset.folder) || null
28
+ folderId: getFileFolderId(asset.folder)
19
29
  }), [
20
30
  asset.folder,
21
31
  asset.id,
@@ -28,11 +38,11 @@ const useFileDraggable = (asset)=>{
28
38
  });
29
39
  };
30
40
  const useFolderDraggableDroppable = (folder)=>{
31
- const { isMovePending } = AssetsDndProvider.useAssetsDndOptional() ?? {
32
- isMovePending: false
41
+ const { isMovePending, isValidDropTarget } = AssetsDndProvider.useAssetsDndOptional() ?? {
42
+ isMovePending: false,
43
+ isValidDropTarget: ()=>false
33
44
  };
34
45
  const { active } = core.useDndContext();
35
- const { data: folderStructure = [] } = folders.useGetFolderStructureQuery();
36
46
  const parentId = typeof folder.parent === 'object' && folder.parent != null ? folder.parent.id ?? null : folder.parent ?? null;
37
47
  const dragData = React.useMemo(()=>({
38
48
  kind: 'folder',
@@ -62,26 +72,10 @@ const useFolderDraggableDroppable = (folder)=>{
62
72
  data: dropData,
63
73
  disabled: isMovePending
64
74
  });
65
- const activeData = active?.data.current;
66
- const isValidDropTarget = React.useMemo(()=>{
67
- if (!activeData || activeData.id === folder.id && activeData.kind === 'folder') {
68
- return false;
69
- }
70
- return canDropItemOnFolder.canDropItemOnFolder({
71
- items: [
72
- activeData
73
- ],
74
- targetFolderId: folder.id,
75
- folderStructure
76
- });
77
- }, [
78
- activeData,
79
- folder.id,
80
- folderStructure
81
- ]);
75
+ const isValidTarget = isValidDropTarget(folder.id);
82
76
  const isOver = droppable.isOver;
83
- const showValidDropHighlight = isOver && isValidDropTarget;
84
- const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;
77
+ const showValidDropHighlight = isOver && isValidTarget;
78
+ const showInvalidDropCursor = isOver && !isValidTarget && active != null;
85
79
  return {
86
80
  dragData,
87
81
  draggable,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetDnd.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type {\n DragFileData,\n DragFolderData,\n DragItemData,\n FolderTargetData,\n} from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId:\n asset.folder == null\n ? null\n : typeof asset.folder === 'number'\n ? asset.folder\n : Number(asset.folder) || null,\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n return useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { active } = useDndContext();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\n\n const parentId =\n typeof folder.parent === 'object' && folder.parent != null\n ? (folder.parent.id ?? null)\n : (folder.parent ?? null);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const activeData = active?.data.current as DragItemData | undefined;\n\n const isValidDropTarget = useMemo(() => {\n if (!activeData || (activeData.id === folder.id && activeData.kind === 'folder')) {\n return false;\n }\n\n return canDropItemOnFolder({\n items: [activeData],\n targetFolderId: folder.id,\n folderStructure,\n });\n }, [activeData, folder.id, folderStructure]);\n\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidDropTarget;\n const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","folder","Number","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","active","useDndContext","folderStructure","useGetFolderStructureQuery","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","activeData","current","isValidDropTarget","canDropItemOnFolder","items","targetFolderId","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
1
+ {"version":3,"file":"useAssetDnd.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\nconst getFileFolderId = (\n folder: number | string | { id?: number } | null | undefined\n): number | null => {\n if (folder == null) {\n return null;\n }\n\n if (typeof folder === 'object') {\n return folder.id ?? null;\n }\n\n if (typeof folder === 'number') {\n return folder;\n }\n\n return Number(folder) || null;\n};\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getFileFolderId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n return useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const parentId =\n typeof folder.parent === 'object' && folder.parent != null\n ? (folder.parent.id ?? null)\n : (folder.parent ?? null);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["getFileFolderId","folder","id","Number","useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","name","folderId","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
@@ -1,10 +1,20 @@
1
1
  import { useMemo } from 'react';
2
2
  import { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';
3
- import { useGetFolderStructureQuery } from '../../../../services/folders.mjs';
4
- import { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder.mjs';
5
3
  import { useAssetsDndOptional } from './AssetsDndProvider.mjs';
6
4
  import { toFolderDraggableId, toFolderTargetId, toFileDraggableId } from './dndIds.mjs';
7
5
 
6
+ const getFileFolderId = (folder)=>{
7
+ if (folder == null) {
8
+ return null;
9
+ }
10
+ if (typeof folder === 'object') {
11
+ return folder.id ?? null;
12
+ }
13
+ if (typeof folder === 'number') {
14
+ return folder;
15
+ }
16
+ return Number(folder) || null;
17
+ };
8
18
  const useFileDraggable = (asset)=>{
9
19
  const { isMovePending } = useAssetsDndOptional() ?? {
10
20
  isMovePending: false
@@ -13,7 +23,7 @@ const useFileDraggable = (asset)=>{
13
23
  kind: 'file',
14
24
  id: asset.id,
15
25
  name: asset.name,
16
- folderId: asset.folder == null ? null : typeof asset.folder === 'number' ? asset.folder : Number(asset.folder) || null
26
+ folderId: getFileFolderId(asset.folder)
17
27
  }), [
18
28
  asset.folder,
19
29
  asset.id,
@@ -26,11 +36,11 @@ const useFileDraggable = (asset)=>{
26
36
  });
27
37
  };
28
38
  const useFolderDraggableDroppable = (folder)=>{
29
- const { isMovePending } = useAssetsDndOptional() ?? {
30
- isMovePending: false
39
+ const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {
40
+ isMovePending: false,
41
+ isValidDropTarget: ()=>false
31
42
  };
32
43
  const { active } = useDndContext();
33
- const { data: folderStructure = [] } = useGetFolderStructureQuery();
34
44
  const parentId = typeof folder.parent === 'object' && folder.parent != null ? folder.parent.id ?? null : folder.parent ?? null;
35
45
  const dragData = useMemo(()=>({
36
46
  kind: 'folder',
@@ -60,26 +70,10 @@ const useFolderDraggableDroppable = (folder)=>{
60
70
  data: dropData,
61
71
  disabled: isMovePending
62
72
  });
63
- const activeData = active?.data.current;
64
- const isValidDropTarget = useMemo(()=>{
65
- if (!activeData || activeData.id === folder.id && activeData.kind === 'folder') {
66
- return false;
67
- }
68
- return canDropItemOnFolder({
69
- items: [
70
- activeData
71
- ],
72
- targetFolderId: folder.id,
73
- folderStructure
74
- });
75
- }, [
76
- activeData,
77
- folder.id,
78
- folderStructure
79
- ]);
73
+ const isValidTarget = isValidDropTarget(folder.id);
80
74
  const isOver = droppable.isOver;
81
- const showValidDropHighlight = isOver && isValidDropTarget;
82
- const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;
75
+ const showValidDropHighlight = isOver && isValidTarget;
76
+ const showInvalidDropCursor = isOver && !isValidTarget && active != null;
83
77
  return {
84
78
  dragData,
85
79
  draggable,
@@ -1 +1 @@
1
- {"version":3,"file":"useAssetDnd.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { useGetFolderStructureQuery } from '../../../../services/folders';\nimport { canDropItemOnFolder } from '../../../../utils/canDropItemOnFolder';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type {\n DragFileData,\n DragFolderData,\n DragItemData,\n FolderTargetData,\n} from '../../../../types/dnd';\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId:\n asset.folder == null\n ? null\n : typeof asset.folder === 'number'\n ? asset.folder\n : Number(asset.folder) || null,\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n return useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n const { active } = useDndContext();\n const { data: folderStructure = [] } = useGetFolderStructureQuery();\n\n const parentId =\n typeof folder.parent === 'object' && folder.parent != null\n ? (folder.parent.id ?? null)\n : (folder.parent ?? null);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const activeData = active?.data.current as DragItemData | undefined;\n\n const isValidDropTarget = useMemo(() => {\n if (!activeData || (activeData.id === folder.id && activeData.kind === 'folder')) {\n return false;\n }\n\n return canDropItemOnFolder({\n items: [activeData],\n targetFolderId: folder.id,\n folderStructure,\n });\n }, [activeData, folder.id, folderStructure]);\n\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidDropTarget;\n const showInvalidDropCursor = isOver && !isValidDropTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","id","name","folderId","folder","Number","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","active","useDndContext","folderStructure","useGetFolderStructureQuery","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","activeData","current","isValidDropTarget","canDropItemOnFolder","items","targetFolderId","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
1
+ {"version":3,"file":"useAssetDnd.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useAssetDnd.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useDndContext, useDraggable, useDroppable } from '@dnd-kit/core';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { toFileDraggableId, toFolderDraggableId, toFolderTargetId } from './dndIds';\n\nimport type { DragFileData, DragFolderData, FolderTargetData } from '../../../../types/dnd';\n\nconst getFileFolderId = (\n folder: number | string | { id?: number } | null | undefined\n): number | null => {\n if (folder == null) {\n return null;\n }\n\n if (typeof folder === 'object') {\n return folder.id ?? null;\n }\n\n if (typeof folder === 'number') {\n return folder;\n }\n\n return Number(folder) || null;\n};\n\nexport const useFileDraggable = (asset: {\n id: number;\n name: string;\n folder?: number | string | { id?: number } | null;\n}) => {\n const { isMovePending } = useAssetsDndOptional() ?? { isMovePending: false };\n\n const data = useMemo<DragFileData>(\n () => ({\n kind: 'file',\n id: asset.id,\n name: asset.name,\n folderId: getFileFolderId(asset.folder),\n }),\n [asset.folder, asset.id, asset.name]\n );\n\n return useDraggable({\n id: toFileDraggableId(asset.id),\n data,\n disabled: isMovePending,\n });\n};\n\nexport const useFolderDraggableDroppable = (folder: {\n id: number;\n name: string;\n parent?: number | null | { id?: number };\n}) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const parentId =\n typeof folder.parent === 'object' && folder.parent != null\n ? (folder.parent.id ?? null)\n : (folder.parent ?? null);\n\n const dragData = useMemo<DragFolderData>(\n () => ({\n kind: 'folder',\n id: folder.id,\n name: folder.name,\n parentId,\n }),\n [folder.id, folder.name, parentId]\n );\n\n const dropData = useMemo<FolderTargetData>(\n () => ({\n kind: 'folder-target',\n id: folder.id,\n name: folder.name,\n }),\n [folder.id, folder.name]\n );\n\n const draggable = useDraggable({\n id: toFolderDraggableId(folder.id),\n data: dragData,\n disabled: isMovePending,\n });\n\n const droppable = useDroppable({\n id: toFolderTargetId(folder.id),\n data: dropData,\n disabled: isMovePending,\n });\n\n const isValidTarget = isValidDropTarget(folder.id);\n const isOver = droppable.isOver;\n const showValidDropHighlight = isOver && isValidTarget;\n const showInvalidDropCursor = isOver && !isValidTarget && active != null;\n\n return {\n dragData,\n draggable,\n droppable,\n isDragging: draggable.isDragging,\n showValidDropHighlight,\n showInvalidDropCursor,\n };\n};\n"],"names":["getFileFolderId","folder","id","Number","useFileDraggable","asset","isMovePending","useAssetsDndOptional","data","useMemo","kind","name","folderId","useDraggable","toFileDraggableId","disabled","useFolderDraggableDroppable","isValidDropTarget","active","useDndContext","parentId","parent","dragData","dropData","draggable","toFolderDraggableId","droppable","useDroppable","toFolderTargetId","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor","isDragging"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var core = require('@dnd-kit/core');
4
+ var AssetsDndProvider = require('./AssetsDndProvider.js');
5
+ var dndIds = require('./dndIds.js');
6
+
7
+ const useFolderTreeDroppable = (target)=>{
8
+ const { isMovePending, isValidDropTarget } = AssetsDndProvider.useAssetsDndOptional() ?? {
9
+ isMovePending: false,
10
+ isValidDropTarget: ()=>false
11
+ };
12
+ const { active } = core.useDndContext();
13
+ const dropId = target.id == null ? dndIds.HOME_TREE_TARGET_ID : dndIds.toFolderTreeTargetId(target.id);
14
+ const data = {
15
+ kind: 'folder-tree-target',
16
+ id: target.id,
17
+ name: target.name
18
+ };
19
+ const droppable = core.useDroppable({
20
+ id: dropId,
21
+ data,
22
+ disabled: isMovePending
23
+ });
24
+ const isValidTarget = isValidDropTarget(target.id);
25
+ const isOver = droppable.isOver;
26
+ return {
27
+ droppable,
28
+ isOver,
29
+ showValidDropHighlight: isOver && isValidTarget,
30
+ showInvalidDropCursor: isOver && !isValidTarget && active != null
31
+ };
32
+ };
33
+
34
+ exports.useFolderTreeDroppable = useFolderTreeDroppable;
35
+ //# sourceMappingURL=useFolderTreeDroppable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFolderTreeDroppable.js","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.ts"],"sourcesContent":["import { useDndContext, useDroppable } from '@dnd-kit/core';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { HOME_TREE_TARGET_ID, toFolderTreeTargetId } from './dndIds';\n\nimport type { FolderTreeTargetData } from '../../../../types/dnd';\n\nexport const useFolderTreeDroppable = (\n target: { id: number; name: string } | { id: null; name: string }\n) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const dropId = target.id == null ? HOME_TREE_TARGET_ID : toFolderTreeTargetId(target.id);\n const data: FolderTreeTargetData = {\n kind: 'folder-tree-target',\n id: target.id,\n name: target.name,\n };\n\n const droppable = useDroppable({ id: dropId, data, disabled: isMovePending });\n\n const isValidTarget = isValidDropTarget(target.id);\n const isOver = droppable.isOver;\n\n return {\n droppable,\n isOver,\n showValidDropHighlight: isOver && isValidTarget,\n showInvalidDropCursor: isOver && !isValidTarget && active != null,\n };\n};\n"],"names":["useFolderTreeDroppable","target","isMovePending","isValidDropTarget","useAssetsDndOptional","active","useDndContext","dropId","id","HOME_TREE_TARGET_ID","toFolderTreeTargetId","data","kind","name","droppable","useDroppable","disabled","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor"],"mappings":";;;;;;AAOO,MAAMA,yBAAyB,CACpCC,MAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,sCAAAA,EAAAA,IAA0B;QACrEF,aAAAA,EAAe,KAAA;AACfC,QAAAA,iBAAAA,EAAmB,IAAM;AAC3B,KAAA;IACA,MAAM,EAAEE,MAAM,EAAE,GAAGC,kBAAAA,EAAAA;IAEnB,MAAMC,MAAAA,GAASN,OAAOO,EAAE,IAAI,OAAOC,0BAAAA,GAAsBC,2BAAAA,CAAqBT,OAAOO,EAAE,CAAA;AACvF,IAAA,MAAMG,IAAAA,GAA6B;QACjCC,IAAAA,EAAM,oBAAA;AACNJ,QAAAA,EAAAA,EAAIP,OAAOO,EAAE;AACbK,QAAAA,IAAAA,EAAMZ,OAAOY;AACf,KAAA;AAEA,IAAA,MAAMC,YAAYC,iBAAAA,CAAa;QAAEP,EAAAA,EAAID,MAAAA;AAAQI,QAAAA,IAAAA;QAAMK,QAAAA,EAAUd;AAAc,KAAA,CAAA;IAE3E,MAAMe,aAAAA,GAAgBd,iBAAAA,CAAkBF,MAAAA,CAAOO,EAAE,CAAA;IACjD,MAAMU,MAAAA,GAASJ,UAAUI,MAAM;IAE/B,OAAO;AACLJ,QAAAA,SAAAA;AACAI,QAAAA,MAAAA;AACAC,QAAAA,sBAAAA,EAAwBD,MAAAA,IAAUD,aAAAA;QAClCG,qBAAAA,EAAuBF,MAAAA,IAAU,CAACD,aAAAA,IAAiBZ,MAAAA,IAAU;AAC/D,KAAA;AACF;;;;"}
@@ -0,0 +1,33 @@
1
+ import { useDndContext, useDroppable } from '@dnd-kit/core';
2
+ import { useAssetsDndOptional } from './AssetsDndProvider.mjs';
3
+ import { HOME_TREE_TARGET_ID, toFolderTreeTargetId } from './dndIds.mjs';
4
+
5
+ const useFolderTreeDroppable = (target)=>{
6
+ const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {
7
+ isMovePending: false,
8
+ isValidDropTarget: ()=>false
9
+ };
10
+ const { active } = useDndContext();
11
+ const dropId = target.id == null ? HOME_TREE_TARGET_ID : toFolderTreeTargetId(target.id);
12
+ const data = {
13
+ kind: 'folder-tree-target',
14
+ id: target.id,
15
+ name: target.name
16
+ };
17
+ const droppable = useDroppable({
18
+ id: dropId,
19
+ data,
20
+ disabled: isMovePending
21
+ });
22
+ const isValidTarget = isValidDropTarget(target.id);
23
+ const isOver = droppable.isOver;
24
+ return {
25
+ droppable,
26
+ isOver,
27
+ showValidDropHighlight: isOver && isValidTarget,
28
+ showInvalidDropCursor: isOver && !isValidTarget && active != null
29
+ };
30
+ };
31
+
32
+ export { useFolderTreeDroppable };
33
+ //# sourceMappingURL=useFolderTreeDroppable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFolderTreeDroppable.mjs","sources":["../../../../../../../admin/src/future/pages/Assets/components/Dnd/useFolderTreeDroppable.ts"],"sourcesContent":["import { useDndContext, useDroppable } from '@dnd-kit/core';\n\nimport { useAssetsDndOptional } from './AssetsDndProvider';\nimport { HOME_TREE_TARGET_ID, toFolderTreeTargetId } from './dndIds';\n\nimport type { FolderTreeTargetData } from '../../../../types/dnd';\n\nexport const useFolderTreeDroppable = (\n target: { id: number; name: string } | { id: null; name: string }\n) => {\n const { isMovePending, isValidDropTarget } = useAssetsDndOptional() ?? {\n isMovePending: false,\n isValidDropTarget: () => false,\n };\n const { active } = useDndContext();\n\n const dropId = target.id == null ? HOME_TREE_TARGET_ID : toFolderTreeTargetId(target.id);\n const data: FolderTreeTargetData = {\n kind: 'folder-tree-target',\n id: target.id,\n name: target.name,\n };\n\n const droppable = useDroppable({ id: dropId, data, disabled: isMovePending });\n\n const isValidTarget = isValidDropTarget(target.id);\n const isOver = droppable.isOver;\n\n return {\n droppable,\n isOver,\n showValidDropHighlight: isOver && isValidTarget,\n showInvalidDropCursor: isOver && !isValidTarget && active != null,\n };\n};\n"],"names":["useFolderTreeDroppable","target","isMovePending","isValidDropTarget","useAssetsDndOptional","active","useDndContext","dropId","id","HOME_TREE_TARGET_ID","toFolderTreeTargetId","data","kind","name","droppable","useDroppable","disabled","isValidTarget","isOver","showValidDropHighlight","showInvalidDropCursor"],"mappings":";;;;AAOO,MAAMA,yBAAyB,CACpCC,MAAAA,GAAAA;AAEA,IAAA,MAAM,EAAEC,aAAa,EAAEC,iBAAiB,EAAE,GAAGC,oBAAAA,EAAAA,IAA0B;QACrEF,aAAAA,EAAe,KAAA;AACfC,QAAAA,iBAAAA,EAAmB,IAAM;AAC3B,KAAA;IACA,MAAM,EAAEE,MAAM,EAAE,GAAGC,aAAAA,EAAAA;IAEnB,MAAMC,MAAAA,GAASN,OAAOO,EAAE,IAAI,OAAOC,mBAAAA,GAAsBC,oBAAAA,CAAqBT,OAAOO,EAAE,CAAA;AACvF,IAAA,MAAMG,IAAAA,GAA6B;QACjCC,IAAAA,EAAM,oBAAA;AACNJ,QAAAA,EAAAA,EAAIP,OAAOO,EAAE;AACbK,QAAAA,IAAAA,EAAMZ,OAAOY;AACf,KAAA;AAEA,IAAA,MAAMC,YAAYC,YAAAA,CAAa;QAAEP,EAAAA,EAAID,MAAAA;AAAQI,QAAAA,IAAAA;QAAMK,QAAAA,EAAUd;AAAc,KAAA,CAAA;IAE3E,MAAMe,aAAAA,GAAgBd,iBAAAA,CAAkBF,MAAAA,CAAOO,EAAE,CAAA;IACjD,MAAMU,MAAAA,GAASJ,UAAUI,MAAM;IAE/B,OAAO;AACLJ,QAAAA,SAAAA;AACAI,QAAAA,MAAAA;AACAC,QAAAA,sBAAAA,EAAwBD,MAAAA,IAAUD,aAAAA;QAClCG,qBAAAA,EAAuBF,MAAAA,IAAU,CAACD,aAAAA,IAAiBZ,MAAAA,IAAU;AAC/D,KAAA;AACF;;;;"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var designSystem = require('@strapi/design-system');
5
+ var symbols = require('@strapi/icons/symbols');
6
+ var reactIntl = require('react-intl');
7
+ var translations = require('../../../utils/translations.js');
8
+
9
+ /**
10
+ * Empty state for the assets list (both views) when the current folder holds
11
+ * no assets and no folders. The "Add assets" button opens the same file picker
12
+ * as New > File upload; drag-and-drop upload keeps working since the page-wide
13
+ * drop zone wraps this component.
14
+ */ const EmptyState = ({ onAddAssets })=>{
15
+ const { formatMessage } = reactIntl.useIntl();
16
+ return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
17
+ direction: "column",
18
+ alignItems: "center",
19
+ gap: 6,
20
+ padding: 11,
21
+ children: [
22
+ /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
23
+ width: "16rem",
24
+ height: "8.8rem"
25
+ }),
26
+ /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
27
+ direction: "column",
28
+ alignItems: "center",
29
+ gap: 2,
30
+ textAlign: "center",
31
+ children: [
32
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
33
+ variant: "delta",
34
+ tag: "p",
35
+ fontWeight: "bold",
36
+ textColor: "neutral800",
37
+ children: formatMessage({
38
+ id: translations.getTranslationKey('list.empty.title'),
39
+ defaultMessage: 'No assets yet'
40
+ })
41
+ }),
42
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
43
+ textColor: "neutral600",
44
+ children: formatMessage({
45
+ id: translations.getTranslationKey('list.empty.description'),
46
+ defaultMessage: 'Get started by uploading assets or creating a folder.'
47
+ })
48
+ })
49
+ ]
50
+ }),
51
+ /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
52
+ onClick: onAddAssets,
53
+ children: formatMessage({
54
+ id: translations.getTranslationKey('list.empty.add-assets'),
55
+ defaultMessage: 'Add assets'
56
+ })
57
+ })
58
+ ]
59
+ });
60
+ };
61
+
62
+ exports.EmptyState = EmptyState;
63
+ //# sourceMappingURL=EmptyState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.js","sources":["../../../../../../admin/src/future/pages/Assets/components/EmptyState.tsx"],"sourcesContent":["import { Button, Flex, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\n\ninterface EmptyStateProps {\n onAddAssets: () => void;\n}\n\n/**\n * Empty state for the assets list (both views) when the current folder holds\n * no assets and no folders. The \"Add assets\" button opens the same file picker\n * as New > File upload; drag-and-drop upload keeps working since the page-wide\n * drop zone wraps this component.\n */\nexport const EmptyState = ({ onAddAssets }: EmptyStateProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"center\" gap={6} padding={11}>\n <EmptyDocuments width=\"16rem\" height=\"8.8rem\" />\n <Flex direction=\"column\" alignItems=\"center\" gap={2} textAlign=\"center\">\n <Typography variant=\"delta\" tag=\"p\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({\n id: getTranslationKey('list.empty.title'),\n defaultMessage: 'No assets yet',\n })}\n </Typography>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: getTranslationKey('list.empty.description'),\n defaultMessage: 'Get started by uploading assets or creating a folder.',\n })}\n </Typography>\n </Flex>\n <Button onClick={onAddAssets}>\n {formatMessage({\n id: getTranslationKey('list.empty.add-assets'),\n defaultMessage: 'Add assets',\n })}\n </Button>\n </Flex>\n );\n};\n"],"names":["EmptyState","onAddAssets","formatMessage","useIntl","_jsxs","Flex","direction","alignItems","gap","padding","_jsx","EmptyDocuments","width","height","textAlign","Typography","variant","tag","fontWeight","textColor","id","getTranslationKey","defaultMessage","Button","onClick"],"mappings":";;;;;;;;AAUA;;;;;AAKC,IACM,MAAMA,UAAAA,GAAa,CAAC,EAAEC,WAAW,EAAmB,GAAA;IACzD,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,eAAA,CAACC,iBAAAA,EAAAA;QAAKC,SAAAA,EAAU,QAAA;QAASC,UAAAA,EAAW,QAAA;QAASC,GAAAA,EAAK,CAAA;QAAGC,OAAAA,EAAS,EAAA;;0BAC5DC,cAAA,CAACC,sBAAAA,EAAAA;gBAAeC,KAAAA,EAAM,OAAA;gBAAQC,MAAAA,EAAO;;0BACrCT,eAAA,CAACC,iBAAAA,EAAAA;gBAAKC,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,QAAA;gBAASC,GAAAA,EAAK,CAAA;gBAAGM,SAAAA,EAAU,QAAA;;kCAC7DJ,cAAA,CAACK,uBAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,GAAAA,EAAI,GAAA;wBAAIC,UAAAA,EAAW,MAAA;wBAAOC,SAAAA,EAAU,YAAA;kCAC7DjB,aAAAA,CAAc;AACbkB,4BAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,kBAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA;;kCAEFZ,cAAA,CAACK,uBAAAA,EAAAA;wBAAWI,SAAAA,EAAU,YAAA;kCACnBjB,aAAAA,CAAc;AACbkB,4BAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,wBAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA;;;;0BAGJZ,cAAA,CAACa,mBAAAA,EAAAA;gBAAOC,OAAAA,EAASvB,WAAAA;0BACdC,aAAAA,CAAc;AACbkB,oBAAAA,EAAAA,EAAIC,8BAAAA,CAAkB,uBAAA,CAAA;oBACtBC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR;;;;"}
@@ -0,0 +1,61 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Flex, Typography, Button } from '@strapi/design-system';
3
+ import { EmptyDocuments } from '@strapi/icons/symbols';
4
+ import { useIntl } from 'react-intl';
5
+ import { getTranslationKey } from '../../../utils/translations.mjs';
6
+
7
+ /**
8
+ * Empty state for the assets list (both views) when the current folder holds
9
+ * no assets and no folders. The "Add assets" button opens the same file picker
10
+ * as New > File upload; drag-and-drop upload keeps working since the page-wide
11
+ * drop zone wraps this component.
12
+ */ const EmptyState = ({ onAddAssets })=>{
13
+ const { formatMessage } = useIntl();
14
+ return /*#__PURE__*/ jsxs(Flex, {
15
+ direction: "column",
16
+ alignItems: "center",
17
+ gap: 6,
18
+ padding: 11,
19
+ children: [
20
+ /*#__PURE__*/ jsx(EmptyDocuments, {
21
+ width: "16rem",
22
+ height: "8.8rem"
23
+ }),
24
+ /*#__PURE__*/ jsxs(Flex, {
25
+ direction: "column",
26
+ alignItems: "center",
27
+ gap: 2,
28
+ textAlign: "center",
29
+ children: [
30
+ /*#__PURE__*/ jsx(Typography, {
31
+ variant: "delta",
32
+ tag: "p",
33
+ fontWeight: "bold",
34
+ textColor: "neutral800",
35
+ children: formatMessage({
36
+ id: getTranslationKey('list.empty.title'),
37
+ defaultMessage: 'No assets yet'
38
+ })
39
+ }),
40
+ /*#__PURE__*/ jsx(Typography, {
41
+ textColor: "neutral600",
42
+ children: formatMessage({
43
+ id: getTranslationKey('list.empty.description'),
44
+ defaultMessage: 'Get started by uploading assets or creating a folder.'
45
+ })
46
+ })
47
+ ]
48
+ }),
49
+ /*#__PURE__*/ jsx(Button, {
50
+ onClick: onAddAssets,
51
+ children: formatMessage({
52
+ id: getTranslationKey('list.empty.add-assets'),
53
+ defaultMessage: 'Add assets'
54
+ })
55
+ })
56
+ ]
57
+ });
58
+ };
59
+
60
+ export { EmptyState };
61
+ //# sourceMappingURL=EmptyState.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmptyState.mjs","sources":["../../../../../../admin/src/future/pages/Assets/components/EmptyState.tsx"],"sourcesContent":["import { Button, Flex, Typography } from '@strapi/design-system';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport { useIntl } from 'react-intl';\n\nimport { getTranslationKey } from '../../../utils/translations';\n\ninterface EmptyStateProps {\n onAddAssets: () => void;\n}\n\n/**\n * Empty state for the assets list (both views) when the current folder holds\n * no assets and no folders. The \"Add assets\" button opens the same file picker\n * as New > File upload; drag-and-drop upload keeps working since the page-wide\n * drop zone wraps this component.\n */\nexport const EmptyState = ({ onAddAssets }: EmptyStateProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex direction=\"column\" alignItems=\"center\" gap={6} padding={11}>\n <EmptyDocuments width=\"16rem\" height=\"8.8rem\" />\n <Flex direction=\"column\" alignItems=\"center\" gap={2} textAlign=\"center\">\n <Typography variant=\"delta\" tag=\"p\" fontWeight=\"bold\" textColor=\"neutral800\">\n {formatMessage({\n id: getTranslationKey('list.empty.title'),\n defaultMessage: 'No assets yet',\n })}\n </Typography>\n <Typography textColor=\"neutral600\">\n {formatMessage({\n id: getTranslationKey('list.empty.description'),\n defaultMessage: 'Get started by uploading assets or creating a folder.',\n })}\n </Typography>\n </Flex>\n <Button onClick={onAddAssets}>\n {formatMessage({\n id: getTranslationKey('list.empty.add-assets'),\n defaultMessage: 'Add assets',\n })}\n </Button>\n </Flex>\n );\n};\n"],"names":["EmptyState","onAddAssets","formatMessage","useIntl","_jsxs","Flex","direction","alignItems","gap","padding","_jsx","EmptyDocuments","width","height","textAlign","Typography","variant","tag","fontWeight","textColor","id","getTranslationKey","defaultMessage","Button","onClick"],"mappings":";;;;;;AAUA;;;;;AAKC,IACM,MAAMA,UAAAA,GAAa,CAAC,EAAEC,WAAW,EAAmB,GAAA;IACzD,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAE1B,IAAA,qBACEC,IAAA,CAACC,IAAAA,EAAAA;QAAKC,SAAAA,EAAU,QAAA;QAASC,UAAAA,EAAW,QAAA;QAASC,GAAAA,EAAK,CAAA;QAAGC,OAAAA,EAAS,EAAA;;0BAC5DC,GAAA,CAACC,cAAAA,EAAAA;gBAAeC,KAAAA,EAAM,OAAA;gBAAQC,MAAAA,EAAO;;0BACrCT,IAAA,CAACC,IAAAA,EAAAA;gBAAKC,SAAAA,EAAU,QAAA;gBAASC,UAAAA,EAAW,QAAA;gBAASC,GAAAA,EAAK,CAAA;gBAAGM,SAAAA,EAAU,QAAA;;kCAC7DJ,GAAA,CAACK,UAAAA,EAAAA;wBAAWC,OAAAA,EAAQ,OAAA;wBAAQC,GAAAA,EAAI,GAAA;wBAAIC,UAAAA,EAAW,MAAA;wBAAOC,SAAAA,EAAU,YAAA;kCAC7DjB,aAAAA,CAAc;AACbkB,4BAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,kBAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA;;kCAEFZ,GAAA,CAACK,UAAAA,EAAAA;wBAAWI,SAAAA,EAAU,YAAA;kCACnBjB,aAAAA,CAAc;AACbkB,4BAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,wBAAA,CAAA;4BACtBC,cAAAA,EAAgB;AAClB,yBAAA;;;;0BAGJZ,GAAA,CAACa,MAAAA,EAAAA;gBAAOC,OAAAA,EAASvB,WAAAA;0BACdC,aAAAA,CAAc;AACbkB,oBAAAA,EAAAA,EAAIC,iBAAAA,CAAkB,uBAAA,CAAA;oBACtBC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR;;;;"}