Files
TaxHacker_s23/components/settings/global-settings-form.tsx
2025-03-21 18:42:14 +01:00

61 lines
1.9 KiB
TypeScript

"use client"
import { saveSettingsAction } from "@/app/settings/actions"
import { FormSelectCategory } from "@/components/forms/select-category"
import { FormSelectCurrency } from "@/components/forms/select-currency"
import { FormSelectType } from "@/components/forms/select-type"
import { FormInput } from "@/components/forms/simple"
import { Button } from "@/components/ui/button"
import { Category, Currency } from "@prisma/client"
import { CircleCheckBig } from "lucide-react"
import { useActionState } from "react"
import { FormError } from "../forms/error"
export default function GlobalSettingsForm({
settings,
currencies,
categories,
}: {
settings: Record<string, string>
currencies: Currency[]
categories: Category[]
}) {
const [saveState, saveAction, pending] = useActionState(saveSettingsAction, null)
return (
<form action={saveAction} className="space-y-4">
<FormInput title="App Title" name="app_title" defaultValue={settings.app_title} />
<FormSelectCurrency
title="Default Currency"
name="default_currency"
defaultValue={settings.default_currency}
currencies={currencies}
/>
<FormSelectType title="Default Transaction Type" name="default_type" defaultValue={settings.default_type} />
<FormSelectCategory
title="Default Transaction Category"
name="default_category"
defaultValue={settings.default_category}
categories={categories}
/>
<div className="flex flex-row items-center gap-4">
<Button type="submit" disabled={pending}>
{pending ? "Saving..." : "Save Settings"}
</Button>
{saveState?.success && (
<p className="text-green-500 flex flex-row items-center gap-2">
<CircleCheckBig />
Saved!
</p>
)}
</div>
{saveState?.error && <FormError>{saveState.error}</FormError>}
</form>
)
}