1- import { siteBySlugQuery , siteSettingsQuery } from '@automattic/api-queries' ;
2- import { DateRangePicker } from '@automattic/date-range-picker' ;
1+ import { siteBySlugQuery } from '@automattic/api-queries' ;
32import { useSuspenseQuery } from '@tanstack/react-query' ;
43import { useParams , useRouter } from '@tanstack/react-router' ;
5- import { __ } from '@wordpress/i18n' ;
6- import { useCallback } from 'react' ;
7- import Breadcrumbs from '../../../app/breadcrumbs' ;
8- import { useDateRange } from '../../../app/hooks/use-date-range' ;
9- import { useLocale } from '../../../app/locale' ;
4+ import { useMemo } from 'react' ;
105import {
116 agencySiteRoute ,
127 agencySiteBackupsRoute ,
@@ -15,145 +10,59 @@ import {
1510 agencySiteBackupRestoreRoute ,
1611 agencySiteBackupDownloadRoute ,
1712} from '../../../app/router/agency' ;
18- import { PageHeader } from '../../../components/page-header' ;
19- import PageLayout from '../../../components/page-layout' ;
20- import { BackupNotices } from '../../../sites/backups/backup-notices' ;
21- import { BackupNowButton } from '../../../sites/backups/backup-now-button' ;
22- import { BackupsBrowser , useIsBackupsSmallViewport } from '../../../sites/backups/backups-browser' ;
23- import { useBackupState } from '../../../sites/backups/use-backup-state' ;
24- import type { ActivityLogEntry } from '@automattic/api-core' ;
13+ import { BackupsPage , type BackupsNavigation } from '../../../sites/backups/backups-page' ;
2514
2615export default function AgencySiteBackupsListPage ( ) {
2716 const { siteSlug } = agencySiteRoute . useParams ( ) ;
2817 const router = useRouter ( ) ;
29- const locale = useLocale ( ) ;
18+ const { data : site } = useSuspenseQuery ( siteBySlugQuery ( siteSlug ) ) ;
19+ const searchParams = agencySiteBackupsRoute . useSearch ( ) ;
3020
3121 const routeParams = useParams ( { strict : false , shouldThrow : false } ) as
3222 | { rewindId ?: string }
3323 | undefined ;
3424 const rewindId = routeParams ?. rewindId ;
35- const searchParams = agencySiteBackupsRoute . useSearch ( ) ;
36-
37- const { data : site } = useSuspenseQuery ( siteBySlugQuery ( siteSlug ) ) ;
38-
39- const { data : siteSettings } = useSuspenseQuery ( {
40- ...siteSettingsQuery ( site . ID ) ,
41- select : ( s ) => ( {
42- gmtOffset : Number ( s ?. gmt_offset ) || 0 ,
43- timezoneString : s ?. timezone_string || undefined ,
44- } ) ,
45- } ) ;
46- const { gmtOffset, timezoneString } = siteSettings ;
47-
48- const backupState = useBackupState ( site . ID ) ;
49-
50- const { dateRange, handleDateRangeChange } = useDateRange ( {
51- timezoneString,
52- gmtOffset,
53- defaultDays : 30 ,
54- } ) ;
5525
56- const navigateToBackup = useCallback (
57- ( selected : ActivityLogEntry | null ) => {
58- router . navigate (
59- selected
60- ? {
26+ const navigation = useMemo < BackupsNavigation > (
27+ ( ) => ( {
28+ selectBackup : ( id ) =>
29+ id
30+ ? router . navigate ( {
6131 to : agencySiteBackupDetailRoute . fullPath ,
62- params : { siteSlug, rewindId : selected . rewind_id } ,
32+ params : { siteSlug, rewindId : id } ,
6333 search : ( query : Record < string , string > ) => query ,
64- }
65- : {
34+ } )
35+ : router . navigate ( {
6636 to : agencySiteBackupsIndexRoute . fullPath ,
6737 params : { siteSlug } ,
6838 search : ( query : Record < string , string > ) => query ,
69- }
70- ) ;
71- } ,
39+ } ) ,
40+ requestRestore : ( id ) =>
41+ router . navigate ( {
42+ to : agencySiteBackupRestoreRoute . fullPath ,
43+ params : { siteSlug, rewindId : id } ,
44+ } ) ,
45+ requestDownload : ( id , downloadId ) =>
46+ downloadId
47+ ? router . navigate ( {
48+ to : agencySiteBackupDownloadRoute . fullPath ,
49+ params : { siteSlug, rewindId : id } ,
50+ search : { downloadId } ,
51+ } )
52+ : router . navigate ( {
53+ to : agencySiteBackupDownloadRoute . fullPath ,
54+ params : { siteSlug, rewindId : id } ,
55+ } ) ,
56+ } ) ,
7257 [ router , siteSlug ]
7358 ) ;
7459
75- const handleRequestRestore = ( selected : ActivityLogEntry ) => {
76- router . navigate ( {
77- to : agencySiteBackupRestoreRoute . fullPath ,
78- params : { siteSlug, rewindId : selected . rewind_id } ,
79- } ) ;
80- } ;
81-
82- const handleRequestDownload = ( selected : ActivityLogEntry ) => {
83- router . navigate ( {
84- to : agencySiteBackupDownloadRoute . fullPath ,
85- params : { siteSlug, rewindId : selected . rewind_id } ,
86- } ) ;
87- } ;
88-
89- const handleGranularDownloadReady = ( selected : ActivityLogEntry , downloadId : number ) => {
90- router . navigate ( {
91- to : agencySiteBackupDownloadRoute . fullPath ,
92- params : { siteSlug, rewindId : selected . rewind_id } ,
93- search : { downloadId } ,
94- } ) ;
95- } ;
96-
97- const handleDateRangeChangeWrapper = ( next : { start : Date ; end : Date } ) => {
98- handleDateRangeChange ( next ) ;
99- navigateToBackup ( null ) ;
100- } ;
101-
102- const isMobileDetailsView = useIsBackupsSmallViewport ( ) && ! ! rewindId ;
103-
104- const actions = (
105- < >
106- { /* This div is required to fix a layout width issue when the DateRangePicker is placed together with the BackupNowButton. */ }
107- < div >
108- < DateRangePicker
109- start = { dateRange . start }
110- end = { dateRange . end }
111- gmtOffset = { gmtOffset }
112- timezoneString = { timezoneString }
113- locale = { locale }
114- defaultFallbackPreset = "last-30-days"
115- onChange = { handleDateRangeChangeWrapper }
116- />
117- </ div >
118- < BackupNowButton site = { site } backupState = { backupState } />
119- </ >
120- ) ;
121-
12260 return (
123- < PageLayout
124- header = {
125- < PageHeader
126- title = { isMobileDetailsView ? __ ( 'Backup details' ) : __ ( 'Backups' ) }
127- description = { __ (
128- 'Access and restore your site backups, powered by Jetpack VaultPress Backup.'
129- ) }
130- prefix = { isMobileDetailsView ? < Breadcrumbs length = { 2 } /> : undefined }
131- actions = { isMobileDetailsView ? undefined : actions }
132- />
133- }
134- notices = {
135- ! isMobileDetailsView && backupState . status !== 'idle' ? (
136- < BackupNotices
137- backupState = { backupState }
138- site = { site }
139- timezoneString = { timezoneString }
140- gmtOffset = { gmtOffset }
141- />
142- ) : undefined
143- }
144- >
145- < BackupsBrowser
146- site = { site }
147- rewindId = { rewindId }
148- dateRange = { dateRange }
149- timezoneString = { timezoneString }
150- gmtOffset = { gmtOffset }
151- searchParams = { searchParams }
152- onSelectBackup = { navigateToBackup }
153- onRequestRestore = { handleRequestRestore }
154- onRequestDownload = { handleRequestDownload }
155- onGranularDownloadReady = { handleGranularDownloadReady }
156- />
157- </ PageLayout >
61+ < BackupsPage
62+ site = { site }
63+ navigation = { navigation }
64+ rewindId = { rewindId }
65+ searchParams = { searchParams }
66+ />
15867 ) ;
15968}
0 commit comments