@webiny/app-file-manager 6.4.5 → 6.6.0-alpha.0

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 (135) hide show
  1. package/app.js +13 -2
  2. package/app.js.map +1 -1
  3. package/domain/tagsHelpers.d.ts +2 -2
  4. package/domain/types.d.ts +0 -8
  5. package/features/permissions/abstractions.d.ts +2 -2
  6. package/features/permissions/feature.d.ts +3 -3
  7. package/modules/AiEnrichment/AiImageEnrichmentEventHandler.d.ts +18 -0
  8. package/modules/AiEnrichment/AiImageEnrichmentEventHandler.js +33 -0
  9. package/modules/AiEnrichment/AiImageEnrichmentEventHandler.js.map +1 -0
  10. package/modules/AiEnrichment/feature.d.ts +1 -0
  11. package/modules/AiEnrichment/feature.js +11 -0
  12. package/modules/AiEnrichment/feature.js.map +1 -0
  13. package/modules/AiEnrichment/index.d.ts +2 -0
  14. package/modules/AiEnrichment/index.js +9 -0
  15. package/modules/AiEnrichment/index.js.map +1 -0
  16. package/modules/HeadlessCms/fieldType/FileFieldSettingsModifier.d.ts +16 -0
  17. package/modules/HeadlessCms/fieldType/FileFieldSettingsModifier.js +33 -0
  18. package/modules/HeadlessCms/fieldType/FileFieldSettingsModifier.js.map +1 -0
  19. package/modules/HeadlessCms/fieldType/FileFieldType.d.ts +24 -0
  20. package/modules/HeadlessCms/fieldType/FileFieldType.js +37 -0
  21. package/modules/HeadlessCms/fieldType/FileFieldType.js.map +1 -0
  22. package/modules/HeadlessCms/fieldType/FileInputRenderer.d.ts +15 -0
  23. package/modules/HeadlessCms/fieldType/FileInputRenderer.js +19 -0
  24. package/modules/HeadlessCms/fieldType/FileInputRenderer.js.map +1 -0
  25. package/modules/HeadlessCms/fieldType/FileInputsRenderer.d.ts +15 -0
  26. package/modules/HeadlessCms/fieldType/FileInputsRenderer.js +19 -0
  27. package/modules/HeadlessCms/fieldType/FileInputsRenderer.js.map +1 -0
  28. package/modules/HeadlessCms/fieldType/feature.d.ts +1 -0
  29. package/modules/HeadlessCms/fieldType/feature.js +17 -0
  30. package/modules/HeadlessCms/fieldType/feature.js.map +1 -0
  31. package/package.json +19 -29
  32. package/presentation/FileDetails/FileDetailsPresenter.test.js +1 -0
  33. package/presentation/FileDetails/FileDetailsPresenter.test.js.map +1 -1
  34. package/presentation/FileDetails/components/Content.d.ts +5 -4
  35. package/presentation/FileList/FileListDataSource.d.ts +8 -12
  36. package/presentation/FileList/FileListDataSource.js +15 -88
  37. package/presentation/FileList/FileListDataSource.js.map +1 -1
  38. package/presentation/FileList/FileListPresenter.test.js +7 -2
  39. package/presentation/FileList/FileListPresenter.test.js.map +1 -1
  40. package/presentation/FileList/FileManagerPresenter.d.ts +1 -0
  41. package/presentation/FileList/FileManagerPresenter.js +9 -1
  42. package/presentation/FileList/FileManagerPresenter.js.map +1 -1
  43. package/presentation/FileList/abstractions.d.ts +2 -0
  44. package/presentation/FileList/abstractions.js.map +1 -1
  45. package/presentation/FileList/components/BulkActions/index.d.ts +0 -1
  46. package/presentation/FileList/components/BulkActions/index.js +0 -1
  47. package/presentation/FileList/components/BulkActions/useBulkActionWorker.d.ts +9 -8
  48. package/presentation/FileList/components/BulkActions/useBulkActionWorker.js +3 -9
  49. package/presentation/FileList/components/BulkActions/useBulkActionWorker.js.map +1 -1
  50. package/presentation/FileList/components/Grid/FileGrid.js +1 -1
  51. package/presentation/FileList/components/Grid/FileGrid.js.map +1 -1
  52. package/presentation/FileList/components/Grid/FileGrid.test.js +18 -7
  53. package/presentation/FileList/components/Grid/FileGrid.test.js.map +1 -1
  54. package/presentation/FileList/components/Table/FileTable.js +1 -1
  55. package/presentation/FileList/components/Table/FileTable.js.map +1 -1
  56. package/presentation/FileList/components/Table/FileTable.test.js +9 -4
  57. package/presentation/FileList/components/Table/FileTable.test.js.map +1 -1
  58. package/presentation/FileManager/FileManagerView.js +8 -6
  59. package/presentation/FileManager/FileManagerView.js.map +1 -1
  60. package/presentation/FileManager/RouteParamsSync.d.ts +2 -0
  61. package/presentation/FileManager/RouteParamsSync.js +30 -0
  62. package/presentation/FileManager/RouteParamsSync.js.map +1 -0
  63. package/presentation/config/DefaultFileManagerConfig.js +1 -4
  64. package/presentation/config/DefaultFileManagerConfig.js.map +1 -1
  65. package/presentation/config/FileManagerViewConfig.d.ts +19 -25
  66. package/presentation/config/configComponents/Browser/BulkAction.d.ts +10 -8
  67. package/presentation/config/configComponents/Browser/BulkAction.js +3 -9
  68. package/presentation/config/configComponents/Browser/BulkAction.js.map +1 -1
  69. package/presentation/config/configComponents/Browser/FileAction.d.ts +2 -1
  70. package/presentation/config/configComponents/Browser/FolderAction.d.ts +2 -1
  71. package/presentation/config/configComponents/Browser/Table/Column.d.ts +9 -8
  72. package/presentation/config/configComponents/Browser/Table/index.d.ts +9 -9
  73. package/presentation/config/configComponents/Browser/index.d.ts +20 -20
  74. package/presentation/config/configComponents/Browser/index.js +0 -8
  75. package/presentation/config/configComponents/Browser/index.js.map +1 -1
  76. package/presentation/config/configComponents/FileDetails/index.d.ts +4 -2
  77. package/presentation/fieldRenderers/CmsFilePickerRenderer.d.ts +13 -0
  78. package/presentation/fieldRenderers/CmsFilePickerRenderer.js +29 -0
  79. package/presentation/fieldRenderers/CmsFilePickerRenderer.js.map +1 -0
  80. package/presentation/fieldRenderers/CmsMultiFilePickerRenderer.d.ts +13 -0
  81. package/presentation/fieldRenderers/CmsMultiFilePickerRenderer.js +51 -0
  82. package/presentation/fieldRenderers/CmsMultiFilePickerRenderer.js.map +1 -0
  83. package/routes.d.ts +1 -0
  84. package/routes.js +2 -1
  85. package/routes.js.map +1 -1
  86. package/modules/HeadlessCms/fileField.d.ts +0 -2
  87. package/modules/HeadlessCms/fileField.js +0 -44
  88. package/modules/HeadlessCms/fileField.js.map +0 -1
  89. package/modules/HeadlessCms/fileRenderer/fileField.d.ts +0 -2
  90. package/modules/HeadlessCms/fileRenderer/fileField.js +0 -53
  91. package/modules/HeadlessCms/fileRenderer/fileField.js.map +0 -1
  92. package/modules/HeadlessCms/fileRenderer/fileFields.d.ts +0 -2
  93. package/modules/HeadlessCms/fileRenderer/fileFields.js +0 -73
  94. package/modules/HeadlessCms/fileRenderer/fileFields.js.map +0 -1
  95. package/modules/HeadlessCms/fileRenderer/utils.d.ts +0 -2
  96. package/modules/HeadlessCms/fileRenderer/utils.js +0 -15
  97. package/modules/HeadlessCms/fileRenderer/utils.js.map +0 -1
  98. package/modules/HeadlessCms/index.d.ts +0 -1
  99. package/modules/HeadlessCms/index.js +0 -14
  100. package/modules/HeadlessCms/index.js.map +0 -1
  101. package/modules/Settings/graphql.d.ts +0 -12
  102. package/modules/Settings/graphql.js +0 -36
  103. package/modules/Settings/graphql.js.map +0 -1
  104. package/modules/Settings/views/FileManagerSettings.d.ts +0 -2
  105. package/modules/Settings/views/FileManagerSettings.js +0 -134
  106. package/modules/Settings/views/FileManagerSettings.js.map +0 -1
  107. package/presentation/FileList/components/BulkActions/BatchEditorDialog/AddOperation.d.ts +0 -7
  108. package/presentation/FileList/components/BulkActions/BatchEditorDialog/AddOperation.js +0 -15
  109. package/presentation/FileList/components/BulkActions/BatchEditorDialog/AddOperation.js.map +0 -1
  110. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditor.d.ts +0 -15
  111. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditor.js +0 -44
  112. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditor.js.map +0 -1
  113. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialog.d.ts +0 -15
  114. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialog.js +0 -52
  115. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialog.js.map +0 -1
  116. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.d.ts +0 -61
  117. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.js +0 -111
  118. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.js.map +0 -1
  119. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.test.d.ts +0 -1
  120. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.test.js +0 -372
  121. package/presentation/FileList/components/BulkActions/BatchEditorDialog/BatchEditorDialogPresenter.test.js.map +0 -1
  122. package/presentation/FileList/components/BulkActions/BatchEditorDialog/FieldRenderer.d.ts +0 -8
  123. package/presentation/FileList/components/BulkActions/BatchEditorDialog/FieldRenderer.js +0 -31
  124. package/presentation/FileList/components/BulkActions/BatchEditorDialog/FieldRenderer.js.map +0 -1
  125. package/presentation/FileList/components/BulkActions/BatchEditorDialog/Operation.d.ts +0 -11
  126. package/presentation/FileList/components/BulkActions/BatchEditorDialog/Operation.js +0 -33
  127. package/presentation/FileList/components/BulkActions/BatchEditorDialog/Operation.js.map +0 -1
  128. package/presentation/FileList/components/BulkActions/BatchEditorDialog/index.d.ts +0 -1
  129. package/presentation/FileList/components/BulkActions/BatchEditorDialog/index.js +0 -1
  130. package/presentation/FileList/components/BulkActions/BulkActionEdit.d.ts +0 -4
  131. package/presentation/FileList/components/BulkActions/BulkActionEdit.js +0 -105
  132. package/presentation/FileList/components/BulkActions/BulkActionEdit.js.map +0 -1
  133. package/presentation/config/configComponents/Browser/FolderFieldDecorator.d.ts +0 -7
  134. package/presentation/config/configComponents/Browser/FolderFieldDecorator.js +0 -11
  135. package/presentation/config/configComponents/Browser/FolderFieldDecorator.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/FileList/components/Table/FileTable.test.js","sources":["../../../../../src/presentation/FileList/components/Table/FileTable.test.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport { describe, it, expect, vi } from \"vitest\";\nimport { observable } from \"mobx\";\nimport type { IFileManagerPresenter, IFileManagerViewModel } from \"../../abstractions.js\";\nimport type { IFolderTreeNode } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport type { FmFile } from \"~/features/shared/types.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers — extracted from FileTable.tsx for unit testing.\n// ---------------------------------------------------------------------------\n\n/**\n * Convert presenter sort state to DataTable sorting format.\n */\nfunction toDataTableSorting(\n sort: { field: string; direction: \"ASC\" | \"DESC\" } | null\n): Array<{ id: string; desc: boolean }> {\n if (!sort) {\n return [];\n }\n return [{ id: sort.field, desc: sort.direction === \"DESC\" }];\n}\n\n/**\n * Map IFolderTreeNode to FolderTableRow-compatible shape.\n */\nfunction toFolderTableRows(nodes: IFolderTreeNode[]) {\n return nodes.map(node => ({\n id: node.id,\n $type: \"FOLDER\" as const,\n $selectable: false,\n data: {\n id: node.id,\n title: node.name,\n slug: node.slug,\n type: \"\",\n parentId: node.parentId,\n path: \"\",\n permissions: [],\n hasNonInheritedPermissions: false,\n canManagePermissions: false,\n canManageStructure: false,\n canManageContent: false,\n createdBy: { id: \"\", displayName: \"\" },\n createdOn: \"\",\n savedBy: { id: \"\", displayName: \"\" },\n savedOn: \"\",\n modifiedBy: null,\n modifiedOn: null,\n extensions: {}\n }\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Mock file factory.\n// ---------------------------------------------------------------------------\n\nfunction createMockFile(overrides: Partial<FmFile> = {}): FmFile {\n return {\n id: \"file-1\",\n name: \"photo.jpg\",\n key: \"files/photo.jpg\",\n src: \"https://cdn.example.com/files/photo.jpg\",\n type: \"image/jpeg\",\n size: 1024,\n metadata: {},\n tags: [],\n createdOn: \"2025-01-01T00:00:00Z\",\n savedOn: \"2025-01-02T00:00:00Z\",\n createdBy: { id: \"user-1\", displayName: \"Alice\", type: \"admin\" },\n savedBy: { id: \"user-1\", displayName: \"Alice\", type: \"admin\" },\n location: { folderId: \"root\" },\n ...overrides\n };\n}\n\nfunction createMockFolderNode(overrides: Partial<IFolderTreeNode> = {}): IFolderTreeNode {\n return {\n id: \"folder-1\",\n name: \"Documents\",\n slug: \"documents\",\n parentId: null,\n children: [],\n hasNonInheritedPermissions: false,\n canManagePermissions: false,\n canManageStructure: true,\n ...overrides\n };\n}\n\nfunction createMockPresenter(\n vmOverrides: Partial<IFileManagerViewModel> = {}\n): IFileManagerPresenter {\n const defaultVm: IFileManagerViewModel = observable({\n fileModel: null,\n list: {\n rows: [],\n sort: null,\n filters: {},\n search: \"\",\n appliedQuery: null,\n pagination: {\n hasMore: false,\n loading: false,\n loadingMore: false,\n totalCount: 0,\n currentCount: 0\n },\n selection: {\n selectedIds: new Set<string>(),\n selectedCount: 0,\n allSelected: false\n },\n empty: true,\n emptyWithFilters: false,\n error: null\n },\n folders: {\n folders: [],\n tree: [],\n currentFolderId: null,\n currentFolder: null,\n loading: false,\n operation: { active: false, mode: null },\n isRootFolder: true,\n currentFolderTitle: \"All Files\",\n childFolders: [],\n loadingNodeIds: []\n },\n permissions: {\n canRead: true,\n canCreate: true,\n canEdit: true,\n canDelete: true,\n canEditFile: () => true,\n canDeleteFile: () => true\n },\n upload: {\n jobs: [],\n overallProgress: { percentage: 0, bytesSent: 0, totalBytes: 0 },\n isUploading: false\n },\n tags: [],\n loading: false,\n empty: false,\n showFolders: true,\n viewMode: \"table\" as const,\n dragging: false,\n showingFilters: false,\n isOverlay: false,\n accept: [],\n multiple: false,\n scope: undefined,\n fileDetails: null,\n ...vmOverrides\n });\n\n return {\n vm: defaultVm,\n actions: {\n search: { set: vi.fn(), clear: vi.fn() },\n sort: { set: vi.fn(), toggle: vi.fn() },\n filter: { set: vi.fn(), clear: vi.fn(), clearAll: vi.fn() },\n selection: {\n toggle: vi.fn(),\n selectRangeTo: vi.fn(),\n selectAll: vi.fn(),\n deselectAll: vi.fn(),\n selectRows: vi.fn(),\n isSelected: vi.fn().mockReturnValue(false)\n },\n loadMore: vi.fn().mockResolvedValue(undefined),\n refresh: vi.fn().mockResolvedValue(undefined),\n upload: vi.fn().mockResolvedValue(undefined),\n setViewMode: vi.fn(),\n showFileDetails: vi.fn(),\n hideFileDetails: vi.fn(),\n setDragging: vi.fn(),\n showFilters: vi.fn(),\n hideFilters: vi.fn(),\n folders: {\n selectFolder: vi.fn(),\n createFolder: vi.fn(),\n editFolder: vi.fn(),\n deleteFolder: vi.fn().mockResolvedValue(undefined),\n moveFolder: vi.fn().mockResolvedValue(undefined),\n loadChildFolders: vi.fn().mockResolvedValue(undefined),\n canManageStructure: vi.fn().mockReturnValue(true),\n getAncestorIds: vi.fn().mockReturnValue([]),\n submitOperation: vi.fn().mockResolvedValue(true),\n cancelOperation: vi.fn()\n }\n },\n init: vi.fn(),\n dispose: vi.fn()\n };\n}\n\n// ---------------------------------------------------------------------------\n// Tests\n// ---------------------------------------------------------------------------\n\ndescribe(\"FileTable — sorting conversion\", () => {\n it(\"should convert null sort to empty DataTable sorting\", () => {\n expect(toDataTableSorting(null)).toEqual([]);\n });\n\n it(\"should convert ASC sort to DataTable format\", () => {\n const result = toDataTableSorting({ field: \"name\", direction: \"ASC\" });\n expect(result).toEqual([{ id: \"name\", desc: false }]);\n });\n\n it(\"should convert DESC sort to DataTable format\", () => {\n const result = toDataTableSorting({ field: \"createdOn\", direction: \"DESC\" });\n expect(result).toEqual([{ id: \"createdOn\", desc: true }]);\n });\n});\n\ndescribe(\"FileTable — folder data mapping\", () => {\n it(\"should map IFolderTreeNode to FolderTableRow with $type FOLDER\", () => {\n const node = createMockFolderNode({ id: \"f1\", name: \"Images\", slug: \"images\" });\n const rows = toFolderTableRows([node]);\n\n expect(rows).toHaveLength(1);\n expect(rows[0].id).toBe(\"f1\");\n expect(rows[0].$type).toBe(\"FOLDER\");\n expect(rows[0].$selectable).toBe(false);\n expect(rows[0].data.title).toBe(\"Images\");\n expect(rows[0].data.slug).toBe(\"images\");\n });\n\n it(\"should map multiple folder nodes\", () => {\n const nodes = [\n createMockFolderNode({ id: \"f1\", name: \"Docs\" }),\n createMockFolderNode({ id: \"f2\", name: \"Photos\" })\n ];\n const rows = toFolderTableRows(nodes);\n\n expect(rows).toHaveLength(2);\n expect(rows[0].id).toBe(\"f1\");\n expect(rows[1].id).toBe(\"f2\");\n });\n\n it(\"should return empty array for empty folder list\", () => {\n expect(toFolderTableRows([])).toEqual([]);\n });\n});\n\ndescribe(\"FileTable — sort action wiring\", () => {\n it(\"should call actions.sort.set when sorting changes to DESC\", () => {\n const presenter = createMockPresenter();\n\n // Simulate what the component does when onSortingChange fires.\n const newSorting = [{ id: \"size\", desc: true }];\n if (newSorting.length > 0) {\n const { id, desc } = newSorting[0];\n presenter.actions.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n\n expect(presenter.actions.sort.set).toHaveBeenCalledWith(\"size\", \"DESC\");\n });\n\n it(\"should call actions.sort.set when sorting changes to ASC\", () => {\n const presenter = createMockPresenter();\n\n const newSorting = [{ id: \"name\", desc: false }];\n if (newSorting.length > 0) {\n const { id, desc } = newSorting[0];\n presenter.actions.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n\n expect(presenter.actions.sort.set).toHaveBeenCalledWith(\"name\", \"ASC\");\n });\n});\n\ndescribe(\"FileTable — selection action wiring\", () => {\n it(\"should call actions.selection.toggle for RECORD row toggle\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onToggleRow for a file row.\n const row = {\n id: \"file-1\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile()\n };\n if (row.$type === \"RECORD\") {\n presenter.actions.selection.toggle(row.id);\n }\n\n expect(presenter.actions.selection.toggle).toHaveBeenCalledWith(\"file-1\");\n });\n\n it(\"should not call actions.selection.toggle for FOLDER row toggle\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onToggleRow for a folder row — folders are not selectable.\n const row = { id: \"folder-1\", $type: \"FOLDER\" as const, $selectable: false, data: {} };\n if ((row.$type as string) === \"RECORD\") {\n presenter.actions.selection.toggle(row.id);\n }\n\n expect(presenter.actions.selection.toggle).not.toHaveBeenCalled();\n });\n\n it(\"should call actions.selection.deselectAll when empty selection\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onSelectRow with empty array.\n const rows: Array<{ id: string; $type: string }> = [];\n if (rows.length === 0) {\n presenter.actions.selection.deselectAll();\n }\n\n expect(presenter.actions.selection.deselectAll).toHaveBeenCalled();\n });\n\n it(\"should call actions.selection.selectRows with file IDs only\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onSelectRow with mixed rows.\n const rows = [\n {\n id: \"file-1\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile({ id: \"file-1\" })\n },\n { id: \"folder-1\", $type: \"FOLDER\" as const, $selectable: false, data: {} },\n {\n id: \"file-2\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile({ id: \"file-2\" })\n }\n ];\n\n const ids = rows.filter(row => row.$type === \"RECORD\").map(row => row.id);\n presenter.actions.selection.selectRows(ids);\n\n expect(presenter.actions.selection.selectRows).toHaveBeenCalledWith([\"file-1\", \"file-2\"]);\n });\n});\n"],"names":["toDataTableSorting","sort","toFolderTableRows","nodes","node","createMockFile","overrides","createMockFolderNode","createMockPresenter","vmOverrides","defaultVm","observable","Set","undefined","vi","describe","it","expect","result","rows","presenter","newSorting","id","desc","row","ids"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/FileList/components/Table/FileTable.test.js","sources":["../../../../../src/presentation/FileList/components/Table/FileTable.test.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport { describe, it, expect, vi } from \"vitest\";\nimport { observable } from \"mobx\";\nimport type { IFileManagerPresenter, IFileManagerViewModel } from \"../../abstractions.js\";\nimport type { IFolderTreeNode } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport type { FmFile } from \"~/features/shared/types.js\";\n\n// ---------------------------------------------------------------------------\n// Helpers — extracted from FileTable.tsx for unit testing.\n// ---------------------------------------------------------------------------\n\n/**\n * Convert presenter sort state to DataTable sorting format.\n */\nfunction toDataTableSorting(\n sort: { field: string; direction: \"ASC\" | \"DESC\" } | null\n): Array<{ id: string; desc: boolean }> {\n if (!sort) {\n return [];\n }\n return [{ id: sort.field, desc: sort.direction === \"DESC\" }];\n}\n\n/**\n * Map IFolderTreeNode to FolderTableRow-compatible shape.\n */\nfunction toFolderTableRows(nodes: IFolderTreeNode[]) {\n return nodes.map(node => ({\n id: node.id,\n $type: \"FOLDER\" as const,\n $selectable: false,\n data: {\n id: node.id,\n title: node.name,\n slug: node.slug,\n type: \"\",\n parentId: node.parentId,\n path: \"\",\n permissions: [],\n hasNonInheritedPermissions: false,\n canManagePermissions: false,\n canManageStructure: false,\n canManageContent: false,\n createdBy: { id: \"\", displayName: \"\" },\n createdOn: \"\",\n savedBy: { id: \"\", displayName: \"\" },\n savedOn: \"\",\n modifiedBy: null,\n modifiedOn: null,\n extensions: {}\n }\n }));\n}\n\n// ---------------------------------------------------------------------------\n// Mock file factory.\n// ---------------------------------------------------------------------------\n\nfunction createMockFile(overrides: Partial<FmFile> = {}): FmFile {\n return {\n id: \"file-1\",\n name: \"photo.jpg\",\n key: \"files/photo.jpg\",\n src: \"https://cdn.example.com/files/photo.jpg\",\n type: \"image/jpeg\",\n size: 1024,\n metadata: {},\n tags: [],\n createdOn: \"2025-01-01T00:00:00Z\",\n savedOn: \"2025-01-02T00:00:00Z\",\n createdBy: { id: \"user-1\", displayName: \"Alice\", type: \"admin\" },\n savedBy: { id: \"user-1\", displayName: \"Alice\", type: \"admin\" },\n location: { folderId: \"root\" },\n ...overrides\n };\n}\n\nfunction createMockFolderNode(overrides: Partial<IFolderTreeNode> = {}): IFolderTreeNode {\n return {\n id: \"folder-1\",\n name: \"Documents\",\n slug: \"documents\",\n parentId: null,\n children: [],\n hasNonInheritedPermissions: false,\n canManagePermissions: false,\n canManageStructure: true,\n ...overrides\n };\n}\n\nfunction createMockPresenter(\n vmOverrides: Partial<IFileManagerViewModel> = {}\n): IFileManagerPresenter {\n const defaultVm: IFileManagerViewModel = observable({\n fileModel: null,\n loading: false,\n empty: true,\n list: {\n rows: [],\n sort: null,\n filters: {},\n search: \"\",\n appliedQuery: null,\n pagination: {\n hasMore: false,\n loading: false,\n loadingMore: false,\n totalCount: 0,\n currentCount: 0\n },\n selection: {\n selectedIds: new Set<string>(),\n selectedCount: 0,\n allSelected: false,\n label: \"\"\n },\n showingFilters: false,\n empty: true,\n emptyWithFilters: false,\n error: null\n },\n folders: {\n folders: [],\n tree: [],\n currentFolderId: null,\n currentFolder: null,\n loading: false,\n operation: { active: false, mode: null },\n isRootFolder: true,\n currentFolderTitle: \"All Files\",\n childFolders: [],\n loadingNodeIds: []\n },\n permissions: {\n canRead: true,\n canCreate: true,\n canEdit: true,\n canDelete: true,\n canEditFile: () => true,\n canDeleteFile: () => true\n },\n upload: {\n jobs: [],\n overallProgress: { percentage: 0, bytesSent: 0, totalBytes: 0 },\n isUploading: false\n },\n tags: [],\n showFolders: true,\n childFolders: [],\n viewMode: \"table\" as const,\n dragging: false,\n showingFilters: false,\n isOverlay: false,\n accept: [],\n multiple: false,\n scope: undefined,\n fileDetails: null,\n ...vmOverrides\n });\n\n return {\n vm: defaultVm,\n actions: {\n search: { set: vi.fn(), clear: vi.fn() },\n sort: { set: vi.fn(), toggle: vi.fn() },\n filter: {\n set: vi.fn(),\n clear: vi.fn(),\n clearAll: vi.fn(),\n show: vi.fn(),\n hide: vi.fn()\n },\n selection: {\n toggle: vi.fn(),\n selectRangeTo: vi.fn(),\n selectAll: vi.fn(),\n deselectAll: vi.fn(),\n selectRows: vi.fn(),\n isSelected: vi.fn().mockReturnValue(false)\n },\n loadMore: vi.fn().mockResolvedValue(undefined),\n refresh: vi.fn().mockResolvedValue(undefined),\n upload: vi.fn().mockResolvedValue(undefined),\n setViewMode: vi.fn(),\n showFileDetails: vi.fn(),\n hideFileDetails: vi.fn(),\n setDragging: vi.fn(),\n showFilters: vi.fn(),\n hideFilters: vi.fn(),\n folders: {\n selectFolder: vi.fn(),\n createFolder: vi.fn(),\n editFolder: vi.fn(),\n deleteFolder: vi.fn().mockResolvedValue(undefined),\n moveFolder: vi.fn().mockResolvedValue(undefined),\n loadChildFolders: vi.fn().mockResolvedValue(undefined),\n canManageStructure: vi.fn().mockReturnValue(true),\n getAncestorIds: vi.fn().mockReturnValue([]),\n submitOperation: vi.fn().mockResolvedValue(true),\n cancelOperation: vi.fn()\n }\n },\n init: vi.fn(),\n dispose: vi.fn()\n };\n}\n\n// ---------------------------------------------------------------------------\n// Tests\n// ---------------------------------------------------------------------------\n\ndescribe(\"FileTable — sorting conversion\", () => {\n it(\"should convert null sort to empty DataTable sorting\", () => {\n expect(toDataTableSorting(null)).toEqual([]);\n });\n\n it(\"should convert ASC sort to DataTable format\", () => {\n const result = toDataTableSorting({ field: \"name\", direction: \"ASC\" });\n expect(result).toEqual([{ id: \"name\", desc: false }]);\n });\n\n it(\"should convert DESC sort to DataTable format\", () => {\n const result = toDataTableSorting({ field: \"createdOn\", direction: \"DESC\" });\n expect(result).toEqual([{ id: \"createdOn\", desc: true }]);\n });\n});\n\ndescribe(\"FileTable — folder data mapping\", () => {\n it(\"should map IFolderTreeNode to FolderTableRow with $type FOLDER\", () => {\n const node = createMockFolderNode({ id: \"f1\", name: \"Images\", slug: \"images\" });\n const rows = toFolderTableRows([node]);\n\n expect(rows).toHaveLength(1);\n expect(rows[0].id).toBe(\"f1\");\n expect(rows[0].$type).toBe(\"FOLDER\");\n expect(rows[0].$selectable).toBe(false);\n expect(rows[0].data.title).toBe(\"Images\");\n expect(rows[0].data.slug).toBe(\"images\");\n });\n\n it(\"should map multiple folder nodes\", () => {\n const nodes = [\n createMockFolderNode({ id: \"f1\", name: \"Docs\" }),\n createMockFolderNode({ id: \"f2\", name: \"Photos\" })\n ];\n const rows = toFolderTableRows(nodes);\n\n expect(rows).toHaveLength(2);\n expect(rows[0].id).toBe(\"f1\");\n expect(rows[1].id).toBe(\"f2\");\n });\n\n it(\"should return empty array for empty folder list\", () => {\n expect(toFolderTableRows([])).toEqual([]);\n });\n});\n\ndescribe(\"FileTable — sort action wiring\", () => {\n it(\"should call actions.sort.set when sorting changes to DESC\", () => {\n const presenter = createMockPresenter();\n\n // Simulate what the component does when onSortingChange fires.\n const newSorting = [{ id: \"size\", desc: true }];\n if (newSorting.length > 0) {\n const { id, desc } = newSorting[0];\n presenter.actions.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n\n expect(presenter.actions.sort.set).toHaveBeenCalledWith(\"size\", \"DESC\");\n });\n\n it(\"should call actions.sort.set when sorting changes to ASC\", () => {\n const presenter = createMockPresenter();\n\n const newSorting = [{ id: \"name\", desc: false }];\n if (newSorting.length > 0) {\n const { id, desc } = newSorting[0];\n presenter.actions.sort.set(id, desc ? \"DESC\" : \"ASC\");\n }\n\n expect(presenter.actions.sort.set).toHaveBeenCalledWith(\"name\", \"ASC\");\n });\n});\n\ndescribe(\"FileTable — selection action wiring\", () => {\n it(\"should call actions.selection.toggle for RECORD row toggle\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onToggleRow for a file row.\n const row = {\n id: \"file-1\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile()\n };\n if (row.$type === \"RECORD\") {\n presenter.actions.selection.toggle(row.id);\n }\n\n expect(presenter.actions.selection.toggle).toHaveBeenCalledWith(\"file-1\");\n });\n\n it(\"should not call actions.selection.toggle for FOLDER row toggle\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onToggleRow for a folder row — folders are not selectable.\n const row = { id: \"folder-1\", $type: \"FOLDER\" as const, $selectable: false, data: {} };\n if ((row.$type as string) === \"RECORD\") {\n presenter.actions.selection.toggle(row.id);\n }\n\n expect(presenter.actions.selection.toggle).not.toHaveBeenCalled();\n });\n\n it(\"should call actions.selection.deselectAll when empty selection\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onSelectRow with empty array.\n const rows: Array<{ id: string; $type: string }> = [];\n if (rows.length === 0) {\n presenter.actions.selection.deselectAll();\n }\n\n expect(presenter.actions.selection.deselectAll).toHaveBeenCalled();\n });\n\n it(\"should call actions.selection.selectRows with file IDs only\", () => {\n const presenter = createMockPresenter();\n\n // Simulate onSelectRow with mixed rows.\n const rows = [\n {\n id: \"file-1\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile({ id: \"file-1\" })\n },\n { id: \"folder-1\", $type: \"FOLDER\" as const, $selectable: false, data: {} },\n {\n id: \"file-2\",\n $type: \"RECORD\" as const,\n $selectable: true,\n data: createMockFile({ id: \"file-2\" })\n }\n ];\n\n const ids = rows.filter(row => row.$type === \"RECORD\").map(row => row.id);\n presenter.actions.selection.selectRows(ids);\n\n expect(presenter.actions.selection.selectRows).toHaveBeenCalledWith([\"file-1\", \"file-2\"]);\n });\n});\n"],"names":["toDataTableSorting","sort","toFolderTableRows","nodes","node","createMockFile","overrides","createMockFolderNode","createMockPresenter","vmOverrides","defaultVm","observable","Set","undefined","vi","describe","it","expect","result","rows","presenter","newSorting","id","desc","row","ids"],"mappings":"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"}
