@webiny/app-aco 6.4.11 → 6.6.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/components/Actions/DeleteFolder/DeleteFolder.js +1 -1
  2. package/components/Actions/DeleteFolder/DeleteFolder.js.map +1 -1
  3. package/components/AdvancedSearch/AdvancedSearch.d.ts +2 -2
  4. package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawer.d.ts +2 -2
  5. package/components/AdvancedSearch/domain/Filter.d.ts +1 -1
  6. package/components/AdvancedSearch/domain/FilterRepositoryFactory.d.ts +2 -2
  7. package/components/AdvancedSearch/domain/FilterRepositoryFactory.js.map +1 -1
  8. package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.d.ts +2 -2
  9. package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js +9 -10
  10. package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js.map +1 -1
  11. package/components/AdvancedSearch/gateways/filters.gql.d.ts +5 -5
  12. package/components/AdvancedSearch/gateways/filters.gql.js +5 -6
  13. package/components/AdvancedSearch/gateways/filters.gql.js.map +1 -1
  14. package/components/AdvancedSearch/useFilterRepository.js +7 -2
  15. package/components/AdvancedSearch/useFilterRepository.js.map +1 -1
  16. package/components/FolderTree/List/List.js +6 -14
  17. package/components/FolderTree/List/List.js.map +1 -1
  18. package/components/Table/cells/CellAuthor.d.ts +2 -0
  19. package/components/Table/cells/CellAuthor.js +10 -0
  20. package/components/Table/cells/CellAuthor.js.map +1 -0
  21. package/components/Table/cells/CellCreated.d.ts +2 -0
  22. package/components/Table/cells/CellCreated.js +13 -0
  23. package/components/Table/cells/CellCreated.js.map +1 -0
  24. package/components/Table/cells/CellModified.d.ts +2 -0
  25. package/components/Table/cells/CellModified.js +13 -0
  26. package/components/Table/cells/CellModified.js.map +1 -0
  27. package/components/Table/cells/index.d.ts +3 -0
  28. package/components/Table/cells/index.js +3 -0
  29. package/components/Table/components/Table/TableInner.d.ts +2 -2
  30. package/components/Table/createTableData.d.ts +7 -5
  31. package/components/Table/createTableData.js +22 -7
  32. package/components/Table/createTableData.js.map +1 -1
  33. package/components/Table/index.d.ts +2 -2
  34. package/components/Table/index.js +2 -2
  35. package/components/index.d.ts +0 -1
  36. package/components/index.js +0 -1
  37. package/config/AcoConfig.d.ts +8 -12
  38. package/config/advanced-search/FieldRenderer.d.ts +3 -1
  39. package/config/folder/Action.d.ts +1 -1
  40. package/config/folder/index.d.ts +3 -2
  41. package/config/index.d.ts +0 -1
  42. package/config/index.js +0 -1
  43. package/config/record/Action.d.ts +1 -1
  44. package/config/record/index.d.ts +1 -1
  45. package/config/table/Column.d.ts +8 -39
  46. package/config/table/Column.js +4 -67
  47. package/config/table/Column.js.map +1 -1
  48. package/config/table/Sorting.d.ts +2 -11
  49. package/config/table/Sorting.js +1 -28
  50. package/config/table/index.d.ts +5 -9
  51. package/contexts/index.d.ts +0 -3
  52. package/contexts/index.js +0 -3
  53. package/dialogs/DialogSetPermissions/graphql.d.ts +1 -1
  54. package/dialogs/DialogSetPermissions/graphql.js +1 -2
  55. package/dialogs/DialogSetPermissions/graphql.js.map +1 -1
  56. package/dialogs/useConfirmMoveFolderDialog.d.ts +0 -1
  57. package/dialogs/useConfirmMoveFolderDialog.js +2 -3
  58. package/dialogs/useConfirmMoveFolderDialog.js.map +1 -1
  59. package/dialogs/useCreateDialog.js +5 -9
  60. package/dialogs/useCreateDialog.js.map +1 -1
  61. package/dialogs/useEditDialog.js +2 -2
  62. package/dialogs/useEditDialog.js.map +1 -1
  63. package/dialogs/useSetPermissionsDialog.js +16 -4
  64. package/dialogs/useSetPermissionsDialog.js.map +1 -1
  65. package/domain/folder/Folder.d.ts +2 -1
  66. package/domain/folder/Folder.js.map +1 -1
  67. package/features/folders/createFolder/CreateFolderGqlGateway.d.ts +3 -3
  68. package/features/folders/createFolder/CreateFolderGqlGateway.js +15 -16
  69. package/features/folders/createFolder/CreateFolderGqlGateway.js.map +1 -1
  70. package/features/folders/deleteFolder/DeleteFolderGqlGateway.d.ts +3 -3
  71. package/features/folders/deleteFolder/DeleteFolderGqlGateway.js +5 -6
  72. package/features/folders/deleteFolder/DeleteFolderGqlGateway.js.map +1 -1
  73. package/features/folders/folderModelProvider/FolderModelProvider.js +29 -31
  74. package/features/folders/folderModelProvider/FolderModelProvider.js.map +1 -1
  75. package/features/folders/folderModelProvider/GetFolderModelGqlGateway.d.ts +3 -3
  76. package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js +5 -7
  77. package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js.map +1 -1
  78. package/features/folders/getFolder/GetFolderGqlGateway.d.ts +3 -3
  79. package/features/folders/getFolder/GetFolderGqlGateway.js +5 -7
  80. package/features/folders/getFolder/GetFolderGqlGateway.js.map +1 -1
  81. package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFieldsUseCase.d.ts +3 -3
  82. package/features/folders/getFolderExtensionsFields/useFolderExtensionsFields.d.ts +3 -3
  83. package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js +12 -16
  84. package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js.map +1 -1
  85. package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.d.ts +3 -3
  86. package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js +5 -5
  87. package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js.map +1 -1
  88. package/features/folders/listFolders/ListFoldersGqlGateway.d.ts +1 -1
  89. package/features/folders/listFolders/ListFoldersGqlGateway.js +1 -2
  90. package/features/folders/listFolders/ListFoldersGqlGateway.js.map +1 -1
  91. package/features/folders/listFolders/useListFolders.d.ts +1 -1
  92. package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.d.ts +3 -3
  93. package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js +5 -7
  94. package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js.map +1 -1
  95. package/features/folders/listFoldersByParentIds/useListFoldersByParentIds.d.ts +2 -2
  96. package/features/folders/loadFolderHierarchy/useLoadFolderHierarchy.d.ts +2 -2
  97. package/features/folders/updateFolder/UpdateFolderGqlGateway.d.ts +3 -3
  98. package/features/folders/updateFolder/UpdateFolderGqlGateway.js +5 -6
  99. package/features/folders/updateFolder/UpdateFolderGqlGateway.js.map +1 -1
  100. package/hooks/index.d.ts +0 -6
  101. package/hooks/index.js +0 -6
  102. package/index.d.ts +3 -2
  103. package/index.js +2 -2
  104. package/package.json +21 -28
  105. package/presentation/folderTree/FolderTreePresenter.d.ts +3 -1
  106. package/presentation/folderTree/FolderTreePresenter.js +15 -23
  107. package/presentation/folderTree/FolderTreePresenter.js.map +1 -1
  108. package/presentation/folderTree/FolderTreePresenter.test.js +8 -2
  109. package/presentation/folderTree/FolderTreePresenter.test.js.map +1 -1
  110. package/table.types.d.ts +2 -9
  111. package/types.d.ts +5 -26
  112. package/types.js.map +1 -1
  113. package/components/Extensions/Extensions.d.ts +0 -2
  114. package/components/Extensions/Extensions.js +0 -30
  115. package/components/Extensions/Extensions.js.map +0 -1
  116. package/components/Extensions/index.d.ts +0 -1
  117. package/components/Extensions/index.js +0 -1
  118. package/config/folder/createFolderFieldDecoratorFactory.d.ts +0 -13
  119. package/config/folder/createFolderFieldDecoratorFactory.js +0 -17
  120. package/config/folder/createFolderFieldDecoratorFactory.js.map +0 -1
  121. package/config/table/Sorting.js.map +0 -1
  122. package/contexts/acoList.d.ts +0 -49
  123. package/contexts/acoList.js +0 -303
  124. package/contexts/acoList.js.map +0 -1
  125. package/contexts/app.d.ts +0 -33
  126. package/contexts/app.js +0 -47
  127. package/contexts/app.js.map +0 -1
  128. package/contexts/folders.d.ts +0 -12
  129. package/contexts/folders.js +0 -32
  130. package/contexts/folders.js.map +0 -1
  131. package/contexts/navigateFolder.d.ts +0 -17
  132. package/contexts/navigateFolder.js +0 -54
  133. package/contexts/navigateFolder.js.map +0 -1
  134. package/contexts/records.d.ts +0 -31
  135. package/contexts/records.js +0 -316
  136. package/contexts/records.js.map +0 -1
  137. package/exports/admin/aco.d.ts +0 -2
  138. package/exports/admin/aco.js +0 -2
  139. package/graphql/app.gql.d.ts +0 -17
  140. package/graphql/app.gql.js +0 -22
  141. package/graphql/app.gql.js.map +0 -1
  142. package/graphql/records/common.d.ts +0 -4
  143. package/graphql/records/common.js +0 -57
  144. package/graphql/records/common.js.map +0 -1
  145. package/graphql/records/getRecord.d.ts +0 -2
  146. package/graphql/records/getRecord.js +0 -5
  147. package/graphql/records/getRecord.js.map +0 -1
  148. package/graphql/records/listRecords.d.ts +0 -2
  149. package/graphql/records/listRecords.js +0 -26
  150. package/graphql/records/listRecords.js.map +0 -1
  151. package/graphql/records/moveRecord.d.ts +0 -2
  152. package/graphql/records/moveRecord.js +0 -16
  153. package/graphql/records/moveRecord.js.map +0 -1
  154. package/graphql/records/types.d.ts +0 -108
  155. package/graphql/records/types.js +0 -0
  156. package/graphql/records.gql.d.ts +0 -3
  157. package/graphql/records.gql.js +0 -3
  158. package/handlers.d.ts +0 -23
  159. package/handlers.js +0 -22
  160. package/handlers.js.map +0 -1
  161. package/hooks/useAcoApp.d.ts +0 -2
  162. package/hooks/useAcoApp.js +0 -16
  163. package/hooks/useAcoApp.js.map +0 -1
  164. package/hooks/useAcoList.d.ts +0 -3
  165. package/hooks/useAcoList.js +0 -10
  166. package/hooks/useAcoList.js.map +0 -1
  167. package/hooks/useFolderModel.d.ts +0 -2
  168. package/hooks/useFolderModel.js +0 -16
  169. package/hooks/useFolderModel.js.map +0 -1
  170. package/hooks/useFoldersType.d.ts +0 -1
  171. package/hooks/useFoldersType.js +0 -12
  172. package/hooks/useFoldersType.js.map +0 -1
  173. package/hooks/useNavigateFolder.d.ts +0 -2
  174. package/hooks/useNavigateFolder.js +0 -10
  175. package/hooks/useNavigateFolder.js.map +0 -1
  176. package/hooks/useRecords.d.ts +0 -62
  177. package/hooks/useRecords.js +0 -64
  178. package/hooks/useRecords.js.map +0 -1
  179. package/hooks/useTags.d.ts +0 -14
  180. package/hooks/useTags.js +0 -27
  181. package/hooks/useTags.js.map +0 -1
  182. package/sorting.d.ts +0 -9
  183. package/sorting.js +0 -31
  184. package/sorting.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js","sources":["../../../../../src/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.ts"],"sourcesContent":["import type { FolderPermissionName } from \"~/features/folders/abstractions.js\";\nimport { FoldersCache } from \"~/features/folders/abstractions.js\";\nimport { GetFolderLevelPermissionUseCase as UseCaseAbstraction } from \"../abstractions.js\";\nimport { WcpService } from \"@webiny/app-admin/features/wcp/abstractions.js\";\n\nclass GetFolderLevelPermissionWithFlpDecoratorImpl implements UseCaseAbstraction.Interface {\n constructor(\n private cache: FoldersCache.Interface,\n private wcp: WcpService.Interface,\n private decoratee: UseCaseAbstraction.Interface\n ) {}\n\n execute(id: string, permissionName: FolderPermissionName) {\n // Check if WCP allows folder-level permissions feature\n if (!this.wcp.getProject().canUseFolderLevelPermissions()) {\n return this.decoratee.execute(id, permissionName);\n }\n\n // Check the permissions\n const folder = this.cache.getItem(folder => folder.id === id);\n\n if (!folder) {\n return false;\n }\n\n return folder[permissionName] ?? false;\n }\n}\n\nexport const GetFolderLevelPermissionWithFlpDecorator = UseCaseAbstraction.createDecorator({\n decorator: GetFolderLevelPermissionWithFlpDecoratorImpl,\n dependencies: [FoldersCache, WcpService]\n});\n"],"names":["GetFolderLevelPermissionWithFlpDecoratorImpl","cache","wcp","decoratee","id","permissionName","folder","GetFolderLevelPermissionWithFlpDecorator","UseCaseAbstraction","FoldersCache","WcpService"],"mappings":";;;AAKA,MAAMA;IACF,YACYC,KAA6B,EAC7BC,GAAyB,EACzBC,SAAuC,CACjD;aAHUF,KAAK,GAALA;aACAC,GAAG,GAAHA;aACAC,SAAS,GAATA;IACT;IAEH,QAAQC,EAAU,EAAEC,cAAoC,EAAE;QAEtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,4BAA4B,IACnD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD,IAAIC;QAItC,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAACA,CAAAA,SAAUA,OAAO,EAAE,KAAKF;QAE1D,IAAI,CAACE,QACD,OAAO;QAGX,OAAOA,MAAM,CAACD,eAAe,IAAI;IACrC;AACJ;AAEO,MAAME,2CAA2CC,gCAAAA,eAAkC,CAAC;IACvF,WAAWR;IACX,cAAc;QAACS;QAAcC;KAAW;AAC5C"}
