feat(ui): add keep the latest input in create backups dialog

This commit is contained in:
vicke4 2025-03-03 01:55:12 +05:30
parent b35bd9b719
commit d1391d7ddb
2 changed files with 27 additions and 3 deletions

View File

@ -54,6 +54,7 @@ const AddPostgresBackup1Schema = z.object({
prefix: z.string().min(1, "Prefix required"), prefix: z.string().min(1, "Prefix required"),
enabled: z.boolean(), enabled: z.boolean(),
database: z.string().min(1, "Database required"), database: z.string().min(1, "Database required"),
keepLatestCount: z.coerce.number().optional(),
}); });
type AddPostgresBackup = z.infer<typeof AddPostgresBackup1Schema>; type AddPostgresBackup = z.infer<typeof AddPostgresBackup1Schema>;
@ -77,6 +78,7 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => {
enabled: true, enabled: true,
prefix: "/", prefix: "/",
schedule: "", schedule: "",
keepLatestCount: undefined,
}, },
resolver: zodResolver(AddPostgresBackup1Schema), resolver: zodResolver(AddPostgresBackup1Schema),
}); });
@ -88,6 +90,7 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => {
enabled: true, enabled: true,
prefix: "/", prefix: "/",
schedule: "", schedule: "",
keepLatestCount: undefined,
}); });
}, [form, form.reset, form.formState.isSubmitSuccessful]); }, [form, form.reset, form.formState.isSubmitSuccessful]);
@ -117,6 +120,7 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => {
schedule: data.schedule, schedule: data.schedule,
enabled: data.enabled, enabled: data.enabled,
database: data.database, database: data.database,
keepLatestCount: data.keepLatestCount,
databaseType, databaseType,
...getDatabaseId, ...getDatabaseId,
}) })
@ -265,7 +269,7 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => {
<Input placeholder={"dokploy/"} {...field} /> <Input placeholder={"dokploy/"} {...field} />
</FormControl> </FormControl>
<FormDescription> <FormDescription>
Use if you want to storage in a specific path of your Use if you want to back up in a specific path of your
destination/bucket destination/bucket
</FormDescription> </FormDescription>
@ -274,6 +278,24 @@ export const AddBackup = ({ databaseId, databaseType, refetch }: Props) => {
); );
}} }}
/> />
<FormField
control={form.control}
name="keepLatestCount"
render={({ field }) => {
return (
<FormItem>
<FormLabel>Keep the latest</FormLabel>
<FormControl>
<Input type="number" placeholder={"keeps all the backups if left empty"} {...field} />
</FormControl>
<FormDescription>
Optional. If provided, only keeps the latest N backups in the cloud.
</FormDescription>
<FormMessage />
</FormItem>
);
}}
/>
<FormField <FormField
control={form.control} control={form.control}
name="enabled" name="enabled"

View File

@ -47,7 +47,7 @@ const UpdateBackupSchema = z.object({
prefix: z.string().min(1, "Prefix required"), prefix: z.string().min(1, "Prefix required"),
enabled: z.boolean(), enabled: z.boolean(),
database: z.string().min(1, "Database required"), database: z.string().min(1, "Database required"),
keepLatestCount: z.coerce.number(), keepLatestCount: z.coerce.number().optional(),
}); });
type UpdateBackup = z.infer<typeof UpdateBackupSchema>; type UpdateBackup = z.infer<typeof UpdateBackupSchema>;
@ -92,6 +92,7 @@ export const UpdateBackup = ({ backupId, refetch }: Props) => {
enabled: backup.enabled || false, enabled: backup.enabled || false,
prefix: backup.prefix, prefix: backup.prefix,
schedule: backup.schedule, schedule: backup.schedule,
keepLatestCount: backup.keepLatestCount ? Number(backup.keepLatestCount) : undefined,
}); });
} }
}, [form, form.reset, backup]); }, [form, form.reset, backup]);
@ -104,6 +105,7 @@ export const UpdateBackup = ({ backupId, refetch }: Props) => {
schedule: data.schedule, schedule: data.schedule,
enabled: data.enabled, enabled: data.enabled,
database: data.database, database: data.database,
keepLatestCount: data.keepLatestCount as number | null,
}) })
.then(async () => { .then(async () => {
toast.success("Backup Updated"); toast.success("Backup Updated");