import { AdvancedCronSelect } from "./AdvancedCronSelect"; import {updateBackupPolicyAction} from "@/components/wrappers/Database/CronButton/cron.action"; import {useMutation} from "@tanstack/react-query"; import {useState} from "react"; import {useRouter} from "next/navigation"; import {toast} from "sonner"; import {Database} from "@prisma/client"; import {Button} from "@/components/ui/button"; import {Separator} from "@/components/ui/separator"; export type CronInputProps = { database : Database } export const CronInput = ({ database }: CronInputProps) => { const [cron, setCron] = useState(database.backupPolicy ?? "* * * * *"); const router = useRouter(); const updateBackupPolicy = useMutation({ mutationFn: (value: string) => updateBackupPolicyAction({ databaseId: database.id, backupPolicy: value }), onSuccess: () => { toast.success(`Cron updated successfully.`); router.refresh(); }, onError: () => { toast.error(`An error occurred while updating cron value.`); }, }); const handleChangeCron = (type: string, value: string) => { const cronParts = cron.split(" "); const indexMap = { minute: 0, hour: 1, "day-of-month": 2, month: 3, "day-of-week": 4 }; cronParts[indexMap[type]] = value; setCron(cronParts.join(" ")); }; const handleUpdateCron = async (cron: string) => { await updateBackupPolicy.mutateAsync(cron); }; return ( <>

Configure your cron schedule

String(i).padStart(2, "0"))} type="minute" value={cron.split(" ")[0]} defaultValue={cron.split(" ")[0]} onValueChange={(value) => handleChangeCron("minute", value)} /> String(i).padStart(2, "0"))} type="hour" value={cron.split(" ")[1]} defaultValue={cron.split(" ")[1]} onValueChange={(value) => handleChangeCron("hour", value)} /> String(i + 1).padStart(2, "0"))} type="day-of-month" value={cron.split(" ")[2]} defaultValue={cron.split(" ")[2]} onValueChange={(value) => handleChangeCron("day-of-month", value)} /> handleChangeCron("month", value)} /> handleChangeCron("day-of-week", value)} />
Cron Expression
{cron}
This cron expression determines when the job will run.
); };