1
+ {"version":3,"file":"features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js","sources":["../../../../../src/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.ts"],"sourcesContent":["import type { FolderPermissionName } from \"~/features/folders/abstractions.js\";\nimport { FoldersCache } from \"~/features/folders/abstractions.js\";\nimport { GetFolderLevelPermissionUseCase as UseCaseAbstraction } from \"../abstractions.js\";\nimport { FeatureFlagsService } from \"@webiny/app-admin/features/featureFlags/abstractions.js\";\n\nclass GetFolderLevelPermissionWithFlpDecoratorImpl implements UseCaseAbstraction.Interface {\n constructor(\n private cache: FoldersCache.Interface,\n private featureFlagsService: FeatureFlagsService.Interface,\n private decoratee: UseCaseAbstraction.Interface\n ) {}\n\n execute(id: string, permissionName: FolderPermissionName) {\n if (\n !this.featureFlagsService\n .getFlags()\n .isEnabled(\"advancedAccessControlLayer.folderLevelPermissions\")\n ) {\n return this.decoratee.execute(id, permissionName);\n }\n\n // Check the permissions\n const folder = this.cache.getItem(folder => folder.id === id);\n\n if (!folder) {\n return false;\n }\n\n return folder[permissionName] ?? false;\n }\n}\n\nexport const GetFolderLevelPermissionWithFlpDecorator = UseCaseAbstraction.createDecorator({\n decorator: GetFolderLevelPermissionWithFlpDecoratorImpl,\n dependencies: [FoldersCache, FeatureFlagsService]\n});\n"],"names":["GetFolderLevelPermissionWithFlpDecoratorImpl","cache","featureFlagsService","decoratee","id","permissionName","folder","GetFolderLevelPermissionWithFlpDecorator","UseCaseAbstraction","FoldersCache","FeatureFlagsService"],"mappings":";;;AAKA,MAAMA;IACF,YACYC,KAA6B,EAC7BC,mBAAkD,EAClDC,SAAuC,CACjD;aAHUF,KAAK,GAALA;aACAC,mBAAmB,GAAnBA;aACAC,SAAS,GAATA;IACT;IAEH,QAAQC,EAAU,EAAEC,cAAoC,EAAE;QACtD,IACI,CAAC,IAAI,CAAC,mBAAmB,CACpB,QAAQ,GACR,SAAS,CAAC,sDAEf,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAACD,IAAIC;QAItC,MAAMC,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAACA,CAAAA,SAAUA,OAAO,EAAE,KAAKF;QAE1D,IAAI,CAACE,QACD,OAAO;QAGX,OAAOA,MAAM,CAACD,eAAe,IAAI;IACrC;AACJ;AAEO,MAAME,2CAA2CC,gCAAAA,eAAkC,CAAC;IACvF,WAAWR;IACX,cAAc;QAACS;QAAcC;KAAoB;AACrD"}
@@ -17,7 +17,7 @@ export interface ListFoldersQueryVariables {
17
17
  sort?: Record<string, any>;
18
18
  after?: string | null;
19
19
  }
