1- import React from "react" ;
1+ import React , { useCallback } from "react" ;
22import { List , OverlayLoader } from "@webiny/admin-ui" ;
3+ import { useRouter } from "@webiny/app" ;
34import RevisionListItem from "./RevisionListItem.js" ;
45import type { Page } from "~/domain/Page/index.js" ;
6+ import type { PageRevision } from "~/domain/PageRevision/index.js" ;
7+ import { Routes } from "~/routes.js" ;
58import { useRevisionList } from "./useRevisionList.js" ;
9+ import { usePageEditorDrawer } from "./usePageEditorDrawer.js" ;
610
711interface IRevisionsListProps {
812 page : Pick < Page , "id" > ;
@@ -11,14 +15,45 @@ interface IRevisionsListProps {
1115export const RevisionsList = ( props : IRevisionsListProps ) => {
1216 const { page } = props ;
1317 const { vm } = useRevisionList ( page . id ) ;
18+ const { goToRoute } = useRouter ( ) ;
19+ const { openRevisionList } = usePageEditorDrawer ( ) ;
20+
21+ /**
22+ * Deleting the revision that is open in the editor would leave the editor on a revision that
23+ * no longer exists, so we move to the newest remaining one, or back to the list if none is left.
24+ */
25+ const onDeleted = useCallback (
26+ ( revision : PageRevision ) => {
27+ if ( revision . id !== page . id ) {
28+ return ;
29+ }
30+
31+ openRevisionList ( false ) ;
32+
33+ const next = vm . revisions . find ( item => item . revision . id !== revision . id ) ;
34+ if ( ! next ) {
35+ goToRoute ( Routes . Pages . List ) ;
36+ return ;
37+ }
38+
39+ goToRoute ( Routes . Pages . Editor , {
40+ id : next . revision . id
41+ } ) ;
42+ } ,
43+ [ page . id , vm . revisions , openRevisionList ]
44+ ) ;
1445
1546 return (
1647 < div className = { "relative" } >
1748 { ( vm . isLoading || vm . isMutating ) && < OverlayLoader /> }
1849 { vm . revisions . length ? (
1950 < List data-testid = { "cms.content-form.revisions" } >
2051 { vm . revisions . map ( item => (
21- < RevisionListItem item = { item } key = { item . revision . id } />
52+ < RevisionListItem
53+ item = { item }
54+ key = { item . revision . id }
55+ onDeleted = { onDeleted }
56+ />
2257 ) ) }
2358 </ List >
2459 ) : (
0 commit comments