140 lines
3.6 KiB
TypeScript
140 lines
3.6 KiB
TypeScript
import { FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage } from "~/client/components/ui/form";
|
|
import { Input } from "~/client/components/ui/input";
|
|
import type { UseFormReturn } from "react-hook-form";
|
|
import type { InternalFormValues } from "./types";
|
|
|
|
type RetentionSectionProps = {
|
|
form: UseFormReturn<InternalFormValues>;
|
|
};
|
|
|
|
export const RetentionSection = ({ form }: RetentionSectionProps) => {
|
|
return (
|
|
<>
|
|
<FormField
|
|
control={form.control}
|
|
name="keepLast"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep last N snapshots</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
{...field}
|
|
type="number"
|
|
min={0}
|
|
placeholder="Optional"
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the N most recent snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
<FormField
|
|
control={form.control}
|
|
name="keepHourly"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep hourly</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
type="number"
|
|
min={0}
|
|
placeholder="Optional"
|
|
{...field}
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the last N hourly snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
<FormField
|
|
control={form.control}
|
|
name="keepDaily"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep daily</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
type="number"
|
|
min={0}
|
|
placeholder="e.g., 7"
|
|
{...field}
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the last N daily snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
<FormField
|
|
control={form.control}
|
|
name="keepWeekly"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep weekly</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
type="number"
|
|
min={0}
|
|
placeholder="e.g., 4"
|
|
{...field}
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the last N weekly snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
<FormField
|
|
control={form.control}
|
|
name="keepMonthly"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep monthly</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
type="number"
|
|
min={0}
|
|
placeholder="e.g., 6"
|
|
{...field}
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the last N monthly snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
|
|
<FormField
|
|
control={form.control}
|
|
name="keepYearly"
|
|
render={({ field }) => (
|
|
<FormItem>
|
|
<FormLabel>Keep yearly</FormLabel>
|
|
<FormControl>
|
|
<Input
|
|
type="number"
|
|
min={0}
|
|
placeholder="Optional"
|
|
{...field}
|
|
onChange={(v) => field.onChange(v.target.value === "" ? undefined : Number(v.target.value))}
|
|
/>
|
|
</FormControl>
|
|
<FormDescription>Keep the last N yearly snapshots.</FormDescription>
|
|
<FormMessage />
|
|
</FormItem>
|
|
)}
|
|
/>
|
|
</>
|
|
);
|
|
};
|