@@ -33,6 +33,7 @@ import { TagsList } from "../FileList/components/TagsList/index.js";
33
33
  import { UploadProgress } from "../FileList/components/Upload/index.js";
34
34
  import { GetSettingsRepository } from "../../features/settings/abstractions.js";
35
35
  import { OverlayProvider, useOverlay } from "./OverlayContext.js";
36
+ import { RouteParamsSync } from "./RouteParamsSync.js";
36
37
  import { outputFileSelectionError } from "./outputFileSelectionError.js";
37
38
  const t = i18n.ns("app-admin/file-manager/file-manager-view");
38
39
  const FileManagerView_FileManagerViewLayout = observer(function() {
@@ -88,11 +89,9 @@ const FileManagerView_FileManagerViewLayout = observer(function() {
88
89
  browseFiles: browseFiles
89
90
  });
90
91
  if ("table" === vm.viewMode) return /*#__PURE__*/ react.createElement(ScrollArea, {
91
- className: "h-full",
92
92
  onScroll: loadMoreOnScroll
93
93
  }, /*#__PURE__*/ react.createElement(FileTable, null));
94
94
  return /*#__PURE__*/ react.createElement(ScrollArea, {
95
- className: "h-full",
96
95
  onScroll: loadMoreOnScroll
97
96
  }, /*#__PURE__*/ react.createElement(FileGrid, null));
98
97
  };
@@ -108,7 +107,7 @@ const FileManagerView_FileManagerViewLayout = observer(function() {
108
107
  }, /*#__PURE__*/ react.createElement(LeftPanel, {
109
108
  span: 2
110
109
  }, /*#__PURE__*/ react.createElement("div", {
111
- className: "flex flex-col h-full"
110
+ className: "flex flex-col h-main-content"
112
111
  }, /*#__PURE__*/ react.createElement("div", {
113
112
  className: "py-sm px-md"
114
113
  }, /*#__PURE__*/ react.createElement(Heading, {
@@ -141,11 +140,14 @@ const FileManagerView_FileManagerViewLayout = observer(function() {
141
140
  }))) : null)), /*#__PURE__*/ react.createElement(RightPanel, {
142
141
  span: 10
143
142
  }, /*#__PURE__*/ react.createElement("div", {
144
- className: "flex flex-col relative h-full overflow-hidden"
143
+ className: "flex flex-col relative",
144
+ style: {
145
+ height: "calc(100vh - 45px"
146
+ }
145
147
  }, /*#__PURE__*/ react.createElement(FileManagerHeader, {
146
148
  browseFiles: browseFiles
147
149
  }), /*#__PURE__*/ react.createElement("div", {
148
- className: "flex-1 min-h-0 overflow-hidden",
150
+ className: "flex-1",
149
151
  ...getDropZoneProps({
150
152
  onDragEnter: ()=>actions.setDragging(true),
151
153
  onDrop: ()=>actions.setDragging(false),
@@ -208,7 +210,7 @@ const FileManagerViewInner = observer(({ overlay = false, onChange, onClose, mul
208
210
  ]);
209
211
  const inner = /*#__PURE__*/ react.createElement(DialogsProvider, null, /*#__PURE__*/ react.createElement(FileManagerViewWithConfig, null, /*#__PURE__*/ react.createElement(FileManagerPresenterProvider, {
210
212
  presenter: presenter
211
- }, /*#__PURE__*/ react.createElement(FileManagerView_FileManagerViewLayout, null), children)));
213
+ }, /*#__PURE__*/ react.createElement(FileManagerView_FileManagerViewLayout, null), children, !overlayConfig && /*#__PURE__*/ react.createElement(RouteParamsSync, null))));
212
214
  if (overlayConfig) return /*#__PURE__*/ react.createElement(OverlayProvider, {
213
215
  config: overlayConfig
214
216
  }, inner);
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/FileManager/FileManagerView.js","sources":["../../../src/presentation/FileManager/FileManagerView.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from \"react\";\nimport { DiContainerProvider, useContainer, useFeature } from \"@webiny/app\";\nimport { observer } from \"mobx-react-lite\";\nimport {\n BrowserFilePicker,\n type BrowserFilePickerRenderProps\n} from \"@webiny/app-admin/presentation/browserFilePicker/index.js\";\nimport debounce from \"lodash/debounce.js\";\nimport { Heading, OverlayLoader, ScrollArea, Separator, useToast } from \"@webiny/admin-ui\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport {\n LeftPanel,\n OverlayLayout,\n RightPanel,\n SplitView,\n DialogsProvider,\n useHotkeys\n} from \"@webiny/app-admin\";\nimport { FoldersFeature } from \"@webiny/app-aco/features/folders/feature.js\";\nimport { FolderTreePresenterFeature } from \"@webiny/app-aco/presentation/folderTree/feature.js\";\nimport { FileManagerPresenterFeature } from \"~/presentation/FileList/feature.js\";\nimport {\n FileManagerPresenterProvider,\n useFileManagerPresenter\n} from \"~/presentation/FileList/FileManagerPresenterProvider.js\";\nimport { FileDetailsPresenterFeature } from \"~/presentation/FileDetails/feature.js\";\nimport { SharedCacheFeature } from \"~/features/shared/feature.js\";\nimport { ListFilesFeature } from \"~/features/listFiles/feature.js\";\nimport { GetFileFeature } from \"~/features/getFile/feature.js\";\nimport { DeleteFileFeature } from \"~/features/deleteFile/feature.js\";\nimport { UpdateFileFeature } from \"~/features/updateFile/feature.js\";\nimport { FileUploaderFeature } from \"~/features/fileUploader/feature.js\";\nimport { ListTagsFeature } from \"~/features/tags/feature.js\";\nimport { GetSettingsFeature } from \"~/features/settings/feature.js\";\nimport {\n FileManagerViewWithConfig,\n useFileManagerConfig\n} from \"~/presentation/config/FileManagerViewConfig.js\";\nimport { FolderTree } from \"@webiny/app-aco/presentation/folderTree/FolderTree.js\";\nimport { BottomInfoBar } from \"~/presentation/FileList/components/BottomInfoBar/index.js\";\nimport { BulkActionBar } from \"~/presentation/FileList/components/BulkActions/index.js\";\nimport { FileDropPlaceholder } from \"~/presentation/FileList/components/FileDropPlaceholder/index.js\";\nimport { Empty } from \"~/presentation/FileList/components/Empty/index.js\";\nimport { FileDetailsDrawer } from \"~/presentation/FileDetails/components/FileDetailsDrawer.js\";\nimport { FileGrid } from \"~/presentation/FileList/components/Grid/index.js\";\nimport { FileManagerHeader } from \"~/presentation/FileList/components/Header/FileManagerHeader.js\";\nimport { FileTable } from \"~/presentation/FileList/components/Table/index.js\";\nimport { TagsList } from \"~/presentation/FileList/components/TagsList/index.js\";\nimport { UploadProgress } from \"~/presentation/FileList/components/Upload/index.js\";\nimport { GetSettingsRepository } from \"~/features/settings/abstractions.js\";\nimport { OverlayProvider, useOverlay } from \"./OverlayContext.js\";\n\nimport type { FmFile } from \"~/features/shared/types.js\";\nimport type {\n FileError,\n SelectedFile\n} from \"@webiny/app-admin/presentation/browserFilePicker/index.js\";\nimport { outputFileSelectionError } from \"~/presentation/FileManager/outputFileSelectionError.js\";\nimport type { ScrollPosition } from \"@webiny/admin-ui\";\n\nexport interface FileManagerViewProps {\n overlay?: boolean;\n onChange?: (files: FmFile[]) => void;\n onClose?: () => void;\n multiple?: boolean;\n accept?: string[];\n scope?: string;\n children?: React.ReactNode;\n}\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\n// ---------------------------------------------------------------------------\n// Layout — uses original UI components, wired to the presenter.\n// ---------------------------------------------------------------------------\n\nconst FileManagerViewLayout = observer(function FileManagerViewLayout() {\n const { vm, actions } = useFileManagerPresenter();\n const { browser } = useFileManagerConfig();\n const overlay = useOverlay();\n const toast = useToast();\n\n useHotkeys({\n zIndex: 20,\n keys: {\n esc: () => overlay && overlay.onClose()\n }\n });\n\n const container = useContainer();\n const settingsRepository = useMemo(() => container.resolve(GetSettingsRepository), [container]);\n const settings = settingsRepository.settings;\n\n const uploadFiles = async (files: SelectedFile[]) => {\n await actions.upload(files);\n toast.showSuccessToast({ title: \"File upload complete.\" });\n };\n\n const onError = useCallback((errors: FileError[]) => {\n const message = outputFileSelectionError(errors);\n if (message) {\n toast.showWarningToast({ title: message });\n } else {\n toast.showWarningToast({ title: \"Couldn't process selected files.\" });\n console.error(errors);\n }\n }, []);\n\n const loadMoreOnScroll = useCallback(\n debounce(async (scrollFrame: ScrollPosition) => {\n if (scrollFrame.top > 0.8) {\n void actions.loadMore();\n }\n }, 200),\n [vm.list.pagination, actions]\n );\n\n if (!vm.fileModel) {\n return <OverlayLoader text={t`Preparing File Manager...`} />;\n }\n\n const renderList = (browseFiles: BrowserFilePickerRenderProps[\"browseFiles\"]) => {\n if (vm.loading) {\n return <OverlayLoader text={t`Loading files...`} size={\"lg\"} />;\n }\n\n if (vm.empty) {\n return <Empty isSearchResult={!vm.showFolders} browseFiles={browseFiles} />;\n }\n\n if (vm.viewMode === \"table\") {\n return (\n <ScrollArea className={\"h-full\"} onScroll={loadMoreOnScroll}>\n <FileTable />\n </ScrollArea>\n );\n }\n\n return (\n <ScrollArea className={\"h-full\"} onScroll={loadMoreOnScroll}>\n <FileGrid />\n </ScrollArea>\n );\n };\n\n const content = (\n <BrowserFilePicker\n multiple\n maxSize={settings ? settings.uploadMaxFileSize + \"b\" : \"1TB\"}\n multipleMaxSize={\"1TB\"}\n accept={overlay?.accept ?? []}\n onSuccess={uploadFiles}\n onError={onError}\n >\n {({ getDropZoneProps, browseFiles }) => (\n <>\n <FileDetailsDrawer />\n <SplitView namespace={\"fm/file/list\"}>\n <LeftPanel span={2}>\n <div className={\"flex flex-col h-full\"}>\n <div className={\"py-sm px-md\"}>\n <Heading level={5}>{t`File Manager`}</Heading>\n </div>\n <Separator />\n <div className={\"shrink-0 overflow-y-auto max-h-[66vh]\"}>\n <FolderTree\n vm={vm.folders}\n actions={actions.folders}\n folderActions={browser.folder.actions}\n dropConfirmation={browser.folder.dropConfirmation}\n enableActions={true}\n enableCreate={true}\n />\n </div>\n {browser.filterByTags ? (\n <>\n <Separator />\n <div className={\"flex-1 overflow-y-auto min-h-0\"}>\n <TagsList\n loading={false}\n activeTags={\n (vm.list.filters[\"tags\"] as string[]) ?? []\n }\n tags={vm.tags.map(tag => ({\n tag: tag.tag,\n count: tag.count\n }))}\n onActivatedTagsChange={tags => {\n if (tags.length > 0) {\n actions.filter.set(\"tags\", tags);\n } else {\n actions.filter.clear(\"tags\");\n actions.filter.clear(\"tags_rule\");\n }\n }}\n />\n </div>\n </>\n ) : null}\n </div>\n </LeftPanel>\n <RightPanel span={10}>\n <div className={\"flex flex-col relative h-full overflow-hidden\"}>\n <FileManagerHeader browseFiles={browseFiles} />\n <div\n className={\"flex-1 min-h-0 overflow-hidden\"}\n {...getDropZoneProps({\n onDragEnter: () => actions.setDragging(true),\n onDrop: () => actions.setDragging(false),\n onDragLeave: (e: React.DragEvent) => {\n if (\n !e.relatedTarget ||\n !e.currentTarget.contains(e.relatedTarget as Node)\n ) {\n actions.setDragging(false);\n }\n }\n })}\n data-testid={\"fm-list-wrapper\"}\n >\n {!overlay && <BulkActionBar />}\n {renderList(browseFiles)}\n {vm.dragging && <FileDropPlaceholder />}\n <UploadProgress />\n </div>\n <BottomInfoBar\n accept={overlay?.accept ?? []}\n listing={vm.list.pagination.loadingMore}\n loading={vm.list.pagination.loading}\n totalCount={vm.list.pagination.totalCount}\n currentCount={vm.list.pagination.currentCount}\n />\n </div>\n </RightPanel>\n </SplitView>\n </>\n )}\n </BrowserFilePicker>\n );\n\n if (overlay) {\n return (\n <OverlayLayout variant={\"strong\"} onExited={() => overlay.onClose()}>\n {content}\n </OverlayLayout>\n );\n }\n\n return content;\n});\n\n// ---------------------------------------------------------------------------\n// Inner component that resolves the presenter from the scoped container.\n// ---------------------------------------------------------------------------\n\nconst FileManagerViewInner = observer(\n ({\n overlay = false,\n onChange,\n onClose,\n multiple,\n accept,\n scope,\n children\n }: FileManagerViewProps) => {\n const { presenter } = useFeature(FileManagerPresenterFeature);\n\n const overlayConfig = useMemo(() => {\n if (!overlay || !onChange || !onClose) {\n return null;\n }\n\n const handleFileClick = (file: FmFile) => {\n if (multiple) {\n presenter.actions.selection.toggle(file.id);\n } else {\n onChange([file]);\n }\n };\n\n const confirmSelection = () => {\n const selectedIds = presenter.vm.list.selection.selectedIds;\n const selectedFiles = presenter.vm.list.rows.filter(f => selectedIds.has(f.id));\n if (selectedFiles.length > 0) {\n onChange(selectedFiles);\n }\n };\n\n return {\n onFileClick: handleFileClick,\n confirmSelection,\n onClose,\n accept: accept ?? [],\n multiple: multiple ?? false\n };\n }, [overlay, onChange, onClose, multiple, accept]);\n\n useEffect(() => {\n presenter.init({ scope });\n return () => presenter.dispose();\n }, [presenter, overlay, scope]);\n\n const inner = (\n <DialogsProvider>\n <FileManagerViewWithConfig>\n <FileManagerPresenterProvider presenter={presenter}>\n <FileManagerViewLayout />\n {children}\n </FileManagerPresenterProvider>\n </FileManagerViewWithConfig>\n </DialogsProvider>\n );\n\n if (overlayConfig) {\n return <OverlayProvider config={overlayConfig}>{inner}</OverlayProvider>;\n }\n\n return inner;\n }\n);\n\n// ---------------------------------------------------------------------------\n// FileManagerView — sets up DI container and renders the inner component.\n// ---------------------------------------------------------------------------\n\nexport const FileManagerView = (props: FileManagerViewProps) => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n\n SharedCacheFeature.register(child);\n FoldersFeature.register(child, { type: \"FmFile\" });\n FolderTreePresenterFeature.register(child);\n ListFilesFeature.register(child);\n GetFileFeature.register(child);\n DeleteFileFeature.register(child);\n UpdateFileFeature.register(child);\n FileUploaderFeature.register(child);\n ListTagsFeature.register(child);\n GetSettingsFeature.register(child);\n FileDetailsPresenterFeature.register(child);\n FileManagerPresenterFeature.register(child);\n\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <FileManagerViewInner {...props} />\n </DiContainerProvider>\n );\n};\n"],"names":["t","i18n","FileManagerViewLayout","observer","vm","actions","useFileManagerPresenter","browser","useFileManagerConfig","overlay","useOverlay","toast","useToast","useHotkeys","container","useContainer","settingsRepository","useMemo","GetSettingsRepository","settings","uploadFiles","files","onError","useCallback","errors","message","outputFileSelectionError","console","loadMoreOnScroll","debounce","scrollFrame","OverlayLoader","renderList","browseFiles","Empty","ScrollArea","FileTable","FileGrid","content","BrowserFilePicker","getDropZoneProps","FileDetailsDrawer","SplitView","LeftPanel","Heading","Separator","FolderTree","TagsList","tag","tags","RightPanel","FileManagerHeader","e","BulkActionBar","FileDropPlaceholder","UploadProgress","BottomInfoBar","OverlayLayout","FileManagerViewInner","onChange","onClose","multiple","accept","scope","children","presenter","useFeature","FileManagerPresenterFeature","overlayConfig","handleFileClick","file","confirmSelection","selectedIds","selectedFiles","f","useEffect","inner","DialogsProvider","FileManagerViewWithConfig","FileManagerPresenterProvider","OverlayProvider","FileManagerView","props","scopedContainer","child","SharedCacheFeature","FoldersFeature","FolderTreePresenterFeature","ListFilesFeature","GetFileFeature","DeleteFileFeature","UpdateFileFeature","FileUploaderFeature","ListTagsFeature","GetSettingsFeature","FileDetailsPresenterFeature","DiContainerProvider"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/FileManager/FileManagerView.js","sources":["../../../src/presentation/FileManager/FileManagerView.tsx"],"sourcesContent":["import React, { useMemo, useEffect, useCallback } from \"react\";\nimport { DiContainerProvider, useContainer, useFeature } from \"@webiny/app\";\nimport { observer } from \"mobx-react-lite\";\nimport {\n BrowserFilePicker,\n type BrowserFilePickerRenderProps\n} from \"@webiny/app-admin/presentation/browserFilePicker/index.js\";\nimport debounce from \"lodash/debounce.js\";\nimport { Heading, OverlayLoader, ScrollArea, Separator, useToast } from \"@webiny/admin-ui\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport {\n LeftPanel,\n OverlayLayout,\n RightPanel,\n SplitView,\n DialogsProvider,\n useHotkeys\n} from \"@webiny/app-admin\";\nimport { FoldersFeature } from \"@webiny/app-aco/features/folders/feature.js\";\nimport { FolderTreePresenterFeature } from \"@webiny/app-aco/presentation/folderTree/feature.js\";\nimport { FileManagerPresenterFeature } from \"~/presentation/FileList/feature.js\";\nimport {\n FileManagerPresenterProvider,\n useFileManagerPresenter\n} from \"~/presentation/FileList/FileManagerPresenterProvider.js\";\nimport { FileDetailsPresenterFeature } from \"~/presentation/FileDetails/feature.js\";\nimport { SharedCacheFeature } from \"~/features/shared/feature.js\";\nimport { ListFilesFeature } from \"~/features/listFiles/feature.js\";\nimport { GetFileFeature } from \"~/features/getFile/feature.js\";\nimport { DeleteFileFeature } from \"~/features/deleteFile/feature.js\";\nimport { UpdateFileFeature } from \"~/features/updateFile/feature.js\";\nimport { FileUploaderFeature } from \"~/features/fileUploader/feature.js\";\nimport { ListTagsFeature } from \"~/features/tags/feature.js\";\nimport { GetSettingsFeature } from \"~/features/settings/feature.js\";\nimport {\n FileManagerViewWithConfig,\n useFileManagerConfig\n} from \"~/presentation/config/FileManagerViewConfig.js\";\nimport { FolderTree } from \"@webiny/app-aco/presentation/folderTree/FolderTree.js\";\nimport { BottomInfoBar } from \"~/presentation/FileList/components/BottomInfoBar/index.js\";\nimport { BulkActionBar } from \"~/presentation/FileList/components/BulkActions/index.js\";\nimport { FileDropPlaceholder } from \"~/presentation/FileList/components/FileDropPlaceholder/index.js\";\nimport { Empty } from \"~/presentation/FileList/components/Empty/index.js\";\nimport { FileDetailsDrawer } from \"~/presentation/FileDetails/components/FileDetailsDrawer.js\";\nimport { FileGrid } from \"~/presentation/FileList/components/Grid/index.js\";\nimport { FileManagerHeader } from \"~/presentation/FileList/components/Header/FileManagerHeader.js\";\nimport { FileTable } from \"~/presentation/FileList/components/Table/index.js\";\nimport { TagsList } from \"~/presentation/FileList/components/TagsList/index.js\";\nimport { UploadProgress } from \"~/presentation/FileList/components/Upload/index.js\";\nimport { GetSettingsRepository } from \"~/features/settings/abstractions.js\";\nimport { OverlayProvider, useOverlay } from \"./OverlayContext.js\";\nimport { RouteParamsSync } from \"./RouteParamsSync.js\";\n\nimport type { FmFile } from \"~/features/shared/types.js\";\nimport type {\n FileError,\n SelectedFile\n} from \"@webiny/app-admin/presentation/browserFilePicker/index.js\";\nimport { outputFileSelectionError } from \"~/presentation/FileManager/outputFileSelectionError.js\";\nimport type { ScrollPosition } from \"@webiny/admin-ui\";\n\nexport interface FileManagerViewProps {\n overlay?: boolean;\n onChange?: (files: FmFile[]) => void;\n onClose?: () => void;\n multiple?: boolean;\n accept?: string[];\n scope?: string;\n children?: React.ReactNode;\n}\n\nconst t = i18n.ns(\"app-admin/file-manager/file-manager-view\");\n\n// ---------------------------------------------------------------------------\n// Layout — uses original UI components, wired to the presenter.\n// ---------------------------------------------------------------------------\n\nconst FileManagerViewLayout = observer(function FileManagerViewLayout() {\n const { vm, actions } = useFileManagerPresenter();\n const { browser } = useFileManagerConfig();\n const overlay = useOverlay();\n const toast = useToast();\n\n useHotkeys({\n zIndex: 20,\n keys: {\n esc: () => overlay && overlay.onClose()\n }\n });\n\n const container = useContainer();\n const settingsRepository = useMemo(() => container.resolve(GetSettingsRepository), [container]);\n const settings = settingsRepository.settings;\n\n const uploadFiles = async (files: SelectedFile[]) => {\n await actions.upload(files);\n toast.showSuccessToast({ title: \"File upload complete.\" });\n };\n\n const onError = useCallback((errors: FileError[]) => {\n const message = outputFileSelectionError(errors);\n if (message) {\n toast.showWarningToast({ title: message });\n } else {\n toast.showWarningToast({ title: \"Couldn't process selected files.\" });\n console.error(errors);\n }\n }, []);\n\n const loadMoreOnScroll = useCallback(\n debounce(async (scrollFrame: ScrollPosition) => {\n if (scrollFrame.top > 0.8) {\n void actions.loadMore();\n }\n }, 200),\n [vm.list.pagination, actions]\n );\n\n if (!vm.fileModel) {\n return <OverlayLoader text={t`Preparing File Manager...`} />;\n }\n\n const renderList = (browseFiles: BrowserFilePickerRenderProps[\"browseFiles\"]) => {\n if (vm.loading) {\n return <OverlayLoader text={t`Loading files...`} size={\"lg\"} />;\n }\n\n if (vm.empty) {\n return <Empty isSearchResult={!vm.showFolders} browseFiles={browseFiles} />;\n }\n\n if (vm.viewMode === \"table\") {\n return (\n <ScrollArea onScroll={loadMoreOnScroll}>\n <FileTable />\n </ScrollArea>\n );\n }\n\n return (\n <ScrollArea onScroll={loadMoreOnScroll}>\n <FileGrid />\n </ScrollArea>\n );\n };\n\n const content = (\n <BrowserFilePicker\n multiple\n maxSize={settings ? settings.uploadMaxFileSize + \"b\" : \"1TB\"}\n multipleMaxSize={\"1TB\"}\n accept={overlay?.accept ?? []}\n onSuccess={uploadFiles}\n onError={onError}\n >\n {({ getDropZoneProps, browseFiles }) => (\n <>\n <FileDetailsDrawer />\n <SplitView namespace={\"fm/file/list\"}>\n <LeftPanel span={2}>\n <div className={\"flex flex-col h-main-content\"}>\n <div className={\"py-sm px-md\"}>\n <Heading level={5}>{t`File Manager`}</Heading>\n </div>\n <Separator />\n <div className={\"shrink-0 overflow-y-auto max-h-[66vh]\"}>\n <FolderTree\n vm={vm.folders}\n actions={actions.folders}\n folderActions={browser.folder.actions}\n dropConfirmation={browser.folder.dropConfirmation}\n enableActions={true}\n enableCreate={true}\n />\n </div>\n {browser.filterByTags ? (\n <>\n <Separator />\n <div className={\"flex-1 overflow-y-auto min-h-0\"}>\n <TagsList\n loading={false}\n activeTags={\n (vm.list.filters[\"tags\"] as string[]) ?? []\n }\n tags={vm.tags.map(tag => ({\n tag: tag.tag,\n count: tag.count\n }))}\n onActivatedTagsChange={tags => {\n if (tags.length > 0) {\n actions.filter.set(\"tags\", tags);\n } else {\n actions.filter.clear(\"tags\");\n actions.filter.clear(\"tags_rule\");\n }\n }}\n />\n </div>\n </>\n ) : null}\n </div>\n </LeftPanel>\n <RightPanel span={10}>\n <div\n className={\"flex flex-col relative\"}\n style={{ height: \"calc(100vh - 45px\" }}\n >\n <FileManagerHeader browseFiles={browseFiles} />\n <div\n className={\"flex-1\"}\n {...getDropZoneProps({\n onDragEnter: () => actions.setDragging(true),\n onDrop: () => actions.setDragging(false),\n onDragLeave: (e: React.DragEvent) => {\n if (\n !e.relatedTarget ||\n !e.currentTarget.contains(e.relatedTarget as Node)\n ) {\n actions.setDragging(false);\n }\n }\n })}\n data-testid={\"fm-list-wrapper\"}\n >\n {!overlay && <BulkActionBar />}\n {renderList(browseFiles)}\n {vm.dragging && <FileDropPlaceholder />}\n <UploadProgress />\n </div>\n <BottomInfoBar\n accept={overlay?.accept ?? []}\n listing={vm.list.pagination.loadingMore}\n loading={vm.list.pagination.loading}\n totalCount={vm.list.pagination.totalCount}\n currentCount={vm.list.pagination.currentCount}\n />\n </div>\n </RightPanel>\n </SplitView>\n </>\n )}\n </BrowserFilePicker>\n );\n\n if (overlay) {\n return (\n <OverlayLayout variant={\"strong\"} onExited={() => overlay.onClose()}>\n {content}\n </OverlayLayout>\n );\n }\n\n return content;\n});\n\n// ---------------------------------------------------------------------------\n// Inner component that resolves the presenter from the scoped container.\n// ---------------------------------------------------------------------------\n\nconst FileManagerViewInner = observer(\n ({\n overlay = false,\n onChange,\n onClose,\n multiple,\n accept,\n scope,\n children\n }: FileManagerViewProps) => {\n const { presenter } = useFeature(FileManagerPresenterFeature);\n\n const overlayConfig = useMemo(() => {\n if (!overlay || !onChange || !onClose) {\n return null;\n }\n\n const handleFileClick = (file: FmFile) => {\n if (multiple) {\n presenter.actions.selection.toggle(file.id);\n } else {\n onChange([file]);\n }\n };\n\n const confirmSelection = () => {\n const selectedIds = presenter.vm.list.selection.selectedIds;\n const selectedFiles = presenter.vm.list.rows.filter(f => selectedIds.has(f.id));\n if (selectedFiles.length > 0) {\n onChange(selectedFiles);\n }\n };\n\n return {\n onFileClick: handleFileClick,\n confirmSelection,\n onClose,\n accept: accept ?? [],\n multiple: multiple ?? false\n };\n }, [overlay, onChange, onClose, multiple, accept]);\n\n useEffect(() => {\n presenter.init({ scope });\n return () => presenter.dispose();\n }, [presenter, overlay, scope]);\n\n const inner = (\n <DialogsProvider>\n <FileManagerViewWithConfig>\n <FileManagerPresenterProvider presenter={presenter}>\n <FileManagerViewLayout />\n {children}\n {!overlayConfig && <RouteParamsSync />}\n </FileManagerPresenterProvider>\n </FileManagerViewWithConfig>\n </DialogsProvider>\n );\n\n if (overlayConfig) {\n return <OverlayProvider config={overlayConfig}>{inner}</OverlayProvider>;\n }\n\n return inner;\n }\n);\n\n// ---------------------------------------------------------------------------\n// FileManagerView — sets up DI container and renders the inner component.\n// ---------------------------------------------------------------------------\n\nexport const FileManagerView = (props: FileManagerViewProps) => {\n const container = useContainer();\n\n const scopedContainer = useMemo(() => {\n const child = container.createChildContainer();\n\n SharedCacheFeature.register(child);\n FoldersFeature.register(child, { type: \"FmFile\" });\n FolderTreePresenterFeature.register(child);\n ListFilesFeature.register(child);\n GetFileFeature.register(child);\n DeleteFileFeature.register(child);\n UpdateFileFeature.register(child);\n FileUploaderFeature.register(child);\n ListTagsFeature.register(child);\n GetSettingsFeature.register(child);\n FileDetailsPresenterFeature.register(child);\n FileManagerPresenterFeature.register(child);\n\n return child;\n }, []);\n\n return (\n <DiContainerProvider container={scopedContainer}>\n <FileManagerViewInner {...props} />\n </DiContainerProvider>\n );\n};\n"],"names":["t","i18n","FileManagerViewLayout","observer","vm","actions","useFileManagerPresenter","browser","useFileManagerConfig","overlay","useOverlay","toast","useToast","useHotkeys","container","useContainer","settingsRepository","useMemo","GetSettingsRepository","settings","uploadFiles","files","onError","useCallback","errors","message","outputFileSelectionError","console","loadMoreOnScroll","debounce","scrollFrame","OverlayLoader","renderList","browseFiles","Empty","ScrollArea","FileTable","FileGrid","content","BrowserFilePicker","getDropZoneProps","FileDetailsDrawer","SplitView","LeftPanel","Heading","Separator","FolderTree","TagsList","tag","tags","RightPanel","FileManagerHeader","e","BulkActionBar","FileDropPlaceholder","UploadProgress","BottomInfoBar","OverlayLayout","FileManagerViewInner","onChange","onClose","multiple","accept","scope","children","presenter","useFeature","FileManagerPresenterFeature","overlayConfig","handleFileClick","file","confirmSelection","selectedIds","selectedFiles","f","useEffect","inner","DialogsProvider","FileManagerViewWithConfig","FileManagerPresenterProvider","RouteParamsSync","OverlayProvider","FileManagerView","props","scopedContainer","child","SharedCacheFeature","FoldersFeature","FolderTreePresenterFeature","ListFilesFeature","GetFileFeature","DeleteFileFeature","UpdateFileFeature","FileUploaderFeature","ListTagsFeature","GetSettingsFeature","FileDetailsPresenterFeature","DiContainerProvider"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const RouteParamsSync: () => React.JSX.Element;
@@ -0,0 +1,30 @@
1
+ import react from "react";
2
+ import { RouteParamsSync } from "@webiny/app/presentation/router/components/RouteParamsSync.js";
3
+ import { useFileManagerPresenter } from "../FileList/FileManagerPresenterProvider.js";
4
+ import { Routes } from "../../routes.js";
5
+ const RouteParamsSync_RouteParamsSync = ()=>{
6
+ const presenter = useFileManagerPresenter();
7
+ return /*#__PURE__*/ react.createElement(RouteParamsSync, {
8
+ route: Routes.List,
9
+ fields: (fields)=>[
10
+ fields.create({
11
+ param: "folderId",
12
+ read: ()=>presenter.vm.folders.currentFolderId ?? void 0,
13
+ write: (value)=>{
14
+ presenter.actions.folders.selectFolder(value ?? null);
15
+ }
16
+ }),
17
+ fields.create({
18
+ param: "search",
19
+ read: ()=>presenter.vm.list.search || void 0,
20
+ write: (value)=>{
21
+ if (value) presenter.actions.search.set(value);
22
+ else presenter.actions.search.clear();
23
+ }
24
+ })
25
+ ]
26
+ });
27
+ };
28
+ export { RouteParamsSync_RouteParamsSync as RouteParamsSync };
29
+
30
+ //# sourceMappingURL=RouteParamsSync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentation/FileManager/RouteParamsSync.js","sources":["../../../src/presentation/FileManager/RouteParamsSync.tsx"],"sourcesContent":["import React from \"react\";\nimport { RouteParamsSync as GenericRouteParamsSync } from \"@webiny/app/presentation/router/components/RouteParamsSync.js\";\nimport { useFileManagerPresenter } from \"~/presentation/FileList/FileManagerPresenterProvider.js\";\nimport { Routes } from \"~/routes.js\";\n\nexport const RouteParamsSync = () => {\n const presenter = useFileManagerPresenter();\n\n return (\n <GenericRouteParamsSync\n route={Routes.List}\n fields={fields => [\n fields.create<string>({\n param: \"folderId\",\n read: () => presenter.vm.folders.currentFolderId ?? undefined,\n write: value => {\n presenter.actions.folders.selectFolder(value ?? null);\n }\n }),\n fields.create<string>({\n param: \"search\",\n read: () => presenter.vm.list.search || undefined,\n write: value => {\n if (value) {\n presenter.actions.search.set(value);\n } else {\n presenter.actions.search.clear();\n }\n }\n })\n ]}\n />\n );\n};\n"],"names":["RouteParamsSync","presenter","useFileManagerPresenter","GenericRouteParamsSync","Routes","fields","undefined","value"],"mappings":";;;;AAKO,MAAMA,kCAAkB;IAC3B,MAAMC,YAAYC;IAElB,OAAO,WAAP,GACI,oBAACC,iBAAsBA;QACnB,OAAOC,OAAO,IAAI;QAClB,QAAQC,CAAAA,SAAU;gBACdA,OAAO,MAAM,CAAS;oBAClB,OAAO;oBACP,MAAM,IAAMJ,UAAU,EAAE,CAAC,OAAO,CAAC,eAAe,IAAIK;oBACpD,OAAOC,CAAAA;wBACHN,UAAU,OAAO,CAAC,OAAO,CAAC,YAAY,CAACM,SAAS;oBACpD;gBACJ;gBACAF,OAAO,MAAM,CAAS;oBAClB,OAAO;oBACP,MAAM,IAAMJ,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,IAAIK;oBACxC,OAAOC,CAAAA;wBACH,IAAIA,OACAN,UAAU,OAAO,CAAC,MAAM,CAAC,GAAG,CAACM;6BAE7BN,UAAU,OAAO,CAAC,MAAM,CAAC,KAAK;oBAEtC;gBACJ;aACH;;AAGb"}
@@ -3,7 +3,7 @@ import { Wcp } from "@webiny/app-admin";
3
3
  import { DeleteFolder, EditFolder, SetFolderPermissions } from "@webiny/app-aco";
4
4
  import { FileManagerViewConfig } from "./FileManagerViewConfig.js";
5
5
  import { FilterByType } from "../FileList/components/Filters/FilterByType.js";
6
- import { BulkActionDelete, BulkActionEdit, BulkActionMove } from "../FileList/components/BulkActions/index.js";
6
+ import { BulkActionDelete, BulkActionMove } from "../FileList/components/BulkActions/index.js";
7
7
  import { AccessControl, Tags } from "./fields/index.js";
8
8
  import { CellActions, CellAuthor, CellCreated, CellModified, CellName, CellSize, CellType, CopyFile, DeleteFile, EditFile, MoveFile } from "../FileList/components/Table/index.js";
9
9
  import { GridItemDefaultRenderer } from "./thumbnailRenderers/GridItemDefaultRenderer.js";
@@ -17,9 +17,6 @@ const { Browser: Browser, FileDetails: FileDetails } = FileManagerViewConfig;
17
17
  const DefaultFileManagerConfig = ()=>/*#__PURE__*/ react.createElement(FileManagerViewConfig, null, /*#__PURE__*/ react.createElement(Browser.FilterByTags, null), /*#__PURE__*/ react.createElement(Browser.Filter, {
18
18
  name: "type",
19
19
  element: /*#__PURE__*/ react.createElement(FilterByType, null)
20
- }), /*#__PURE__*/ react.createElement(Browser.BulkAction, {
21
- name: "edit",
22
- element: /*#__PURE__*/ react.createElement(BulkActionEdit, null)
23
20
  }), /*#__PURE__*/ react.createElement(Browser.BulkAction, {
24
21
  name: "move",
25
22
  element: /*#__PURE__*/ react.createElement(BulkActionMove, null)
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/config/DefaultFileManagerConfig.js","sources":["../../../src/presentation/config/DefaultFileManagerConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { Wcp } from \"@webiny/app-admin\";\nimport { DeleteFolder, EditFolder, SetFolderPermissions } from \"@webiny/app-aco\";\nimport { FileManagerViewConfig as FileManagerConfig } from \"~/presentation/config/FileManagerViewConfig.js\";\nimport { FilterByType } from \"~/presentation/FileList/components/Filters/FilterByType.js\";\nimport {\n BulkActionDelete,\n BulkActionEdit,\n BulkActionMove\n} from \"~/presentation/FileList/components/BulkActions/index.js\";\nimport { Tags, AccessControl } from \"~/presentation/config/fields/index.js\";\nimport {\n CellActions,\n CellAuthor,\n CellCreated,\n CellModified,\n CellName,\n CellSize,\n CellType,\n CopyFile,\n DeleteFile,\n EditFile,\n MoveFile\n} from \"~/presentation/FileList/components/Table/index.js\";\nimport { GridItemDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/GridItemDefaultRenderer.js\";\nimport { GridItemImageRenderer } from \"~/presentation/config/thumbnailRenderers/GridItemImageRenderer.js\";\nimport { FileActions } from \"~/presentation/FileActions/index.js\";\nimport { FilePreviewImageRenderer } from \"~/presentation/config/thumbnailRenderers/FilePreviewImageRenderer.js\";\nimport { TableItemDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/TableItemDefaultRenderer.js\";\nimport { TableItemImageRenderer } from \"~/presentation/config/thumbnailRenderers/TableItemImageRenderer.js\";\nimport { FilePreviewDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/FilePreviewDefaultRenderer.js\";\n\nconst { Browser, FileDetails } = FileManagerConfig;\n\nexport const DefaultFileManagerConfig = () => {\n return (\n <FileManagerConfig>\n {/* Filters */}\n <Browser.FilterByTags />\n <Browser.Filter name={\"type\"} element={<FilterByType />} />\n {/* Bulk Actions */}\n <Browser.BulkAction name={\"edit\"} element={<BulkActionEdit />} />\n <Browser.BulkAction name={\"move\"} element={<BulkActionMove />} />\n <Browser.BulkAction name={\"delete\"} element={<BulkActionDelete />} />\n {/* Folder Actions */}\n <Browser.Folder.Action name={\"edit\"} element={<EditFolder />} />\n <Browser.Folder.Action name={\"permissions\"} element={<SetFolderPermissions />} />\n <Browser.Folder.Action name={\"delete\"} element={<DeleteFolder />} />\n {/* File Actions */}\n <Browser.File.Action name={\"copy\"} element={<CopyFile />} />\n <Browser.File.Action name={\"edit\"} element={<EditFile />} />\n <Browser.File.Action name={\"move\"} element={<MoveFile />} />\n <Browser.File.Action name={\"delete\"} element={<DeleteFile />} />\n {/* Table Columns */}\n <Browser.Table.Column\n name={\"name\"}\n header={\"Name\"}\n cell={<CellName />}\n sortable={true}\n hideable={false}\n size={200}\n />\n <Browser.Table.Column name={\"type\"} header={\"Type\"} cell={<CellType />} />\n <Browser.Table.Column\n name={\"size\"}\n header={\"Size\"}\n cell={<CellSize />}\n sortable={true}\n />\n <Browser.Table.Column name={\"createdBy\"} header={\"Author\"} cell={<CellAuthor />} />\n <Browser.Table.Column\n name={\"createdOn\"}\n header={\"Created\"}\n cell={<CellCreated />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"savedOn\"}\n header={\"Modified\"}\n cell={<CellModified />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"actions\"}\n header={\" \"}\n cell={<CellActions />}\n size={56}\n truncate={false}\n className={\"flex justify-center\"}\n hideable={false}\n resizable={false}\n />\n <Browser.BulkEditField name={\"tags\"} element={<Tags />} />\n {/* File Details Actions */}\n <FileActions />\n {/* Access Control */}\n <Wcp.CanUsePrivateFiles>\n <Browser.BulkEditField\n name={\"accessControl\"}\n element={<AccessControl placeholder={\"Select privacy settings\"} />}\n />\n </Wcp.CanUsePrivateFiles>\n {/* Grid Thumbnail */}\n <Browser.Grid.Item.Thumbnail type={\"*/*\"} element={<GridItemDefaultRenderer />} />\n <Browser.Grid.Item.Thumbnail type={\"image/*\"} element={<GridItemImageRenderer />} />\n {/* Table Thumbnail */}\n <Browser.Table.Cell.Thumbnail type={\"image/*\"} element={<TableItemImageRenderer />} />\n <Browser.Table.Cell.Thumbnail type={\"*/*\"} element={<TableItemDefaultRenderer />} />\n {/* File Details Thumbnail */}\n <FileDetails.Preview.Thumbnail type={\"*/*\"} element={<FilePreviewDefaultRenderer />} />\n <FileDetails.Preview.Thumbnail\n type={\"image/*\"}\n element={<FilePreviewImageRenderer />}\n />\n </FileManagerConfig>\n );\n};\n"],"names":["Browser","FileDetails","FileManagerConfig","DefaultFileManagerConfig","FilterByType","BulkActionEdit","BulkActionMove","BulkActionDelete","EditFolder","SetFolderPermissions","DeleteFolder","CopyFile","EditFile","MoveFile","DeleteFile","CellName","CellType","CellSize","CellAuthor","CellCreated","CellModified","CellActions","Tags","FileActions","Wcp","AccessControl","GridItemDefaultRenderer","GridItemImageRenderer","TableItemImageRenderer","TableItemDefaultRenderer","FilePreviewDefaultRenderer","FilePreviewImageRenderer"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/config/DefaultFileManagerConfig.js","sources":["../../../src/presentation/config/DefaultFileManagerConfig.tsx"],"sourcesContent":["import React from \"react\";\nimport { Wcp } from \"@webiny/app-admin\";\nimport { DeleteFolder, EditFolder, SetFolderPermissions } from \"@webiny/app-aco\";\nimport { FileManagerViewConfig as FileManagerConfig } from \"~/presentation/config/FileManagerViewConfig.js\";\nimport { FilterByType } from \"~/presentation/FileList/components/Filters/FilterByType.js\";\nimport {\n BulkActionDelete,\n BulkActionMove\n} from \"~/presentation/FileList/components/BulkActions/index.js\";\nimport { Tags, AccessControl } from \"~/presentation/config/fields/index.js\";\nimport {\n CellActions,\n CellAuthor,\n CellCreated,\n CellModified,\n CellName,\n CellSize,\n CellType,\n CopyFile,\n DeleteFile,\n EditFile,\n MoveFile\n} from \"~/presentation/FileList/components/Table/index.js\";\nimport { GridItemDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/GridItemDefaultRenderer.js\";\nimport { GridItemImageRenderer } from \"~/presentation/config/thumbnailRenderers/GridItemImageRenderer.js\";\nimport { FileActions } from \"~/presentation/FileActions/index.js\";\nimport { FilePreviewImageRenderer } from \"~/presentation/config/thumbnailRenderers/FilePreviewImageRenderer.js\";\nimport { TableItemDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/TableItemDefaultRenderer.js\";\nimport { TableItemImageRenderer } from \"~/presentation/config/thumbnailRenderers/TableItemImageRenderer.js\";\nimport { FilePreviewDefaultRenderer } from \"~/presentation/config/thumbnailRenderers/FilePreviewDefaultRenderer.js\";\n\nconst { Browser, FileDetails } = FileManagerConfig;\n\nexport const DefaultFileManagerConfig = () => {\n return (\n <FileManagerConfig>\n {/* Filters */}\n <Browser.FilterByTags />\n <Browser.Filter name={\"type\"} element={<FilterByType />} />\n {/* Bulk Actions */}\n <Browser.BulkAction name={\"move\"} element={<BulkActionMove />} />\n <Browser.BulkAction name={\"delete\"} element={<BulkActionDelete />} />\n {/* Folder Actions */}\n <Browser.Folder.Action name={\"edit\"} element={<EditFolder />} />\n <Browser.Folder.Action name={\"permissions\"} element={<SetFolderPermissions />} />\n <Browser.Folder.Action name={\"delete\"} element={<DeleteFolder />} />\n {/* File Actions */}\n <Browser.File.Action name={\"copy\"} element={<CopyFile />} />\n <Browser.File.Action name={\"edit\"} element={<EditFile />} />\n <Browser.File.Action name={\"move\"} element={<MoveFile />} />\n <Browser.File.Action name={\"delete\"} element={<DeleteFile />} />\n {/* Table Columns */}\n <Browser.Table.Column\n name={\"name\"}\n header={\"Name\"}\n cell={<CellName />}\n sortable={true}\n hideable={false}\n size={200}\n />\n <Browser.Table.Column name={\"type\"} header={\"Type\"} cell={<CellType />} />\n <Browser.Table.Column\n name={\"size\"}\n header={\"Size\"}\n cell={<CellSize />}\n sortable={true}\n />\n <Browser.Table.Column name={\"createdBy\"} header={\"Author\"} cell={<CellAuthor />} />\n <Browser.Table.Column\n name={\"createdOn\"}\n header={\"Created\"}\n cell={<CellCreated />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"savedOn\"}\n header={\"Modified\"}\n cell={<CellModified />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"actions\"}\n header={\" \"}\n cell={<CellActions />}\n size={56}\n truncate={false}\n className={\"flex justify-center\"}\n hideable={false}\n resizable={false}\n />\n <Browser.BulkEditField name={\"tags\"} element={<Tags />} />\n {/* File Details Actions */}\n <FileActions />\n {/* Access Control */}\n <Wcp.CanUsePrivateFiles>\n <Browser.BulkEditField\n name={\"accessControl\"}\n element={<AccessControl placeholder={\"Select privacy settings\"} />}\n />\n </Wcp.CanUsePrivateFiles>\n {/* Grid Thumbnail */}\n <Browser.Grid.Item.Thumbnail type={\"*/*\"} element={<GridItemDefaultRenderer />} />\n <Browser.Grid.Item.Thumbnail type={\"image/*\"} element={<GridItemImageRenderer />} />\n {/* Table Thumbnail */}\n <Browser.Table.Cell.Thumbnail type={\"image/*\"} element={<TableItemImageRenderer />} />\n <Browser.Table.Cell.Thumbnail type={\"*/*\"} element={<TableItemDefaultRenderer />} />\n {/* File Details Thumbnail */}\n <FileDetails.Preview.Thumbnail type={\"*/*\"} element={<FilePreviewDefaultRenderer />} />\n <FileDetails.Preview.Thumbnail\n type={\"image/*\"}\n element={<FilePreviewImageRenderer />}\n />\n </FileManagerConfig>\n );\n};\n"],"names":["Browser","FileDetails","FileManagerConfig","DefaultFileManagerConfig","FilterByType","BulkActionMove","BulkActionDelete","EditFolder","SetFolderPermissions","DeleteFolder","CopyFile","EditFile","MoveFile","DeleteFile","CellName","CellType","CellSize","CellAuthor","CellCreated","CellModified","CellActions","Tags","FileActions","Wcp","AccessControl","GridItemDefaultRenderer","GridItemImageRenderer","TableItemImageRenderer","TableItemDefaultRenderer","FilePreviewDefaultRenderer","FilePreviewImageRenderer"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import { getThumbnailRenderer } from "./getThumbnailRenderer.js";
2
3
  export declare const FileManagerViewConfig: (({ priority, children }: import("@webiny/react-properties").ConfigProps) => React.JSX.Element) & {
3
4
  Browser: {
4
5
  Grid: {
@@ -59,11 +60,11 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
59
60
  displayName: string;
60
61
  }>) => (props: unknown) => React.JSX.Element;
61
62
  } & {
62
- IconButton: ({ icon, label, onAction, disabled, ...props }: import("../FileList/components/Grid/ActionButton.js").ActionButtonProps) => React.JSX.Element;
63
+ IconButton: typeof import("../FileList/components/Grid/ActionButton.js").ActionButton;
63
64
  };
64
65
  };
65
66
  };
66
- BulkAction: (({ name, after, before, remove, element }: import("./configComponents/Browser/BulkAction.js").BulkActionProps) => React.JSX.Element) & {
67
+ BulkAction: typeof import("./configComponents/Browser/BulkAction.js").BaseBulkAction & {
67
68
  useButtons: () => import("@webiny/app-admin/components/Buttons/useButtons.js").ButtonsProviderContext;
68
69
  useWorker: () => {
69
70
  items: import("@webiny/sdk/index.js").FmFile[];
@@ -74,7 +75,7 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
74
75
  };
75
76
  useDialog: () => import("@webiny/app-admin/index.js").UseDialogWithReportResponse;
76
77
  };
77
- BulkEditField: ({ name, element }: import("./configComponents/Browser/BulkEditField.js").BulkEditFieldProps) => React.JSX.Element;
78
+ BulkEditField: typeof import("./configComponents/Browser/BulkEditField.js").BulkEditField;
78
79
  Filter: (({ name, element, after, before, remove }: import("./configComponents/Browser/Filter.js").FilterProps) => React.JSX.Element) & {
79
80
  original: ({ name, element, after, before, remove }: import("./configComponents/Browser/Filter.js").FilterProps) => React.JSX.Element;
80
81
  originalName: string;
@@ -102,18 +103,13 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
102
103
  name: string;
103
104
  }) => React.JSX.Element;
104
105
  };
105
- FiltersToWhere: ({ converter }: {
106
- converter: import("./configComponents/Browser/FiltersToWhere.js").FiltersToWhereConverter;
107
- }) => React.JSX.Element;
108
- FilterByTags: ({ remove }: import("./configComponents/Browser/FilterByTags.js").FilterByTagProps) => React.JSX.Element;
106
+ FiltersToWhere: typeof import("./configComponents/Browser/FiltersToWhere.js").FiltersToWhere;
107
+ FilterByTags: typeof import("./configComponents/Browser/FilterByTags.js").FilterByTags;
109
108
  Folder: {
110
- ExtensionField: {
111
- createDecorator: (decorator: import("@webiny/react-composition").Decorator<import("@webiny/react-composition").GenericComponent<import("@webiny/app-aco").FieldProps>>) => (props: import("@webiny/app-aco").FieldDecoratorProps) => React.JSX.Element;
112
- };
113
109
  Action: ((props: import("@webiny/app-aco/config/folder/Action.js").ActionProps) => React.JSX.Element) & {
114
110
  OptionsMenuItem: (props: import("@webiny/app-admin/index.js").OptionsMenuItemProps) => React.JSX.Element;
115
111
  };
116
- DropConfirmation: (props: import("@webiny/app-aco/config/folder/DropConfirmation.js").DropConfirmationProps) => React.JSX.Element;
112
+ DropConfirmation: typeof import("./configComponents/Browser/FolderDropConfirmation.js").FolderDropConfirmation;
117
113
  };
118
114
  File: {
119
115
  Action: ((props: import("@webiny/app-aco/config/record/Action.js").ActionProps) => React.JSX.Element) & {
@@ -122,28 +118,28 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
122
118
  };
123
119
  };
124
120
  Table: {
125
- Column: ((props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
126
- original: (props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element;
121
+ Column: ((props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
122
+ original: (props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element;
127
123
  originalName: string;
128
124
  displayName: string;
129
125
  } & {
130
- original: ((props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
131
- original: (props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element;
126
+ original: ((props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
127
+ original: (props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element;
132
128
  originalName: string;
133
129
  displayName: string;
134
130
  };
135
131
  originalName: string;
136
132
  displayName: string;
137
133
  } & {
138
- createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<((props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
139
- original: (props: import("@webiny/app-aco/config/table/Column.js").ColumnProps) => React.JSX.Element;
134
+ createDecorator: (decorator: import("@webiny/react-composition").ComponentDecorator<((props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element) & {
135
+ original: (props: import("@webiny/app-admin/config/table/Column.js").ColumnProps) => React.JSX.Element;
140
136
  originalName: string;
141
137
  displayName: string;
142
138
  }>) => (props: unknown) => React.JSX.Element;
143
139
  } & {
144
140
  useTableRow: {
145
- (): import("@webiny/app-aco").TableRowContextData<import("../../domain/types.js").TableItem>;
146
- <TUserRow>(): import("@webiny/app-aco").TableRowContextData<import("../../domain/types.js").TableItem & {
141
+ (): import("@webiny/app-admin/index.js").TableRowContextData<import("../../domain/types.js").TableItem>;
142
+ <TUserRow>(): import("@webiny/app-admin/index.js").TableRowContextData<import("../../domain/types.js").TableItem & {
147
143
  data: TUserRow;
148
144
  }>;
149
145
  };
@@ -192,7 +188,7 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
192
188
  displayName: string;
193
189
  }>) => (props: unknown) => React.JSX.Element;
194
190
  } & {
195
- Button: ({ label, icon, onAction, disabled, className, ...props }: import("../FileDetails/components/ActionButton.js").ActionButtonProps) => React.JSX.Element;
191
+ Button: typeof import("../FileDetails/components/ActionButton.js").ActionButton;
196
192
  };
197
193
  Preview: {
198
194
  Thumbnail: (({ type, element }: import("./configComponents/FileDetails/Thumbnail.js").RendererProps) => React.JSX.Element) & {
@@ -215,18 +211,16 @@ export declare const FileManagerViewConfig: (({ priority, children }: import("@w
215
211
  }>) => (props: unknown) => React.JSX.Element;
216
212
  };
217
213
  };
218
- Width: ({ value }: import("./configComponents/FileDetails/Width.js").WidthProps) => React.JSX.Element;
214
+ Width: typeof import("./configComponents/FileDetails/Width.js").Width;
219
215
  };
220
216
  };
221
217
  export declare const FileManagerViewWithConfig: ({ onProperties, children }: import("@webiny/react-properties").WithConfigProps) => React.JSX.Element;
222
218
  export declare function useFileManagerConfig(): {
223
- getThumbnailRenderer: <T extends {
224
- type: string;
225
- }>(renderers: T[], file: import("../../domain/types.js").FileItem) => T;
219
+ getThumbnailRenderer: typeof getThumbnailRenderer;
226
220
  browser: {
227
221
  table: {
228
- cellThumbnails: import("./configComponents/Browser/Table/Thumbnail.js").ThumbnailConfig[];
229
222
  columns: import("@webiny/app-aco").TableColumnConfig[];
223
+ cellThumbnails: import("./configComponents/Browser/Table/Thumbnail.js").ThumbnailConfig[];
230
224
  };
231
225
  grid: {
232
226
  itemActions: import("./configComponents/Browser/Grid/Action.js").ActionConfig[];
@@ -13,14 +13,16 @@ export interface BulkActionProps {
13
13
  element?: React.ReactElement;
14
14
  }
15
15
  export declare const BaseBulkAction: ({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element;
16
- export declare const BulkAction: (({ name, after, before, remove, element }: BulkActionProps) => React.JSX.Element) & {
16
+ declare const useWorker: () => {
17
+ items: import("@webiny/sdk/index").FmFile[];
18
+ process: (callback: (items: FileItem[]) => void) => void;
19
+ processInSeries: (callback: ({ item, allItems, report }: CallbackParams<FileItem>) => Promise<void>, chunkSize?: number) => Promise<void>;
20
+ resetItems: () => void;
21
+ results: import("@webiny/app-admin").Result[];
22
+ };
23
+ export declare const BulkAction: typeof BaseBulkAction & {
17
24
  useButtons: () => import("@webiny/app-admin/components/Buttons/useButtons").ButtonsProviderContext;
18
- useWorker: () => {
19
- items: import("@webiny/sdk/index").FmFile[];
20
- process: (callback: (items: FileItem[]) => void) => void;
21
- processInSeries: (callback: ({ item, allItems, report }: CallbackParams<FileItem>) => Promise<void>, chunkSize?: number) => Promise<void>;
22
- resetItems: () => void;
23
- results: import("@webiny/app-admin").Result[];
24
- };
25
+ useWorker: typeof useWorker;
25
26
  useDialog: () => import("@webiny/app-admin").UseDialogWithReportResponse;
26
27
  };
28
+ export {};
@@ -1,4 +1,4 @@
1
- import react, { useCallback, useEffect, useRef } from "react";
1
+ import react, { useCallback, useRef } from "react";
2
2
  import { Worker, useButtons, useDialogWithReport } from "@webiny/app-admin";
3
3
  import { Property, useIdGenerator } from "@webiny/react-properties";
4
4
  import { useFileManagerPresenter } from "../../../FileList/FileManagerPresenterProvider.js";
@@ -30,19 +30,13 @@ const useWorker = ()=>{
30
30
  const { vm, actions } = useFileManagerPresenter();
31
31
  const { current: worker } = useRef(new Worker());
32
32
  const selected = vm.list.rows.filter((f)=>vm.list.selection.selectedIds.has(f.id));
33
- useEffect(()=>{
34
- worker.items = selected;
35
- }, [
36
- selected.length
37
- ]);
38
33
  const resetItems = useCallback(()=>{
39
- worker.items = [];
40
34
  actions.selection.deselectAll();
41
35
  }, []);
42
36
  return {
43
37
  items: selected,
44
- process: (callback)=>worker.process(callback),
45
- processInSeries: async (callback, chunkSize)=>worker.processInSeries(callback, chunkSize),
38
+ process: (callback)=>worker.process(selected, callback),
39
+ processInSeries: async (callback, chunkSize)=>worker.processInSeries(selected, callback, chunkSize),
46
40
  resetItems: resetItems,
47
41
  results: worker.results
48
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/config/configComponents/Browser/BulkAction.js","sources":["../../../../../src/presentation/config/configComponents/Browser/BulkAction.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from \"react\";\nimport type { CallbackParams } from \"@webiny/app-admin\";\nimport { useButtons, useDialogWithReport, Worker } from \"@webiny/app-admin\";\nimport { Property, useIdGenerator } from \"@webiny/react-properties\";\nimport { useFileManagerPresenter } from \"~/presentation/FileList/FileManagerPresenterProvider.js\";\nimport type { FileItem } from \"~/domain/types.js\";\n\nexport interface BulkActionConfig {\n name: string;\n element: React.ReactElement;\n}\n\nexport interface BulkActionProps {\n name: string;\n remove?: boolean;\n before?: string;\n after?: string;\n element?: React.ReactElement;\n}\n\nexport const BaseBulkAction = ({\n name,\n after = undefined,\n before = undefined,\n remove = false,\n element\n}: BulkActionProps) => {\n const getId = useIdGenerator(\"bulkAction\");\n\n const placeAfter = after !== undefined ? getId(after) : undefined;\n const placeBefore = before !== undefined ? getId(before) : undefined;\n\n return (\n <Property id=\"browser\" name={\"browser\"}>\n <Property\n id={getId(name)}\n name={\"bulkActions\"}\n remove={remove}\n array={true}\n before={placeBefore}\n after={placeAfter}\n >\n <Property id={getId(name, \"name\")} name={\"name\"} value={name} />\n {element ? (\n <Property id={getId(name, \"element\")} name={\"element\"} value={element} />\n ) : null}\n </Property>\n </Property>\n );\n};\n\nconst useWorker = () => {\n const { vm, actions } = useFileManagerPresenter();\n const { current: worker } = useRef(new Worker<FileItem>());\n\n const selected = vm.list.rows.filter(f => vm.list.selection.selectedIds.has(f.id));\n\n useEffect(() => {\n worker.items = selected;\n }, [selected.length]);\n\n const resetItems = useCallback(() => {\n worker.items = [];\n actions.selection.deselectAll();\n }, []);\n\n return {\n items: selected,\n process: (callback: (items: FileItem[]) => void) => worker.process(callback),\n processInSeries: async (\n callback: ({ item, allItems, report }: CallbackParams<FileItem>) => Promise<void>,\n chunkSize?: number\n ) => worker.processInSeries(callback, chunkSize),\n resetItems: resetItems,\n results: worker.results\n };\n};\n\nexport const BulkAction = Object.assign(BaseBulkAction, {\n useButtons,\n useWorker,\n useDialog: useDialogWithReport\n});\n"],"names":["BaseBulkAction","name","after","before","remove","element","getId","useIdGenerator","placeAfter","undefined","placeBefore","Property","useWorker","vm","actions","useFileManagerPresenter","worker","useRef","Worker","selected","f","useEffect","resetItems","useCallback","callback","chunkSize","BulkAction","Object","useButtons","useDialogWithReport"],"mappings":";;;;AAoBO,MAAMA,iBAAiB,CAAC,EAC3BC,IAAI,EACJC,KAAiB,EACjBC,MAAkB,EAClBC,SAAS,KAAK,EACdC,OAAO,EACO;IACd,MAAMC,QAAQC,eAAe;IAE7B,MAAMC,aAAaN,AAAUO,WAAVP,QAAsBI,MAAMJ,SAASO;IACxD,MAAMC,cAAcP,AAAWM,WAAXN,SAAuBG,MAAMH,UAAUM;IAE3D,OAAO,WAAP,GACI,oBAACE,UAAQA;QAAC,IAAG;QAAU,MAAM;qBACzB,oBAACA,UAAQA;QACL,IAAIL,MAAML;QACV,MAAM;QACN,QAAQG;QACR,OAAO;QACP,QAAQM;QACR,OAAOF;qBAEP,oBAACG,UAAQA;QAAC,IAAIL,MAAML,MAAM;QAAS,MAAM;QAAQ,OAAOA;QACvDI,UAAU,WAAVA,GACG,oBAACM,UAAQA;QAAC,IAAIL,MAAML,MAAM;QAAY,MAAM;QAAW,OAAOI;SAC9D;AAIpB;AAEA,MAAMO,YAAY;IACd,MAAM,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAGC;IACxB,MAAM,EAAE,SAASC,MAAM,EAAE,GAAGC,OAAO,IAAIC;IAEvC,MAAMC,WAAWN,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAACO,CAAAA,IAAKP,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAACO,EAAE,EAAE;IAEhFC,UAAU;QACNL,OAAO,KAAK,GAAGG;IACnB,GAAG;QAACA,SAAS,MAAM;KAAC;IAEpB,MAAMG,aAAaC,YAAY;QAC3BP,OAAO,KAAK,GAAG,EAAE;QACjBF,QAAQ,SAAS,CAAC,WAAW;IACjC,GAAG,EAAE;IAEL,OAAO;QACH,OAAOK;QACP,SAAS,CAACK,WAA0CR,OAAO,OAAO,CAACQ;QACnE,iBAAiB,OACbA,UACAC,YACCT,OAAO,eAAe,CAACQ,UAAUC;QACtC,YAAYH;QACZ,SAASN,OAAO,OAAO;IAC3B;AACJ;AAEO,MAAMU,aAAaC,OAAO,MAAM,CAAC3B,gBAAgB;IACpD4B,YAAUA;IACVhB,WAAAA;IACA,WAAWiB;AACf"}
1
+ {"version":3,"file":"presentation/config/configComponents/Browser/BulkAction.js","sources":["../../../../../src/presentation/config/configComponents/Browser/BulkAction.tsx"],"sourcesContent":["import React, { useCallback, useRef } from \"react\";\nimport type { CallbackParams } from \"@webiny/app-admin\";\nimport { useButtons, useDialogWithReport, Worker } from \"@webiny/app-admin\";\nimport { Property, useIdGenerator } from \"@webiny/react-properties\";\nimport { useFileManagerPresenter } from \"~/presentation/FileList/FileManagerPresenterProvider.js\";\nimport type { FileItem } from \"~/domain/types.js\";\n\nexport interface BulkActionConfig {\n name: string;\n element: React.ReactElement;\n}\n\nexport interface BulkActionProps {\n name: string;\n remove?: boolean;\n before?: string;\n after?: string;\n element?: React.ReactElement;\n}\n\nexport const BaseBulkAction = ({\n name,\n after = undefined,\n before = undefined,\n remove = false,\n element\n}: BulkActionProps) => {\n const getId = useIdGenerator(\"bulkAction\");\n\n const placeAfter = after !== undefined ? getId(after) : undefined;\n const placeBefore = before !== undefined ? getId(before) : undefined;\n\n return (\n <Property id=\"browser\" name={\"browser\"}>\n <Property\n id={getId(name)}\n name={\"bulkActions\"}\n remove={remove}\n array={true}\n before={placeBefore}\n after={placeAfter}\n >\n <Property id={getId(name, \"name\")} name={\"name\"} value={name} />\n {element ? (\n <Property id={getId(name, \"element\")} name={\"element\"} value={element} />\n ) : null}\n </Property>\n </Property>\n );\n};\n\nconst useWorker = () => {\n const { vm, actions } = useFileManagerPresenter();\n const { current: worker } = useRef(new Worker<FileItem>());\n\n const selected = vm.list.rows.filter(f => vm.list.selection.selectedIds.has(f.id));\n\n const resetItems = useCallback(() => {\n actions.selection.deselectAll();\n }, []);\n\n return {\n items: selected,\n process: (callback: (items: FileItem[]) => void) => worker.process(selected, callback),\n processInSeries: async (\n callback: ({ item, allItems, report }: CallbackParams<FileItem>) => Promise<void>,\n chunkSize?: number\n ) => worker.processInSeries(selected, callback, chunkSize),\n resetItems: resetItems,\n results: worker.results\n };\n};\n\nexport const BulkAction = Object.assign(BaseBulkAction, {\n useButtons,\n useWorker,\n useDialog: useDialogWithReport\n});\n"],"names":["BaseBulkAction","name","after","before","remove","element","getId","useIdGenerator","placeAfter","undefined","placeBefore","Property","useWorker","vm","actions","useFileManagerPresenter","worker","useRef","Worker","selected","f","resetItems","useCallback","callback","chunkSize","BulkAction","Object","useButtons","useDialogWithReport"],"mappings":";;;;AAoBO,MAAMA,iBAAiB,CAAC,EAC3BC,IAAI,EACJC,KAAiB,EACjBC,MAAkB,EAClBC,SAAS,KAAK,EACdC,OAAO,EACO;IACd,MAAMC,QAAQC,eAAe;IAE7B,MAAMC,aAAaN,AAAUO,WAAVP,QAAsBI,MAAMJ,SAASO;IACxD,MAAMC,cAAcP,AAAWM,WAAXN,SAAuBG,MAAMH,UAAUM;IAE3D,OAAO,WAAP,GACI,oBAACE,UAAQA;QAAC,IAAG;QAAU,MAAM;qBACzB,oBAACA,UAAQA;QACL,IAAIL,MAAML;QACV,MAAM;QACN,QAAQG;QACR,OAAO;QACP,QAAQM;QACR,OAAOF;qBAEP,oBAACG,UAAQA;QAAC,IAAIL,MAAML,MAAM;QAAS,MAAM;QAAQ,OAAOA;QACvDI,UAAU,WAAVA,GACG,oBAACM,UAAQA;QAAC,IAAIL,MAAML,MAAM;QAAY,MAAM;QAAW,OAAOI;SAC9D;AAIpB;AAEA,MAAMO,YAAY;IACd,MAAM,EAAEC,EAAE,EAAEC,OAAO,EAAE,GAAGC;IACxB,MAAM,EAAE,SAASC,MAAM,EAAE,GAAGC,OAAO,IAAIC;IAEvC,MAAMC,WAAWN,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAACO,CAAAA,IAAKP,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAACO,EAAE,EAAE;IAEhF,MAAMC,aAAaC,YAAY;QAC3BR,QAAQ,SAAS,CAAC,WAAW;IACjC,GAAG,EAAE;IAEL,OAAO;QACH,OAAOK;QACP,SAAS,CAACI,WAA0CP,OAAO,OAAO,CAACG,UAAUI;QAC7E,iBAAiB,OACbA,UACAC,YACCR,OAAO,eAAe,CAACG,UAAUI,UAAUC;QAChD,YAAYH;QACZ,SAASL,OAAO,OAAO;IAC3B;AACJ;AAEO,MAAMS,aAAaC,OAAO,MAAM,CAAC1B,gBAAgB;IACpD2B,YAAUA;IACVf,WAAAA;IACA,WAAWgB;AACf"}
@@ -2,7 +2,8 @@ import React from "react";
2
2
  import { AcoConfig, type RecordActionConfig } from "@webiny/app-aco";
3
3
  export type { RecordActionConfig as FileActionConfig };
4
4
  type FileActionProps = React.ComponentProps<typeof AcoConfig.Record.Action>;
5
- export declare const FileAction: ((props: FileActionProps) => React.JSX.Element) & {
5
+ declare const BaseFileAction: (props: FileActionProps) => React.JSX.Element;
6
+ export declare const FileAction: typeof BaseFileAction & {
6
7
  OptionsMenuItem: (props: import("@webiny/app-admin/components").OptionsMenuItemProps) => React.JSX.Element;
7
8
  OptionsMenuLink: (props: import("@webiny/app-admin/components").OptionsMenuLinkProps) => React.JSX.Element;
8
9
  };