@@ -86,32 +86,35 @@ export const RestoreBackupModal = ({
8686 size = "xl"
8787 >
8888 < div className = "space-y-4" >
89- < div className = "flex gap-2" >
89+ < div className = "flex flex-col sm:flex-row gap-2" >
9090 < Button
9191 variant = "outline"
9292 onClick = { onBackupAll }
9393 className = "btn-outline flex-1"
9494 >
95- < DownloadIcon className = "h-4 w-4 mr-2" />
96- { t ( "cronjobs.backupAll" ) }
95+ < DownloadIcon className = "h-4 w-4 sm:mr-2" />
96+ < span className = "hidden sm:inline" > { t ( "cronjobs.backupAll" ) } </ span >
97+ < span className = "sm:hidden" > Backup</ span >
9798 </ Button >
9899 { backups . length > 0 && (
99100 < Button
100101 variant = "outline"
101102 onClick = { handleRestoreAll }
102103 className = "btn-primary flex-1"
103104 >
104- < UploadIcon className = "h-4 w-4 mr-2" />
105- { t ( "cronjobs.restoreAll" ) }
105+ < UploadIcon className = "h-4 w-4 sm:mr-2" />
106+ < span className = "hidden sm:inline" > { t ( "cronjobs.restoreAll" ) } </ span >
107+ < span className = "sm:hidden" > Restore</ span >
106108 </ Button >
107109 ) }
108110 < Button
109111 variant = "outline"
110112 onClick = { onRefresh }
111- className = "btn-outline"
113+ className = "btn-outline sm:w-auto "
112114 title = { t ( "common.refresh" ) }
113115 >
114116 < ArrowsClockwiseIcon className = "h-4 w-4" />
117+ < span className = "sm:hidden ml-2" > Refresh</ span >
115118 </ Button >
116119 </ div >
117120
@@ -126,7 +129,72 @@ export const RestoreBackupModal = ({
126129 key = { backup . filename }
127130 className = "tui-card p-3 terminal-font"
128131 >
129- < div className = "flex items-center gap-3" >
132+ < div className = "flex flex-col gap-3 lg:hidden" >
133+ < div className = "flex items-center justify-between" >
134+ < code className = "text-xs bg-background0 text-status-warning px-1.5 py-0.5 terminal-font ascii-border" >
135+ { backup . job . schedule }
136+ </ code >
137+ < div className = "flex items-center gap-2" >
138+ < Button
139+ variant = "outline"
140+ size = "sm"
141+ onClick = { ( ) => {
142+ onRestore ( backup . filename ) ;
143+ onClose ( ) ;
144+ } }
145+ className = "btn-outline h-8 px-3"
146+ title = { t ( "cronjobs.restoreThisBackup" ) }
147+ >
148+ < UploadIcon className = "h-3 w-3" />
149+ </ Button >
150+ < Button
151+ variant = "destructive"
152+ size = "sm"
153+ onClick = { ( ) => handleDelete ( backup . filename ) }
154+ disabled = { deletingFilename === backup . filename }
155+ className = "h-8 px-3"
156+ title = { t ( "cronjobs.deleteBackup" ) }
157+ >
158+ { deletingFilename === backup . filename ? (
159+ < div className = "h-3 w-3 animate-spin rounded-full border-2 border-current border-t-transparent" />
160+ ) : (
161+ < TrashIcon className = "h-3 w-3" />
162+ ) }
163+ </ Button >
164+ </ div >
165+ </ div >
166+
167+ < div className = "flex items-center gap-2" >
168+ { commandCopied === backup . filename && (
169+ < CheckIcon className = "h-3 w-3 text-status-success flex-shrink-0" />
170+ ) }
171+ < pre
172+ onClick = { ( e ) => {
173+ e . stopPropagation ( ) ;
174+ copyToClipboard ( unwrapCommand ( backup . job . command ) ) ;
175+ setCommandCopied ( backup . filename ) ;
176+ setTimeout ( ( ) => setCommandCopied ( null ) , 3000 ) ;
177+ } }
178+ className = "max-w-full overflow-x-auto flex-1 cursor-pointer text-sm font-medium terminal-font bg-background1 px-2 py-1 ascii-border break-all"
179+ title = { unwrapCommand ( backup . job . command ) }
180+ >
181+ { unwrapCommand ( backup . job . command ) }
182+ </ pre >
183+ </ div >
184+
185+ < div className = "flex flex-wrap items-center gap-3 text-xs text-muted-foreground" >
186+ < div className = "flex items-center gap-1" >
187+ < UserIcon className = "h-3 w-3" />
188+ < span > { backup . job . user } </ span >
189+ </ div >
190+ < div className = "flex items-center gap-1" >
191+ < CalendarIcon className = "h-3 w-3" />
192+ < span > { formatDate ( backup . backedUpAt ) } </ span >
193+ </ div >
194+ </ div >
195+ </ div >
196+
197+ < div className = "hidden lg:flex items-center gap-3" >
130198 < div className = "flex-shrink-0" >
131199 < code className = "text-xs bg-background0 text-status-warning px-1.5 py-0.5 terminal-font ascii-border" >
132200 { backup . job . schedule }
@@ -204,11 +272,11 @@ export const RestoreBackupModal = ({
204272 </ div >
205273 ) }
206274
207- < div className = "flex justify-between gap-2 pt-4 border-t border-border" >
208- < p className = "text-sm text-muted-foreground" >
275+ < div className = "flex flex-col sm:flex-row sm: justify-between gap-2 pt-4 border-t border-border" >
276+ < p className = "text-sm text-muted-foreground text-center sm:text-left " >
209277 { t ( "cronjobs.availableBackups" ) } : { backups . length }
210278 </ p >
211- < Button variant = "outline" onClick = { onClose } className = "btn-outline" >
279+ < Button variant = "outline" onClick = { onClose } className = "btn-outline w-full sm:w-auto " >
212280 { t ( "common.close" ) }
213281 </ Button >
214282 </ div >
0 commit comments