@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.
- package/components/Actions/DeleteFolder/DeleteFolder.js +1 -1
- package/components/Actions/DeleteFolder/DeleteFolder.js.map +1 -1
- package/components/AdvancedSearch/AdvancedSearch.d.ts +2 -2
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawer.d.ts +2 -2
- package/components/AdvancedSearch/domain/Filter.d.ts +1 -1
- package/components/AdvancedSearch/domain/FilterRepositoryFactory.d.ts +2 -2
- package/components/AdvancedSearch/domain/FilterRepositoryFactory.js.map +1 -1
- package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.d.ts +2 -2
- package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js +9 -10
- package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js.map +1 -1
- package/components/AdvancedSearch/gateways/filters.gql.d.ts +5 -5
- package/components/AdvancedSearch/gateways/filters.gql.js +5 -6
- package/components/AdvancedSearch/gateways/filters.gql.js.map +1 -1
- package/components/AdvancedSearch/useFilterRepository.js +7 -2
- package/components/AdvancedSearch/useFilterRepository.js.map +1 -1
- package/components/FolderTree/List/List.js +6 -14
- package/components/FolderTree/List/List.js.map +1 -1
- package/components/Table/cells/CellAuthor.d.ts +2 -0
- package/components/Table/cells/CellAuthor.js +10 -0
- package/components/Table/cells/CellAuthor.js.map +1 -0
- package/components/Table/cells/CellCreated.d.ts +2 -0
- package/components/Table/cells/CellCreated.js +13 -0
- package/components/Table/cells/CellCreated.js.map +1 -0
- package/components/Table/cells/CellModified.d.ts +2 -0
- package/components/Table/cells/CellModified.js +13 -0
- package/components/Table/cells/CellModified.js.map +1 -0
- package/components/Table/cells/index.d.ts +3 -0
- package/components/Table/cells/index.js +3 -0
- package/components/Table/components/Table/TableInner.d.ts +2 -2
- package/components/Table/createTableData.d.ts +7 -5
- package/components/Table/createTableData.js +22 -7
- package/components/Table/createTableData.js.map +1 -1
- package/components/Table/index.d.ts +2 -2
- package/components/Table/index.js +2 -2
- package/components/index.d.ts +0 -1
- package/components/index.js +0 -1
- package/config/AcoConfig.d.ts +8 -12
- package/config/advanced-search/FieldRenderer.d.ts +3 -1
- package/config/folder/Action.d.ts +1 -1
- package/config/folder/index.d.ts +3 -2
- package/config/index.d.ts +0 -1
- package/config/index.js +0 -1
- package/config/record/Action.d.ts +1 -1
- package/config/record/index.d.ts +1 -1
- package/config/table/Column.d.ts +8 -39
- package/config/table/Column.js +4 -67
- package/config/table/Column.js.map +1 -1
- package/config/table/Sorting.d.ts +2 -11
- package/config/table/Sorting.js +1 -28
- package/config/table/index.d.ts +5 -9
- package/contexts/index.d.ts +0 -3
- package/contexts/index.js +0 -3
- package/dialogs/DialogSetPermissions/graphql.d.ts +1 -1
- package/dialogs/DialogSetPermissions/graphql.js +1 -2
- package/dialogs/DialogSetPermissions/graphql.js.map +1 -1
- package/dialogs/useConfirmMoveFolderDialog.d.ts +0 -1
- package/dialogs/useConfirmMoveFolderDialog.js +2 -3
- package/dialogs/useConfirmMoveFolderDialog.js.map +1 -1
- package/dialogs/useCreateDialog.js +5 -9
- package/dialogs/useCreateDialog.js.map +1 -1
- package/dialogs/useEditDialog.js +2 -2
- package/dialogs/useEditDialog.js.map +1 -1
- package/dialogs/useSetPermissionsDialog.js +16 -4
- package/dialogs/useSetPermissionsDialog.js.map +1 -1
- package/domain/folder/Folder.d.ts +2 -1
- package/domain/folder/Folder.js.map +1 -1
- package/features/folders/createFolder/CreateFolderGqlGateway.d.ts +3 -3
- package/features/folders/createFolder/CreateFolderGqlGateway.js +15 -16
- package/features/folders/createFolder/CreateFolderGqlGateway.js.map +1 -1
- package/features/folders/deleteFolder/DeleteFolderGqlGateway.d.ts +3 -3
- package/features/folders/deleteFolder/DeleteFolderGqlGateway.js +5 -6
- package/features/folders/deleteFolder/DeleteFolderGqlGateway.js.map +1 -1
- package/features/folders/folderModelProvider/FolderModelProvider.js +29 -31
- package/features/folders/folderModelProvider/FolderModelProvider.js.map +1 -1
- package/features/folders/folderModelProvider/GetFolderModelGqlGateway.d.ts +3 -3
- package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js +5 -7
- package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js.map +1 -1
- package/features/folders/getFolder/GetFolderGqlGateway.d.ts +3 -3
- package/features/folders/getFolder/GetFolderGqlGateway.js +5 -7
- package/features/folders/getFolder/GetFolderGqlGateway.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFieldsUseCase.d.ts +3 -3
- package/features/folders/getFolderExtensionsFields/useFolderExtensionsFields.d.ts +3 -3
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js +12 -16
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js.map +1 -1
- package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.d.ts +3 -3
- package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js +5 -5
- package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js.map +1 -1
- package/features/folders/listFolders/ListFoldersGqlGateway.d.ts +1 -1
- package/features/folders/listFolders/ListFoldersGqlGateway.js +1 -2
- package/features/folders/listFolders/ListFoldersGqlGateway.js.map +1 -1
- package/features/folders/listFolders/useListFolders.d.ts +1 -1
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.d.ts +3 -3
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js +5 -7
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js.map +1 -1
- package/features/folders/listFoldersByParentIds/useListFoldersByParentIds.d.ts +2 -2
- package/features/folders/loadFolderHierarchy/useLoadFolderHierarchy.d.ts +2 -2
- package/features/folders/updateFolder/UpdateFolderGqlGateway.d.ts +3 -3
- package/features/folders/updateFolder/UpdateFolderGqlGateway.js +5 -6
- package/features/folders/updateFolder/UpdateFolderGqlGateway.js.map +1 -1
- package/hooks/index.d.ts +0 -6
- package/hooks/index.js +0 -6
- package/index.d.ts +3 -2
- package/index.js +2 -2
- package/package.json +21 -28
- package/presentation/folderTree/FolderTreePresenter.d.ts +3 -1
- package/presentation/folderTree/FolderTreePresenter.js +15 -23
- package/presentation/folderTree/FolderTreePresenter.js.map +1 -1
- package/presentation/folderTree/FolderTreePresenter.test.js +8 -2
- package/presentation/folderTree/FolderTreePresenter.test.js.map +1 -1
- package/table.types.d.ts +2 -9
- package/types.d.ts +5 -26
- package/types.js.map +1 -1
- package/components/Extensions/Extensions.d.ts +0 -2
- package/components/Extensions/Extensions.js +0 -30
- package/components/Extensions/Extensions.js.map +0 -1
- package/components/Extensions/index.d.ts +0 -1
- package/components/Extensions/index.js +0 -1
- package/config/folder/createFolderFieldDecoratorFactory.d.ts +0 -13
- package/config/folder/createFolderFieldDecoratorFactory.js +0 -17
- package/config/folder/createFolderFieldDecoratorFactory.js.map +0 -1
- package/config/table/Sorting.js.map +0 -1
- package/contexts/acoList.d.ts +0 -49
- package/contexts/acoList.js +0 -303
- package/contexts/acoList.js.map +0 -1
- package/contexts/app.d.ts +0 -33
- package/contexts/app.js +0 -47
- package/contexts/app.js.map +0 -1
- package/contexts/folders.d.ts +0 -12
- package/contexts/folders.js +0 -32
- package/contexts/folders.js.map +0 -1
- package/contexts/navigateFolder.d.ts +0 -17
- package/contexts/navigateFolder.js +0 -54
- package/contexts/navigateFolder.js.map +0 -1
- package/contexts/records.d.ts +0 -31
- package/contexts/records.js +0 -316
- package/contexts/records.js.map +0 -1
- package/exports/admin/aco.d.ts +0 -2
- package/exports/admin/aco.js +0 -2
- package/graphql/app.gql.d.ts +0 -17
- package/graphql/app.gql.js +0 -22
- package/graphql/app.gql.js.map +0 -1
- package/graphql/records/common.d.ts +0 -4
- package/graphql/records/common.js +0 -57
- package/graphql/records/common.js.map +0 -1
- package/graphql/records/getRecord.d.ts +0 -2
- package/graphql/records/getRecord.js +0 -5
- package/graphql/records/getRecord.js.map +0 -1
- package/graphql/records/listRecords.d.ts +0 -2
- package/graphql/records/listRecords.js +0 -26
- package/graphql/records/listRecords.js.map +0 -1
- package/graphql/records/moveRecord.d.ts +0 -2
- package/graphql/records/moveRecord.js +0 -16
- package/graphql/records/moveRecord.js.map +0 -1
- package/graphql/records/types.d.ts +0 -108
- package/graphql/records/types.js +0 -0
- package/graphql/records.gql.d.ts +0 -3
- package/graphql/records.gql.js +0 -3
- package/handlers.d.ts +0 -23
- package/handlers.js +0 -22
- package/handlers.js.map +0 -1
- package/hooks/useAcoApp.d.ts +0 -2
- package/hooks/useAcoApp.js +0 -16
- package/hooks/useAcoApp.js.map +0 -1
- package/hooks/useAcoList.d.ts +0 -3
- package/hooks/useAcoList.js +0 -10
- package/hooks/useAcoList.js.map +0 -1
- package/hooks/useFolderModel.d.ts +0 -2
- package/hooks/useFolderModel.js +0 -16
- package/hooks/useFolderModel.js.map +0 -1
- package/hooks/useFoldersType.d.ts +0 -1
- package/hooks/useFoldersType.js +0 -12
- package/hooks/useFoldersType.js.map +0 -1
- package/hooks/useNavigateFolder.d.ts +0 -2
- package/hooks/useNavigateFolder.js +0 -10
- package/hooks/useNavigateFolder.js.map +0 -1
- package/hooks/useRecords.d.ts +0 -62
- package/hooks/useRecords.js +0 -64
- package/hooks/useRecords.js.map +0 -1
- package/hooks/useTags.d.ts +0 -14
- package/hooks/useTags.js +0 -27
- package/hooks/useTags.js.map +0 -1
- package/sorting.d.ts +0 -9
- package/sorting.js +0 -31
- 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 {
|
|
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) =>
|
|
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)
|
|
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
|
|
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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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) =>
|
|
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:
|
|
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
|
|
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)
|
|
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
|
|
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
|
-
|
|
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
|
|
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 {
|
|
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) =>
|
|
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:
|
|
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
|
|
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)
|
|
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
|
|
29
|
-
|
|
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
|
-
|
|
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
|
|
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
package/hooks/index.js
CHANGED
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.
|
|
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
|
-
"@
|
|
19
|
-
"@webiny/
|
|
20
|
-
"@webiny/app": "6.
|
|
21
|
-
"@webiny/app-
|
|
22
|
-
"@webiny/app-
|
|
23
|
-
"@webiny/
|
|
24
|
-
"@webiny/feature": "6.
|
|
25
|
-
"@webiny/form": "6.
|
|
26
|
-
"@webiny/icons": "6.
|
|
27
|
-
"@webiny/
|
|
28
|
-
"@webiny/
|
|
29
|
-
"@webiny/
|
|
30
|
-
"@webiny/
|
|
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": "
|
|
37
|
-
"mobx-react-lite": "
|
|
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.
|
|
46
|
-
"@webiny/di": "1.0
|
|
47
|
-
"@webiny/wcp": "6.
|
|
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": "
|
|
52
|
-
"vitest": "4.1.
|
|
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
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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((
|
|
119
|
-
const title =
|
|
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((
|
|
153
|
-
const title =
|
|
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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"}
|