20
- export declare const LIST_FOLDERS: (FOLDER_FIELDS: string) => import("graphql").DocumentNode;
20
+ export declare const LIST_FOLDERS: (FOLDER_FIELDS: string) => string;
21
21
  declare class ListFoldersGqlGatewayImpl implements GatewayAbstraction.Interface {
22
22
  private client;
23
23
  private folderModelProvider;
@@ -1,9 +1,8 @@
1
- import graphql_tag from "graphql-tag";
2
1
  import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
3
2
  import { RootFolder } from "../../../domain/folder/RootFolder.js";
4
3
  import { FolderModelProvider } from "../abstractions.js";
5
4
  import { ListFoldersGateway } from "./abstractions.js";
6
- const LIST_FOLDERS = (FOLDER_FIELDS)=>graphql_tag`
5
+ const LIST_FOLDERS = (FOLDER_FIELDS)=>`
7
6
  query ListFolders($type: String!, $limit: Int!) {
8
7
  aco {
9
8
  listFolders(where: { type: $type }, limit: $limit) {
@@ -1 +1 @@
1
- {"version":3,"file":"features/folders/listFolders/ListFoldersGqlGateway.js","sources":["../../../../src/features/folders/listFolders/ListFoldersGqlGateway.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { RootFolder } from \"~/domain/folder/RootFolder.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\n\nexport interface ListFoldersResponse {\n aco: {\n listFolders: {\n data: FolderDto[] | null;\n error: AcoError | null;\n };\n };\n}\n\nexport interface ListFoldersQueryVariables {\n type: string;\n limit: number;\n sort?: Record<string, any>;\n after?: string | null;\n}\n\nexport const LIST_FOLDERS = (FOLDER_FIELDS: string) => gql`\n query ListFolders($type: String!, $limit: Int!) {\n aco {\n listFolders(where: { type: $type }, limit: $limit) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass ListFoldersGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: MainGraphQLClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(type: string) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const response = await this.client.execute<ListFoldersResponse, ListFoldersQueryVariables>({\n query: LIST_FOLDERS(fields),\n variables: {\n type,\n limit: 10000\n }\n });\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n return [RootFolder.create(), ...(data || [])];\n }\n}\n\nexport const ListFoldersGqlGateway = GatewayAbstraction.createImplementation({\n implementation: ListFoldersGqlGatewayImpl,\n dependencies: [MainGraphQLClient, FolderModelProvider]\n});\n"],"names":["LIST_FOLDERS","FOLDER_FIELDS","gql","ListFoldersGqlGatewayImpl","client","folderModelProvider","type","fields","response","data","error","Error","RootFolder","ListFoldersGqlGateway","GatewayAbstraction","MainGraphQLClient","FolderModelProvider"],"mappings":";;;;;AAwBO,MAAMA,eAAe,CAACC,gBAA0BC,WAAG,CAAC;;;;qBAItC,EAAED,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAME;IACF,YACYC,MAAmC,EACnCC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,IAAY,EAAE;QACxB,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAiD;YACvF,OAAOR,aAAaO;YACpB,WAAW;gBACPD;gBACA,OAAO;YACX;QACJ;QAEA,MAAM,EAAEG,IAAI,EAAEC,KAAK,EAAE,GAAGF,SAAS,GAAG,CAAC,WAAW;QAEhD,IAAI,CAACC,MACD,MAAM,IAAIE,MAAMD,OAAO,WAAW;QAGtC,OAAO;YAACE,WAAW,MAAM;eAAQH,QAAQ,EAAE;SAAE;IACjD;AACJ;AAEO,MAAMI,wBAAwBC,mBAAAA,oBAAuC,CAAC;IACzE,gBAAgBX;IAChB,cAAc;QAACY;QAAmBC;KAAoB;AAC1D"}
1
+ {"version":3,"file":"features/folders/listFolders/ListFoldersGqlGateway.js","sources":["../../../../src/features/folders/listFolders/ListFoldersGqlGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { RootFolder } from \"~/domain/folder/RootFolder.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\n\nexport interface ListFoldersResponse {\n aco: {\n listFolders: {\n data: FolderDto[] | null;\n error: AcoError | null;\n };\n };\n}\n\nexport interface ListFoldersQueryVariables {\n type: string;\n limit: number;\n sort?: Record<string, any>;\n after?: string | null;\n}\n\nexport const LIST_FOLDERS = (FOLDER_FIELDS: string) => /* GraphQL */ `\n query ListFolders($type: String!, $limit: Int!) {\n aco {\n listFolders(where: { type: $type }, limit: $limit) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass ListFoldersGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: MainGraphQLClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(type: string) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const response = await this.client.execute<ListFoldersResponse, ListFoldersQueryVariables>({\n query: LIST_FOLDERS(fields),\n variables: {\n type,\n limit: 10000\n }\n });\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n return [RootFolder.create(), ...(data || [])];\n }\n}\n\nexport const ListFoldersGqlGateway = GatewayAbstraction.createImplementation({\n implementation: ListFoldersGqlGatewayImpl,\n dependencies: [MainGraphQLClient, FolderModelProvider]\n});\n"],"names":["LIST_FOLDERS","FOLDER_FIELDS","ListFoldersGqlGatewayImpl","client","folderModelProvider","type","fields","response","data","error","Error","RootFolder","ListFoldersGqlGateway","GatewayAbstraction","MainGraphQLClient","FolderModelProvider"],"mappings":";;;;AAuBO,MAAMA,eAAe,CAACC,gBAAwC,CAAC;;;;qBAIjD,EAAEA,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAMC;IACF,YACYC,MAAmC,EACnCC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,IAAY,EAAE;QACxB,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAiD;YACvF,OAAOP,aAAaM;YACpB,WAAW;gBACPD;gBACA,OAAO;YACX;QACJ;QAEA,MAAM,EAAEG,IAAI,EAAEC,KAAK,EAAE,GAAGF,SAAS,GAAG,CAAC,WAAW;QAEhD,IAAI,CAACC,MACD,MAAM,IAAIE,MAAMD,OAAO,WAAW;QAGtC,OAAO;YAACE,WAAW,MAAM;eAAQH,QAAQ,EAAE;SAAE;IACjD;AACJ;AAEO,MAAMI,wBAAwBC,mBAAAA,oBAAuC,CAAC;IACzE,gBAAgBX;IAChB,cAAc;QAACY;QAAmBC;KAAoB;AAC1D"}
@@ -1,6 +1,6 @@
1
1
  import type { FolderDto } from "../../../domain/folder/FolderDto.js";
2
2
  export declare const useListFolders: () => {
3
- listFolders: () => Promise<void>;
4
3
  folders: FolderDto[];
5
4
  loading: Record<string, boolean>;
5
+ listFolders: () => Promise<void>;
6
6
  };
@@ -1,4 +1,4 @@
1
- import { ApolloClient } from "@webiny/app-admin/features/apolloClient/abstraction.js";
1
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
2
2
  import type { FolderDto } from "../../../domain/folder/FolderDto.js";
3
3
  import { FolderModelProvider } from "../../../features/folders/abstractions.js";
4
4
  import { ListFoldersByParentIdsGateway as GatewayAbstraction } from "./abstractions.js";
@@ -18,11 +18,11 @@ export interface ListFoldersByParentIdsQueryVariables {
18
18
  sort?: Record<string, any>;
19
19
  after?: string | null;
20
20
  }
21
- export declare const LIST_FOLDERS_BY_PARENT_IDS: (FOLDER_FIELDS: string) => import("graphql").DocumentNode;
21
+ export declare const LIST_FOLDERS_BY_PARENT_IDS: (FOLDER_FIELDS: string) => string;
22
22
  declare class ListFoldersByParentIdsGqlGatewayImpl implements GatewayAbstraction.Interface {
23
23
  private client;
24
24
  private folderModelProvider;
25
- constructor(client: ApolloClient.Interface, folderModelProvider: FolderModelProvider.Interface);
25
+ constructor(client: MainGraphQLClient.Interface, folderModelProvider: FolderModelProvider.Interface);
26
26
  execute(type: string, parentIds: string[]): Promise<FolderDto[]>;
27
27
  }
28
28
  export declare const ListFoldersByParentIdsGqlGateway: typeof ListFoldersByParentIdsGqlGatewayImpl & {
@@ -1,9 +1,8 @@
1
- import graphql_tag from "graphql-tag";
2
- import { ApolloClient } from "@webiny/app-admin/features/apolloClient/abstraction.js";
1
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
3
2
  import { RootFolder } from "../../../domain/folder/RootFolder.js";
4
3
  import { FolderModelProvider } from "../abstractions.js";
5
4
  import { ListFoldersByParentIdsGateway } from "./abstractions.js";
6
- const LIST_FOLDERS_BY_PARENT_IDS = (FOLDER_FIELDS)=>graphql_tag`
5
+ const LIST_FOLDERS_BY_PARENT_IDS = (FOLDER_FIELDS)=>`
7
6
  query ListFoldersByParentIds($type: String!, $parentIds_in: [ID!]!, $limit: Int!) {
8
7
  aco {
9
8
  listFolders(where: { type: $type, parentId_in: $parentIds_in }, limit: $limit) {
@@ -24,14 +23,13 @@ class ListFoldersByParentIdsGqlGatewayImpl {
24
23
  }
25
24
  async execute(type, parentIds) {
26
25
  const fields = await this.folderModelProvider.getGraphQLSelection();
27
- const { data: response } = await this.client.query({
26
+ const response = await this.client.execute({
28
27
  query: LIST_FOLDERS_BY_PARENT_IDS(fields),
29
28
  variables: {
30
29
  type,
31
30
  parentIds_in: parentIds,
32
31
  limit: 10000
33
- },
34
- fetchPolicy: "network-only"
32
+ }
35
33
  });
36
34
  if (!response) throw new Error("Network error while listing folders.");
37
35
  const { data, error } = response.aco.listFolders;
@@ -45,7 +43,7 @@ class ListFoldersByParentIdsGqlGatewayImpl {
45
43
  const ListFoldersByParentIdsGqlGateway = ListFoldersByParentIdsGateway.createImplementation({
46
44
  implementation: ListFoldersByParentIdsGqlGatewayImpl,
47
45
  dependencies: [
48
- ApolloClient,
46
+ MainGraphQLClient,
49
47
  FolderModelProvider
50
48
  ]
51
49
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js","sources":["../../../../src/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ApolloClient } from \"@webiny/app-admin/features/apolloClient/abstraction.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { RootFolder } from \"~/domain/folder/RootFolder.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersByParentIdsGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\n\nexport interface ListFoldersByParentIdsResponse {\n aco: {\n listFolders: {\n data: FolderDto[] | null;\n error: AcoError | null;\n };\n };\n}\n\nexport interface ListFoldersByParentIdsQueryVariables {\n type: string;\n parentIds_in: string[];\n limit: number;\n sort?: Record<string, any>;\n after?: string | null;\n}\n\nexport const LIST_FOLDERS_BY_PARENT_IDS = (FOLDER_FIELDS: string) => gql`\n query ListFoldersByParentIds($type: String!, $parentIds_in: [ID!]!, $limit: Int!) {\n aco {\n listFolders(where: { type: $type, parentId_in: $parentIds_in }, limit: $limit) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass ListFoldersByParentIdsGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: ApolloClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(type: string, parentIds: string[]) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const { data: response } = await this.client.query<\n ListFoldersByParentIdsResponse,\n ListFoldersByParentIdsQueryVariables\n >({\n query: LIST_FOLDERS_BY_PARENT_IDS(fields),\n variables: {\n type,\n parentIds_in: parentIds,\n limit: 10000\n },\n fetchPolicy: \"network-only\"\n });\n\n if (!response) {\n throw new Error(\"Network error while listing folders.\");\n }\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n return [RootFolder.create(), ...(data || [])];\n }\n}\n\nexport const ListFoldersByParentIdsGqlGateway = GatewayAbstraction.createImplementation({\n implementation: ListFoldersByParentIdsGqlGatewayImpl,\n dependencies: [ApolloClient, FolderModelProvider]\n});\n"],"names":["LIST_FOLDERS_BY_PARENT_IDS","FOLDER_FIELDS","gql","ListFoldersByParentIdsGqlGatewayImpl","client","folderModelProvider","type","parentIds","fields","response","Error","data","error","RootFolder","ListFoldersByParentIdsGqlGateway","GatewayAbstraction","ApolloClient","FolderModelProvider"],"mappings":";;;;;AAyBO,MAAMA,6BAA6B,CAACC,gBAA0BC,WAAG,CAAC;;;;qBAIpD,EAAED,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAME;IACF,YACYC,MAA8B,EAC9BC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,IAAY,EAAEC,SAAmB,EAAE;QAC7C,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAM,EAAE,MAAMC,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAGhD;YACE,OAAOT,2BAA2BQ;YAClC,WAAW;gBACPF;gBACA,cAAcC;gBACd,OAAO;YACX;YACA,aAAa;QACjB;QAEA,IAAI,CAACE,UACD,MAAM,IAAIC,MAAM;QAGpB,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGH,SAAS,GAAG,CAAC,WAAW;QAEhD,IAAI,CAACE,MACD,MAAM,IAAID,MAAME,OAAO,WAAW;QAGtC,OAAO;YAACC,WAAW,MAAM;eAAQF,QAAQ,EAAE;SAAE;IACjD;AACJ;AAEO,MAAMG,mCAAmCC,8BAAAA,oBAAuC,CAAC;IACpF,gBAAgBZ;IAChB,cAAc;QAACa;QAAcC;KAAoB;AACrD"}
1
+ {"version":3,"file":"features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js","sources":["../../../../src/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { RootFolder } from \"~/domain/folder/RootFolder.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersByParentIdsGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\n\nexport interface ListFoldersByParentIdsResponse {\n aco: {\n listFolders: {\n data: FolderDto[] | null;\n error: AcoError | null;\n };\n };\n}\n\nexport interface ListFoldersByParentIdsQueryVariables {\n type: string;\n parentIds_in: string[];\n limit: number;\n sort?: Record<string, any>;\n after?: string | null;\n}\n\nexport const LIST_FOLDERS_BY_PARENT_IDS = (FOLDER_FIELDS: string) => /* GraphQL */ `\n query ListFoldersByParentIds($type: String!, $parentIds_in: [ID!]!, $limit: Int!) {\n aco {\n listFolders(where: { type: $type, parentId_in: $parentIds_in }, limit: $limit) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass ListFoldersByParentIdsGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: MainGraphQLClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(type: string, parentIds: string[]) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const response = await this.client.execute<\n ListFoldersByParentIdsResponse,\n ListFoldersByParentIdsQueryVariables\n >({\n query: LIST_FOLDERS_BY_PARENT_IDS(fields),\n variables: {\n type,\n parentIds_in: parentIds,\n limit: 10000\n }\n });\n\n if (!response) {\n throw new Error(\"Network error while listing folders.\");\n }\n\n const { data, error } = response.aco.listFolders;\n\n if (!data) {\n throw new Error(error?.message || \"Could not fetch folders\");\n }\n\n return [RootFolder.create(), ...(data || [])];\n }\n}\n\nexport const ListFoldersByParentIdsGqlGateway = GatewayAbstraction.createImplementation({\n implementation: ListFoldersByParentIdsGqlGatewayImpl,\n dependencies: [MainGraphQLClient, FolderModelProvider]\n});\n"],"names":["LIST_FOLDERS_BY_PARENT_IDS","FOLDER_FIELDS","ListFoldersByParentIdsGqlGatewayImpl","client","folderModelProvider","type","parentIds","fields","response","Error","data","error","RootFolder","ListFoldersByParentIdsGqlGateway","GatewayAbstraction","MainGraphQLClient","FolderModelProvider"],"mappings":";;;;AAwBO,MAAMA,6BAA6B,CAACC,gBAAwC,CAAC;;;;qBAI/D,EAAEA,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAMC;IACF,YACYC,MAAmC,EACnCC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,IAAY,EAAEC,SAAmB,EAAE;QAC7C,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAGxC;YACE,OAAOR,2BAA2BO;YAClC,WAAW;gBACPF;gBACA,cAAcC;gBACd,OAAO;YACX;QACJ;QAEA,IAAI,CAACE,UACD,MAAM,IAAIC,MAAM;QAGpB,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGH,SAAS,GAAG,CAAC,WAAW;QAEhD,IAAI,CAACE,MACD,MAAM,IAAID,MAAME,OAAO,WAAW;QAGtC,OAAO;YAACC,WAAW,MAAM;eAAQF,QAAQ,EAAE;SAAE;IACjD;AACJ;AAEO,MAAMG,mCAAmCC,8BAAAA,oBAAuC,CAAC;IACpF,gBAAgBZ;IAChB,cAAc;QAACa;QAAmBC;KAAoB;AAC1D"}
@@ -1,7 +1,7 @@
1
1
  import type { FolderDto } from "../../../domain/folder/FolderDto.js";
2
2
  export declare const useListFoldersByParentIds: () => {
3
- listFoldersByParentIds: (parentIds?: string[]) => Promise<void>;
4
- getIsFolderLoading: (action?: string) => boolean;
5
3
  folders: FolderDto[];
6
4
  loading: string[];
5
+ listFoldersByParentIds: (parentIds?: string[]) => Promise<void>;
6
+ getIsFolderLoading: (action?: string) => boolean;
7
7
  };
@@ -1,7 +1,7 @@
1
1
  import type { FolderDto } from "../../../domain/folder/FolderDto.js";
2
2
  export declare const useLoadFolderHierarchy: () => {
3
- getIsFolderLoading: (action?: string) => boolean;
4
- loadFolderHierarchy: (id: string) => Promise<void>;
5
3
  folders: FolderDto[];
6
4
  loading: Record<string, boolean>;
5
+ getIsFolderLoading: (action?: string) => boolean;
6
+ loadFolderHierarchy: (id: string) => Promise<void>;
7
7
  };
@@ -1,4 +1,4 @@
1
- import { ApolloClient } from "@webiny/app-admin/features/apolloClient/abstraction.js";
1
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
2
2
  import type { FolderDto } from "../../../domain/folder/FolderDto.js";
3
3
  import { FolderModelProvider } from "../../../features/folders/abstractions.js";
4
4
  import type { FolderGatewayDto } from "./abstractions.js";
@@ -16,11 +16,11 @@ export interface UpdateFolderVariables {
16
16
  id: string;
17
17
  data: Partial<Omit<FolderDto, "id" | "createdOn" | "createdBy" | "savedOn" | "savedBy" | "modifiedOn" | "modifiedBy">>;
18
18
  }
19
- export declare const UPDATE_FOLDER: (FOLDER_FIELDS: string) => import("graphql").DocumentNode;
19
+ export declare const UPDATE_FOLDER: (FOLDER_FIELDS: string) => string;
20
20
  declare class UpdateFolderGqlGatewayImpl implements GatewayAbstraction.Interface {
21
21
  private client;
22
22
  private folderModelProvider;
23
- constructor(client: ApolloClient.Interface, folderModelProvider: FolderModelProvider.Interface);
23
+ constructor(client: MainGraphQLClient.Interface, folderModelProvider: FolderModelProvider.Interface);
24
24
  execute(folder: FolderGatewayDto): Promise<FolderDto>;
25
25
  }
26
26
  export declare const UpdateFolderGqlGateway: typeof UpdateFolderGqlGatewayImpl & {
@@ -1,9 +1,8 @@
1
- import graphql_tag from "graphql-tag";
2
- import { ApolloClient } from "@webiny/app-admin/features/apolloClient/abstraction.js";
1
+ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient/index.js";
3
2
  import { FolderModelProvider } from "../abstractions.js";
4
3
  import { UpdateFolderGateway } from "./abstractions.js";
5
4
  import { ROOT_FOLDER } from "../../../constants.js";
6
- const UPDATE_FOLDER = (FOLDER_FIELDS)=>graphql_tag`
5
+ const UPDATE_FOLDER = (FOLDER_FIELDS)=>`
7
6
  mutation UpdateFolder($id: ID!, $data: FolderUpdateInput!) {
8
7
  aco {
9
8
  updateFolder(id: $id, data: $data) {
@@ -25,8 +24,8 @@ class UpdateFolderGqlGatewayImpl {
25
24
  async execute(folder) {
26
25
  const fields = await this.folderModelProvider.getGraphQLSelection();
27
26
  const { id, title, slug, permissions, parentId, extensions } = folder;
28
- const { data: response } = await this.client.mutate({
29
- mutation: UPDATE_FOLDER(fields),
27
+ const response = await this.client.execute({
28
+ query: UPDATE_FOLDER(fields),
30
29
  variables: {
31
30
  id,
32
31
  data: {
@@ -47,7 +46,7 @@ class UpdateFolderGqlGatewayImpl {
47
46
  const UpdateFolderGqlGateway = UpdateFolderGateway.createImplementation({
48
47
  implementation: UpdateFolderGqlGatewayImpl,
49
48
  dependencies: [
50
- ApolloClient,
49
+ MainGraphQLClient,
51
50
  FolderModelProvider
52
51
  ]
53
52
  });
@@ -1 +1 @@
1
- {"version":3,"file":"features/folders/updateFolder/UpdateFolderGqlGateway.js","sources":["../../../../src/features/folders/updateFolder/UpdateFolderGqlGateway.ts"],"sourcesContent":["import gql from \"graphql-tag\";\nimport { ApolloClient } from \"@webiny/app-admin/features/apolloClient/abstraction.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport type { FolderGatewayDto } from \"./abstractions.js\";\nimport { UpdateFolderGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\nexport interface UpdateFolderResponse {\n aco: {\n updateFolder: {\n data: FolderDto;\n error: AcoError | null;\n };\n };\n}\n\nexport interface UpdateFolderVariables {\n id: string;\n data: Partial<\n Omit<\n FolderDto,\n \"id\" | \"createdOn\" | \"createdBy\" | \"savedOn\" | \"savedBy\" | \"modifiedOn\" | \"modifiedBy\"\n >\n >;\n}\n\nexport const UPDATE_FOLDER = (FOLDER_FIELDS: string) => gql`\n mutation UpdateFolder($id: ID!, $data: FolderUpdateInput!) {\n aco {\n updateFolder(id: $id, data: $data) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass UpdateFolderGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: ApolloClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(folder: FolderGatewayDto) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const { id, title, slug, permissions, parentId, extensions } = folder;\n\n const { data: response } = await this.client.mutate<\n UpdateFolderResponse,\n UpdateFolderVariables\n >({\n mutation: UPDATE_FOLDER(fields),\n variables: {\n id,\n data: {\n title,\n slug,\n extensions,\n parentId: parentId === ROOT_FOLDER ? null : parentId,\n permissions: permissions.filter(p => !p.inheritedFrom)\n }\n }\n });\n\n if (!response) {\n throw new Error(\"Network error while updating folder.\");\n }\n\n const { data, error } = response.aco.updateFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not update folder\");\n }\n\n return data;\n }\n}\n\nexport const UpdateFolderGqlGateway = GatewayAbstraction.createImplementation({\n implementation: UpdateFolderGqlGatewayImpl,\n dependencies: [ApolloClient, FolderModelProvider]\n});\n"],"names":["UPDATE_FOLDER","FOLDER_FIELDS","gql","UpdateFolderGqlGatewayImpl","client","folderModelProvider","folder","fields","id","title","slug","permissions","parentId","extensions","response","ROOT_FOLDER","p","Error","data","error","UpdateFolderGqlGateway","GatewayAbstraction","ApolloClient","FolderModelProvider"],"mappings":";;;;;AA4BO,MAAMA,gBAAgB,CAACC,gBAA0BC,WAAG,CAAC;;;;qBAIvC,EAAED,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAME;IACF,YACYC,MAA8B,EAC9BC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,MAAwB,EAAE;QACpC,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAM,EAAEC,EAAE,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGP;QAE/D,MAAM,EAAE,MAAMQ,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAGjD;YACE,UAAUd,cAAcO;YACxB,WAAW;gBACPC;gBACA,MAAM;oBACFC;oBACAC;oBACAG;oBACA,UAAUD,aAAaG,cAAc,OAAOH;oBAC5C,aAAaD,YAAY,MAAM,CAACK,CAAAA,IAAK,CAACA,EAAE,aAAa;gBACzD;YACJ;QACJ;QAEA,IAAI,CAACF,UACD,MAAM,IAAIG,MAAM;QAGpB,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGL,SAAS,GAAG,CAAC,YAAY;QAEjD,IAAI,CAACI,MACD,MAAM,IAAID,MAAME,OAAO,WAAW;QAGtC,OAAOD;IACX;AACJ;AAEO,MAAME,yBAAyBC,oBAAAA,oBAAuC,CAAC;IAC1E,gBAAgBlB;IAChB,cAAc;QAACmB;QAAcC;KAAoB;AACrD"}
1
+ {"version":3,"file":"features/folders/updateFolder/UpdateFolderGqlGateway.js","sources":["../../../../src/features/folders/updateFolder/UpdateFolderGqlGateway.ts"],"sourcesContent":["import { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { FolderModelProvider } from \"~/features/folders/abstractions.js\";\nimport type { FolderGatewayDto } from \"./abstractions.js\";\nimport { UpdateFolderGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { AcoError } from \"~/types.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\n\nexport interface UpdateFolderResponse {\n aco: {\n updateFolder: {\n data: FolderDto;\n error: AcoError | null;\n };\n };\n}\n\nexport interface UpdateFolderVariables {\n id: string;\n data: Partial<\n Omit<\n FolderDto,\n \"id\" | \"createdOn\" | \"createdBy\" | \"savedOn\" | \"savedBy\" | \"modifiedOn\" | \"modifiedBy\"\n >\n >;\n}\n\nexport const UPDATE_FOLDER = (FOLDER_FIELDS: string) => /* GraphQL */ `\n mutation UpdateFolder($id: ID!, $data: FolderUpdateInput!) {\n aco {\n updateFolder(id: $id, data: $data) {\n data ${FOLDER_FIELDS}\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\nclass UpdateFolderGqlGatewayImpl implements GatewayAbstraction.Interface {\n constructor(\n private client: MainGraphQLClient.Interface,\n private folderModelProvider: FolderModelProvider.Interface\n ) {}\n\n async execute(folder: FolderGatewayDto) {\n const fields = await this.folderModelProvider.getGraphQLSelection();\n\n const { id, title, slug, permissions, parentId, extensions } = folder;\n\n const response = await this.client.execute<UpdateFolderResponse, UpdateFolderVariables>({\n query: UPDATE_FOLDER(fields),\n variables: {\n id,\n data: {\n title,\n slug,\n extensions,\n parentId: parentId === ROOT_FOLDER ? null : parentId,\n permissions: permissions.filter(p => !p.inheritedFrom)\n }\n }\n });\n\n if (!response) {\n throw new Error(\"Network error while updating folder.\");\n }\n\n const { data, error } = response.aco.updateFolder;\n\n if (!data) {\n throw new Error(error?.message || \"Could not update folder\");\n }\n\n return data;\n }\n}\n\nexport const UpdateFolderGqlGateway = GatewayAbstraction.createImplementation({\n implementation: UpdateFolderGqlGatewayImpl,\n dependencies: [MainGraphQLClient, FolderModelProvider]\n});\n"],"names":["UPDATE_FOLDER","FOLDER_FIELDS","UpdateFolderGqlGatewayImpl","client","folderModelProvider","folder","fields","id","title","slug","permissions","parentId","extensions","response","ROOT_FOLDER","p","Error","data","error","UpdateFolderGqlGateway","GatewayAbstraction","MainGraphQLClient","FolderModelProvider"],"mappings":";;;;AA2BO,MAAMA,gBAAgB,CAACC,gBAAwC,CAAC;;;;qBAIlD,EAAEA,cAAc;;;;;;;;;AASrC,CAAC;AAED,MAAMC;IACF,YACYC,MAAmC,EACnCC,mBAAkD,CAC5D;aAFUD,MAAM,GAANA;aACAC,mBAAmB,GAAnBA;IACT;IAEH,MAAM,QAAQC,MAAwB,EAAE;QACpC,MAAMC,SAAS,MAAM,IAAI,CAAC,mBAAmB,CAAC,mBAAmB;QAEjE,MAAM,EAAEC,EAAE,EAAEC,KAAK,EAAEC,IAAI,EAAEC,WAAW,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGP;QAE/D,MAAMQ,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA8C;YACpF,OAAOb,cAAcM;YACrB,WAAW;gBACPC;gBACA,MAAM;oBACFC;oBACAC;oBACAG;oBACA,UAAUD,aAAaG,cAAc,OAAOH;oBAC5C,aAAaD,YAAY,MAAM,CAACK,CAAAA,IAAK,CAACA,EAAE,aAAa;gBACzD;YACJ;QACJ;QAEA,IAAI,CAACF,UACD,MAAM,IAAIG,MAAM;QAGpB,MAAM,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGL,SAAS,GAAG,CAAC,YAAY;QAEjD,IAAI,CAACI,MACD,MAAM,IAAID,MAAME,OAAO,WAAW;QAGtC,OAAOD;IACX;AACJ;AAEO,MAAME,yBAAyBC,oBAAAA,oBAAuC,CAAC;IAC1E,gBAAgBlB;IAChB,cAAc;QAACmB;QAAmBC;KAAoB;AAC1D"}
package/hooks/index.d.ts CHANGED
@@ -1,7 +1 @@
1
- export * from "./useAcoList.js";
2
- export * from "./useAcoApp.js";
3
1
  export * from "./useFolder.js";
4
- export * from "./useFoldersType.js";
5
- export * from "./useRecords.js";
6
- export * from "./useTags.js";
7
- export * from "./useNavigateFolder.js";
package/hooks/index.js CHANGED
@@ -1,7 +1 @@
1
- export * from "./useAcoList.js";
2
- export * from "./useAcoApp.js";
3
1
  export * from "./useFolder.js";
4
- export * from "./useFoldersType.js";
5
- export * from "./useRecords.js";
6
- export * from "./useTags.js";
7
- export * from "./useNavigateFolder.js";
package/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
- export * from "./app.js";
2
1
  export * from "./components/index.js";
3
2
  export * from "./config/index.js";
4
3
  export * from "./contexts/index.js";
5
4
  export * from "./hooks/index.js";
6
5
  export * from "./dialogs/index.js";
7
- export * from "./sorting.js";
8
6
  export type { TableRow, FolderTableRow, RecordTableRow } from "./table.types.js";
7
+ export { sortFolders } from "./components/Table/createTableData.js";
8
+ export type { FolderSortConfig } from "./components/Table/createTableData.js";
9
9
  export type { ListMeta, FolderLevelPermissionsTarget } from "./types.js";
10
10
  export { LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS } from "./dialogs/DialogSetPermissions/graphql.js";
11
11
  export { UsersTeamsMultiAutocomplete } from "./dialogs/DialogSetPermissions/UsersTeamsMultiAutocomplete.js";
@@ -23,3 +23,4 @@ export * from "./features/folders/loadFolderHierarchy/useLoadFolderHierarchy.js"
23
23
  export * from "./features/folders/listFolders/useListFolders.js";
24
24
  export * from "./features/folders/listFoldersByParentIds/useListFoldersByParentIds.js";
25
25
  export * from "./presentation/folderTree/index.js";
26
+ export * from "./app.js";
package/index.js CHANGED
@@ -1,10 +1,8 @@
1
- export * from "./app.js";
2
1
  export * from "./components/index.js";
3
2
  export * from "./config/index.js";
4
3
  export * from "./contexts/index.js";
5
4
  export * from "./hooks/index.js";
6
5
  export * from "./dialogs/index.js";
7
- export * from "./sorting.js";
8
6
  export * from "./domain/folder/FolderDto.js";
9
7
  export * from "./domain/folder/FolderDtoMapper.js";
10
8
  export * from "./features/folders/createFolder/useCreateFolder.js";
@@ -19,5 +17,7 @@ export * from "./features/folders/loadFolderHierarchy/useLoadFolderHierarchy.js"
19
17
  export * from "./features/folders/listFolders/useListFolders.js";
20
18
  export * from "./features/folders/listFoldersByParentIds/useListFoldersByParentIds.js";
21
19
  export * from "./presentation/folderTree/index.js";
20
+ export * from "./app.js";
21
+ export { sortFolders } from "./components/Table/createTableData.js";
22
22
  export { LIST_FOLDER_LEVEL_PERMISSIONS_TARGETS } from "./dialogs/DialogSetPermissions/graphql.js";
23
23
  export { UsersTeamsMultiAutocomplete } from "./dialogs/DialogSetPermissions/UsersTeamsMultiAutocomplete.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-aco",
3
- "version": "6.4.11",
3
+ "version": "6.6.0-alpha.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -15,41 +15,34 @@
15
15
  "author": "Webiny Ltd.",
16
16
  "license": "MIT",
17
17
  "dependencies": {
18
- "@apollo/react-hooks": "3.1.5",
19
- "@webiny/admin-ui": "6.4.11",
20
- "@webiny/app": "6.4.11",
21
- "@webiny/app-admin": "6.4.11",
22
- "@webiny/app-headless-cms-common": "6.4.11",
23
- "@webiny/app-utils": "6.4.11",
24
- "@webiny/feature": "6.4.11",
25
- "@webiny/form": "6.4.11",
26
- "@webiny/icons": "6.4.11",
27
- "@webiny/plugins": "6.4.11",
28
- "@webiny/react-properties": "6.4.11",
29
- "@webiny/shared-aco": "6.4.11",
30
- "@webiny/utils": "6.4.11",
31
- "@webiny/validation": "6.4.11",
32
- "dot-prop-immutable": "2.1.1",
33
- "graphql": "16.14.2",
34
- "graphql-tag": "2.12.7",
18
+ "@webiny/admin-ui": "6.6.0-alpha.1",
19
+ "@webiny/app": "6.6.0-alpha.1",
20
+ "@webiny/app-admin": "6.6.0-alpha.1",
21
+ "@webiny/app-headless-cms-common": "6.6.0-alpha.1",
22
+ "@webiny/app-utils": "6.6.0-alpha.1",
23
+ "@webiny/feature": "6.6.0-alpha.1",
24
+ "@webiny/feature-flags": "6.6.0-alpha.1",
25
+ "@webiny/form": "6.6.0-alpha.1",
26
+ "@webiny/icons": "6.6.0-alpha.1",
27
+ "@webiny/react-properties": "6.6.0-alpha.1",
28
+ "@webiny/shared-aco": "6.6.0-alpha.1",
29
+ "@webiny/utils": "6.6.0-alpha.1",
30
+ "@webiny/validation": "6.6.0-alpha.1",
35
31
  "lodash": "4.18.1",
36
- "mobx": "6.16.1",
37
- "mobx-react-lite": "4.1.1",
32
+ "mobx": "7.0.3",
33
+ "mobx-react-lite": "5.0.3",
38
34
  "react": "18.3.1",
39
35
  "react-dom": "18.3.1",
40
- "slugify": "1.6.9",
41
36
  "zod": "4.4.3"
42
37
  },
43
38
  "devDependencies": {
44
39
  "@types/react": "18.3.31",
45
- "@webiny/build-tools": "6.4.11",
46
- "@webiny/di": "1.0.2",
47
- "@webiny/wcp": "6.4.11",
48
- "apollo-client": "2.6.10",
49
- "apollo-link": "1.2.14",
40
+ "@webiny/build-tools": "6.6.0-alpha.1",
41
+ "@webiny/di": "1.1.0",
42
+ "@webiny/wcp": "6.6.0-alpha.1",
50
43
  "rimraf": "6.1.3",
51
- "typescript": "6.0.3",
52
- "vitest": "4.1.10"
44
+ "typescript": "7.0.2",
45
+ "vitest": "4.1.11"
53
46
  },
54
47
  "publishConfig": {
55
48
  "access": "public"
@@ -1,3 +1,4 @@
1
+ import { StringFormatter } from "@webiny/app-admin/features/stringFormatter/abstractions.js";
1
2
  import { FolderTreePresenter as Abstraction, type IFolderTreeViewModel } from "./abstractions.js";
2
3
  import { FoldersCache, FoldersContext } from "../../features/folders/abstractions.js";
3
4
  import { ListFoldersUseCase } from "../../features/folders/listFolders/abstractions.js";
@@ -20,13 +21,14 @@ declare class FolderTreePresenterImpl implements Abstraction.Interface {
20
21
  private getFolderAncestorsUseCase;
21
22
  private getFolderLevelPermissionUseCase;
22
23
  private formModelFactory;
24
+ private stringFormatter;
23
25
  private currentFolderId;
24
26
  private loading;
25
27
  private _loadingNodeIds;
26
28
  private operation;
27
29
  private callbacks;
28
30
  private disposed;
29
- constructor(foldersContext: FoldersContext.Interface, foldersCache: FoldersCache.Interface, listFoldersUseCase: ListFoldersUseCase.Interface, listFoldersByParentIdsUseCase: ListFoldersByParentIdsUseCase.Interface, createFolderUseCase: CreateFolderUseCase.Interface, updateFolderUseCase: UpdateFolderUseCase.Interface, deleteFolderUseCase: DeleteFolderUseCase.Interface, getFolderAncestorsUseCase: GetFolderAncestorsUseCase.Interface, getFolderLevelPermissionUseCase: GetFolderLevelPermissionUseCase.Interface, formModelFactory: FormModelFactory.Interface);
31
+ constructor(foldersContext: FoldersContext.Interface, foldersCache: FoldersCache.Interface, listFoldersUseCase: ListFoldersUseCase.Interface, listFoldersByParentIdsUseCase: ListFoldersByParentIdsUseCase.Interface, createFolderUseCase: CreateFolderUseCase.Interface, updateFolderUseCase: UpdateFolderUseCase.Interface, deleteFolderUseCase: DeleteFolderUseCase.Interface, getFolderAncestorsUseCase: GetFolderAncestorsUseCase.Interface, getFolderLevelPermissionUseCase: GetFolderLevelPermissionUseCase.Interface, formModelFactory: FormModelFactory.Interface, stringFormatter: StringFormatter.Interface);
30
32
  get vm(): IFolderTreeViewModel;
31
33
  selectFolder(folderId: string | null): void;
32
34
  onFolderChange(callback: FolderChangeCallback): () => void;
@@ -1,5 +1,5 @@
1
1
  import { makeAutoObservable, reaction, runInAction } from "mobx";
2
- import slugify from "slugify";
2
+ import { StringFormatter } from "@webiny/app-admin/features/stringFormatter/abstractions.js";
3
3
  import { FolderTreePresenter } from "./abstractions.js";
4
4
  import { ROOT_FOLDER } from "../../constants.js";
5
5
  import { FoldersCache, FoldersContext } from "../../features/folders/abstractions.js";
@@ -13,7 +13,7 @@ import { GetFolderLevelPermissionUseCase } from "../../features/folders/getFolde
13
13
  import { FormModelFactory } from "@webiny/app-admin/features/formModel/abstractions.js";
14
14
  import { FolderDtoMapper } from "../../domain/folder/FolderDtoMapper.js";
15
15
  class FolderTreePresenterImpl {
16
- constructor(foldersContext, foldersCache, listFoldersUseCase, listFoldersByParentIdsUseCase, createFolderUseCase, updateFolderUseCase, deleteFolderUseCase, getFolderAncestorsUseCase, getFolderLevelPermissionUseCase, formModelFactory){
16
+ constructor(foldersContext, foldersCache, listFoldersUseCase, listFoldersByParentIdsUseCase, createFolderUseCase, updateFolderUseCase, deleteFolderUseCase, getFolderAncestorsUseCase, getFolderLevelPermissionUseCase, formModelFactory, stringFormatter){
17
17
  this.foldersContext = foldersContext;
18
18
  this.foldersCache = foldersCache;
19
19
  this.listFoldersUseCase = listFoldersUseCase;
@@ -24,6 +24,7 @@ class FolderTreePresenterImpl {
24
24
  this.getFolderAncestorsUseCase = getFolderAncestorsUseCase;
25
25
  this.getFolderLevelPermissionUseCase = getFolderLevelPermissionUseCase;
26
26
  this.formModelFactory = formModelFactory;
27
+ this.stringFormatter = stringFormatter;
27
28
  this.currentFolderId = null;
28
29
  this.loading = false;
29
30
  this._loadingNodeIds = [];
@@ -66,9 +67,10 @@ class FolderTreePresenterImpl {
66
67
  };
67
68
  }
68
69
  selectFolder(folderId) {
69
- this.currentFolderId = folderId;
70
- if (folderId) this.loadChildFolders([
71
- folderId
70
+ const normalized = folderId === ROOT_FOLDER ? null : folderId;
71
+ this.currentFolderId = normalized;
72
+ if (normalized) this.loadChildFolders([
73
+ normalized
72
74
  ]);
73
75
  }
74
76
  onFolderChange(callback) {
@@ -115,14 +117,9 @@ class FolderTreePresenterImpl {
115
117
  const form = this.formModelFactory.create({
116
118
  fields: (fields)=>({
117
119
  title: fields.text().label("Title").required("Title is required"),
118
- slug: fields.text().label("Slug").required("Slug is required").computedUntilDirty((f)=>{
119
- const title = f.field("title").getValue();
120
- return slugify(String(title ?? ""), {
121
- replacement: "-",
122
- lower: true,
123
- remove: /[*#\?<>_\{\}\[\]+~.()'"!:;@]/g,
124
- trim: false
125
- });
120
+ slug: fields.text().label("Slug").required("Slug is required").computedUntilDirty(({ form })=>{
121
+ const title = form.field("title").getValue();
122
+ return this.stringFormatter.slugify(String(title ?? ""));
126
123
  }),
127
124
  parentId: fields.text().label("Parent folder").renderer("folderTree")
128
125
  }),
@@ -149,14 +146,9 @@ class FolderTreePresenterImpl {
149
146
  const form = this.formModelFactory.create({
150
147
  fields: (fields)=>({
151
148
  title: fields.text().label("Name").required("Name is required"),
152
- slug: fields.text().label("Slug").required("Slug is required").computedUntilDirty((f)=>{
153
- const title = f.field("title").getValue();
154
- return slugify(String(title ?? ""), {
155
- replacement: "-",
156
- lower: true,
157
- remove: /[*#\?<>_\{\}\[\]+~.()'"!:;@]/g,
158
- trim: false
159
- });
149
+ slug: fields.text().label("Slug").required("Slug is required").computedUntilDirty(({ form })=>{
150
+ const title = form.field("title").getValue();
151
+ return this.stringFormatter.slugify(String(title ?? ""));
160
152
  })
161
153
  }),
162
154
  layout: (layout)=>[
@@ -199,7 +191,6 @@ class FolderTreePresenterImpl {
199
191
  permissions: folder?.permissions ?? []
200
192
  });
201
193
  }
202
- await this.loadFolders();
203
194
  runInAction(()=>{
204
195
  this.operation = {
205
196
  active: false,
@@ -295,7 +286,8 @@ const FolderTreePresenter_FolderTreePresenter = FolderTreePresenter.createImplem
295
286
  DeleteFolderUseCase,
296
287
  GetFolderAncestorsUseCase,
297
288
  GetFolderLevelPermissionUseCase,
298
- FormModelFactory
289
+ FormModelFactory,
290
+ StringFormatter
299
291
  ]
300
292
  });
301
293
  export { FolderTreePresenter_FolderTreePresenter as FolderTreePresenter };
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/folderTree/FolderTreePresenter.js","sources":["../../../src/presentation/folderTree/FolderTreePresenter.ts"],"sourcesContent":["import { makeAutoObservable, reaction, runInAction } from \"mobx\";\nimport slugify from \"slugify\";\nimport {\n FolderTreePresenter as Abstraction,\n type IFolderTreeNode,\n type IFolderTreeViewModel,\n type IFolderOperationState\n} from \"./abstractions.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport { FoldersCache, FoldersContext } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersUseCase } from \"~/features/folders/listFolders/abstractions.js\";\nimport { ListFoldersByParentIdsUseCase } from \"~/features/folders/listFoldersByParentIds/abstractions.js\";\nimport { CreateFolderUseCase } from \"~/features/folders/createFolder/abstractions.js\";\nimport { UpdateFolderUseCase } from \"~/features/folders/updateFolder/abstractions.js\";\nimport { DeleteFolderUseCase } from \"~/features/folders/deleteFolder/abstractions.js\";\nimport { GetFolderAncestorsUseCase } from \"~/features/folders/getFolderAncestors/abstractions.js\";\nimport { GetFolderLevelPermissionUseCase } from \"~/features/folders/getFolderLevelPermission/abstractions.js\";\nimport { FormModelFactory } from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { Folder } from \"~/domain/folder/Folder.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { FolderDtoMapper } from \"~/domain/folder/FolderDtoMapper.js\";\n\ntype FolderChangeCallback = (folderId: string | null) => void;\n\nclass FolderTreePresenterImpl implements Abstraction.Interface {\n private currentFolderId: string | null = null;\n private loading = false;\n private _loadingNodeIds: string[] = [];\n private operation: IFolderOperationState = { active: false, mode: null };\n private callbacks: Set<FolderChangeCallback> = new Set();\n private disposed = false;\n\n constructor(\n private foldersContext: FoldersContext.Interface,\n private foldersCache: FoldersCache.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface,\n private listFoldersByParentIdsUseCase: ListFoldersByParentIdsUseCase.Interface,\n private createFolderUseCase: CreateFolderUseCase.Interface,\n private updateFolderUseCase: UpdateFolderUseCase.Interface,\n private deleteFolderUseCase: DeleteFolderUseCase.Interface,\n private getFolderAncestorsUseCase: GetFolderAncestorsUseCase.Interface,\n private getFolderLevelPermissionUseCase: GetFolderLevelPermissionUseCase.Interface,\n private formModelFactory: FormModelFactory.Interface\n ) {\n makeAutoObservable<FolderTreePresenterImpl, \"callbacks\">(\n this,\n { callbacks: false },\n { autoBind: true }\n );\n\n reaction(\n () => this.currentFolderId,\n folderId => {\n if (!this.disposed) {\n this.callbacks.forEach(cb => cb(folderId));\n }\n }\n );\n\n void this.loadFolders();\n }\n\n get vm(): IFolderTreeViewModel {\n const tree = this.buildTree();\n const allFolders = this.foldersCache.getItems();\n const currentNode = this.findNode(this.currentFolderId, tree);\n const currentFolder = this.findFolder(this.currentFolderId);\n const childNodes = currentNode\n ? currentNode.children\n : tree.filter(n => n.id !== ROOT_FOLDER);\n return {\n folders: allFolders.map(f => FolderDtoMapper.toDTO(f)),\n tree,\n currentFolderId: this.currentFolderId,\n currentFolder: currentFolder ? FolderDtoMapper.toDTO(currentFolder) : null,\n isRootFolder: this.currentFolderId === null,\n currentFolderTitle: currentNode?.name ?? \"All Files\",\n childFolders: childNodes\n .map(n => {\n const folder = allFolders.find(f => f.id === n.id);\n return folder ? FolderDtoMapper.toDTO(folder) : null;\n })\n .filter((f): f is FolderDto => f !== null),\n loading: this.loading,\n loadingNodeIds: this._loadingNodeIds,\n operation: this.operation\n };\n }\n\n selectFolder(folderId: string | null): void {\n this.currentFolderId = folderId;\n if (folderId) {\n void this.loadChildFolders([folderId]);\n }\n }\n\n onFolderChange(callback: FolderChangeCallback): () => void {\n this.callbacks.add(callback);\n return () => {\n this.callbacks.delete(callback);\n };\n }\n\n async loadChildFolders(parentIds: string[]): Promise<void> {\n const fetchableIds = parentIds.filter(id => id !== ROOT_FOLDER && id !== \"0\");\n if (fetchableIds.length === 0) {\n return;\n }\n\n runInAction(() => {\n this._loadingNodeIds = fetchableIds;\n });\n\n try {\n await this.listFoldersByParentIdsUseCase.execute(fetchableIds);\n } finally {\n runInAction(() => {\n this._loadingNodeIds = [];\n });\n }\n }\n\n async moveFolder(folderId: string, targetParentId: string | null): Promise<void> {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n if (!folder) {\n return;\n }\n\n await this.updateFolderUseCase.execute({\n id: folderId,\n title: folder.title,\n slug: folder.slug,\n type: this.foldersContext.type,\n parentId: targetParentId,\n permissions: folder.permissions\n });\n\n await this.loadFolders();\n }\n\n canManageStructure(folderId: string): boolean {\n return this.getFolderLevelPermissionUseCase.execute(folderId, \"canManageStructure\");\n }\n\n getAncestorIds(folderId: string): string[] {\n return this.getFolderAncestorsUseCase.execute(folderId).map(f => f.id);\n }\n\n createFolder(parentFolderId?: string): void {\n const form = this.formModelFactory.create({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required\")\n .computedUntilDirty(f => {\n const title = f.field(\"title\").getValue();\n return slugify(String(title ?? \"\"), {\n replacement: \"-\",\n lower: true,\n remove: /[*#\\?<>_\\{\\}\\[\\]+~.()'\"!:;@]/g,\n trim: false\n });\n }),\n parentId: fields\n .text()\n .label(\"Parent folder\")\n .renderer(\"folderTree\" as any)\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"slug\"), layout.row(\"parentId\")]\n });\n\n form.setData({ parentId: parentFolderId ?? null });\n\n this.operation = {\n active: true,\n mode: \"create\",\n parentFolderId,\n form\n };\n }\n\n editFolder(folderId: string): void {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n if (!folder) {\n return;\n }\n\n const form = this.formModelFactory.create({\n fields: fields => ({\n title: fields.text().label(\"Name\").required(\"Name is required\"),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required\")\n .computedUntilDirty(f => {\n const title = f.field(\"title\").getValue();\n return slugify(String(title ?? \"\"), {\n replacement: \"-\",\n lower: true,\n remove: /[*#\\?<>_\\{\\}\\[\\]+~.()'\"!:;@]/g,\n trim: false\n });\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"slug\")]\n });\n\n form.setData({ title: folder.title, slug: folder.slug });\n\n this.operation = {\n active: true,\n mode: \"edit\",\n folderId,\n form\n };\n }\n\n async submitOperation(): Promise<boolean> {\n const { mode, form, parentFolderId, folderId } = this.operation;\n if (!form || !mode) {\n return false;\n }\n\n const data = await form.submit<{ title: string; slug: string; parentId?: string | null }>();\n if (!data) {\n return false;\n }\n\n if (mode === \"create\") {\n await this.createFolderUseCase.execute({\n title: data.title,\n slug: data.slug,\n type: this.foldersContext.type,\n parentId: data.parentId ?? parentFolderId ?? null,\n permissions: []\n });\n } else if (mode === \"edit\" && folderId) {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n\n await this.updateFolderUseCase.execute({\n id: folderId,\n title: data.title,\n slug: data.slug,\n type: this.foldersContext.type,\n parentId: folder?.parentId ?? null,\n permissions: folder?.permissions ?? []\n });\n }\n\n await this.loadFolders();\n\n runInAction(() => {\n this.operation = { active: false, mode: null };\n });\n\n return true;\n }\n\n async deleteFolder(folderId: string): Promise<void> {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n const parentId = folder?.parentId ?? null;\n\n this.operation = {\n active: true,\n mode: \"delete\",\n folderId\n };\n\n await this.deleteFolderUseCase.execute(folderId);\n await this.loadFolders();\n\n runInAction(() => {\n this.operation = { active: false, mode: null };\n this.currentFolderId = parentId;\n });\n }\n\n cancelOperation(): void {\n this.operation = { active: false, mode: null };\n }\n\n private async loadFolders(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n await this.listFoldersUseCase.execute();\n } finally {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n private buildTree(): IFolderTreeNode[] {\n const folders = this.foldersCache.getItems();\n return this.buildTreeFromFolders(folders);\n }\n\n private buildTreeFromFolders(folders: Folder[]): IFolderTreeNode[] {\n const nodeMap = new Map<string, IFolderTreeNode>();\n\n for (const folder of folders) {\n nodeMap.set(folder.id, {\n id: folder.id,\n name: folder.title,\n slug: folder.slug,\n parentId: folder.parentId,\n children: [],\n hasNonInheritedPermissions: folder.hasNonInheritedPermissions ?? false,\n canManagePermissions: folder.canManagePermissions ?? false,\n canManageStructure: folder.canManageStructure ?? true\n });\n }\n\n const roots: IFolderTreeNode[] = [];\n for (const folder of folders) {\n const node = nodeMap.get(folder.id)!;\n if (folder.parentId && nodeMap.has(folder.parentId)) {\n nodeMap.get(folder.parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n return roots;\n }\n\n private findFolder(folderId: string | null): Folder | null {\n if (!folderId) {\n return null;\n }\n\n return this.foldersCache.getItem(f => f.id === folderId) ?? null;\n }\n\n private findNode(folderId: string | null, nodes: IFolderTreeNode[]): IFolderTreeNode | null {\n if (folderId === null) {\n return null;\n }\n\n for (const node of nodes) {\n if (node.id === folderId) {\n return node;\n }\n const found = this.findNode(folderId, node.children);\n if (found) {\n return found;\n }\n }\n\n return null;\n }\n}\n\nexport const FolderTreePresenter = Abstraction.createImplementation({\n implementation: FolderTreePresenterImpl,\n dependencies: [\n FoldersContext,\n FoldersCache,\n ListFoldersUseCase,\n ListFoldersByParentIdsUseCase,\n CreateFolderUseCase,\n UpdateFolderUseCase,\n DeleteFolderUseCase,\n GetFolderAncestorsUseCase,\n GetFolderLevelPermissionUseCase,\n FormModelFactory\n ]\n});\n"],"names":["FolderTreePresenterImpl","foldersContext","foldersCache","listFoldersUseCase","listFoldersByParentIdsUseCase","createFolderUseCase","updateFolderUseCase","deleteFolderUseCase","getFolderAncestorsUseCase","getFolderLevelPermissionUseCase","formModelFactory","Set","makeAutoObservable","reaction","folderId","cb","tree","allFolders","currentNode","currentFolder","childNodes","n","ROOT_FOLDER","f","FolderDtoMapper","folder","callback","parentIds","fetchableIds","id","runInAction","targetParentId","folders","parentFolderId","form","fields","title","slugify","String","layout","mode","data","parentId","nodeMap","Map","roots","node","nodes","found","FolderTreePresenter","Abstraction","FoldersContext","FoldersCache","ListFoldersUseCase","ListFoldersByParentIdsUseCase","CreateFolderUseCase","UpdateFolderUseCase","DeleteFolderUseCase","GetFolderAncestorsUseCase","GetFolderLevelPermissionUseCase","FormModelFactory"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/folderTree/FolderTreePresenter.js","sources":["../../../src/presentation/folderTree/FolderTreePresenter.ts"],"sourcesContent":["import { makeAutoObservable, reaction, runInAction } from \"mobx\";\nimport { StringFormatter } from \"@webiny/app-admin/features/stringFormatter/abstractions.js\";\nimport {\n FolderTreePresenter as Abstraction,\n type IFolderTreeNode,\n type IFolderTreeViewModel,\n type IFolderOperationState\n} from \"./abstractions.js\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport { FoldersCache, FoldersContext } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersUseCase } from \"~/features/folders/listFolders/abstractions.js\";\nimport { ListFoldersByParentIdsUseCase } from \"~/features/folders/listFoldersByParentIds/abstractions.js\";\nimport { CreateFolderUseCase } from \"~/features/folders/createFolder/abstractions.js\";\nimport { UpdateFolderUseCase } from \"~/features/folders/updateFolder/abstractions.js\";\nimport { DeleteFolderUseCase } from \"~/features/folders/deleteFolder/abstractions.js\";\nimport { GetFolderAncestorsUseCase } from \"~/features/folders/getFolderAncestors/abstractions.js\";\nimport { GetFolderLevelPermissionUseCase } from \"~/features/folders/getFolderLevelPermission/abstractions.js\";\nimport { FormModelFactory } from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { Folder } from \"~/domain/folder/Folder.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\nimport { FolderDtoMapper } from \"~/domain/folder/FolderDtoMapper.js\";\n\ntype FolderChangeCallback = (folderId: string | null) => void;\n\nclass FolderTreePresenterImpl implements Abstraction.Interface {\n private currentFolderId: string | null = null;\n private loading = false;\n private _loadingNodeIds: string[] = [];\n private operation: IFolderOperationState = { active: false, mode: null };\n private callbacks: Set<FolderChangeCallback> = new Set();\n private disposed = false;\n\n constructor(\n private foldersContext: FoldersContext.Interface,\n private foldersCache: FoldersCache.Interface,\n private listFoldersUseCase: ListFoldersUseCase.Interface,\n private listFoldersByParentIdsUseCase: ListFoldersByParentIdsUseCase.Interface,\n private createFolderUseCase: CreateFolderUseCase.Interface,\n private updateFolderUseCase: UpdateFolderUseCase.Interface,\n private deleteFolderUseCase: DeleteFolderUseCase.Interface,\n private getFolderAncestorsUseCase: GetFolderAncestorsUseCase.Interface,\n private getFolderLevelPermissionUseCase: GetFolderLevelPermissionUseCase.Interface,\n private formModelFactory: FormModelFactory.Interface,\n private stringFormatter: StringFormatter.Interface\n ) {\n makeAutoObservable<FolderTreePresenterImpl, \"callbacks\">(\n this,\n { callbacks: false },\n { autoBind: true }\n );\n\n reaction(\n () => this.currentFolderId,\n folderId => {\n if (!this.disposed) {\n this.callbacks.forEach(cb => cb(folderId));\n }\n }\n );\n\n void this.loadFolders();\n }\n\n get vm(): IFolderTreeViewModel {\n const tree = this.buildTree();\n const allFolders = this.foldersCache.getItems();\n const currentNode = this.findNode(this.currentFolderId, tree);\n const currentFolder = this.findFolder(this.currentFolderId);\n const childNodes = currentNode\n ? currentNode.children\n : tree.filter(n => n.id !== ROOT_FOLDER);\n return {\n folders: allFolders.map(f => FolderDtoMapper.toDTO(f)),\n tree,\n currentFolderId: this.currentFolderId,\n currentFolder: currentFolder ? FolderDtoMapper.toDTO(currentFolder) : null,\n isRootFolder: this.currentFolderId === null,\n currentFolderTitle: currentNode?.name ?? \"All Files\",\n childFolders: childNodes\n .map(n => {\n const folder = allFolders.find(f => f.id === n.id);\n return folder ? FolderDtoMapper.toDTO(folder) : null;\n })\n .filter((f): f is FolderDto => f !== null),\n loading: this.loading,\n loadingNodeIds: this._loadingNodeIds,\n operation: this.operation\n };\n }\n\n selectFolder(folderId: string | null): void {\n const normalized = folderId === ROOT_FOLDER ? null : folderId;\n this.currentFolderId = normalized;\n if (normalized) {\n void this.loadChildFolders([normalized]);\n }\n }\n\n onFolderChange(callback: FolderChangeCallback): () => void {\n this.callbacks.add(callback);\n return () => {\n this.callbacks.delete(callback);\n };\n }\n\n async loadChildFolders(parentIds: string[]): Promise<void> {\n const fetchableIds = parentIds.filter(id => id !== ROOT_FOLDER && id !== \"0\");\n if (fetchableIds.length === 0) {\n return;\n }\n\n runInAction(() => {\n this._loadingNodeIds = fetchableIds;\n });\n\n try {\n await this.listFoldersByParentIdsUseCase.execute(fetchableIds);\n } finally {\n runInAction(() => {\n this._loadingNodeIds = [];\n });\n }\n }\n\n async moveFolder(folderId: string, targetParentId: string | null): Promise<void> {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n if (!folder) {\n return;\n }\n\n await this.updateFolderUseCase.execute({\n id: folderId,\n title: folder.title,\n slug: folder.slug,\n type: this.foldersContext.type,\n parentId: targetParentId,\n permissions: folder.permissions\n });\n\n await this.loadFolders();\n }\n\n canManageStructure(folderId: string): boolean {\n return this.getFolderLevelPermissionUseCase.execute(folderId, \"canManageStructure\");\n }\n\n getAncestorIds(folderId: string): string[] {\n return this.getFolderAncestorsUseCase.execute(folderId).map(f => f.id);\n }\n\n createFolder(parentFolderId?: string): void {\n const form = this.formModelFactory.create({\n fields: fields => ({\n title: fields.text().label(\"Title\").required(\"Title is required\"),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required\")\n .computedUntilDirty(({ form }) => {\n const title = form.field(\"title\").getValue();\n return this.stringFormatter.slugify(String(title ?? \"\"));\n }),\n parentId: fields\n .text()\n .label(\"Parent folder\")\n .renderer(\"folderTree\" as any)\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"slug\"), layout.row(\"parentId\")]\n });\n\n form.setData({ parentId: parentFolderId ?? null });\n\n this.operation = {\n active: true,\n mode: \"create\",\n parentFolderId,\n form\n };\n }\n\n editFolder(folderId: string): void {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n if (!folder) {\n return;\n }\n\n const form = this.formModelFactory.create({\n fields: fields => ({\n title: fields.text().label(\"Name\").required(\"Name is required\"),\n slug: fields\n .text()\n .label(\"Slug\")\n .required(\"Slug is required\")\n .computedUntilDirty(({ form }) => {\n const title = form.field(\"title\").getValue();\n return this.stringFormatter.slugify(String(title ?? \"\"));\n })\n }),\n layout: layout => [layout.row(\"title\"), layout.row(\"slug\")]\n });\n\n form.setData({ title: folder.title, slug: folder.slug });\n\n this.operation = {\n active: true,\n mode: \"edit\",\n folderId,\n form\n };\n }\n\n async submitOperation(): Promise<boolean> {\n const { mode, form, parentFolderId, folderId } = this.operation;\n if (!form || !mode) {\n return false;\n }\n\n const data = await form.submit<{ title: string; slug: string; parentId?: string | null }>();\n if (!data) {\n return false;\n }\n\n if (mode === \"create\") {\n await this.createFolderUseCase.execute({\n title: data.title,\n slug: data.slug,\n type: this.foldersContext.type,\n parentId: data.parentId ?? parentFolderId ?? null,\n permissions: []\n });\n } else if (mode === \"edit\" && folderId) {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n\n await this.updateFolderUseCase.execute({\n id: folderId,\n title: data.title,\n slug: data.slug,\n type: this.foldersContext.type,\n parentId: folder?.parentId ?? null,\n permissions: folder?.permissions ?? []\n });\n }\n\n runInAction(() => {\n this.operation = { active: false, mode: null };\n });\n\n return true;\n }\n\n async deleteFolder(folderId: string): Promise<void> {\n const folders = this.foldersCache.getItems();\n const folder = folders.find(f => f.id === folderId);\n const parentId = folder?.parentId ?? null;\n\n this.operation = {\n active: true,\n mode: \"delete\",\n folderId\n };\n\n await this.deleteFolderUseCase.execute(folderId);\n await this.loadFolders();\n\n runInAction(() => {\n this.operation = { active: false, mode: null };\n this.currentFolderId = parentId;\n });\n }\n\n cancelOperation(): void {\n this.operation = { active: false, mode: null };\n }\n\n private async loadFolders(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n await this.listFoldersUseCase.execute();\n } finally {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n private buildTree(): IFolderTreeNode[] {\n const folders = this.foldersCache.getItems();\n return this.buildTreeFromFolders(folders);\n }\n\n private buildTreeFromFolders(folders: Folder[]): IFolderTreeNode[] {\n const nodeMap = new Map<string, IFolderTreeNode>();\n\n for (const folder of folders) {\n nodeMap.set(folder.id, {\n id: folder.id,\n name: folder.title,\n slug: folder.slug,\n parentId: folder.parentId,\n children: [],\n hasNonInheritedPermissions: folder.hasNonInheritedPermissions ?? false,\n canManagePermissions: folder.canManagePermissions ?? false,\n canManageStructure: folder.canManageStructure ?? true\n });\n }\n\n const roots: IFolderTreeNode[] = [];\n for (const folder of folders) {\n const node = nodeMap.get(folder.id)!;\n if (folder.parentId && nodeMap.has(folder.parentId)) {\n nodeMap.get(folder.parentId)!.children.push(node);\n } else {\n roots.push(node);\n }\n }\n\n return roots;\n }\n\n private findFolder(folderId: string | null): Folder | null {\n if (!folderId) {\n return null;\n }\n\n return this.foldersCache.getItem(f => f.id === folderId) ?? null;\n }\n\n private findNode(folderId: string | null, nodes: IFolderTreeNode[]): IFolderTreeNode | null {\n if (folderId === null) {\n return null;\n }\n\n for (const node of nodes) {\n if (node.id === folderId) {\n return node;\n }\n const found = this.findNode(folderId, node.children);\n if (found) {\n return found;\n }\n }\n\n return null;\n }\n}\n\nexport const FolderTreePresenter = Abstraction.createImplementation({\n implementation: FolderTreePresenterImpl,\n dependencies: [\n FoldersContext,\n FoldersCache,\n ListFoldersUseCase,\n ListFoldersByParentIdsUseCase,\n CreateFolderUseCase,\n UpdateFolderUseCase,\n DeleteFolderUseCase,\n GetFolderAncestorsUseCase,\n GetFolderLevelPermissionUseCase,\n FormModelFactory,\n StringFormatter\n ]\n});\n"],"names":["FolderTreePresenterImpl","foldersContext","foldersCache","listFoldersUseCase","listFoldersByParentIdsUseCase","createFolderUseCase","updateFolderUseCase","deleteFolderUseCase","getFolderAncestorsUseCase","getFolderLevelPermissionUseCase","formModelFactory","stringFormatter","Set","makeAutoObservable","reaction","folderId","cb","tree","allFolders","currentNode","currentFolder","childNodes","n","ROOT_FOLDER","f","FolderDtoMapper","folder","normalized","callback","parentIds","fetchableIds","id","runInAction","targetParentId","folders","parentFolderId","form","fields","title","String","layout","mode","data","parentId","nodeMap","Map","roots","node","nodes","found","FolderTreePresenter","Abstraction","FoldersContext","FoldersCache","ListFoldersUseCase","ListFoldersByParentIdsUseCase","CreateFolderUseCase","UpdateFolderUseCase","DeleteFolderUseCase","GetFolderAncestorsUseCase","GetFolderLevelPermissionUseCase","FormModelFactory","StringFormatter"],"mappings":"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"}