Presupuestador_web/client/src/app/settings/edit.tsx

236 lines
7.5 KiB
TypeScript
Raw Normal View History

2024-06-17 16:54:30 +00:00
import { FormTextAreaField } from "@/components";
2024-06-14 12:07:20 +00:00
import {
2024-06-17 16:54:30 +00:00
Alert,
AlertDescription,
AlertTitle,
2024-06-14 12:07:20 +00:00
Button,
Card,
CardContent,
CardDescription,
CardFooter,
CardHeader,
CardTitle,
2024-06-17 16:54:30 +00:00
Form,
2024-06-14 12:07:20 +00:00
} from "@/ui";
2024-06-17 16:54:30 +00:00
import { t } from "i18next";
import { AlertCircleIcon } from "lucide-react";
import { useState } from "react";
import { SubmitHandler, useForm } from "react-hook-form";
import { Trans } from "react-i18next";
2024-06-14 12:07:20 +00:00
import { Link } from "react-router-dom";
2024-06-17 16:54:30 +00:00
import { useSettings } from "./hooks";
type SettingsDataForm = {
contact_information: string;
default_payment_method: string;
default_notes: string;
default_legal_terms: string;
default_quote_validity: string;
};
2024-06-14 12:07:20 +00:00
export const SettingsEditor = () => {
2024-06-17 16:54:30 +00:00
const [loading, setLoading] = useState(false);
2024-06-18 14:23:27 +00:00
const { useQuery, useMutation } = useSettings();
2024-06-17 16:54:30 +00:00
2024-06-18 14:23:27 +00:00
const { data } = useQuery;
const { mutate } = useMutation;
2024-06-17 16:54:30 +00:00
const form = useForm<SettingsDataForm>({
mode: "onBlur",
2024-06-18 14:23:27 +00:00
values: data,
2024-06-17 16:54:30 +00:00
defaultValues: {
2024-06-18 14:23:27 +00:00
contact_information: "",
default_payment_method: "",
default_notes: "",
default_legal_terms: "",
default_quote_validity: "",
2024-06-17 16:54:30 +00:00
},
/*resolver: joiResolver(
Joi.object({
email: Joi.string()
.email({ tlds: { allow: false } })
.required(),
password: Joi.string().min(4).alphanum().required(),
}),
{
messages: SpanishJoiMessages,
}
),*/
});
const onSubmit: SubmitHandler<SettingsDataForm> = async (data) => {
try {
setLoading(true);
console.log(data);
mutate(data);
} finally {
setLoading(false);
}
};
2024-06-14 12:07:20 +00:00
return (
2024-06-17 16:54:30 +00:00
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)}>
<div className='mx-auto grid w-full max-w-6xl items-start gap-6 md:grid-cols-[180px_1fr] lg:grid-cols-[250px_1fr]'>
{form.formState.errors.root?.message && (
<Alert variant='destructive'>
<AlertCircleIcon className='w-4 h-4' />
<AlertTitle>
<Trans i18nKey='common.error' />
</AlertTitle>
<AlertDescription>{form.formState.errors.root?.message}</AlertDescription>
</Alert>
)}
<nav className='grid gap-4 text-sm text-muted-foreground'>
<Link to='#' className='font-semibold text-primary'>
<Trans i18nKey='settings.quotes.title' />
</Link>
<Link to='#'>
<Trans i18nKey='settings.quotes.general' />
</Link>
<Link to='#'>Integrations</Link>
<Link to='#'>Support</Link>
<Link to='#'>Organizations</Link>
<Link to='#'>Advanced</Link>
</nav>
<div className='grid gap-6'>
<Card>
<CardHeader>
<CardTitle>
<Trans i18nKey='settings.quotes.contact_information.label' />
</CardTitle>
<CardDescription>
<Trans i18nKey='settings.quotes.contact_information.desc' />
</CardDescription>
</CardHeader>
<CardContent>
<FormTextAreaField
disabled={loading}
placeholder={t("settings.quotes.contact_information.placeholder")}
{...form.register("contact_information", {
required: true,
})}
errors={form.formState.errors}
/>
</CardContent>
<CardFooter className='px-6 py-4 border-t'>
<Button>
<Trans i18nKey='common.save' />
</Button>
</CardFooter>
</Card>
<Card>
<CardHeader>
<CardTitle>
<Trans i18nKey='settings.quotes.default_payment_method.label' />
</CardTitle>
<CardDescription>
<Trans i18nKey='settings.quotes.default_payment_method.desc' />
</CardDescription>
</CardHeader>
<CardContent>
<FormTextAreaField
disabled={loading}
placeholder={t("settings.quotes.default_payment_method.placeholder")}
{...form.register("default_payment_method", {
required: true,
})}
errors={form.formState.errors}
/>
</CardContent>
<CardFooter className='px-6 py-4 border-t'>
<Button>
<Trans i18nKey='common.save' />
</Button>
</CardFooter>
</Card>
<Card>
<CardHeader>
<CardTitle>
<Trans i18nKey='settings.quotes.default_quote_validity.label' />
</CardTitle>
<CardDescription>
<Trans i18nKey='settings.quotes.default_quote_validity.desc' />
</CardDescription>
</CardHeader>
<CardContent>
<FormTextAreaField
disabled={loading}
placeholder={t("settings.quotes.default_quote_validity.placeholder")}
{...form.register("default_quote_validity", {
required: true,
})}
errors={form.formState.errors}
/>
</CardContent>
<CardFooter className='px-6 py-4 border-t'>
<Button>
<Trans i18nKey='common.save' />
</Button>
</CardFooter>
</Card>
<Card>
<CardHeader>
<CardTitle>
<Trans i18nKey='settings.quotes.default_notes.label' />
</CardTitle>
<CardDescription>
<Trans i18nKey='settings.quotes.default_notes.desc' />
</CardDescription>
</CardHeader>
<CardContent>
<FormTextAreaField
disabled={loading}
placeholder={t("settings.quotes.default_notes.placeholder")}
{...form.register("default_notes", {
required: true,
})}
errors={form.formState.errors}
/>
</CardContent>
<CardFooter className='px-6 py-4 border-t'>
<Button>
<Trans i18nKey='common.save' />
</Button>
</CardFooter>
</Card>
<Card>
<CardHeader>
<CardTitle>
<Trans i18nKey='settings.quotes.default_legal_terms.label' />
</CardTitle>
<CardDescription>
<Trans i18nKey='settings.quotes.default_legal_terms.desc' />
</CardDescription>
</CardHeader>
<CardContent>
<FormTextAreaField
disabled={loading}
placeholder={t("settings.quotes.default_legal_terms.placeholder")}
{...form.register("default_legal_terms", {
required: true,
})}
errors={form.formState.errors}
/>
</CardContent>
<CardFooter className='px-6 py-4 border-t'>
<Button>
<Trans i18nKey='common.save' />
</Button>
</CardFooter>
</Card>
</div>
</div>
</form>
</Form>
2024-06-14 12:07:20 +00:00
);
};