@webiny/app-aco 6.3.0 → 6.4.0-beta.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/app.js +3 -4
- package/app.js.map +1 -1
- package/components/Actions/DeleteFolder/DeleteFolder.js +21 -26
- package/components/Actions/DeleteFolder/DeleteFolder.js.map +1 -1
- package/components/Actions/DeleteFolder/index.js +0 -2
- package/components/Actions/EditFolder/EditFolder.js +20 -25
- package/components/Actions/EditFolder/EditFolder.js.map +1 -1
- package/components/Actions/EditFolder/index.js +0 -2
- package/components/Actions/SetFolderPemissions/SetFolderPermissions.js +20 -25
- package/components/Actions/SetFolderPemissions/SetFolderPermissions.js.map +1 -1
- package/components/Actions/SetFolderPemissions/index.js +0 -2
- package/components/Actions/index.js +0 -2
- package/components/AdvancedSearch/AdvancedSearch.js +67 -75
- package/components/AdvancedSearch/AdvancedSearch.js.map +1 -1
- package/components/AdvancedSearch/AdvancedSearchConfigs.js +37 -40
- package/components/AdvancedSearch/AdvancedSearchConfigs.js.map +1 -1
- package/components/AdvancedSearch/AdvancedSearchPresenter.js +178 -199
- package/components/AdvancedSearch/AdvancedSearchPresenter.js.map +1 -1
- package/components/AdvancedSearch/AdvancedSearchPresenter.test.js +653 -720
- package/components/AdvancedSearch/AdvancedSearchPresenter.test.js.map +1 -1
- package/components/AdvancedSearch/Button/Button.js +13 -16
- package/components/AdvancedSearch/Button/Button.js.map +1 -1
- package/components/AdvancedSearch/Button/index.js +0 -2
- package/components/AdvancedSearch/GraphQLInputMapper.js +29 -40
- package/components/AdvancedSearch/GraphQLInputMapper.js.map +1 -1
- package/components/AdvancedSearch/GraphQLInputMapper.test.js +179 -139
- package/components/AdvancedSearch/GraphQLInputMapper.test.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/QueryBuilder.js +57 -58
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/QueryBuilder.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/Details.js +25 -26
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/Details.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/Filter.js +51 -71
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/Filter.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/FilterOperationLabel.js +9 -13
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/FilterOperationLabel.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/GroupOperationLabel.js +14 -14
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/GroupOperationLabel.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/InputField.js +11 -20
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/InputField.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/OperationSelector.js +15 -25
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/OperationSelector.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/AddFilter.js +14 -17
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/AddFilter.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/AddGroup.js +11 -14
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/AddGroup.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/RemoveFilter.js +14 -18
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/RemoveFilter.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/index.js +0 -2
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/index.js +0 -2
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/index.js +0 -2
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawer.js +65 -67
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawer.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawerPresenter.js +110 -139
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawerPresenter.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawerPresenter.test.js +345 -328
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilderDrawerPresenter.test.js.map +1 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/index.js +0 -2
- package/components/AdvancedSearch/QueryManagerDialog/QueryManagerDialog.js +23 -27
- package/components/AdvancedSearch/QueryManagerDialog/QueryManagerDialog.js.map +1 -1
- package/components/AdvancedSearch/QueryManagerDialog/components/Description.js +8 -10
- package/components/AdvancedSearch/QueryManagerDialog/components/Description.js.map +1 -1
- package/components/AdvancedSearch/QueryManagerDialog/components/Empty.js +16 -17
- package/components/AdvancedSearch/QueryManagerDialog/components/Empty.js.map +1 -1
- package/components/AdvancedSearch/QueryManagerDialog/components/FilterList.js +41 -42
- package/components/AdvancedSearch/QueryManagerDialog/components/FilterList.js.map +1 -1
- package/components/AdvancedSearch/QueryManagerDialog/components/index.js +0 -2
- package/components/AdvancedSearch/QueryManagerDialog/index.js +0 -2
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialog.js +52 -59
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialog.js.map +1 -1
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialogPresenter.js +39 -52
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialogPresenter.js.map +1 -1
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialogPresenter.test.js +58 -66
- package/components/AdvancedSearch/QuerySaverDialog/QuerySaverDialogPresenter.test.js.map +1 -1
- package/components/AdvancedSearch/QuerySaverDialog/index.js +0 -2
- package/components/AdvancedSearch/SelectedFilter/SelectedFilter.js +18 -19
- package/components/AdvancedSearch/SelectedFilter/SelectedFilter.js.map +1 -1
- package/components/AdvancedSearch/SelectedFilter/index.js +0 -2
- package/components/AdvancedSearch/domain/Feedback.js +12 -11
- package/components/AdvancedSearch/domain/Feedback.js.map +1 -1
- package/components/AdvancedSearch/domain/Field.js +206 -190
- package/components/AdvancedSearch/domain/Field.js.map +1 -1
- package/components/AdvancedSearch/domain/FieldMapper.js +40 -41
- package/components/AdvancedSearch/domain/FieldMapper.js.map +1 -1
- package/components/AdvancedSearch/domain/Filter.js +64 -47
- package/components/AdvancedSearch/domain/Filter.js.map +1 -1
- package/components/AdvancedSearch/domain/FilterMapper.js +35 -34
- package/components/AdvancedSearch/domain/FilterMapper.js.map +1 -1
- package/components/AdvancedSearch/domain/FilterRepository.js +84 -85
- package/components/AdvancedSearch/domain/FilterRepository.js.map +1 -1
- package/components/AdvancedSearch/domain/FilterRepositoryFactory.js +8 -9
- package/components/AdvancedSearch/domain/FilterRepositoryFactory.js.map +1 -1
- package/components/AdvancedSearch/domain/Loading.js +47 -46
- package/components/AdvancedSearch/domain/Loading.js.map +1 -1
- package/components/AdvancedSearch/domain/Operation.js +5 -4
- package/components/AdvancedSearch/domain/Operation.js.map +1 -1
- package/components/AdvancedSearch/domain/Sorter.js +17 -16
- package/components/AdvancedSearch/domain/Sorter.js.map +1 -1
- package/components/AdvancedSearch/domain/index.js +0 -2
- package/components/AdvancedSearch/fields/Boolean.js +23 -25
- package/components/AdvancedSearch/fields/Boolean.js.map +1 -1
- package/components/AdvancedSearch/fields/DateWithTimezone.js +47 -52
- package/components/AdvancedSearch/fields/DateWithTimezone.js.map +1 -1
- package/components/AdvancedSearch/fields/DateWithoutTimezone.js +26 -30
- package/components/AdvancedSearch/fields/DateWithoutTimezone.js.map +1 -1
- package/components/AdvancedSearch/fields/Input.js +12 -14
- package/components/AdvancedSearch/fields/Input.js.map +1 -1
- package/components/AdvancedSearch/fields/PredefinedValues.js +17 -23
- package/components/AdvancedSearch/fields/PredefinedValues.js.map +1 -1
- package/components/AdvancedSearch/fields/index.js +0 -2
- package/components/AdvancedSearch/gateways/FiltersGatewayInterface.js +0 -3
- package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js +69 -121
- package/components/AdvancedSearch/gateways/FiltersGraphQLGateway.js.map +1 -1
- package/components/AdvancedSearch/gateways/filters.gql.js +9 -8
- package/components/AdvancedSearch/gateways/filters.gql.js.map +1 -1
- package/components/AdvancedSearch/gateways/filters.types.js +0 -3
- package/components/AdvancedSearch/gateways/index.js +0 -2
- package/components/AdvancedSearch/index.js +22 -24
- package/components/AdvancedSearch/index.js.map +1 -1
- package/components/AdvancedSearch/useFilterRepository.js +4 -3
- package/components/AdvancedSearch/useFilterRepository.js.map +1 -1
- package/components/AdvancedSearch/useInputField.js +4 -6
- package/components/AdvancedSearch/useInputField.js.map +1 -1
- package/components/Extensions/Extensions.js +23 -26
- package/components/Extensions/Extensions.js.map +1 -1
- package/components/Extensions/index.js +0 -2
- package/components/FolderGrid/FolderGridItem.js +67 -62
- package/components/FolderGrid/FolderGridItem.js.map +1 -1
- package/components/FolderGrid/index.js +0 -2
- package/components/FolderIcons/assets/folder-shared-icon.js +25 -0
- package/components/FolderIcons/assets/folder-shared-icon.js.map +1 -0
- package/components/FolderIcons/assets/folder.js +21 -0
- package/components/FolderIcons/assets/folder.js.map +1 -0
- package/components/FolderIcons/index.js +2 -5
- package/components/FolderPicker/FolderPicker.js +23 -20
- package/components/FolderPicker/FolderPicker.js.map +1 -1
- package/components/FolderTree/ButtonCreate/ButtonCreate.d.ts +1 -0
- package/components/FolderTree/ButtonCreate/ButtonCreate.js +17 -14
- package/components/FolderTree/ButtonCreate/ButtonCreate.js.map +1 -1
- package/components/FolderTree/ButtonCreate/index.js +0 -2
- package/components/FolderTree/Empty/Empty.js +5 -6
- package/components/FolderTree/Empty/Empty.js.map +1 -1
- package/components/FolderTree/Empty/index.js +0 -2
- package/components/FolderTree/List/List.js +120 -135
- package/components/FolderTree/List/List.js.map +1 -1
- package/components/FolderTree/List/index.js +0 -2
- package/components/FolderTree/List/utils.js +31 -64
- package/components/FolderTree/List/utils.js.map +1 -1
- package/components/FolderTree/Loader/Loader.js +15 -18
- package/components/FolderTree/Loader/Loader.js.map +1 -1
- package/components/FolderTree/Loader/index.js +0 -2
- package/components/FolderTree/MenuActions/MenuActions.js +19 -27
- package/components/FolderTree/MenuActions/MenuActions.js.map +1 -1
- package/components/FolderTree/MenuActions/index.js +0 -2
- package/components/FolderTree/Node/Node.js +27 -47
- package/components/FolderTree/Node/Node.js.map +1 -1
- package/components/FolderTree/Node/index.js +0 -2
- package/components/FolderTree/NodePreview/NodePreview.js +11 -14
- package/components/FolderTree/NodePreview/NodePreview.js.map +1 -1
- package/components/FolderTree/NodePreview/index.js +0 -2
- package/components/FolderTree/index.d.ts +2 -1
- package/components/FolderTree/index.js +47 -57
- package/components/FolderTree/index.js.map +1 -1
- package/components/Search/Search.js +15 -20
- package/components/Search/Search.js.map +1 -1
- package/components/Search/index.js +0 -2
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js +19 -20
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityDecorator.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js +17 -18
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js +113 -130
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityPresenter.test.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js +26 -25
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepository.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js +12 -11
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityRepositoryFactory.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js +11 -12
- package/components/Table/components/Table/ColumnVisibility/ColumnsVisibilityUpdater.js.map +1 -1
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.js +0 -3
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.js +0 -3
- package/components/Table/components/Table/ColumnVisibility/index.js +0 -2
- package/components/Table/components/Table/Columns/Column.js +18 -17
- package/components/Table/components/Table/Columns/Column.js.map +1 -1
- package/components/Table/components/Table/Columns/ColumnMapper.js +31 -31
- package/components/Table/components/Table/Columns/ColumnMapper.js.map +1 -1
- package/components/Table/components/Table/Columns/ColumnsPresenter.js +14 -13
- package/components/Table/components/Table/Columns/ColumnsPresenter.js.map +1 -1
- package/components/Table/components/Table/Columns/ColumnsPresenter.test.js +66 -60
- package/components/Table/components/Table/Columns/ColumnsPresenter.test.js.map +1 -1
- package/components/Table/components/Table/Columns/ColumnsRepository.js +15 -14
- package/components/Table/components/Table/Columns/ColumnsRepository.js.map +1 -1
- package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js +15 -11
- package/components/Table/components/Table/Columns/ColumnsRepositoryFactory.js.map +1 -1
- package/components/Table/components/Table/Columns/IColumnsRepository.js +0 -3
- package/components/Table/components/Table/Columns/index.js +0 -2
- package/components/Table/components/Table/Table.js +38 -32
- package/components/Table/components/Table/Table.js.map +1 -1
- package/components/Table/components/Table/TableInner.js +33 -40
- package/components/Table/components/Table/TableInner.js.map +1 -1
- package/components/Table/components/Table/TablePresenter.js +12 -9
- package/components/Table/components/Table/TablePresenter.js.map +1 -1
- package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js +12 -11
- package/components/Table/components/Table/gateways/ColumnsVisibilityLocalStorageGateway.js.map +1 -1
- package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.js +0 -3
- package/components/Table/components/Table/gateways/index.js +0 -2
- package/components/Table/components/Table/index.js +0 -2
- package/components/Table/components/index.js +0 -2
- package/components/Table/createTableData.js +13 -16
- package/components/Table/createTableData.js.map +1 -1
- package/components/Table/index.js +0 -2
- package/components/Table/useTableRow.js +17 -29
- package/components/Table/useTableRow.js.map +1 -1
- package/components/index.js +0 -2
- package/config/AcoConfig.js +43 -30
- package/config/AcoConfig.js.map +1 -1
- package/config/advanced-search/FieldRenderer.js +27 -30
- package/config/advanced-search/FieldRenderer.js.map +1 -1
- package/config/advanced-search/index.js +3 -2
- package/config/advanced-search/index.js.map +1 -1
- package/config/folder/Action.js +27 -32
- package/config/folder/Action.js.map +1 -1
- package/config/folder/DropConfirmation.js +12 -13
- package/config/folder/DropConfirmation.js.map +1 -1
- package/config/folder/createFolderFieldDecoratorFactory.js +14 -18
- package/config/folder/createFolderFieldDecoratorFactory.js.map +1 -1
- package/config/folder/index.js +4 -3
- package/config/folder/index.js.map +1 -1
- package/config/index.js +0 -2
- package/config/record/Action.js +28 -33
- package/config/record/Action.js.map +1 -1
- package/config/record/index.js +3 -2
- package/config/record/index.js.map +1 -1
- package/config/table/Column.js +65 -81
- package/config/table/Column.js.map +1 -1
- package/config/table/Sorting.js +24 -27
- package/config/table/Sorting.js.map +1 -1
- package/config/table/index.js +4 -3
- package/config/table/index.js.map +1 -1
- package/constants.js +0 -2
- package/contexts/acoList.js +283 -384
- package/contexts/acoList.js.map +1 -1
- package/contexts/app.js +40 -53
- package/contexts/app.js.map +1 -1
- package/contexts/folder.js +11 -15
- package/contexts/folder.js.map +1 -1
- package/contexts/folders.js +27 -32
- package/contexts/folders.js.map +1 -1
- package/contexts/index.js +0 -2
- package/contexts/navigateFolder.js +49 -57
- package/contexts/navigateFolder.js.map +1 -1
- package/contexts/records.js +299 -422
- package/contexts/records.js.map +1 -1
- package/dialogs/DialogSetPermissions/UsersTeamsMultiAutocomplete.js +22 -29
- package/dialogs/DialogSetPermissions/UsersTeamsMultiAutocomplete.js.map +1 -1
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemGraphic.js +18 -21
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemGraphic.js.map +1 -1
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemMeta.js +105 -107
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemMeta.js.map +1 -1
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemText.js +11 -16
- package/dialogs/DialogSetPermissions/UsersTeamsSelection/ListItemText.js.map +1 -1
- package/dialogs/DialogSetPermissions/UsersTeamsSelection.js +29 -34
- package/dialogs/DialogSetPermissions/UsersTeamsSelection.js.map +1 -1
- package/dialogs/DialogSetPermissions/graphql.js +3 -2
- package/dialogs/DialogSetPermissions/graphql.js.map +1 -1
- package/dialogs/ParentFolderField.js +12 -13
- package/dialogs/ParentFolderField.js.map +1 -1
- package/dialogs/index.js +0 -2
- package/dialogs/useConfirmMoveFolderDialog.js +16 -19
- package/dialogs/useConfirmMoveFolderDialog.js.map +1 -1
- package/dialogs/useCreateDialog.js +78 -93
- package/dialogs/useCreateDialog.js.map +1 -1
- package/dialogs/useDeleteDialog.js +27 -33
- package/dialogs/useDeleteDialog.js.map +1 -1
- package/dialogs/useEditDialog.js +77 -80
- package/dialogs/useEditDialog.js.map +1 -1
- package/dialogs/useMoveToFolderDialog.d.ts +1 -1
- package/dialogs/useMoveToFolderDialog.js +33 -49
- package/dialogs/useMoveToFolderDialog.js.map +1 -1
- package/dialogs/useSetPermissionsDialog.js +85 -87
- package/dialogs/useSetPermissionsDialog.js.map +1 -1
- package/domain/folder/Folder.js +25 -24
- package/domain/folder/Folder.js.map +1 -1
- package/domain/folder/FolderDto.js +0 -3
- package/domain/folder/FolderDtoMapper.js +24 -25
- package/domain/folder/FolderDtoMapper.js.map +1 -1
- package/domain/folder/FolderIdentity.js +16 -17
- package/domain/folder/FolderIdentity.js.map +1 -1
- package/domain/folder/RootFolder.js +24 -23
- package/domain/folder/RootFolder.js.map +1 -1
- package/exports/admin/aco.js +0 -2
- package/exports/admin/ui.js +0 -2
- package/features/folders/abstractions.js +6 -5
- package/features/folders/abstractions.js.map +1 -1
- package/features/folders/cache/FoldersCacheFactory.js +13 -12
- package/features/folders/cache/FoldersCacheFactory.js.map +1 -1
- package/features/folders/cache/ListCache.d.ts +2 -29
- package/features/folders/cache/ListCache.js +1 -43
- package/features/folders/cache/LoadedCache.js +33 -27
- package/features/folders/cache/LoadedCache.js.map +1 -1
- package/features/folders/cache/LoadedFoldersCacheFactory.js +13 -12
- package/features/folders/cache/LoadedFoldersCacheFactory.js.map +1 -1
- package/features/folders/cache/index.js +0 -2
- package/features/folders/createFolder/CreateFolder.test.js +44 -48
- package/features/folders/createFolder/CreateFolder.test.js.map +1 -1
- package/features/folders/createFolder/CreateFolderGqlGateway.js +27 -32
- package/features/folders/createFolder/CreateFolderGqlGateway.js.map +1 -1
- package/features/folders/createFolder/CreateFolderRepository.js +29 -24
- package/features/folders/createFolder/CreateFolderRepository.js.map +1 -1
- package/features/folders/createFolder/CreateFolderUseCase.js +20 -17
- package/features/folders/createFolder/CreateFolderUseCase.js.map +1 -1
- package/features/folders/createFolder/abstractions.js +4 -12
- package/features/folders/createFolder/abstractions.js.map +1 -1
- package/features/folders/createFolder/feature.js +15 -14
- package/features/folders/createFolder/feature.js.map +1 -1
- package/features/folders/createFolder/index.js +0 -2
- package/features/folders/createFolder/useCreateFolder.js +6 -9
- package/features/folders/createFolder/useCreateFolder.js.map +1 -1
- package/features/folders/deleteFolder/DeleteFolder.test.js +38 -39
- package/features/folders/deleteFolder/DeleteFolder.test.js.map +1 -1
- package/features/folders/deleteFolder/DeleteFolderGqlGateway.js +21 -28
- package/features/folders/deleteFolder/DeleteFolderGqlGateway.js.map +1 -1
- package/features/folders/deleteFolder/DeleteFolderRepository.js +16 -13
- package/features/folders/deleteFolder/DeleteFolderRepository.js.map +1 -1
- package/features/folders/deleteFolder/DeleteFolderUseCase.js +13 -10
- package/features/folders/deleteFolder/DeleteFolderUseCase.js.map +1 -1
- package/features/folders/deleteFolder/abstractions.js +4 -12
- package/features/folders/deleteFolder/abstractions.js.map +1 -1
- package/features/folders/deleteFolder/feature.js +15 -14
- package/features/folders/deleteFolder/feature.js.map +1 -1
- package/features/folders/deleteFolder/index.js +0 -2
- package/features/folders/deleteFolder/useDeleteFolder.js +6 -9
- package/features/folders/deleteFolder/useDeleteFolder.js.map +1 -1
- package/features/folders/feature.js +23 -29
- package/features/folders/feature.js.map +1 -1
- package/features/folders/folderModelProvider/FolderModelContext.js +17 -24
- package/features/folders/folderModelProvider/FolderModelContext.js.map +1 -1
- package/features/folders/folderModelProvider/FolderModelDto.js +0 -3
- package/features/folders/folderModelProvider/FolderModelProvider.js +23 -23
- package/features/folders/folderModelProvider/FolderModelProvider.js.map +1 -1
- package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js +20 -26
- package/features/folders/folderModelProvider/GetFolderModelGqlGateway.js.map +1 -1
- package/features/folders/folderModelProvider/GetFolderModelRepository.js +25 -22
- package/features/folders/folderModelProvider/GetFolderModelRepository.js.map +1 -1
- package/features/folders/folderModelProvider/abstractions.js +3 -2
- package/features/folders/folderModelProvider/abstractions.js.map +1 -1
- package/features/folders/folderModelProvider/feature.js +15 -14
- package/features/folders/folderModelProvider/feature.js.map +1 -1
- package/features/folders/folderModelProvider/index.js +0 -2
- package/features/folders/getDescendantFolders/GetDescendantFolders.test.js +116 -110
- package/features/folders/getDescendantFolders/GetDescendantFolders.test.js.map +1 -1
- package/features/folders/getDescendantFolders/GetDescendantFoldersRepository.js +35 -35
- package/features/folders/getDescendantFolders/GetDescendantFoldersRepository.js.map +1 -1
- package/features/folders/getDescendantFolders/GetDescendantFoldersUseCase.js +13 -10
- package/features/folders/getDescendantFolders/GetDescendantFoldersUseCase.js.map +1 -1
- package/features/folders/getDescendantFolders/abstractions.js +3 -10
- package/features/folders/getDescendantFolders/abstractions.js.map +1 -1
- package/features/folders/getDescendantFolders/feature.js +14 -13
- package/features/folders/getDescendantFolders/feature.js.map +1 -1
- package/features/folders/getDescendantFolders/index.js +0 -2
- package/features/folders/getDescendantFolders/useGetDescendantFolders.js +6 -9
- package/features/folders/getDescendantFolders/useGetDescendantFolders.js.map +1 -1
- package/features/folders/getFolder/GetFolderGqlGateway.js +26 -31
- package/features/folders/getFolder/GetFolderGqlGateway.js.map +1 -1
- package/features/folders/getFolder/GetFolderRepository.js +18 -13
- package/features/folders/getFolder/GetFolderRepository.js.map +1 -1
- package/features/folders/getFolder/GetFolderUseCase.js +13 -10
- package/features/folders/getFolder/GetFolderUseCase.js.map +1 -1
- package/features/folders/getFolder/abstractions.js +4 -12
- package/features/folders/getFolder/abstractions.js.map +1 -1
- package/features/folders/getFolder/feature.js +15 -14
- package/features/folders/getFolder/feature.js.map +1 -1
- package/features/folders/getFolder/index.js +0 -2
- package/features/folders/getFolder/useGetFolder.js +6 -9
- package/features/folders/getFolder/useGetFolder.js.map +1 -1
- package/features/folders/getFolderAncestors/GetFolderAncestors.test.js +108 -103
- package/features/folders/getFolderAncestors/GetFolderAncestors.test.js.map +1 -1
- package/features/folders/getFolderAncestors/GetFolderAncestorsRepository.js +32 -30
- package/features/folders/getFolderAncestors/GetFolderAncestorsRepository.js.map +1 -1
- package/features/folders/getFolderAncestors/GetFolderAncestorsUseCase.js +13 -10
- package/features/folders/getFolderAncestors/GetFolderAncestorsUseCase.js.map +1 -1
- package/features/folders/getFolderAncestors/abstractions.js +3 -10
- package/features/folders/getFolderAncestors/abstractions.js.map +1 -1
- package/features/folders/getFolderAncestors/feature.js +14 -13
- package/features/folders/getFolderAncestors/feature.js.map +1 -1
- package/features/folders/getFolderAncestors/index.js +0 -2
- package/features/folders/getFolderAncestors/useGetFolderAncestors.js +6 -9
- package/features/folders/getFolderAncestors/useGetFolderAncestors.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFields.test.js +190 -160
- package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFields.test.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFieldsUseCase.js +30 -29
- package/features/folders/getFolderExtensionsFields/GetFolderExtensionsFieldsUseCase.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/abstractions.js +3 -8
- package/features/folders/getFolderExtensionsFields/abstractions.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/feature.js +16 -18
- package/features/folders/getFolderExtensionsFields/feature.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/filters/CmsNamespaceFilter.js +16 -17
- package/features/folders/getFolderExtensionsFields/filters/CmsNamespaceFilter.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/filters/FmFileNamespaceFilter.js +13 -16
- package/features/folders/getFolderExtensionsFields/filters/FmFileNamespaceFilter.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/filters/GlobalNamespaceFilter.js +7 -8
- package/features/folders/getFolderExtensionsFields/filters/GlobalNamespaceFilter.js.map +1 -1
- package/features/folders/getFolderExtensionsFields/index.js +0 -2
- package/features/folders/getFolderExtensionsFields/useFolderExtensionsFields.js +13 -14
- package/features/folders/getFolderExtensionsFields/useFolderExtensionsFields.js.map +1 -1
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js +135 -164
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermission.test.js.map +1 -1
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermissionUseCase.js +8 -7
- package/features/folders/getFolderLevelPermission/GetFolderLevelPermissionUseCase.js.map +1 -1
- package/features/folders/getFolderLevelPermission/abstractions.js +2 -1
- package/features/folders/getFolderLevelPermission/abstractions.js.map +1 -1
- package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js +17 -20
- package/features/folders/getFolderLevelPermission/decorators/GetFolderLevelPermissionWithFlpDecorator.js.map +1 -1
- package/features/folders/getFolderLevelPermission/feature.js +14 -16
- package/features/folders/getFolderLevelPermission/feature.js.map +1 -1
- package/features/folders/getFolderLevelPermission/index.js +0 -2
- package/features/folders/getFolderLevelPermission/useGetFolderLevelPermission.js +9 -10
- package/features/folders/getFolderLevelPermission/useGetFolderLevelPermission.js.map +1 -1
- package/features/folders/listFolders/ListFolders.test.js +98 -111
- package/features/folders/listFolders/ListFolders.test.js.map +1 -1
- package/features/folders/listFolders/ListFoldersGqlGateway.js +29 -27
- package/features/folders/listFolders/ListFoldersGqlGateway.js.map +1 -1
- package/features/folders/listFolders/ListFoldersRepository.js +19 -14
- package/features/folders/listFolders/ListFoldersRepository.js.map +1 -1
- package/features/folders/listFolders/ListFoldersUseCase.js +13 -10
- package/features/folders/listFolders/ListFoldersUseCase.js.map +1 -1
- package/features/folders/listFolders/ListFoldersUseCaseWithLoading.js +14 -11
- package/features/folders/listFolders/ListFoldersUseCaseWithLoading.js.map +1 -1
- package/features/folders/listFolders/abstractions.js +4 -3
- package/features/folders/listFolders/abstractions.js.map +1 -1
- package/features/folders/listFolders/feature.js +17 -23
- package/features/folders/listFolders/feature.js.map +1 -1
- package/features/folders/listFolders/index.js +0 -2
- package/features/folders/listFolders/useListFolders.js +35 -37
- package/features/folders/listFolders/useListFolders.js.map +1 -1
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIds.test.js +218 -203
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIds.test.js.map +1 -1
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js +31 -33
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsGqlGateway.js.map +1 -1
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsRepository.js +18 -13
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsRepository.js.map +1 -1
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsUseCase.js +18 -15
- package/features/folders/listFoldersByParentIds/ListFoldersByParentIdsUseCase.js.map +1 -1
- package/features/folders/listFoldersByParentIds/abstractions.js +4 -3
- package/features/folders/listFoldersByParentIds/abstractions.js.map +1 -1
- package/features/folders/listFoldersByParentIds/decorators/RepositoryWithLoadedCache.js +20 -22
- package/features/folders/listFoldersByParentIds/decorators/RepositoryWithLoadedCache.js.map +1 -1
- package/features/folders/listFoldersByParentIds/decorators/UseCaseWithLoading.js +17 -18
- package/features/folders/listFoldersByParentIds/decorators/UseCaseWithLoading.js.map +1 -1
- package/features/folders/listFoldersByParentIds/feature.js +18 -26
- package/features/folders/listFoldersByParentIds/feature.js.map +1 -1
- package/features/folders/listFoldersByParentIds/index.js +0 -2
- package/features/folders/listFoldersByParentIds/useListFoldersByParentIds.js +40 -42
- package/features/folders/listFoldersByParentIds/useListFoldersByParentIds.js.map +1 -1
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchy.test.js +134 -136
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchy.test.js.map +1 -1
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyGqlGateway.js +31 -31
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyGqlGateway.js.map +1 -1
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyRepository.js +35 -40
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyRepository.js.map +1 -1
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyUseCase.js +13 -10
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyUseCase.js.map +1 -1
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyUseCaseWithLoading.js +14 -11
- package/features/folders/loadFolderHierarchy/LoadFolderHierarchyUseCaseWithLoading.js.map +1 -1
- package/features/folders/loadFolderHierarchy/abstractions.js +4 -3
- package/features/folders/loadFolderHierarchy/abstractions.js.map +1 -1
- package/features/folders/loadFolderHierarchy/feature.js +17 -23
- package/features/folders/loadFolderHierarchy/feature.js.map +1 -1
- package/features/folders/loadFolderHierarchy/index.js +0 -2
- package/features/folders/loadFolderHierarchy/useLoadFolderHierarchy.js +37 -42
- package/features/folders/loadFolderHierarchy/useLoadFolderHierarchy.js.map +1 -1
- package/features/folders/updateFolder/UpdateFolder.test.js +372 -384
- package/features/folders/updateFolder/UpdateFolder.test.js.map +1 -1
- package/features/folders/updateFolder/UpdateFolderGqlGateway.js +33 -45
- package/features/folders/updateFolder/UpdateFolderGqlGateway.js.map +1 -1
- package/features/folders/updateFolder/UpdateFolderRepository.js +26 -24
- package/features/folders/updateFolder/UpdateFolderRepository.js.map +1 -1
- package/features/folders/updateFolder/UpdateFolderUseCase.js +13 -10
- package/features/folders/updateFolder/UpdateFolderUseCase.js.map +1 -1
- package/features/folders/updateFolder/abstractions.js +4 -3
- package/features/folders/updateFolder/abstractions.js.map +1 -1
- package/features/folders/updateFolder/decorators/RepositoryWithPathChange.js +43 -64
- package/features/folders/updateFolder/decorators/RepositoryWithPathChange.js.map +1 -1
- package/features/folders/updateFolder/decorators/RepositoryWithPermissionsChange.js +44 -56
- package/features/folders/updateFolder/decorators/RepositoryWithPermissionsChange.js.map +1 -1
- package/features/folders/updateFolder/decorators/UseCaseWithLoading.js +14 -11
- package/features/folders/updateFolder/decorators/UseCaseWithLoading.js.map +1 -1
- package/features/folders/updateFolder/decorators/UseCaseWithoutInheritedPermissions.js +15 -15
- package/features/folders/updateFolder/decorators/UseCaseWithoutInheritedPermissions.js.map +1 -1
- package/features/folders/updateFolder/feature.js +20 -28
- package/features/folders/updateFolder/feature.js.map +1 -1
- package/features/folders/updateFolder/index.js +0 -2
- package/features/folders/updateFolder/useUpdateFolder.js +17 -19
- package/features/folders/updateFolder/useUpdateFolder.js.map +1 -1
- package/graphql/app.gql.js +3 -4
- package/graphql/app.gql.js.map +1 -1
- package/graphql/records/common.js +41 -39
- package/graphql/records/common.js.map +1 -1
- package/graphql/records/getRecord.js +2 -3
- package/graphql/records/getRecord.js.map +1 -1
- package/graphql/records/listRecords.js +22 -13
- package/graphql/records/listRecords.js.map +1 -1
- package/graphql/records/moveRecord.js +5 -6
- package/graphql/records/moveRecord.js.map +1 -1
- package/graphql/records/types.js +0 -3
- package/graphql/records.gql.js +0 -2
- package/handlers.js +17 -40
- package/handlers.js.map +1 -1
- package/hooks/index.js +0 -2
- package/hooks/useAcoApp.js +11 -12
- package/hooks/useAcoApp.js.map +1 -1
- package/hooks/useAcoList.js +5 -6
- package/hooks/useAcoList.js.map +1 -1
- package/hooks/useFolder.js +6 -7
- package/hooks/useFolder.js.map +1 -1
- package/hooks/useFolderModel.js +11 -13
- package/hooks/useFolderModel.js.map +1 -1
- package/hooks/useFoldersType.js +7 -12
- package/hooks/useFoldersType.js.map +1 -1
- package/hooks/useNavigateFolder.js +5 -6
- package/hooks/useNavigateFolder.js.map +1 -1
- package/hooks/useRecords.js +56 -77
- package/hooks/useRecords.js.map +1 -1
- package/hooks/useTags.js +21 -30
- package/hooks/useTags.js.map +1 -1
- package/index.d.ts +1 -0
- package/index.js +3 -8
- package/package.json +22 -22
- package/presentation/folderTree/FolderTree.d.ts +19 -0
- package/presentation/folderTree/FolderTree.js +252 -0
- package/presentation/folderTree/FolderTree.js.map +1 -0
- package/presentation/folderTree/FolderTreeFieldRenderer.d.ts +13 -0
- package/presentation/folderTree/FolderTreeFieldRenderer.js +23 -0
- package/presentation/folderTree/FolderTreeFieldRenderer.js.map +1 -0
- package/presentation/folderTree/FolderTreePresenter.d.ts +51 -0
- package/presentation/folderTree/FolderTreePresenter.js +303 -0
- package/presentation/folderTree/FolderTreePresenter.js.map +1 -0
- package/presentation/folderTree/FolderTreePresenter.test.d.ts +1 -0
- package/presentation/folderTree/FolderTreePresenter.test.js +517 -0
- package/presentation/folderTree/FolderTreePresenter.test.js.map +1 -0
- package/presentation/folderTree/abstractions.d.ts +65 -0
- package/presentation/folderTree/abstractions.js +5 -0
- package/presentation/folderTree/abstractions.js.map +1 -0
- package/presentation/folderTree/feature.d.ts +3 -0
- package/presentation/folderTree/feature.js +17 -0
- package/presentation/folderTree/feature.js.map +1 -0
- package/presentation/folderTree/index.d.ts +5 -0
- package/presentation/folderTree/index.js +3 -0
- package/sorting.js +25 -28
- package/sorting.js.map +1 -1
- package/static/svg/folder-shared-icon.5d947e49.svg +5 -0
- package/static/svg/folder.f3d5c400.svg +4 -0
- package/table.types.js +0 -3
- package/types.js +10 -13
- package/types.js.map +1 -1
- package/components/Actions/DeleteFolder/index.js.map +0 -1
- package/components/Actions/EditFolder/index.js.map +0 -1
- package/components/Actions/SetFolderPemissions/index.js.map +0 -1
- package/components/Actions/index.js.map +0 -1
- package/components/AdvancedSearch/Button/index.js.map +0 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/controls/index.js.map +0 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/components/index.js.map +0 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/QueryBuilder/index.js.map +0 -1
- package/components/AdvancedSearch/QueryBuilderDrawer/index.js.map +0 -1
- package/components/AdvancedSearch/QueryManagerDialog/components/index.js.map +0 -1
- package/components/AdvancedSearch/QueryManagerDialog/index.js.map +0 -1
- package/components/AdvancedSearch/QuerySaverDialog/index.js.map +0 -1
- package/components/AdvancedSearch/SelectedFilter/index.js.map +0 -1
- package/components/AdvancedSearch/domain/index.js.map +0 -1
- package/components/AdvancedSearch/fields/index.js.map +0 -1
- package/components/AdvancedSearch/gateways/FiltersGatewayInterface.js.map +0 -1
- package/components/AdvancedSearch/gateways/filters.types.js.map +0 -1
- package/components/AdvancedSearch/gateways/index.js.map +0 -1
- package/components/Extensions/index.js.map +0 -1
- package/components/FolderGrid/index.js.map +0 -1
- package/components/FolderIcons/index.js.map +0 -1
- package/components/FolderTree/ButtonCreate/index.js.map +0 -1
- package/components/FolderTree/Empty/index.js.map +0 -1
- package/components/FolderTree/List/index.js.map +0 -1
- package/components/FolderTree/Loader/index.js.map +0 -1
- package/components/FolderTree/MenuActions/index.js.map +0 -1
- package/components/FolderTree/Node/index.js.map +0 -1
- package/components/FolderTree/NodePreview/index.js.map +0 -1
- package/components/Search/index.js.map +0 -1
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityRepository.js.map +0 -1
- package/components/Table/components/Table/ColumnVisibility/IColumnsVisibilityUpdater.js.map +0 -1
- package/components/Table/components/Table/ColumnVisibility/index.js.map +0 -1
- package/components/Table/components/Table/Columns/IColumnsRepository.js.map +0 -1
- package/components/Table/components/Table/Columns/index.js.map +0 -1
- package/components/Table/components/Table/gateways/IColumnsVisibilityGateway.js.map +0 -1
- package/components/Table/components/Table/gateways/index.js.map +0 -1
- package/components/Table/components/Table/index.js.map +0 -1
- package/components/Table/components/index.js.map +0 -1
- package/components/Table/index.js.map +0 -1
- package/components/index.js.map +0 -1
- package/config/index.js.map +0 -1
- package/constants.js.map +0 -1
- package/contexts/index.js.map +0 -1
- package/dialogs/index.js.map +0 -1
- package/domain/folder/FolderDto.js.map +0 -1
- package/exports/admin/aco.js.map +0 -1
- package/exports/admin/ui.js.map +0 -1
- package/features/folders/cache/ListCache.js.map +0 -1
- package/features/folders/cache/index.js.map +0 -1
- package/features/folders/createFolder/index.js.map +0 -1
- package/features/folders/deleteFolder/index.js.map +0 -1
- package/features/folders/folderModelProvider/FolderModelDto.js.map +0 -1
- package/features/folders/folderModelProvider/index.js.map +0 -1
- package/features/folders/getDescendantFolders/index.js.map +0 -1
- package/features/folders/getFolder/index.js.map +0 -1
- package/features/folders/getFolderAncestors/index.js.map +0 -1
- package/features/folders/getFolderExtensionsFields/index.js.map +0 -1
- package/features/folders/getFolderLevelPermission/index.js.map +0 -1
- package/features/folders/listFolders/index.js.map +0 -1
- package/features/folders/listFoldersByParentIds/index.js.map +0 -1
- package/features/folders/loadFolderHierarchy/index.js.map +0 -1
- package/features/folders/updateFolder/index.js.map +0 -1
- package/graphql/records/types.js.map +0 -1
- package/graphql/records.gql.js.map +0 -1
- package/hooks/index.js.map +0 -1
- package/index.js.map +0 -1
- package/table.types.js.map +0 -1
|
@@ -1,212 +1,227 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
2
|
import { Container } from "@webiny/di";
|
|
3
3
|
import { LoadingRepository } from "@webiny/app-utils";
|
|
4
4
|
import { ROOT_FOLDER } from "../../../constants.js";
|
|
5
|
-
import { ListCache } from "../cache/index.js";
|
|
6
|
-
import {
|
|
7
|
-
import { FoldersContext } from "../abstractions.js";
|
|
8
|
-
import { FoldersCache } from "../abstractions.js";
|
|
9
|
-
import { FoldersLoadingRepository } from "../abstractions.js";
|
|
5
|
+
import { ListCache, LoadedCache } from "../cache/index.js";
|
|
6
|
+
import { FoldersCache, FoldersContext, FoldersLoadingRepository, LoadedFoldersCache } from "../abstractions.js";
|
|
10
7
|
import { ListFoldersByParentIdsFeature } from "./feature.js";
|
|
11
|
-
import { ListFoldersByParentIdsGateway } from "./abstractions.js";
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
useCase: container.resolve(ListFoldersByParentIdsUseCase)
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
beforeEach(() => {
|
|
35
|
-
vi.resetAllMocks();
|
|
36
|
-
});
|
|
37
|
-
class ListFoldersByParentIdsMockGateway {
|
|
38
|
-
// Had to use `any` as the mock folders passed in the tests below are also partial objects.
|
|
39
|
-
constructor(mockResponse) {
|
|
40
|
-
this.mockResponse = mockResponse;
|
|
41
|
-
}
|
|
42
|
-
setMockResponse(mockResponse) {
|
|
43
|
-
this.mockResponse = mockResponse;
|
|
44
|
-
}
|
|
45
|
-
async execute() {
|
|
46
|
-
return this.mockResponse;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
it("should list folders from `ROOT` level if parentIds is `undefined`", async () => {
|
|
50
|
-
const gateway = new ListFoldersByParentIdsMockGateway([{
|
|
51
|
-
id: "folder-1",
|
|
52
|
-
title: "Folder 1",
|
|
53
|
-
slug: "folder-1",
|
|
54
|
-
parentId: null,
|
|
55
|
-
type
|
|
56
|
-
}, {
|
|
57
|
-
id: "folder-2",
|
|
58
|
-
title: "Folder 2",
|
|
59
|
-
slug: "folder-2",
|
|
60
|
-
parentId: null,
|
|
61
|
-
type
|
|
62
|
-
}, {
|
|
63
|
-
id: "folder-3",
|
|
64
|
-
title: "Folder 3",
|
|
65
|
-
slug: "folder-3",
|
|
66
|
-
parentId: null,
|
|
67
|
-
type
|
|
68
|
-
}]);
|
|
69
|
-
const spy = vi.spyOn(gateway, "execute");
|
|
70
|
-
const {
|
|
71
|
-
useCase,
|
|
72
|
-
foldersCache
|
|
73
|
-
} = setupTest(gateway);
|
|
74
|
-
expect(foldersCache.hasItems()).toBe(false);
|
|
75
|
-
await useCase.execute();
|
|
76
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
77
|
-
expect(spy).toHaveBeenCalledWith(type, [ROOT_FOLDER]);
|
|
78
|
-
expect(foldersCache.hasItems()).toBe(true);
|
|
79
|
-
expect(foldersCache.count()).toEqual(3);
|
|
80
|
-
|
|
81
|
-
// This call should be idempotent: the number of elements in cache should not change
|
|
82
|
-
await useCase.execute();
|
|
83
|
-
expect(foldersCache.count()).toEqual(3);
|
|
84
|
-
});
|
|
85
|
-
it("should list folders from the provided `parentIds`", async () => {
|
|
86
|
-
const gateway = new ListFoldersByParentIdsMockGateway([{
|
|
87
|
-
id: "folder-1",
|
|
88
|
-
title: "Folder 1",
|
|
89
|
-
slug: "folder-1",
|
|
90
|
-
parentId: "folder-0",
|
|
91
|
-
type
|
|
92
|
-
}, {
|
|
93
|
-
id: "folder-2",
|
|
94
|
-
title: "Folder 2",
|
|
95
|
-
slug: "folder-1",
|
|
96
|
-
parentId: "folder-0",
|
|
97
|
-
type
|
|
98
|
-
}, {
|
|
99
|
-
id: "folder-3",
|
|
100
|
-
title: "Folder 3",
|
|
101
|
-
slug: "folder-3",
|
|
102
|
-
parentId: "folder-0",
|
|
103
|
-
type
|
|
104
|
-
}]);
|
|
105
|
-
const spy = vi.spyOn(gateway, "execute");
|
|
106
|
-
const {
|
|
107
|
-
useCase,
|
|
108
|
-
foldersCache
|
|
109
|
-
} = setupTest(gateway);
|
|
110
|
-
expect(foldersCache.hasItems()).toBe(false);
|
|
111
|
-
await useCase.execute(["folder-0"]);
|
|
112
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
113
|
-
expect(spy).toHaveBeenCalledWith(type, ["folder-0"]);
|
|
114
|
-
expect(foldersCache.hasItems()).toBe(true);
|
|
115
|
-
expect(foldersCache.count()).toEqual(3);
|
|
116
|
-
|
|
117
|
-
// The number of folders in cache should increase, since we are changing the parentIds.
|
|
118
|
-
gateway.setMockResponse([{
|
|
119
|
-
id: "folder-4",
|
|
120
|
-
title: "Folder 4",
|
|
121
|
-
slug: "folder-4",
|
|
122
|
-
parentId: "folder-1",
|
|
123
|
-
type
|
|
124
|
-
}, {
|
|
125
|
-
id: "folder-5",
|
|
126
|
-
title: "Folder 5",
|
|
127
|
-
slug: "folder-5",
|
|
128
|
-
parentId: "folder-1",
|
|
129
|
-
type
|
|
130
|
-
}, {
|
|
131
|
-
id: "folder-6",
|
|
132
|
-
title: "Folder 6",
|
|
133
|
-
slug: "folder-6",
|
|
134
|
-
parentId: "folder-1",
|
|
135
|
-
type
|
|
136
|
-
}]);
|
|
137
|
-
await useCase.execute(["folder-1"]);
|
|
138
|
-
expect(foldersCache.count()).toEqual(6);
|
|
139
|
-
});
|
|
140
|
-
it("should list folders from missing `parentIds` stored in cache", async () => {
|
|
141
|
-
const gateway = new ListFoldersByParentIdsMockGateway([{
|
|
142
|
-
id: "folder-1",
|
|
143
|
-
title: "Folder 1",
|
|
144
|
-
slug: "folder-1",
|
|
145
|
-
parentId: "folder-0",
|
|
146
|
-
type
|
|
147
|
-
}, {
|
|
148
|
-
id: "folder-2",
|
|
149
|
-
title: "Folder 2",
|
|
150
|
-
slug: "folder-2",
|
|
151
|
-
parentId: "folder-1",
|
|
152
|
-
type
|
|
153
|
-
}]);
|
|
154
|
-
const spy = vi.spyOn(gateway, "execute");
|
|
155
|
-
const {
|
|
156
|
-
useCase
|
|
157
|
-
} = setupTest(gateway);
|
|
158
|
-
|
|
159
|
-
// Execute the useCase 3 times and check the gateway is invoked only when needed
|
|
160
|
-
await useCase.execute(["folder-0", "folder-1"]);
|
|
161
|
-
gateway.setMockResponse([{
|
|
162
|
-
id: "folder-3",
|
|
163
|
-
title: "Folder 3",
|
|
164
|
-
slug: "folder-3",
|
|
165
|
-
parentId: "folder-2",
|
|
166
|
-
type
|
|
167
|
-
}]);
|
|
168
|
-
await useCase.execute(["folder-0", "folder-1", "folder-2"]);
|
|
169
|
-
await useCase.execute(["folder-0", "folder-1", "folder-2"]);
|
|
170
|
-
expect(spy).toHaveBeenNthCalledWith(1, type, ["folder-0", "folder-1"]);
|
|
171
|
-
expect(spy).toHaveBeenNthCalledWith(2, type, ["folder-2"]);
|
|
172
|
-
expect(gateway.execute).not.toHaveBeenCalledTimes(3);
|
|
173
|
-
});
|
|
174
|
-
it("should return empty array if no folders are found", async () => {
|
|
175
|
-
class ListFoldersByParentIdsEmptyMockGateway {
|
|
176
|
-
async execute() {
|
|
177
|
-
return [];
|
|
178
|
-
}
|
|
8
|
+
import { ListFoldersByParentIdsGateway, ListFoldersByParentIdsUseCase } from "./abstractions.js";
|
|
9
|
+
describe("ListFoldersByParentIds", ()=>{
|
|
10
|
+
const type = "abc";
|
|
11
|
+
function setupTest(gateway) {
|
|
12
|
+
const container = new Container();
|
|
13
|
+
const foldersCache = new ListCache();
|
|
14
|
+
const loadedFoldersCache = new LoadedCache();
|
|
15
|
+
container.registerInstance(FoldersContext, {
|
|
16
|
+
type
|
|
17
|
+
});
|
|
18
|
+
container.registerInstance(FoldersCache, foldersCache);
|
|
19
|
+
container.registerInstance(LoadedFoldersCache, loadedFoldersCache);
|
|
20
|
+
container.registerInstance(FoldersLoadingRepository, new LoadingRepository());
|
|
21
|
+
ListFoldersByParentIdsFeature.register(container);
|
|
22
|
+
container.registerInstance(ListFoldersByParentIdsGateway, gateway);
|
|
23
|
+
return {
|
|
24
|
+
container,
|
|
25
|
+
foldersCache,
|
|
26
|
+
useCase: container.resolve(ListFoldersByParentIdsUseCase)
|
|
27
|
+
};
|
|
179
28
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
it("should handle gateway errors gracefully", async () => {
|
|
194
|
-
class ListFoldersByParentIdsErrorMockGateway {
|
|
195
|
-
async execute() {
|
|
196
|
-
throw new Error("Gateway error");
|
|
197
|
-
}
|
|
29
|
+
beforeEach(()=>{
|
|
30
|
+
vi.resetAllMocks();
|
|
31
|
+
});
|
|
32
|
+
class ListFoldersByParentIdsMockGateway {
|
|
33
|
+
constructor(mockResponse){
|
|
34
|
+
this.mockResponse = mockResponse;
|
|
35
|
+
}
|
|
36
|
+
setMockResponse(mockResponse) {
|
|
37
|
+
this.mockResponse = mockResponse;
|
|
38
|
+
}
|
|
39
|
+
async execute() {
|
|
40
|
+
return this.mockResponse;
|
|
41
|
+
}
|
|
198
42
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
43
|
+
it("should list folders from `ROOT` level if parentIds is `undefined`", async ()=>{
|
|
44
|
+
const gateway = new ListFoldersByParentIdsMockGateway([
|
|
45
|
+
{
|
|
46
|
+
id: "folder-1",
|
|
47
|
+
title: "Folder 1",
|
|
48
|
+
slug: "folder-1",
|
|
49
|
+
parentId: null,
|
|
50
|
+
type
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: "folder-2",
|
|
54
|
+
title: "Folder 2",
|
|
55
|
+
slug: "folder-2",
|
|
56
|
+
parentId: null,
|
|
57
|
+
type
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
id: "folder-3",
|
|
61
|
+
title: "Folder 3",
|
|
62
|
+
slug: "folder-3",
|
|
63
|
+
parentId: null,
|
|
64
|
+
type
|
|
65
|
+
}
|
|
66
|
+
]);
|
|
67
|
+
const spy = vi.spyOn(gateway, "execute");
|
|
68
|
+
const { useCase, foldersCache } = setupTest(gateway);
|
|
69
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
70
|
+
await useCase.execute();
|
|
71
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
72
|
+
expect(spy).toHaveBeenCalledWith(type, [
|
|
73
|
+
ROOT_FOLDER
|
|
74
|
+
]);
|
|
75
|
+
expect(foldersCache.hasItems()).toBe(true);
|
|
76
|
+
expect(foldersCache.count()).toEqual(3);
|
|
77
|
+
await useCase.execute();
|
|
78
|
+
expect(foldersCache.count()).toEqual(3);
|
|
79
|
+
});
|
|
80
|
+
it("should list folders from the provided `parentIds`", async ()=>{
|
|
81
|
+
const gateway = new ListFoldersByParentIdsMockGateway([
|
|
82
|
+
{
|
|
83
|
+
id: "folder-1",
|
|
84
|
+
title: "Folder 1",
|
|
85
|
+
slug: "folder-1",
|
|
86
|
+
parentId: "folder-0",
|
|
87
|
+
type
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
id: "folder-2",
|
|
91
|
+
title: "Folder 2",
|
|
92
|
+
slug: "folder-1",
|
|
93
|
+
parentId: "folder-0",
|
|
94
|
+
type
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "folder-3",
|
|
98
|
+
title: "Folder 3",
|
|
99
|
+
slug: "folder-3",
|
|
100
|
+
parentId: "folder-0",
|
|
101
|
+
type
|
|
102
|
+
}
|
|
103
|
+
]);
|
|
104
|
+
const spy = vi.spyOn(gateway, "execute");
|
|
105
|
+
const { useCase, foldersCache } = setupTest(gateway);
|
|
106
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
107
|
+
await useCase.execute([
|
|
108
|
+
"folder-0"
|
|
109
|
+
]);
|
|
110
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
111
|
+
expect(spy).toHaveBeenCalledWith(type, [
|
|
112
|
+
"folder-0"
|
|
113
|
+
]);
|
|
114
|
+
expect(foldersCache.hasItems()).toBe(true);
|
|
115
|
+
expect(foldersCache.count()).toEqual(3);
|
|
116
|
+
gateway.setMockResponse([
|
|
117
|
+
{
|
|
118
|
+
id: "folder-4",
|
|
119
|
+
title: "Folder 4",
|
|
120
|
+
slug: "folder-4",
|
|
121
|
+
parentId: "folder-1",
|
|
122
|
+
type
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
id: "folder-5",
|
|
126
|
+
title: "Folder 5",
|
|
127
|
+
slug: "folder-5",
|
|
128
|
+
parentId: "folder-1",
|
|
129
|
+
type
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "folder-6",
|
|
133
|
+
title: "Folder 6",
|
|
134
|
+
slug: "folder-6",
|
|
135
|
+
parentId: "folder-1",
|
|
136
|
+
type
|
|
137
|
+
}
|
|
138
|
+
]);
|
|
139
|
+
await useCase.execute([
|
|
140
|
+
"folder-1"
|
|
141
|
+
]);
|
|
142
|
+
expect(foldersCache.count()).toEqual(6);
|
|
143
|
+
});
|
|
144
|
+
it("should list folders from missing `parentIds` stored in cache", async ()=>{
|
|
145
|
+
const gateway = new ListFoldersByParentIdsMockGateway([
|
|
146
|
+
{
|
|
147
|
+
id: "folder-1",
|
|
148
|
+
title: "Folder 1",
|
|
149
|
+
slug: "folder-1",
|
|
150
|
+
parentId: "folder-0",
|
|
151
|
+
type
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
id: "folder-2",
|
|
155
|
+
title: "Folder 2",
|
|
156
|
+
slug: "folder-2",
|
|
157
|
+
parentId: "folder-1",
|
|
158
|
+
type
|
|
159
|
+
}
|
|
160
|
+
]);
|
|
161
|
+
const spy = vi.spyOn(gateway, "execute");
|
|
162
|
+
const { useCase } = setupTest(gateway);
|
|
163
|
+
await useCase.execute([
|
|
164
|
+
"folder-0",
|
|
165
|
+
"folder-1"
|
|
166
|
+
]);
|
|
167
|
+
gateway.setMockResponse([
|
|
168
|
+
{
|
|
169
|
+
id: "folder-3",
|
|
170
|
+
title: "Folder 3",
|
|
171
|
+
slug: "folder-3",
|
|
172
|
+
parentId: "folder-2",
|
|
173
|
+
type
|
|
174
|
+
}
|
|
175
|
+
]);
|
|
176
|
+
await useCase.execute([
|
|
177
|
+
"folder-0",
|
|
178
|
+
"folder-1",
|
|
179
|
+
"folder-2"
|
|
180
|
+
]);
|
|
181
|
+
await useCase.execute([
|
|
182
|
+
"folder-0",
|
|
183
|
+
"folder-1",
|
|
184
|
+
"folder-2"
|
|
185
|
+
]);
|
|
186
|
+
expect(spy).toHaveBeenNthCalledWith(1, type, [
|
|
187
|
+
"folder-0",
|
|
188
|
+
"folder-1"
|
|
189
|
+
]);
|
|
190
|
+
expect(spy).toHaveBeenNthCalledWith(2, type, [
|
|
191
|
+
"folder-2"
|
|
192
|
+
]);
|
|
193
|
+
expect(gateway.execute).not.toHaveBeenCalledTimes(3);
|
|
194
|
+
});
|
|
195
|
+
it("should return empty array if no folders are found", async ()=>{
|
|
196
|
+
class ListFoldersByParentIdsEmptyMockGateway {
|
|
197
|
+
async execute() {
|
|
198
|
+
return [];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const gateway = new ListFoldersByParentIdsEmptyMockGateway();
|
|
202
|
+
const spy = vi.spyOn(gateway, "execute");
|
|
203
|
+
const { useCase, foldersCache } = setupTest(gateway);
|
|
204
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
205
|
+
await useCase.execute();
|
|
206
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
207
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
208
|
+
const items = foldersCache.getItems();
|
|
209
|
+
expect(items.length).toEqual(0);
|
|
210
|
+
});
|
|
211
|
+
it("should handle gateway errors gracefully", async ()=>{
|
|
212
|
+
class ListFoldersByParentIdsErrorMockGateway {
|
|
213
|
+
async execute() {
|
|
214
|
+
throw new Error("Gateway error");
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const errorGateway = new ListFoldersByParentIdsErrorMockGateway();
|
|
218
|
+
const spy = vi.spyOn(errorGateway, "execute");
|
|
219
|
+
const { useCase, foldersCache } = setupTest(errorGateway);
|
|
220
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
221
|
+
await expect(useCase.execute()).rejects.toThrow("Gateway error");
|
|
222
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
223
|
+
expect(foldersCache.hasItems()).toBe(false);
|
|
224
|
+
});
|
|
210
225
|
});
|
|
211
226
|
|
|
212
227
|
//# sourceMappingURL=ListFoldersByParentIds.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["describe","it","expect","beforeEach","vi","Container","LoadingRepository","ROOT_FOLDER","ListCache","LoadedCache","FoldersContext","FoldersCache","FoldersLoadingRepository","ListFoldersByParentIdsFeature","ListFoldersByParentIdsGateway","ListFoldersByParentIdsUseCase","LoadedFoldersCache","type","setupTest","gateway","container","foldersCache","loadedFoldersCache","registerInstance","register","useCase","resolve","resetAllMocks","ListFoldersByParentIdsMockGateway","constructor","mockResponse","setMockResponse","execute","id","title","slug","parentId","spy","spyOn","hasItems","toBe","toHaveBeenCalledTimes","toHaveBeenCalledWith","count","toEqual","toHaveBeenNthCalledWith","not","ListFoldersByParentIdsEmptyMockGateway","items","getItems","length","ListFoldersByParentIdsErrorMockGateway","Error","errorGateway","rejects","toThrow"],"sources":["ListFoldersByParentIds.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { LoadingRepository } from \"@webiny/app-utils\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport { ListCache } from \"~/features/folders/cache/index.js\";\nimport { LoadedCache } from \"~/features/folders/cache/index.js\";\nimport { Folder } from \"~/domain/folder/Folder.js\";\nimport { FoldersContext } from \"~/features/folders/abstractions.js\";\nimport { FoldersCache } from \"~/features/folders/abstractions.js\";\nimport { FoldersLoadingRepository } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersByParentIdsFeature } from \"./feature.js\";\nimport { ListFoldersByParentIdsGateway } from \"./abstractions.js\";\nimport { ListFoldersByParentIdsUseCase } from \"./abstractions.js\";\nimport { LoadedFoldersCache } from \"~/features/folders/abstractions.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\n\ndescribe(\"ListFoldersByParentIds\", () => {\n const type = \"abc\";\n\n function setupTest(gateway: ListFoldersByParentIdsGateway.Interface) {\n const container = new Container();\n const foldersCache = new ListCache<Folder>();\n const loadedFoldersCache = new LoadedCache();\n\n container.registerInstance(FoldersContext, { type });\n container.registerInstance(FoldersCache, foldersCache);\n container.registerInstance(LoadedFoldersCache, loadedFoldersCache);\n container.registerInstance(FoldersLoadingRepository, new LoadingRepository());\n\n ListFoldersByParentIdsFeature.register(container);\n container.registerInstance(ListFoldersByParentIdsGateway, gateway);\n\n return {\n container,\n foldersCache,\n useCase: container.resolve(ListFoldersByParentIdsUseCase)\n };\n }\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n class ListFoldersByParentIdsMockGateway implements ListFoldersByParentIdsGateway.Interface {\n mockResponse: FolderDto[];\n\n // Had to use `any` as the mock folders passed in the tests below are also partial objects.\n constructor(mockResponse: any) {\n this.mockResponse = mockResponse as FolderDto[];\n }\n\n setMockResponse(mockResponse: any) {\n this.mockResponse = mockResponse as FolderDto[];\n }\n\n async execute() {\n return this.mockResponse;\n }\n }\n\n it(\"should list folders from `ROOT` level if parentIds is `undefined`\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: null,\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-2\",\n parentId: null,\n type\n },\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: null,\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n await useCase.execute();\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(spy).toHaveBeenCalledWith(type, [ROOT_FOLDER]);\n\n expect(foldersCache.hasItems()).toBe(true);\n expect(foldersCache.count()).toEqual(3);\n\n // This call should be idempotent: the number of elements in cache should not change\n await useCase.execute();\n expect(foldersCache.count()).toEqual(3);\n });\n\n it(\"should list folders from the provided `parentIds`\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: \"folder-0\",\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n await useCase.execute([\"folder-0\"]);\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(spy).toHaveBeenCalledWith(type, [\"folder-0\"]);\n\n expect(foldersCache.hasItems()).toBe(true);\n expect(foldersCache.count()).toEqual(3);\n\n // The number of folders in cache should increase, since we are changing the parentIds.\n gateway.setMockResponse([\n {\n id: \"folder-4\",\n title: \"Folder 4\",\n slug: \"folder-4\",\n parentId: \"folder-1\",\n type\n },\n {\n id: \"folder-5\",\n title: \"Folder 5\",\n slug: \"folder-5\",\n parentId: \"folder-1\",\n type\n },\n {\n id: \"folder-6\",\n title: \"Folder 6\",\n slug: \"folder-6\",\n parentId: \"folder-1\",\n type\n }\n ]);\n\n await useCase.execute([\"folder-1\"]);\n expect(foldersCache.count()).toEqual(6);\n });\n\n it(\"should list folders from missing `parentIds` stored in cache\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-2\",\n parentId: \"folder-1\",\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase } = setupTest(gateway);\n\n // Execute the useCase 3 times and check the gateway is invoked only when needed\n await useCase.execute([\"folder-0\", \"folder-1\"]);\n\n gateway.setMockResponse([\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: \"folder-2\",\n type\n }\n ]);\n\n await useCase.execute([\"folder-0\", \"folder-1\", \"folder-2\"]);\n await useCase.execute([\"folder-0\", \"folder-1\", \"folder-2\"]);\n\n expect(spy).toHaveBeenNthCalledWith(1, type, [\"folder-0\", \"folder-1\"]);\n expect(spy).toHaveBeenNthCalledWith(2, type, [\"folder-2\"]);\n expect(gateway.execute).not.toHaveBeenCalledTimes(3);\n });\n\n it(\"should return empty array if no folders are found\", async () => {\n class ListFoldersByParentIdsEmptyMockGateway\n implements ListFoldersByParentIdsGateway.Interface\n {\n async execute() {\n return [];\n }\n }\n\n const gateway = new ListFoldersByParentIdsEmptyMockGateway();\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n\n await useCase.execute();\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(foldersCache.hasItems()).toBe(false);\n\n const items = foldersCache.getItems();\n expect(items.length).toEqual(0);\n });\n\n it(\"should handle gateway errors gracefully\", async () => {\n class ListFoldersByParentIdsErrorMockGateway\n implements ListFoldersByParentIdsGateway.Interface\n {\n async execute(): Promise<FolderDto[]> {\n throw new Error(\"Gateway error\");\n }\n }\n\n const errorGateway = new ListFoldersByParentIdsErrorMockGateway();\n const spy = vi.spyOn(errorGateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(errorGateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n\n await expect(useCase.execute()).rejects.toThrow(\"Gateway error\");\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(foldersCache.hasItems()).toBe(false);\n });\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"features/folders/listFoldersByParentIds/ListFoldersByParentIds.test.js","sources":["../../../../src/features/folders/listFoldersByParentIds/ListFoldersByParentIds.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { LoadingRepository } from \"@webiny/app-utils\";\nimport { ROOT_FOLDER } from \"~/constants.js\";\nimport { ListCache } from \"~/features/folders/cache/index.js\";\nimport { LoadedCache } from \"~/features/folders/cache/index.js\";\nimport { Folder } from \"~/domain/folder/Folder.js\";\nimport { FoldersContext } from \"~/features/folders/abstractions.js\";\nimport { FoldersCache } from \"~/features/folders/abstractions.js\";\nimport { FoldersLoadingRepository } from \"~/features/folders/abstractions.js\";\nimport { ListFoldersByParentIdsFeature } from \"./feature.js\";\nimport { ListFoldersByParentIdsGateway } from \"./abstractions.js\";\nimport { ListFoldersByParentIdsUseCase } from \"./abstractions.js\";\nimport { LoadedFoldersCache } from \"~/features/folders/abstractions.js\";\nimport type { FolderDto } from \"~/domain/folder/FolderDto.js\";\n\ndescribe(\"ListFoldersByParentIds\", () => {\n const type = \"abc\";\n\n function setupTest(gateway: ListFoldersByParentIdsGateway.Interface) {\n const container = new Container();\n const foldersCache = new ListCache<Folder>();\n const loadedFoldersCache = new LoadedCache();\n\n container.registerInstance(FoldersContext, { type });\n container.registerInstance(FoldersCache, foldersCache);\n container.registerInstance(LoadedFoldersCache, loadedFoldersCache);\n container.registerInstance(FoldersLoadingRepository, new LoadingRepository());\n\n ListFoldersByParentIdsFeature.register(container);\n container.registerInstance(ListFoldersByParentIdsGateway, gateway);\n\n return {\n container,\n foldersCache,\n useCase: container.resolve(ListFoldersByParentIdsUseCase)\n };\n }\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n class ListFoldersByParentIdsMockGateway implements ListFoldersByParentIdsGateway.Interface {\n mockResponse: FolderDto[];\n\n // Had to use `any` as the mock folders passed in the tests below are also partial objects.\n constructor(mockResponse: any) {\n this.mockResponse = mockResponse as FolderDto[];\n }\n\n setMockResponse(mockResponse: any) {\n this.mockResponse = mockResponse as FolderDto[];\n }\n\n async execute() {\n return this.mockResponse;\n }\n }\n\n it(\"should list folders from `ROOT` level if parentIds is `undefined`\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: null,\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-2\",\n parentId: null,\n type\n },\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: null,\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n await useCase.execute();\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(spy).toHaveBeenCalledWith(type, [ROOT_FOLDER]);\n\n expect(foldersCache.hasItems()).toBe(true);\n expect(foldersCache.count()).toEqual(3);\n\n // This call should be idempotent: the number of elements in cache should not change\n await useCase.execute();\n expect(foldersCache.count()).toEqual(3);\n });\n\n it(\"should list folders from the provided `parentIds`\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: \"folder-0\",\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n await useCase.execute([\"folder-0\"]);\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(spy).toHaveBeenCalledWith(type, [\"folder-0\"]);\n\n expect(foldersCache.hasItems()).toBe(true);\n expect(foldersCache.count()).toEqual(3);\n\n // The number of folders in cache should increase, since we are changing the parentIds.\n gateway.setMockResponse([\n {\n id: \"folder-4\",\n title: \"Folder 4\",\n slug: \"folder-4\",\n parentId: \"folder-1\",\n type\n },\n {\n id: \"folder-5\",\n title: \"Folder 5\",\n slug: \"folder-5\",\n parentId: \"folder-1\",\n type\n },\n {\n id: \"folder-6\",\n title: \"Folder 6\",\n slug: \"folder-6\",\n parentId: \"folder-1\",\n type\n }\n ]);\n\n await useCase.execute([\"folder-1\"]);\n expect(foldersCache.count()).toEqual(6);\n });\n\n it(\"should list folders from missing `parentIds` stored in cache\", async () => {\n const gateway = new ListFoldersByParentIdsMockGateway([\n {\n id: \"folder-1\",\n title: \"Folder 1\",\n slug: \"folder-1\",\n parentId: \"folder-0\",\n type\n },\n {\n id: \"folder-2\",\n title: \"Folder 2\",\n slug: \"folder-2\",\n parentId: \"folder-1\",\n type\n }\n ]);\n\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase } = setupTest(gateway);\n\n // Execute the useCase 3 times and check the gateway is invoked only when needed\n await useCase.execute([\"folder-0\", \"folder-1\"]);\n\n gateway.setMockResponse([\n {\n id: \"folder-3\",\n title: \"Folder 3\",\n slug: \"folder-3\",\n parentId: \"folder-2\",\n type\n }\n ]);\n\n await useCase.execute([\"folder-0\", \"folder-1\", \"folder-2\"]);\n await useCase.execute([\"folder-0\", \"folder-1\", \"folder-2\"]);\n\n expect(spy).toHaveBeenNthCalledWith(1, type, [\"folder-0\", \"folder-1\"]);\n expect(spy).toHaveBeenNthCalledWith(2, type, [\"folder-2\"]);\n expect(gateway.execute).not.toHaveBeenCalledTimes(3);\n });\n\n it(\"should return empty array if no folders are found\", async () => {\n class ListFoldersByParentIdsEmptyMockGateway\n implements ListFoldersByParentIdsGateway.Interface\n {\n async execute() {\n return [];\n }\n }\n\n const gateway = new ListFoldersByParentIdsEmptyMockGateway();\n const spy = vi.spyOn(gateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(gateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n\n await useCase.execute();\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(foldersCache.hasItems()).toBe(false);\n\n const items = foldersCache.getItems();\n expect(items.length).toEqual(0);\n });\n\n it(\"should handle gateway errors gracefully\", async () => {\n class ListFoldersByParentIdsErrorMockGateway\n implements ListFoldersByParentIdsGateway.Interface\n {\n async execute(): Promise<FolderDto[]> {\n throw new Error(\"Gateway error\");\n }\n }\n\n const errorGateway = new ListFoldersByParentIdsErrorMockGateway();\n const spy = vi.spyOn(errorGateway, \"execute\");\n\n const { useCase, foldersCache } = setupTest(errorGateway);\n\n expect(foldersCache.hasItems()).toBe(false);\n\n await expect(useCase.execute()).rejects.toThrow(\"Gateway error\");\n\n expect(spy).toHaveBeenCalledTimes(1);\n expect(foldersCache.hasItems()).toBe(false);\n });\n});\n"],"names":["describe","type","setupTest","gateway","container","Container","foldersCache","ListCache","loadedFoldersCache","LoadedCache","FoldersContext","FoldersCache","LoadedFoldersCache","FoldersLoadingRepository","LoadingRepository","ListFoldersByParentIdsFeature","ListFoldersByParentIdsGateway","ListFoldersByParentIdsUseCase","beforeEach","vi","ListFoldersByParentIdsMockGateway","mockResponse","it","spy","useCase","expect","ROOT_FOLDER","ListFoldersByParentIdsEmptyMockGateway","items","ListFoldersByParentIdsErrorMockGateway","Error","errorGateway"],"mappings":";;;;;;;;AAgBAA,SAAS,0BAA0B;IAC/B,MAAMC,OAAO;IAEb,SAASC,UAAUC,OAAgD;QAC/D,MAAMC,YAAY,IAAIC;QACtB,MAAMC,eAAe,IAAIC;QACzB,MAAMC,qBAAqB,IAAIC;QAE/BL,UAAU,gBAAgB,CAACM,gBAAgB;YAAET;QAAK;QAClDG,UAAU,gBAAgB,CAACO,cAAcL;QACzCF,UAAU,gBAAgB,CAACQ,oBAAoBJ;QAC/CJ,UAAU,gBAAgB,CAACS,0BAA0B,IAAIC;QAEzDC,8BAA8B,QAAQ,CAACX;QACvCA,UAAU,gBAAgB,CAACY,+BAA+Bb;QAE1D,OAAO;YACHC;YACAE;YACA,SAASF,UAAU,OAAO,CAACa;QAC/B;IACJ;IAEAC,WAAW;QACPC,GAAG,aAAa;IACpB;IAEA,MAAMC;QAIF,YAAYC,YAAiB,CAAE;YAC3B,IAAI,CAAC,YAAY,GAAGA;QACxB;QAEA,gBAAgBA,YAAiB,EAAE;YAC/B,IAAI,CAAC,YAAY,GAAGA;QACxB;QAEA,MAAM,UAAU;YACZ,OAAO,IAAI,CAAC,YAAY;QAC5B;IACJ;IAEAC,GAAG,qEAAqE;QACpE,MAAMnB,UAAU,IAAIiB,kCAAkC;YAClD;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVnB;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;SACH;QAED,MAAMsB,MAAMJ,GAAG,KAAK,CAAChB,SAAS;QAE9B,MAAM,EAAEqB,OAAO,EAAElB,YAAY,EAAE,GAAGJ,UAAUC;QAE5CsB,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QACrC,MAAMkB,QAAQ,OAAO;QAErBC,OAAOF,KAAK,qBAAqB,CAAC;QAClCE,OAAOF,KAAK,oBAAoB,CAACtB,MAAM;YAACyB;SAAY;QAEpDD,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QACrCmB,OAAOnB,aAAa,KAAK,IAAI,OAAO,CAAC;QAGrC,MAAMkB,QAAQ,OAAO;QACrBC,OAAOnB,aAAa,KAAK,IAAI,OAAO,CAAC;IACzC;IAEAgB,GAAG,qDAAqD;QACpD,MAAMnB,UAAU,IAAIiB,kCAAkC;YAClD;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVnB;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;SACH;QAED,MAAMsB,MAAMJ,GAAG,KAAK,CAAChB,SAAS;QAE9B,MAAM,EAAEqB,OAAO,EAAElB,YAAY,EAAE,GAAGJ,UAAUC;QAE5CsB,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QACrC,MAAMkB,QAAQ,OAAO,CAAC;YAAC;SAAW;QAElCC,OAAOF,KAAK,qBAAqB,CAAC;QAClCE,OAAOF,KAAK,oBAAoB,CAACtB,MAAM;YAAC;SAAW;QAEnDwB,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QACrCmB,OAAOnB,aAAa,KAAK,IAAI,OAAO,CAAC;QAGrCH,QAAQ,eAAe,CAAC;YACpB;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVF;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;SACH;QAED,MAAMuB,QAAQ,OAAO,CAAC;YAAC;SAAW;QAClCC,OAAOnB,aAAa,KAAK,IAAI,OAAO,CAAC;IACzC;IAEAgB,GAAG,gEAAgE;QAC/D,MAAMnB,UAAU,IAAIiB,kCAAkC;YAClD;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVnB;YACJ;YACA;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVA;YACJ;SACH;QAED,MAAMsB,MAAMJ,GAAG,KAAK,CAAChB,SAAS;QAE9B,MAAM,EAAEqB,OAAO,EAAE,GAAGtB,UAAUC;QAG9B,MAAMqB,QAAQ,OAAO,CAAC;YAAC;YAAY;SAAW;QAE9CrB,QAAQ,eAAe,CAAC;YACpB;gBACI,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,UAAU;gBACVF;YACJ;SACH;QAED,MAAMuB,QAAQ,OAAO,CAAC;YAAC;YAAY;YAAY;SAAW;QAC1D,MAAMA,QAAQ,OAAO,CAAC;YAAC;YAAY;YAAY;SAAW;QAE1DC,OAAOF,KAAK,uBAAuB,CAAC,GAAGtB,MAAM;YAAC;YAAY;SAAW;QACrEwB,OAAOF,KAAK,uBAAuB,CAAC,GAAGtB,MAAM;YAAC;SAAW;QACzDwB,OAAOtB,QAAQ,OAAO,EAAE,GAAG,CAAC,qBAAqB,CAAC;IACtD;IAEAmB,GAAG,qDAAqD;QACpD,MAAMK;YAGF,MAAM,UAAU;gBACZ,OAAO,EAAE;YACb;QACJ;QAEA,MAAMxB,UAAU,IAAIwB;QACpB,MAAMJ,MAAMJ,GAAG,KAAK,CAAChB,SAAS;QAE9B,MAAM,EAAEqB,OAAO,EAAElB,YAAY,EAAE,GAAGJ,UAAUC;QAE5CsB,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QAErC,MAAMkB,QAAQ,OAAO;QAErBC,OAAOF,KAAK,qBAAqB,CAAC;QAClCE,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QAErC,MAAMsB,QAAQtB,aAAa,QAAQ;QACnCmB,OAAOG,MAAM,MAAM,EAAE,OAAO,CAAC;IACjC;IAEAN,GAAG,2CAA2C;QAC1C,MAAMO;YAGF,MAAM,UAAgC;gBAClC,MAAM,IAAIC,MAAM;YACpB;QACJ;QAEA,MAAMC,eAAe,IAAIF;QACzB,MAAMN,MAAMJ,GAAG,KAAK,CAACY,cAAc;QAEnC,MAAM,EAAEP,OAAO,EAAElB,YAAY,EAAE,GAAGJ,UAAU6B;QAE5CN,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;QAErC,MAAMmB,OAAOD,QAAQ,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;QAEhDC,OAAOF,KAAK,qBAAqB,CAAC;QAClCE,OAAOnB,aAAa,QAAQ,IAAI,IAAI,CAAC;IACzC;AACJ"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import graphql_tag from "graphql-tag";
|
|
2
2
|
import { ApolloClient } from "@webiny/app-admin/features/apolloClient/abstraction.js";
|
|
3
3
|
import { RootFolder } from "../../../domain/folder/RootFolder.js";
|
|
4
4
|
import { FolderModelProvider } from "../abstractions.js";
|
|
5
|
-
import { ListFoldersByParentIdsGateway
|
|
6
|
-
|
|
5
|
+
import { ListFoldersByParentIdsGateway } from "./abstractions.js";
|
|
6
|
+
const LIST_FOLDERS_BY_PARENT_IDS = (FOLDER_FIELDS)=>graphql_tag`
|
|
7
7
|
query ListFoldersByParentIds($type: String!, $parentIds_in: [ID!]!, $limit: Int!) {
|
|
8
8
|
aco {
|
|
9
9
|
listFolders(where: { type: $type, parentId_in: $parentIds_in }, limit: $limit) {
|
|
@@ -18,39 +18,37 @@ export const LIST_FOLDERS_BY_PARENT_IDS = FOLDER_FIELDS => gql`
|
|
|
18
18
|
}
|
|
19
19
|
`;
|
|
20
20
|
class ListFoldersByParentIdsGqlGatewayImpl {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
async execute(type, parentIds) {
|
|
26
|
-
const fields = await this.folderModelProvider.getGraphQLSelection();
|
|
27
|
-
const {
|
|
28
|
-
data: response
|
|
29
|
-
} = await this.client.query({
|
|
30
|
-
query: LIST_FOLDERS_BY_PARENT_IDS(fields),
|
|
31
|
-
variables: {
|
|
32
|
-
type,
|
|
33
|
-
parentIds_in: parentIds,
|
|
34
|
-
limit: 10000
|
|
35
|
-
},
|
|
36
|
-
fetchPolicy: "network-only"
|
|
37
|
-
});
|
|
38
|
-
if (!response) {
|
|
39
|
-
throw new Error("Network error while listing folders.");
|
|
21
|
+
constructor(client, folderModelProvider){
|
|
22
|
+
this.client = client;
|
|
23
|
+
this.folderModelProvider = folderModelProvider;
|
|
40
24
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
async execute(type, parentIds) {
|
|
26
|
+
const fields = await this.folderModelProvider.getGraphQLSelection();
|
|
27
|
+
const { data: response } = await this.client.query({
|
|
28
|
+
query: LIST_FOLDERS_BY_PARENT_IDS(fields),
|
|
29
|
+
variables: {
|
|
30
|
+
type,
|
|
31
|
+
parentIds_in: parentIds,
|
|
32
|
+
limit: 10000
|
|
33
|
+
},
|
|
34
|
+
fetchPolicy: "network-only"
|
|
35
|
+
});
|
|
36
|
+
if (!response) throw new Error("Network error while listing folders.");
|
|
37
|
+
const { data, error } = response.aco.listFolders;
|
|
38
|
+
if (!data) throw new Error(error?.message || "Could not fetch folders");
|
|
39
|
+
return [
|
|
40
|
+
RootFolder.create(),
|
|
41
|
+
...data || []
|
|
42
|
+
];
|
|
47
43
|
}
|
|
48
|
-
return [RootFolder.create(), ...(data || [])];
|
|
49
|
-
}
|
|
50
44
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
const ListFoldersByParentIdsGqlGateway = ListFoldersByParentIdsGateway.createImplementation({
|
|
46
|
+
implementation: ListFoldersByParentIdsGqlGatewayImpl,
|
|
47
|
+
dependencies: [
|
|
48
|
+
ApolloClient,
|
|
49
|
+
FolderModelProvider
|
|
50
|
+
]
|
|
54
51
|
});
|
|
52
|
+
export { LIST_FOLDERS_BY_PARENT_IDS, ListFoldersByParentIdsGqlGateway };
|
|
55
53
|
|
|
56
54
|
//# sourceMappingURL=ListFoldersByParentIdsGqlGateway.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
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,20 +1,25 @@
|
|
|
1
1
|
import { Folder } from "../../../domain/folder/Folder.js";
|
|
2
|
-
import {
|
|
2
|
+
import { ListFoldersByParentIdsGateway, ListFoldersByParentIdsRepository } from "./abstractions.js";
|
|
3
3
|
import { FoldersCache, FoldersContext } from "../abstractions.js";
|
|
4
4
|
class ListFoldersByParentIdsRepositoryImpl {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
5
|
+
constructor(foldersContext, cache, gateway){
|
|
6
|
+
this.foldersContext = foldersContext;
|
|
7
|
+
this.cache = cache;
|
|
8
|
+
this.gateway = gateway;
|
|
9
|
+
}
|
|
10
|
+
async execute(parentIds) {
|
|
11
|
+
const items = await this.gateway.execute(this.foldersContext.type, parentIds);
|
|
12
|
+
this.cache.addItems(items.map((item)=>Folder.create(item)));
|
|
13
|
+
}
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
const ListFoldersByParentIdsRepository_ListFoldersByParentIdsRepository = ListFoldersByParentIdsRepository.createImplementation({
|
|
16
|
+
implementation: ListFoldersByParentIdsRepositoryImpl,
|
|
17
|
+
dependencies: [
|
|
18
|
+
FoldersContext,
|
|
19
|
+
FoldersCache,
|
|
20
|
+
ListFoldersByParentIdsGateway
|
|
21
|
+
]
|
|
18
22
|
});
|
|
23
|
+
export { ListFoldersByParentIdsRepository_ListFoldersByParentIdsRepository as ListFoldersByParentIdsRepository };
|
|
19
24
|
|
|
20
25
|
//# sourceMappingURL=ListFoldersByParentIdsRepository.js.map
|