@webiny/app-website-builder 6.5.0-beta.1 → 6.5.0-beta.10
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/BaseEditor/config/Sidebar/Tab.d.ts +0 -4
- package/BaseEditor/config/Sidebar/Tab.js +5 -21
- package/BaseEditor/config/Sidebar/Tab.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js +6 -66
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.d.ts +1 -6
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js +1 -26
- package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
- package/BaseEditor/defaultConfig/ElementInputRenderers.js +12 -0
- package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.d.ts +22 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js +17 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.d.ts +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js +64 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js +7 -2
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js +8 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
- package/DocumentEditor/DocumentEditor.d.ts +2 -2
- package/DocumentEditor/StateInspector.d.ts +4 -2
- package/Extension.js +3 -0
- package/Extension.js.map +1 -1
- package/domain/Page/Page.d.ts +2 -0
- package/domain/Page/Page.js +1 -0
- package/domain/Page/Page.js.map +1 -1
- package/domain/PageRevision/PageRevision.d.ts +11 -0
- package/domain/PageRevision/PageRevision.js +20 -0
- package/domain/PageRevision/PageRevision.js.map +1 -1
- package/ecommerce/components/ResourcePage.d.ts +6 -2
- package/ecommerce/components/ResourcesList.d.ts +4 -4
- package/ecommerce/components/ResourcesPicker.d.ts +9 -4
- package/editorSdk/CommandBus.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js +41 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.d.ts +3 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js +8 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevision.test.d.ts +1 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js +67 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js.map +1 -0
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.d.ts +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js +2 -3
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.d.ts +4 -2
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js +7 -3
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js.map +1 -1
- package/features/pages/deletePageRevision/abstractions.d.ts +2 -3
- package/features/pages/deletePageRevision/abstractions.js.map +1 -1
- package/features/pages/getPage/PageGatewayDto.d.ts +2 -0
- package/features/pages/publishPage/PublishPage.test.js +41 -1
- package/features/pages/publishPage/PublishPage.test.js.map +1 -1
- package/features/pages/publishPage/PublishPageRepository.d.ts +3 -2
- package/features/pages/publishPage/PublishPageRepository.js +15 -4
- package/features/pages/publishPage/PublishPageRepository.js.map +1 -1
- package/features/pages/shared/pageGraphQLFields.js +1 -0
- package/features/pages/shared/pageGraphQLFields.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js +4 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPageRepository.d.ts +3 -2
- package/features/pages/unpublishPage/UnpublishPageRepository.js +12 -4
- package/features/pages/unpublishPage/UnpublishPageRepository.js.map +1 -1
- package/inputRenderers/DateTimeInput.d.ts +9 -0
- package/inputRenderers/DateTimeInput.js +21 -0
- package/inputRenderers/DateTimeInput.js.map +1 -0
- package/inputRenderers/DateTimeInput.test.d.ts +1 -0
- package/inputRenderers/DateTimeInput.test.js +27 -0
- package/inputRenderers/DateTimeInput.test.js.map +1 -0
- package/inputRenderers/RadioInput.d.ts +3 -0
- package/inputRenderers/RadioInput.js +20 -0
- package/inputRenderers/RadioInput.js.map +1 -0
- package/inputRenderers/TagsInput.d.ts +3 -0
- package/inputRenderers/TagsInput.js +22 -0
- package/inputRenderers/TagsInput.js.map +1 -0
- package/package.json +31 -31
- package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js +4 -0
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.d.ts +3 -3
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js +9 -20
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js +7 -19
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.d.ts +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.js +84 -14
- package/presentation/pages/PageEditor/Revisions/useRevision.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevisionList.d.ts +3 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js +31 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js.map +1 -0
- package/presentation/pages/PageEditor/TopBar/PageSettingsDrawer.d.ts +2 -2
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js +7 -19
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
- package/presentation/pages/PageList/PageListPresenter.test.js +3 -1
- package/presentation/pages/PageList/PageListPresenter.test.js.map +1 -1
- package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
- package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
- package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
- package/presentation/pages/RevisionList/RevisionListPresenter.d.ts +27 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js +73 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js.map +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.d.ts +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js +219 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js.map +1 -0
- package/presentation/pages/RevisionList/abstractions.d.ts +34 -0
- package/presentation/pages/RevisionList/abstractions.js +5 -0
- package/presentation/pages/RevisionList/abstractions.js.map +1 -0
- package/presentation/pages/RevisionList/feature.d.ts +3 -0
- package/presentation/pages/RevisionList/feature.js +17 -0
- package/presentation/pages/RevisionList/feature.js.map +1 -0
- package/presentation/pages/RevisionList/index.d.ts +2 -0
- package/presentation/pages/RevisionList/index.js +1 -0
- package/presentation/pages/TrashBin/WbTrashBin.d.ts +2 -2
- package/presentation/redirects/RedirectList/RedirectListPresenter.js.map +1 -1
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.js.map +1 -1
- package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const WbTrashBin: (() => React.JSX.Element | null) & {
|
|
3
|
-
|
|
2
|
+
export declare const WbTrashBin: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element | null;
|
|
4
4
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation/redirects/RedirectList/RedirectListPresenter.js","sources":["../../../../src/presentation/redirects/RedirectList/RedirectListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, reaction, computed } from \"mobx\";\nimport { Worker } from \"@webiny/app-admin\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport { FolderTreePresenter } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport { sortFolders } from \"@webiny/app-aco\";\nimport { GetDescendantFoldersUseCase } from \"@webiny/app-aco/features/folders/getDescendantFolders/abstractions.js\";\nimport { ListRedirectsUseCase } from \"~/features/redirects/listRedirects/abstractions.js\";\nimport { RedirectsListCache } from \"~/features/redirects/shared/abstractions.js\";\nimport {\n RedirectListPresenter as Abstraction,\n type IRedirectListPresenter,\n type IRedirectListViewModel,\n type IRedirectListActions,\n type IRedirectListInitConfig,\n CreateRedirectPresenter\n} from \"./abstractions.js\";\nimport { RedirectListDataSource } from \"./RedirectListDataSource.js\";\nimport type { Redirect } from \"~/domain/Redirect/Redirect.js\";\nimport { EditRedirectPresenter } from \"./abstractions.js\";\n\nclass RedirectListPresenterImpl implements IRedirectListPresenter {\n public readonly actions: IRedirectListActions;\n private _showingFilters = false;\n private _disposeReaction: (() => void) | null = null;\n private _createRedirect: CreateRedirectPresenter.Interface | null = null;\n private _editRedirect: EditRedirectPresenter.Interface | null = null;\n private _worker = new Worker<Redirect>();\n\n constructor(\n private listPresenter: ListPresenter.Interface<Redirect>,\n private folderTreePresenter: FolderTreePresenter.Interface,\n private createRedirectPresenter: CreateRedirectPresenter.Interface,\n private editRedirectPresenter: EditRedirectPresenter.Interface,\n private listRedirectsUseCase: ListRedirectsUseCase.Interface,\n private redirectsListCache: RedirectsListCache.Interface,\n private getDescendantFoldersUseCase: GetDescendantFoldersUseCase.Interface\n ) {\n this.actions = this.createActions();\n makeAutoObservable<RedirectListPresenterImpl, \"_disposeReaction\">(this, {\n _disposeReaction: false,\n vm: computed\n });\n }\n\n get vm(): IRedirectListViewModel {\n return {\n list: this.listPresenter.vm,\n folders: this.folderTreePresenter.vm,\n createRedirect: this._createRedirect,\n editRedirect: this._editRedirect,\n showFolders: this.shouldShowFolders(),\n childFolders: this.getSortedChildFolders(),\n showingFilters: this._showingFilters\n };\n }\n\n init(config?: IRedirectListInitConfig): void {\n const initialFolderId = config?.initialFolderId ?? \"root\";\n\n const dataSource = new RedirectListDataSource(\n this.listRedirectsUseCase,\n this.redirectsListCache,\n this.getDescendantFoldersUseCase\n );\n\n this.listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n initialFilters: { folderId: initialFolderId },\n limit: 50\n });\n\n if (initialFolderId !== \"root\") {\n this.folderTreePresenter.selectFolder(initialFolderId);\n }\n\n this._disposeReaction = reaction(\n () => this.folderTreePresenter.vm.currentFolderId,\n folderId => {\n const effectiveFolderId = folderId ?? \"root\";\n this.listPresenter.actions.filter.set(\"folderId\", effectiveFolderId);\n }\n );\n }\n\n dispose(): void {\n if (this._disposeReaction) {\n this._disposeReaction();\n this._disposeReaction = null;\n }\n }\n\n private createActions(): IRedirectListActions {\n return {\n search: {\n set: (query: string) => this.listPresenter.actions.search.set(query),\n clear: () => this.listPresenter.actions.search.clear()\n },\n sort: {\n set: (field: string, direction: \"ASC\" | \"DESC\") =>\n this.listPresenter.actions.sort.set(field, direction),\n toggle: (field: string) => this.listPresenter.actions.sort.toggle(field)\n },\n filter: {\n show: () => this.listPresenter.actions.filter.show(),\n hide: () => this.listPresenter.actions.filter.hide(),\n set: (key: string, value: unknown) =>\n this.listPresenter.actions.filter.set(key, value),\n clear: (key: string) => this.listPresenter.actions.filter.clear(key),\n clearAll: () => this.listPresenter.actions.filter.clearAll()\n },\n selection: {\n toggle: (id: string) => this.listPresenter.actions.selection.toggle(id),\n selectRangeTo: (id: string) =>\n this.listPresenter.actions.selection.selectRangeTo(id),\n selectAll: () => this.listPresenter.actions.selection.selectAll(),\n deselectAll: () => this.listPresenter.actions.selection.deselectAll(),\n selectRows: (ids: string[]) => this.listPresenter.actions.selection.selectRows(ids),\n isSelected: (id: string) => this.listPresenter.actions.selection.isSelected(id)\n },\n worker: this.createWorkerActions(),\n loadMore: () => this.listPresenter.actions.loadMore(),\n refresh: () => this.listPresenter.actions.refresh(),\n showFilters: () => {\n this._showingFilters = true;\n },\n hideFilters: () => {\n this._showingFilters = false;\n },\n showCreateDialog: (folderId: string) => {\n this._createRedirect = this.createRedirectPresenter;\n this.createRedirectPresenter.init(folderId);\n },\n showEditDialog: (redirectId: string) => {\n this._editRedirect = this.editRedirectPresenter;\n void this.editRedirectPresenter.loadRedirect(redirectId);\n },\n hideCreateDialog: () => {\n this._createRedirect = null;\n },\n hideEditDialog: () => {\n this._editRedirect = null;\n },\n folders: {\n selectFolder: (folderId: string | null) => {\n this.listPresenter.actions.search.clear();\n this.folderTreePresenter.selectFolder(folderId);\n },\n createFolder: (parentFolderId?: string) =>\n this.folderTreePresenter.createFolder(parentFolderId),\n editFolder: (folderId: string) => this.folderTreePresenter.editFolder(folderId),\n deleteFolder: (folderId: string) => this.folderTreePresenter.deleteFolder(folderId),\n moveFolder: (folderId: string, targetParentId: string | null) =>\n this.folderTreePresenter.moveFolder(folderId, targetParentId),\n loadChildFolders: (parentIds: string[]) =>\n this.folderTreePresenter.loadChildFolders(parentIds),\n canManageStructure: (folderId: string) =>\n this.folderTreePresenter.canManageStructure(folderId),\n getAncestorIds: (folderId: string) =>\n this.folderTreePresenter.getAncestorIds(folderId),\n submitOperation: () => this.folderTreePresenter.submitOperation(),\n cancelOperation: () => this.folderTreePresenter.cancelOperation()\n }\n };\n }\n\n private getSelectedRows(): Redirect[] {\n const ids = this.listPresenter.vm.selection.selectedIds;\n return this.listPresenter.vm.rows.filter(r => ids.has(r.id));\n }\n\n private createWorkerActions(): IRedirectListActions[\"worker\"] {\n const worker = this._worker;\n return {\n process: (callback: (items: Redirect[]) => void) => {\n worker.process(this.getSelectedRows(), callback);\n },\n processInSeries: async (callback, chunkSize?) => {\n await worker.processInSeries(this.getSelectedRows(), callback, chunkSize);\n },\n get results() {\n return worker.results;\n },\n resetResults: () => worker.resetResults()\n };\n }\n\n private getSortedChildFolders() {\n if (!this.shouldShowFolders()) {\n return [];\n }\n return sortFolders(\n this.folderTreePresenter.vm.childFolders ?? [],\n this.listPresenter.vm.appliedQuery?.sort\n );\n }\n\n private shouldShowFolders(): boolean {\n const { appliedQuery } = this.listPresenter.vm;\n if (!appliedQuery) {\n return true;\n }\n\n if (appliedQuery.search) {\n return false;\n }\n\n const filterKeys = Object.keys(appliedQuery.filters ?? {}).filter(k => k !== \"folderId\");\n if (filterKeys.length > 0) {\n return false;\n }\n\n return true;\n }\n}\n\nexport const RedirectListPresenter = Abstraction.createImplementation({\n implementation: RedirectListPresenterImpl,\n dependencies: [\n ListPresenter,\n FolderTreePresenter,\n CreateRedirectPresenter,\n EditRedirectPresenter,\n ListRedirectsUseCase,\n RedirectsListCache,\n GetDescendantFoldersUseCase\n ]\n});\n"],"names":["RedirectListPresenterImpl","listPresenter","folderTreePresenter","createRedirectPresenter","editRedirectPresenter","listRedirectsUseCase","redirectsListCache","getDescendantFoldersUseCase","Worker","makeAutoObservable","computed","config","initialFolderId","dataSource","RedirectListDataSource","reaction","folderId","effectiveFolderId","query","field","direction","key","value","id","ids","redirectId","parentFolderId","targetParentId","parentIds","r","worker","callback","chunkSize","sortFolders","appliedQuery","filterKeys","Object","k","RedirectListPresenter","Abstraction","ListPresenter","FolderTreePresenter","CreateRedirectPresenter","EditRedirectPresenter","ListRedirectsUseCase","RedirectsListCache","GetDescendantFoldersUseCase"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"presentation/redirects/RedirectList/RedirectListPresenter.js","sources":["../../../../src/presentation/redirects/RedirectList/RedirectListPresenter.ts"],"sourcesContent":["import { makeAutoObservable, reaction, computed } from \"mobx\";\nimport { Worker } from \"@webiny/app-admin\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/abstractions.js\";\nimport { FolderTreePresenter } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport { sortFolders } from \"@webiny/app-aco\";\nimport { GetDescendantFoldersUseCase } from \"@webiny/app-aco/features/folders/getDescendantFolders/abstractions.js\";\nimport { ListRedirectsUseCase } from \"~/features/redirects/listRedirects/abstractions.js\";\nimport { RedirectsListCache } from \"~/features/redirects/shared/abstractions.js\";\nimport {\n RedirectListPresenter as Abstraction,\n type IRedirectListPresenter,\n type IRedirectListViewModel,\n type IRedirectListActions,\n type IRedirectListInitConfig,\n CreateRedirectPresenter\n} from \"./abstractions.js\";\nimport { RedirectListDataSource } from \"./RedirectListDataSource.js\";\nimport type { Redirect } from \"~/domain/Redirect/Redirect.js\";\nimport { EditRedirectPresenter } from \"./abstractions.js\";\n\nclass RedirectListPresenterImpl implements IRedirectListPresenter {\n public readonly actions: IRedirectListActions;\n private _showingFilters = false;\n private _disposeReaction: (() => void) | null = null;\n private _createRedirect: CreateRedirectPresenter.Interface | null = null;\n private _editRedirect: EditRedirectPresenter.Interface | null = null;\n private _worker = new Worker<Redirect>();\n\n constructor(\n private listPresenter: ListPresenter.Interface<Redirect>,\n private folderTreePresenter: FolderTreePresenter.Interface,\n private createRedirectPresenter: CreateRedirectPresenter.Interface,\n private editRedirectPresenter: EditRedirectPresenter.Interface,\n private listRedirectsUseCase: ListRedirectsUseCase.Interface,\n private redirectsListCache: RedirectsListCache.Interface,\n private getDescendantFoldersUseCase: GetDescendantFoldersUseCase.Interface\n ) {\n this.actions = this.createActions();\n makeAutoObservable<RedirectListPresenterImpl, \"_disposeReaction\">(this, {\n _disposeReaction: false,\n vm: computed\n });\n }\n\n get vm(): IRedirectListViewModel {\n return {\n list: this.listPresenter.vm,\n folders: this.folderTreePresenter.vm,\n createRedirect: this._createRedirect,\n editRedirect: this._editRedirect,\n showFolders: this.shouldShowFolders(),\n childFolders: this.getSortedChildFolders(),\n showingFilters: this._showingFilters\n };\n }\n\n init(config?: IRedirectListInitConfig): void {\n const initialFolderId = config?.initialFolderId ?? \"root\";\n\n const dataSource = new RedirectListDataSource(\n this.listRedirectsUseCase,\n this.redirectsListCache,\n this.getDescendantFoldersUseCase\n );\n\n this.listPresenter.init({\n dataSource,\n initialSort: { field: \"createdOn\", direction: \"DESC\" },\n initialFilters: { folderId: initialFolderId },\n limit: 50\n });\n\n if (initialFolderId !== \"root\") {\n this.folderTreePresenter.selectFolder(initialFolderId);\n }\n\n this._disposeReaction = reaction(\n () => this.folderTreePresenter.vm.currentFolderId,\n folderId => {\n const effectiveFolderId = folderId ?? \"root\";\n this.listPresenter.actions.filter.set(\"folderId\", effectiveFolderId);\n }\n );\n }\n\n dispose(): void {\n if (this._disposeReaction) {\n this._disposeReaction();\n this._disposeReaction = null;\n }\n }\n\n private createActions(): IRedirectListActions {\n return {\n search: {\n set: (query: string) => this.listPresenter.actions.search.set(query),\n clear: () => this.listPresenter.actions.search.clear()\n },\n sort: {\n set: (field: string, direction: \"ASC\" | \"DESC\") =>\n this.listPresenter.actions.sort.set(field, direction),\n toggle: (field: string) => this.listPresenter.actions.sort.toggle(field)\n },\n filter: {\n show: () => this.listPresenter.actions.filter.show(),\n hide: () => this.listPresenter.actions.filter.hide(),\n set: (key: string, value: unknown) =>\n this.listPresenter.actions.filter.set(key, value),\n clear: (key: string) => this.listPresenter.actions.filter.clear(key),\n clearAll: () => this.listPresenter.actions.filter.clearAll()\n },\n selection: {\n toggle: (id: string) => this.listPresenter.actions.selection.toggle(id),\n selectRangeTo: (id: string) =>\n this.listPresenter.actions.selection.selectRangeTo(id),\n selectAll: () => this.listPresenter.actions.selection.selectAll(),\n deselectAll: () => this.listPresenter.actions.selection.deselectAll(),\n selectRows: (ids: string[]) => this.listPresenter.actions.selection.selectRows(ids),\n isSelected: (id: string) => this.listPresenter.actions.selection.isSelected(id)\n },\n worker: this.createWorkerActions(),\n loadMore: () => this.listPresenter.actions.loadMore(),\n refresh: () => this.listPresenter.actions.refresh(),\n showFilters: () => {\n this._showingFilters = true;\n },\n hideFilters: () => {\n this._showingFilters = false;\n },\n showCreateDialog: (folderId: string) => {\n this._createRedirect = this.createRedirectPresenter;\n this.createRedirectPresenter.init(folderId);\n },\n showEditDialog: (redirectId: string) => {\n this._editRedirect = this.editRedirectPresenter;\n void this.editRedirectPresenter.loadRedirect(redirectId);\n },\n hideCreateDialog: () => {\n this._createRedirect = null;\n },\n hideEditDialog: () => {\n this._editRedirect = null;\n },\n folders: {\n selectFolder: (folderId: string | null) => {\n this.listPresenter.actions.search.clear();\n this.folderTreePresenter.selectFolder(folderId);\n },\n createFolder: (parentFolderId?: string) =>\n this.folderTreePresenter.createFolder(parentFolderId),\n editFolder: (folderId: string) => this.folderTreePresenter.editFolder(folderId),\n deleteFolder: (folderId: string) => this.folderTreePresenter.deleteFolder(folderId),\n moveFolder: (folderId: string, targetParentId: string | null) =>\n this.folderTreePresenter.moveFolder(folderId, targetParentId),\n loadChildFolders: (parentIds: string[]) =>\n this.folderTreePresenter.loadChildFolders(parentIds),\n canManageStructure: (folderId: string) =>\n this.folderTreePresenter.canManageStructure(folderId),\n getAncestorIds: (folderId: string) =>\n this.folderTreePresenter.getAncestorIds(folderId),\n submitOperation: () => this.folderTreePresenter.submitOperation(),\n cancelOperation: () => this.folderTreePresenter.cancelOperation()\n }\n };\n }\n\n private getSelectedRows(): Redirect[] {\n const ids = this.listPresenter.vm.selection.selectedIds;\n return this.listPresenter.vm.rows.filter(r => ids.has(r.id));\n }\n\n private createWorkerActions(): IRedirectListActions[\"worker\"] {\n const worker = this._worker;\n return {\n process: (callback: (items: Redirect[]) => void) => {\n worker.process(this.getSelectedRows(), callback);\n },\n processInSeries: async (callback, chunkSize?) => {\n await worker.processInSeries(this.getSelectedRows(), callback, chunkSize);\n },\n get results() {\n return worker.results;\n },\n resetResults: () => worker.resetResults()\n };\n }\n\n private getSortedChildFolders() {\n if (!this.shouldShowFolders()) {\n return [];\n }\n return sortFolders(\n this.folderTreePresenter.vm.childFolders ?? [],\n this.listPresenter.vm.appliedQuery?.sort\n );\n }\n\n private shouldShowFolders(): boolean {\n const { appliedQuery } = this.listPresenter.vm;\n if (!appliedQuery) {\n return true;\n }\n\n if (appliedQuery.search) {\n return false;\n }\n\n const filterKeys = Object.keys(appliedQuery.filters ?? {}).filter(k => k !== \"folderId\");\n if (filterKeys.length > 0) {\n return false;\n }\n\n return true;\n }\n}\n\nexport const RedirectListPresenter = Abstraction.createImplementation({\n implementation: RedirectListPresenterImpl,\n dependencies: [\n ListPresenter,\n FolderTreePresenter,\n CreateRedirectPresenter,\n EditRedirectPresenter,\n ListRedirectsUseCase,\n RedirectsListCache,\n GetDescendantFoldersUseCase\n ]\n});\n"],"names":["RedirectListPresenterImpl","listPresenter","folderTreePresenter","createRedirectPresenter","editRedirectPresenter","listRedirectsUseCase","redirectsListCache","getDescendantFoldersUseCase","Worker","makeAutoObservable","computed","config","initialFolderId","dataSource","RedirectListDataSource","reaction","folderId","effectiveFolderId","query","field","direction","key","value","id","ids","redirectId","parentFolderId","targetParentId","parentIds","r","worker","callback","chunkSize","sortFolders","appliedQuery","filterKeys","Object","k","RedirectListPresenter","Abstraction","ListPresenter","FolderTreePresenter","CreateRedirectPresenter","EditRedirectPresenter","ListRedirectsUseCase","RedirectsListCache","GetDescendantFoldersUseCase"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation/redirects/RedirectList/RedirectListPresenter.test.js","sources":["../../../../src/presentation/redirects/RedirectList/RedirectListPresenter.test.ts"],"sourcesContent":["import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { observable } from \"mobx\";\nimport { Container } from \"@webiny/di\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/ListPresenter.js\";\nimport { FolderTreePresenter } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport { GetDescendantFoldersUseCase } from \"@webiny/app-aco/features/folders/getDescendantFolders/abstractions.js\";\nimport { Redirect } from \"~/domain/Redirect/Redirect.js\";\nimport { RedirectsListCache } from \"~/features/redirects/shared/abstractions.js\";\nimport {\n ListRedirectsGateway,\n type ListRedirectsGatewayParams,\n type ListRedirectsGatewayResult\n} from \"~/features/redirects/listRedirects/abstractions.js\";\nimport { ListRedirectsUseCase } from \"~/features/redirects/listRedirects/ListRedirectsUseCase.js\";\nimport { ListRedirectsRepository } from \"~/features/redirects/listRedirects/ListRedirectsRepository.js\";\nimport {\n CreateRedirectGateway,\n CreateRedirectUseCase as CreateRedirectUseCaseAbstraction\n} from \"~/features/redirects/createRedirect/abstractions.js\";\nimport { CreateRedirectUseCase } from \"~/features/redirects/createRedirect/CreateRedirectUseCase.js\";\nimport { CreateRedirectRepository } from \"~/features/redirects/createRedirect/CreateRedirectRepository.js\";\nimport {\n UpdateRedirectGateway,\n UpdateRedirectUseCase as UpdateRedirectUseCaseAbstraction,\n type UpdateRedirectParams\n} from \"~/features/redirects/updateRedirect/abstractions.js\";\nimport { UpdateRedirectUseCase } from \"~/features/redirects/updateRedirect/UpdateRedirectUseCase.js\";\nimport { UpdateRedirectRepository } from \"~/features/redirects/updateRedirect/UpdateRedirectRepository.js\";\nimport {\n CreateRedirectPresenter,\n EditRedirectPresenter,\n RedirectListPresenter as Abstraction\n} from \"./abstractions.js\";\nimport { RedirectListPresenter } from \"./RedirectListPresenter.js\";\n\nconst TOTAL_REDIRECTS = 120;\nconst PAGE_SIZE = 50;\nconst BASE_TIME = Date.UTC(2026, 0, 1);\n\nconst minutes = (n: number) => new Date(BASE_TIME + n * 60_000).toISOString();\n\n/**\n * A higher index means a more recently *created* redirect, but a less recently *saved* one,\n * so sorting by `createdOn` and by `savedOn` produce opposite orders.\n */\nfunction createRedirects(count: number): Redirect[] {\n return Array.from({ length: count }, (_, i) =>\n Redirect.create({\n id: `redirect-${i}`,\n location: { folderId: \"root\" },\n redirectFrom: `/from-${i}`,\n redirectTo: `/to-${i}`,\n redirectType: \"permanent\",\n isEnabled: i % 2 === 0,\n createdOn: minutes(i),\n savedOn: minutes(count - i)\n })\n );\n}\n\n/**\n * Sorts like the API: by the requested field, ties keep the original (id) order.\n */\nfunction sortRedirects(redirects: Redirect[], sort = \"createdOn_DESC\"): Redirect[] {\n const [field, direction] = sort.split(\"_\") as [keyof Redirect, \"ASC\" | \"DESC\"];\n const multiplier = direction === \"ASC\" ? 1 : -1;\n return [...redirects].sort((a, b) => {\n const left = String(a[field]);\n const right = String(b[field]);\n return left === right ? 0 : multiplier * (left < right ? -1 : 1);\n });\n}\n\nfunction createListGateway(redirects: Redirect[]): ListRedirectsGateway.Interface {\n return {\n execute: vi.fn(\n async (params: ListRedirectsGatewayParams): Promise<ListRedirectsGatewayResult> => {\n const sorted = sortRedirects(redirects, params.sort?.[0]);\n const offset = params.after ? Number(params.after) : 0;\n const limit = params.limit ?? PAGE_SIZE;\n const data = sorted.slice(offset, offset + limit);\n const next = offset + data.length;\n const hasMoreItems = next < sorted.length;\n return {\n data,\n meta: {\n cursor: hasMoreItems ? String(next) : null,\n hasMoreItems,\n totalCount: sorted.length\n }\n };\n }\n )\n };\n}\n\nfunction createFolderTreePresenter(): FolderTreePresenter.Interface {\n const vm = observable({\n folders: [],\n tree: [],\n currentFolderId: null as string | null,\n currentFolder: null,\n loading: false,\n operation: { active: false, mode: null },\n isRootFolder: true,\n currentFolderTitle: \"All redirects\",\n childFolders: [],\n loadingNodeIds: []\n });\n\n return {\n get vm() {\n return vm as unknown as FolderTreePresenter.Interface[\"vm\"];\n },\n selectFolder: vi.fn(),\n createFolder: vi.fn(),\n editFolder: vi.fn(),\n deleteFolder: vi.fn().mockResolvedValue(undefined),\n moveFolder: vi.fn().mockResolvedValue(undefined),\n loadChildFolders: vi.fn().mockResolvedValue(undefined),\n canManageStructure: vi.fn().mockReturnValue(true),\n getAncestorIds: vi.fn().mockReturnValue([]),\n submitOperation: vi.fn().mockResolvedValue(true),\n cancelOperation: vi.fn(),\n onFolderChange: vi.fn().mockReturnValue(() => {})\n };\n}\n\n/**\n * Expected redirect IDs for a contiguous range of indexes, in the given order.\n */\nfunction range(from: number, to: number): string[] {\n const step = from <= to ? 1 : -1;\n const ids: string[] = [];\n for (let i = from; step > 0 ? i <= to : i >= to; i += step) {\n ids.push(`redirect-${i}`);\n }\n return ids;\n}\n\ndescribe(\"RedirectListPresenter\", () => {\n let presenter: Abstraction.Interface;\n let container: Container;\n let redirects: Redirect[];\n\n const rowIds = () => presenter.vm.list.rows.map(row => row.id);\n\n const waitForQuery = async (field: string, direction: \"ASC\" | \"DESC\") => {\n await vi.waitFor(() => {\n expect(presenter.vm.list.appliedQuery?.sort).toEqual({ field, direction });\n expect(presenter.vm.list.pagination.loading).toBe(false);\n });\n };\n\n const initAndWait = async () => {\n presenter.init();\n await waitForQuery(\"createdOn\", \"DESC\");\n };\n\n const sortAndWait = async (field: string, direction: \"ASC\" | \"DESC\") => {\n presenter.actions.sort.set(field, direction);\n await waitForQuery(field, direction);\n };\n\n const loadAll = async () => {\n while (presenter.vm.list.pagination.hasMore) {\n await presenter.actions.loadMore();\n }\n };\n\n beforeEach(() => {\n container = new Container();\n redirects = createRedirects(TOTAL_REDIRECTS);\n\n container.registerInstance(RedirectsListCache, new ListCache<Redirect>(\"id\"));\n\n container.registerInstance(ListRedirectsGateway, createListGateway(redirects));\n container.register(ListRedirectsRepository).inSingletonScope();\n container.register(ListRedirectsUseCase);\n\n container.registerInstance(CreateRedirectGateway, {\n execute: vi.fn(async params =>\n Redirect.create({\n ...params,\n id: \"redirect-new\",\n createdOn: minutes(TOTAL_REDIRECTS + 1),\n savedOn: minutes(TOTAL_REDIRECTS + 1)\n })\n )\n });\n container.register(CreateRedirectRepository).inSingletonScope();\n container.register(CreateRedirectUseCase);\n\n container.registerInstance(UpdateRedirectGateway, {\n execute: vi.fn(async (params: UpdateRedirectParams) => {\n const existing = redirects.find(r => r.id === params.id)!;\n return Redirect.create({\n ...existing,\n ...params,\n savedOn: minutes(TOTAL_REDIRECTS + 1)\n });\n })\n });\n container.register(UpdateRedirectRepository).inSingletonScope();\n container.register(UpdateRedirectUseCase);\n\n container.register(ListPresenter);\n container.registerInstance(FolderTreePresenter, createFolderTreePresenter());\n container.registerInstance(GetDescendantFoldersUseCase, { execute: () => [] });\n container.registerInstance(CreateRedirectPresenter, {\n vm: {},\n init: vi.fn(),\n save: vi.fn()\n } as unknown as CreateRedirectPresenter.Interface);\n container.registerInstance(EditRedirectPresenter, {\n vm: {},\n loadRedirect: vi.fn(),\n save: vi.fn()\n } as unknown as EditRedirectPresenter.Interface);\n\n container.register(RedirectListPresenter);\n\n presenter = container.resolve(Abstraction);\n });\n\n describe(\"pagination\", () => {\n it(\"should show the most recently created redirects first\", async () => {\n await initAndWait();\n\n expect(rowIds()).toEqual(range(119, 70));\n });\n\n it(\"should append the next batch of redirects to the bottom of the list\", async () => {\n await initAndWait();\n\n await presenter.actions.loadMore();\n\n expect(rowIds()).toEqual(range(119, 20));\n });\n\n it(\"should keep all redirects in order after loading everything\", async () => {\n await initAndWait();\n\n await loadAll();\n\n expect(rowIds()).toEqual(range(119, 0));\n });\n });\n\n describe(\"changing the sort\", () => {\n it(\"should show only the first batch, sorted by the new field\", async () => {\n await initAndWait();\n\n await sortAndWait(\"savedOn\", \"DESC\");\n\n // `savedOn` runs opposite to `createdOn`, so the most recently saved is redirect-0.\n expect(rowIds()).toEqual(range(0, 49));\n });\n\n it(\"should show only the first batch when sorting by a boolean field\", async () => {\n await initAndWait();\n\n await sortAndWait(\"isEnabled\", \"DESC\");\n\n const expected = sortRedirects(redirects, \"isEnabled_DESC\")\n .slice(0, PAGE_SIZE)\n .map(r => r.id);\n expect(rowIds()).toEqual(expected);\n });\n\n it(\"should restore the original order when switching back\", async () => {\n await initAndWait();\n await presenter.actions.loadMore();\n\n await sortAndWait(\"createdOn\", \"ASC\");\n await sortAndWait(\"createdOn\", \"DESC\");\n\n expect(rowIds()).toEqual(range(119, 70));\n });\n });\n\n describe(\"local cache changes\", () => {\n const createRedirect = () =>\n container.resolve(CreateRedirectUseCaseAbstraction).execute({\n location: { folderId: \"root\" },\n redirectFrom: \"/new\",\n redirectTo: \"/target\",\n redirectType: \"permanent\",\n isEnabled: true\n });\n\n const updateRedirect = (id: string) => {\n const existing = redirects.find(r => r.id === id)!;\n return container.resolve(UpdateRedirectUseCaseAbstraction).execute({\n id,\n redirectFrom: existing.redirectFrom,\n redirectTo: \"/changed\",\n redirectType: existing.redirectType,\n isEnabled: existing.isEnabled\n });\n };\n\n it(\"should show a created redirect at the top when it sorts first\", async () => {\n await initAndWait();\n\n await createRedirect();\n\n expect(rowIds()).toEqual([\"redirect-new\", ...range(119, 70)]);\n });\n\n it(\"should not show a created redirect that sorts past the loaded redirects\", async () => {\n await initAndWait();\n await sortAndWait(\"createdOn\", \"ASC\");\n\n await createRedirect();\n\n // The new redirect is the most recently created, so in ASC order it belongs at the\n // very end, after redirects that are not loaded yet.\n expect(rowIds()).toEqual(range(0, 49));\n });\n\n it(\"should keep an updated redirect in its position when sorted by createdOn\", async () => {\n await initAndWait();\n\n await updateRedirect(\"redirect-100\");\n\n expect(rowIds()).toEqual(range(119, 70));\n const updated = presenter.vm.list.rows.find(row => row.id === \"redirect-100\");\n expect(updated?.redirectTo).toBe(\"/changed\");\n });\n\n it(\"should move an updated redirect to the top when sorted by savedOn\", async () => {\n await initAndWait();\n await sortAndWait(\"savedOn\", \"DESC\");\n\n await updateRedirect(\"redirect-30\");\n\n expect(rowIds()).toEqual([\"redirect-30\", ...range(0, 29), ...range(31, 49)]);\n });\n });\n});\n"],"names":["TOTAL_REDIRECTS","PAGE_SIZE","BASE_TIME","Date","minutes","n","createRedirects","count","Array","_","i","Redirect","sortRedirects","redirects","sort","field","direction","multiplier","a","b","left","String","right","createListGateway","vi","params","sorted","offset","Number","limit","data","next","hasMoreItems","createFolderTreePresenter","vm","observable","undefined","range","from","to","step","ids","describe","presenter","container","rowIds","row","waitForQuery","expect","initAndWait","sortAndWait","loadAll","beforeEach","Container","RedirectsListCache","ListCache","ListRedirectsGateway","ListRedirectsRepository","ListRedirectsUseCase","CreateRedirectGateway","CreateRedirectRepository","CreateRedirectUseCase","UpdateRedirectGateway","existing","r","UpdateRedirectRepository","UpdateRedirectUseCase","ListPresenter","FolderTreePresenter","GetDescendantFoldersUseCase","CreateRedirectPresenter","EditRedirectPresenter","RedirectListPresenter","Abstraction","it","expected","createRedirect","CreateRedirectUseCaseAbstraction","updateRedirect","id","UpdateRedirectUseCaseAbstraction","updated"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"presentation/redirects/RedirectList/RedirectListPresenter.test.js","sources":["../../../../src/presentation/redirects/RedirectList/RedirectListPresenter.test.ts"],"sourcesContent":["import { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { observable } from \"mobx\";\nimport { Container } from \"@webiny/di\";\nimport { ListCache } from \"@webiny/app-admin/features/listCache/index.js\";\nimport { ListPresenter } from \"@webiny/app-admin/presentation/listPresenter/ListPresenter.js\";\nimport { FolderTreePresenter } from \"@webiny/app-aco/presentation/folderTree/abstractions.js\";\nimport { GetDescendantFoldersUseCase } from \"@webiny/app-aco/features/folders/getDescendantFolders/abstractions.js\";\nimport { Redirect } from \"~/domain/Redirect/Redirect.js\";\nimport { RedirectsListCache } from \"~/features/redirects/shared/abstractions.js\";\nimport {\n ListRedirectsGateway,\n type ListRedirectsGatewayParams,\n type ListRedirectsGatewayResult\n} from \"~/features/redirects/listRedirects/abstractions.js\";\nimport { ListRedirectsUseCase } from \"~/features/redirects/listRedirects/ListRedirectsUseCase.js\";\nimport { ListRedirectsRepository } from \"~/features/redirects/listRedirects/ListRedirectsRepository.js\";\nimport {\n CreateRedirectGateway,\n CreateRedirectUseCase as CreateRedirectUseCaseAbstraction\n} from \"~/features/redirects/createRedirect/abstractions.js\";\nimport { CreateRedirectUseCase } from \"~/features/redirects/createRedirect/CreateRedirectUseCase.js\";\nimport { CreateRedirectRepository } from \"~/features/redirects/createRedirect/CreateRedirectRepository.js\";\nimport {\n UpdateRedirectGateway,\n UpdateRedirectUseCase as UpdateRedirectUseCaseAbstraction,\n type UpdateRedirectParams\n} from \"~/features/redirects/updateRedirect/abstractions.js\";\nimport { UpdateRedirectUseCase } from \"~/features/redirects/updateRedirect/UpdateRedirectUseCase.js\";\nimport { UpdateRedirectRepository } from \"~/features/redirects/updateRedirect/UpdateRedirectRepository.js\";\nimport {\n CreateRedirectPresenter,\n EditRedirectPresenter,\n RedirectListPresenter as Abstraction\n} from \"./abstractions.js\";\nimport { RedirectListPresenter } from \"./RedirectListPresenter.js\";\n\nconst TOTAL_REDIRECTS = 120;\nconst PAGE_SIZE = 50;\nconst BASE_TIME = Date.UTC(2026, 0, 1);\n\nconst minutes = (n: number) => new Date(BASE_TIME + n * 60_000).toISOString();\n\n/**\n * A higher index means a more recently *created* redirect, but a less recently *saved* one,\n * so sorting by `createdOn` and by `savedOn` produce opposite orders.\n */\nfunction createRedirects(count: number): Redirect[] {\n return Array.from({ length: count }, (_, i) =>\n Redirect.create({\n id: `redirect-${i}`,\n location: { folderId: \"root\" },\n redirectFrom: `/from-${i}`,\n redirectTo: `/to-${i}`,\n redirectType: \"permanent\",\n isEnabled: i % 2 === 0,\n createdOn: minutes(i),\n savedOn: minutes(count - i)\n })\n );\n}\n\n/**\n * Sorts like the API: by the requested field, ties keep the original (id) order.\n */\nfunction sortRedirects(redirects: Redirect[], sort = \"createdOn_DESC\"): Redirect[] {\n const [field, direction] = sort.split(\"_\") as [keyof Redirect, \"ASC\" | \"DESC\"];\n const multiplier = direction === \"ASC\" ? 1 : -1;\n return [...redirects].sort((a, b) => {\n const left = String(a[field]);\n const right = String(b[field]);\n return left === right ? 0 : multiplier * (left < right ? -1 : 1);\n });\n}\n\nfunction createListGateway(redirects: Redirect[]): ListRedirectsGateway.Interface {\n return {\n execute: vi.fn(\n async (params: ListRedirectsGatewayParams): Promise<ListRedirectsGatewayResult> => {\n const sorted = sortRedirects(redirects, params.sort?.[0]);\n const offset = params.after ? Number(params.after) : 0;\n const limit = params.limit ?? PAGE_SIZE;\n const data = sorted.slice(offset, offset + limit);\n const next = offset + data.length;\n const hasMoreItems = next < sorted.length;\n return {\n data,\n meta: {\n cursor: hasMoreItems ? String(next) : null,\n hasMoreItems,\n totalCount: sorted.length\n }\n };\n }\n )\n };\n}\n\nfunction createFolderTreePresenter(): FolderTreePresenter.Interface {\n const vm = observable({\n folders: [],\n tree: [],\n currentFolderId: null as string | null,\n currentFolder: null,\n loading: false,\n operation: { active: false, mode: null },\n isRootFolder: true,\n currentFolderTitle: \"All redirects\",\n childFolders: [],\n loadingNodeIds: []\n });\n\n return {\n get vm() {\n return vm as unknown as FolderTreePresenter.Interface[\"vm\"];\n },\n selectFolder: vi.fn(),\n createFolder: vi.fn(),\n editFolder: vi.fn(),\n deleteFolder: vi.fn().mockResolvedValue(undefined),\n moveFolder: vi.fn().mockResolvedValue(undefined),\n loadChildFolders: vi.fn().mockResolvedValue(undefined),\n canManageStructure: vi.fn().mockReturnValue(true),\n getAncestorIds: vi.fn().mockReturnValue([]),\n submitOperation: vi.fn().mockResolvedValue(true),\n cancelOperation: vi.fn(),\n onFolderChange: vi.fn().mockReturnValue(() => {})\n };\n}\n\n/**\n * Expected redirect IDs for a contiguous range of indexes, in the given order.\n */\nfunction range(from: number, to: number): string[] {\n const step = from <= to ? 1 : -1;\n const ids: string[] = [];\n for (let i = from; step > 0 ? i <= to : i >= to; i += step) {\n ids.push(`redirect-${i}`);\n }\n return ids;\n}\n\ndescribe(\"RedirectListPresenter\", () => {\n let presenter: Abstraction.Interface;\n let container: Container;\n let redirects: Redirect[];\n\n const rowIds = () => presenter.vm.list.rows.map(row => row.id);\n\n const waitForQuery = async (field: string, direction: \"ASC\" | \"DESC\") => {\n await vi.waitFor(() => {\n expect(presenter.vm.list.appliedQuery?.sort).toEqual({ field, direction });\n expect(presenter.vm.list.pagination.loading).toBe(false);\n });\n };\n\n const initAndWait = async () => {\n presenter.init();\n await waitForQuery(\"createdOn\", \"DESC\");\n };\n\n const sortAndWait = async (field: string, direction: \"ASC\" | \"DESC\") => {\n presenter.actions.sort.set(field, direction);\n await waitForQuery(field, direction);\n };\n\n const loadAll = async () => {\n while (presenter.vm.list.pagination.hasMore) {\n await presenter.actions.loadMore();\n }\n };\n\n beforeEach(() => {\n container = new Container();\n redirects = createRedirects(TOTAL_REDIRECTS);\n\n container.registerInstance(RedirectsListCache, new ListCache<Redirect>(\"id\"));\n\n container.registerInstance(ListRedirectsGateway, createListGateway(redirects));\n container.register(ListRedirectsRepository).inSingletonScope();\n container.register(ListRedirectsUseCase);\n\n container.registerInstance(CreateRedirectGateway, {\n execute: vi.fn(async params =>\n Redirect.create({\n ...params,\n id: \"redirect-new\",\n createdOn: minutes(TOTAL_REDIRECTS + 1),\n savedOn: minutes(TOTAL_REDIRECTS + 1)\n })\n )\n });\n container.register(CreateRedirectRepository).inSingletonScope();\n container.register(CreateRedirectUseCase);\n\n container.registerInstance(UpdateRedirectGateway, {\n execute: vi.fn(async (params: UpdateRedirectParams) => {\n const existing = redirects.find(r => r.id === params.id)!;\n return Redirect.create({\n ...existing,\n ...params,\n savedOn: minutes(TOTAL_REDIRECTS + 1)\n });\n })\n });\n container.register(UpdateRedirectRepository).inSingletonScope();\n container.register(UpdateRedirectUseCase);\n\n container.register(ListPresenter);\n container.registerInstance(FolderTreePresenter, createFolderTreePresenter());\n container.registerInstance(GetDescendantFoldersUseCase, { execute: () => [] });\n container.registerInstance(CreateRedirectPresenter, {\n vm: {},\n init: vi.fn(),\n save: vi.fn()\n } as unknown as CreateRedirectPresenter.Interface);\n container.registerInstance(EditRedirectPresenter, {\n vm: {},\n loadRedirect: vi.fn(),\n save: vi.fn()\n } as unknown as EditRedirectPresenter.Interface);\n\n container.register(RedirectListPresenter);\n\n presenter = container.resolve(Abstraction);\n });\n\n describe(\"pagination\", () => {\n it(\"should show the most recently created redirects first\", async () => {\n await initAndWait();\n\n expect(rowIds()).toEqual(range(119, 70));\n });\n\n it(\"should append the next batch of redirects to the bottom of the list\", async () => {\n await initAndWait();\n\n await presenter.actions.loadMore();\n\n expect(rowIds()).toEqual(range(119, 20));\n });\n\n it(\"should keep all redirects in order after loading everything\", async () => {\n await initAndWait();\n\n await loadAll();\n\n expect(rowIds()).toEqual(range(119, 0));\n });\n });\n\n describe(\"changing the sort\", () => {\n it(\"should show only the first batch, sorted by the new field\", async () => {\n await initAndWait();\n\n await sortAndWait(\"savedOn\", \"DESC\");\n\n // `savedOn` runs opposite to `createdOn`, so the most recently saved is redirect-0.\n expect(rowIds()).toEqual(range(0, 49));\n });\n\n it(\"should show only the first batch when sorting by a boolean field\", async () => {\n await initAndWait();\n\n await sortAndWait(\"isEnabled\", \"DESC\");\n\n const expected = sortRedirects(redirects, \"isEnabled_DESC\")\n .slice(0, PAGE_SIZE)\n .map(r => r.id);\n expect(rowIds()).toEqual(expected);\n });\n\n it(\"should restore the original order when switching back\", async () => {\n await initAndWait();\n await presenter.actions.loadMore();\n\n await sortAndWait(\"createdOn\", \"ASC\");\n await sortAndWait(\"createdOn\", \"DESC\");\n\n expect(rowIds()).toEqual(range(119, 70));\n });\n });\n\n describe(\"local cache changes\", () => {\n const createRedirect = () =>\n container.resolve(CreateRedirectUseCaseAbstraction).execute({\n location: { folderId: \"root\" },\n redirectFrom: \"/new\",\n redirectTo: \"/target\",\n redirectType: \"permanent\",\n isEnabled: true\n });\n\n const updateRedirect = (id: string) => {\n const existing = redirects.find(r => r.id === id)!;\n return container.resolve(UpdateRedirectUseCaseAbstraction).execute({\n id,\n redirectFrom: existing.redirectFrom,\n redirectTo: \"/changed\",\n redirectType: existing.redirectType,\n isEnabled: existing.isEnabled\n });\n };\n\n it(\"should show a created redirect at the top when it sorts first\", async () => {\n await initAndWait();\n\n await createRedirect();\n\n expect(rowIds()).toEqual([\"redirect-new\", ...range(119, 70)]);\n });\n\n it(\"should not show a created redirect that sorts past the loaded redirects\", async () => {\n await initAndWait();\n await sortAndWait(\"createdOn\", \"ASC\");\n\n await createRedirect();\n\n // The new redirect is the most recently created, so in ASC order it belongs at the\n // very end, after redirects that are not loaded yet.\n expect(rowIds()).toEqual(range(0, 49));\n });\n\n it(\"should keep an updated redirect in its position when sorted by createdOn\", async () => {\n await initAndWait();\n\n await updateRedirect(\"redirect-100\");\n\n expect(rowIds()).toEqual(range(119, 70));\n const updated = presenter.vm.list.rows.find(row => row.id === \"redirect-100\");\n expect(updated?.redirectTo).toBe(\"/changed\");\n });\n\n it(\"should move an updated redirect to the top when sorted by savedOn\", async () => {\n await initAndWait();\n await sortAndWait(\"savedOn\", \"DESC\");\n\n await updateRedirect(\"redirect-30\");\n\n expect(rowIds()).toEqual([\"redirect-30\", ...range(0, 29), ...range(31, 49)]);\n });\n });\n});\n"],"names":["TOTAL_REDIRECTS","PAGE_SIZE","BASE_TIME","Date","minutes","n","createRedirects","count","Array","_","i","Redirect","sortRedirects","redirects","sort","field","direction","multiplier","a","b","left","String","right","createListGateway","vi","params","sorted","offset","Number","limit","data","next","hasMoreItems","createFolderTreePresenter","vm","observable","undefined","range","from","to","step","ids","describe","presenter","container","rowIds","row","waitForQuery","expect","initAndWait","sortAndWait","loadAll","beforeEach","Container","RedirectsListCache","ListCache","ListRedirectsGateway","ListRedirectsRepository","ListRedirectsUseCase","CreateRedirectGateway","CreateRedirectRepository","CreateRedirectUseCase","UpdateRedirectGateway","existing","r","UpdateRedirectRepository","UpdateRedirectUseCase","ListPresenter","FolderTreePresenter","GetDescendantFoldersUseCase","CreateRedirectPresenter","EditRedirectPresenter","RedirectListPresenter","Abstraction","it","expected","createRedirect","CreateRedirectUseCaseAbstraction","updateRedirect","id","UpdateRedirectUseCaseAbstraction","updated"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const BulkActionDelete: (() => React.JSX.Element) & {
|
|
3
|
-
|
|
2
|
+
export declare const BulkActionDelete: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element;
|
|
4
4
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const BulkActionMove: (() => React.JSX.Element) & {
|
|
3
|
-
|
|
2
|
+
export declare const BulkActionMove: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element;
|
|
4
4
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const CreateRedirectDialog: (() => React.JSX.Element | null) & {
|
|
3
|
-
|
|
2
|
+
export declare const CreateRedirectDialog: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element | null;
|
|
4
4
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
export declare const EditRedirectDialog: (() => React.JSX.Element | null) & {
|
|
3
|
-
|
|
2
|
+
export declare const EditRedirectDialog: (() => React.JSX.Element | null) & React.NamedExoticComponent<unknown> & {
|
|
3
|
+
readonly type: () => React.JSX.Element | null;
|
|
4
4
|
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseEditor/defaultConfig/Content/usePreviewDomain.js","sources":["../../../../src/BaseEditor/defaultConfig/Content/usePreviewDomain.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useLocalStorage } from \"@webiny/app\";\nimport { usePreviewDomain as useSharedPreviewDomain } from \"@webiny/frontend-settings/exports/admin.js\";\n\nconst CUSTOM_PREVIEW_DOMAIN = \"custom_preview_domain\";\n\nexport const usePreviewDomain = () => {\n const { previewDomain, isOverridden } = useSharedPreviewDomain();\n const localStorage = useLocalStorage();\n\n const setPreviewDomain = useCallback(\n (domain: string) => {\n if (domain === previewDomain) {\n localStorage.remove(CUSTOM_PREVIEW_DOMAIN);\n } else {\n localStorage.set(CUSTOM_PREVIEW_DOMAIN, domain);\n }\n },\n [previewDomain]\n );\n\n const unsetPreviewDomain = useCallback(() => {\n localStorage.remove(CUSTOM_PREVIEW_DOMAIN);\n }, []);\n\n return {\n previewDomain,\n setPreviewDomain,\n unsetPreviewDomain,\n isOverridden\n };\n};\n"],"names":["CUSTOM_PREVIEW_DOMAIN","usePreviewDomain","previewDomain","isOverridden","useSharedPreviewDomain","localStorage","useLocalStorage","setPreviewDomain","useCallback","domain","unsetPreviewDomain"],"mappings":";;;AAIA,MAAMA,wBAAwB;AAEvB,MAAMC,oCAAmB;IAC5B,MAAM,EAAEC,aAAa,EAAEC,YAAY,EAAE,GAAGC;IACxC,MAAMC,eAAeC;IAErB,MAAMC,mBAAmBC,YACrB,CAACC;QACG,IAAIA,WAAWP,eACXG,aAAa,MAAM,CAACL;aAEpBK,aAAa,GAAG,CAACL,uBAAuBS;IAEhD,GACA;QAACP;KAAc;IAGnB,MAAMQ,qBAAqBF,YAAY;QACnCH,aAAa,MAAM,CAACL;IACxB,GAAG,EAAE;IAEL,OAAO;QACHE;QACAK;QACAG;QACAP;IACJ;AACJ"}
|