import { SettingsInput } from "@client/pages/settings/components/SettingsInput"; import type { NumericSettingValues } from "@client/pages/settings/types"; import type { UpdateSettingsInput } from "@shared/settings-schema.js"; import type React from "react"; import { Controller, useFormContext } from "react-hook-form"; import { AccordionContent, AccordionItem, AccordionTrigger, } from "@/components/ui/accordion"; type NumericFieldName = | "ukvisajobsMaxJobs" | "gradcrackerMaxJobsPerTerm" | "jobspyResultsWanted" | "jobspyHoursOld" | "backupHour" | "backupMaxCount"; type NumericSettingSectionProps = { accordionValue: string; title: string; fieldName: NumericFieldName; label: string; helper: string; values: NumericSettingValues; min: number; max: number; isLoading: boolean; isSaving: boolean; }; export const NumericSettingSection: React.FC = ({ accordionValue, title, fieldName, label, helper, values, min, max, isLoading, isSaving, }) => { const { effective, default: defaultValue } = values; const { control, formState: { errors }, } = useFormContext(); return ( {title}
( { const parsed = parseInt(event.target.value, 10); if (Number.isNaN(parsed)) { field.onChange(null); return; } field.onChange(Math.min(max, Math.max(min, parsed))); }, }} disabled={isLoading || isSaving} error={errors[fieldName]?.message as string | undefined} helper={helper} current={String(effective)} /> )} />
); };