This commit is contained in:
David Arranz 2024-08-12 13:26:10 +02:00
parent 608169c2b9
commit bb3ab3dbb4
10 changed files with 46 additions and 21 deletions

View File

@ -8,6 +8,7 @@ import { DataTableProvider } from "@/lib/hooks";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/ui"; import { ResizableHandle, ResizablePanel, ResizablePanelGroup } from "@/ui";
import { CurrencyData, Language, Quantity } from "@shared/contexts"; import { CurrencyData, Language, Quantity } from "@shared/contexts";
import { ColumnDef } from "@tanstack/react-table";
import { t } from "i18next"; import { t } from "i18next";
import { useCallback, useState } from "react"; import { useCallback, useState } from "react";
import { useFieldArray, useFormContext } from "react-hook-form"; import { useFieldArray, useFormContext } from "react-hook-form";
@ -30,7 +31,7 @@ export const QuoteDetailsCardEditor = ({
name: "items", name: "items",
}); });
const columns = useDetailColumns( const columns: ColumnDef<unknown, unknown>[] = useDetailColumns(
[ [
/*{ /*{
id: "row_id" as const, id: "row_id" as const,
@ -82,7 +83,7 @@ export const QuoteDetailsCardEditor = ({
header: () => ( header: () => (
<div className='text-right'>{t("quotes.form_fields.items.unit_price.label")}</div> <div className='text-right'>{t("quotes.form_fields.items.unit_price.label")}</div>
), ),
cell: ({ row: { index }, column: { id } }) => { cell: ({ row: { index } }) => {
return ( return (
<FormCurrencyField <FormCurrencyField
variant='outline' variant='outline'
@ -102,7 +103,7 @@ export const QuoteDetailsCardEditor = ({
<div className='text-right'>{t("quotes.form_fields.items.subtotal_price.label")}</div> <div className='text-right'>{t("quotes.form_fields.items.subtotal_price.label")}</div>
), ),
size: 12, size: 12,
cell: ({ row: { index }, column: { id } }) => { cell: ({ row: { index } }) => {
return ( return (
<FormCurrencyField <FormCurrencyField
variant='outline' variant='outline'
@ -141,7 +142,7 @@ export const QuoteDetailsCardEditor = ({
<div className='text-right'>{t("quotes.form_fields.items.total_price.label")}</div> <div className='text-right'>{t("quotes.form_fields.items.total_price.label")}</div>
), ),
size: 12, size: 12,
cell: ({ row: { index }, column: { id } }) => { cell: ({ row: { index } }) => {
return ( return (
<FormCurrencyField <FormCurrencyField
variant='outline' variant='outline'

View File

@ -48,7 +48,7 @@ export const QuoteCreate = () => {
}, },
onSuccess: (data) => { onSuccess: (data) => {
reset(getValues()); reset(getValues());
toast("Cotización guardada"); toast.success("Cotización guardada");
navigate(`/quotes/edit/${data.id}`, { relative: "path", replace: true }); navigate(`/quotes/edit/${data.id}`, { relative: "path", replace: true });
}, },
}); });

View File

@ -15,6 +15,7 @@ import { useEffect, useMemo, useState } from "react";
import { SubmitHandler, useForm } from "react-hook-form"; import { SubmitHandler, useForm } from "react-hook-form";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { QuotePricesResume } from "./components"; import { QuotePricesResume } from "./components";
import { QuoteDetailsCardEditor, QuoteGeneralCardEditor } from "./components/editors"; import { QuoteDetailsCardEditor, QuoteGeneralCardEditor } from "./components/editors";
import { useQuotes } from "./hooks"; import { useQuotes } from "./hooks";
@ -140,7 +141,7 @@ export const QuoteEdit = () => {
//onSettled: () => {}, //onSettled: () => {},
onSuccess: () => { onSuccess: () => {
reset(getValues()); reset(getValues());
toast("Cotización guardada"); toast.success("Cotización guardada");
//clear(); //clear();
}, },
}); });

View File

@ -9,7 +9,7 @@ import { ColumnDef, Row, Table } from "@tanstack/react-table";
import { useMemo } from "react"; import { useMemo } from "react";
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
export function useDetailColumns<TData, TValue = unknown>( export function useDetailColumns<TData = unknown, TValue = unknown>(
columns: ColumnDef<TData>[], columns: ColumnDef<TData>[],
options: { options: {
enableDragHandleColumn?: boolean; enableDragHandleColumn?: boolean;
@ -17,7 +17,7 @@ export function useDetailColumns<TData, TValue = unknown>(
enableActionsColumn?: boolean; enableActionsColumn?: boolean;
rowActionFn?: DataTablaRowActionFunction<TData>; rowActionFn?: DataTablaRowActionFunction<TData>;
} = {} } = {}
): ColumnDef<TData>[] { ): ColumnDef<TData, TValue>[] {
const { const {
enableDragHandleColumn = false, enableDragHandleColumn = false,
enableSelectionColumn = false, enableSelectionColumn = false,

View File

@ -81,7 +81,7 @@ export const SettingsEditor = () => {
//onSettled: () => {}, //onSettled: () => {},
onSuccess: () => { onSuccess: () => {
reset(getValues()); reset(getValues());
toast("Ajustes guardados"); toast.success("Ajustes guardados");
}, },
}); });
}; };

View File

@ -9,6 +9,7 @@ import {
} from "@/ui"; } from "@/ui";
import * as React from "react"; import * as React from "react";
import { cva, type VariantProps } from "class-variance-authority";
import { import {
FieldErrors, FieldErrors,
FieldPath, FieldPath,
@ -19,6 +20,19 @@ import {
import { FormErrorMessage } from "./FormErrorMessage"; import { FormErrorMessage } from "./FormErrorMessage";
import { FormLabel, FormLabelProps } from "./FormLabel"; import { FormLabel, FormLabelProps } from "./FormLabel";
const formTextAreaFieldVariants = cva("", {
variants: {
variant: {
default: "",
outline:
"border-0 focus-visible:border focus-visible:border-input focus-visible:ring-0 focus-visible:ring-offset-0 ",
},
},
defaultVariants: {
variant: "default",
},
});
export type FormTextAreaFieldProps< export type FormTextAreaFieldProps<
TFieldValues extends FieldValues = FieldValues, TFieldValues extends FieldValues = FieldValues,
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues> TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>
@ -30,7 +44,7 @@ export type FormTextAreaFieldProps<
} & Partial<FormLabelProps> & } & Partial<FormLabelProps> &
UseControllerProps<TFieldValues, TName> & { UseControllerProps<TFieldValues, TName> & {
errors?: FieldErrors<TFieldValues>; errors?: FieldErrors<TFieldValues>;
}; } & VariantProps<typeof formTextAreaFieldVariants>;
export const FormTextAreaField = React.forwardRef< export const FormTextAreaField = React.forwardRef<
HTMLDivElement, HTMLDivElement,
@ -48,6 +62,7 @@ export const FormTextAreaField = React.forwardRef<
className, className,
autoSize, autoSize,
variant,
...props ...props
}, },
@ -69,7 +84,8 @@ export const FormTextAreaField = React.forwardRef<
placeholder={placeholder} placeholder={placeholder}
className={cn( className={cn(
fieldState.error ? "border-destructive focus-visible:ring-destructive" : "", fieldState.error ? "border-destructive focus-visible:ring-destructive" : "",
"resize-y" "resize-y",
formTextAreaFieldVariants({ variant, className })
)} )}
{...props} {...props}
{...field} {...field}
@ -79,7 +95,8 @@ export const FormTextAreaField = React.forwardRef<
placeholder={placeholder} placeholder={placeholder}
className={cn( className={cn(
fieldState.error ? "border-destructive focus-visible:ring-destructive" : "", fieldState.error ? "border-destructive focus-visible:ring-destructive" : "",
"resize-y" "resize-y",
formTextAreaFieldVariants({ variant, className })
)} )}
{...props} {...props}
{...field} {...field}

View File

@ -1,4 +1,5 @@
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
import { Toaster } from "@/ui";
import { PropsWithChildren } from "react"; import { PropsWithChildren } from "react";
export const LayoutContent = ({ export const LayoutContent = ({
@ -8,14 +9,17 @@ export const LayoutContent = ({
className?: string; className?: string;
}>) => { }>) => {
return ( return (
<main <>
className={cn( <main
"flex min-h-[calc(100vh_-_theme(spacing.36))] flex-1 flex-col gap-4 bg-muted/40 p-4 md:gap-8 md:p-10", className={cn(
className "flex min-h-[calc(100vh_-_theme(spacing.36))] flex-1 flex-col gap-4 bg-muted/40 p-4 md:gap-8 md:p-10",
)} className
> )}
{children} >
</main> {children}
</main>
<Toaster />
</>
); );
}; };

View File

@ -3,6 +3,7 @@ import { ILogin_DTO } from "@shared/contexts";
import { UseMutationOptions, useMutation } from "@tanstack/react-query"; import { UseMutationOptions, useMutation } from "@tanstack/react-query";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { useQueryKey } from "../useQueryKey"; import { useQueryKey } from "../useQueryKey";
export const useLogin = (params?: UseMutationOptions<AuthActionResponse, Error, ILogin_DTO>) => { export const useLogin = (params?: UseMutationOptions<AuthActionResponse, Error, ILogin_DTO>) => {

View File

@ -2,6 +2,7 @@ import { AuthActionResponse, useAuth } from "@/lib/hooks";
import { UseMutationOptions, useMutation } from "@tanstack/react-query"; import { UseMutationOptions, useMutation } from "@tanstack/react-query";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { useQueryKey } from "../useQueryKey"; import { useQueryKey } from "../useQueryKey";
export const useLogout = (params?: UseMutationOptions<AuthActionResponse, Error>) => { export const useLogout = (params?: UseMutationOptions<AuthActionResponse, Error>) => {

View File

@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { toast } from "sonner"; import { toast } from "react-toastify";
import { type OurFileRouter } from "@/app/api/uploadthing/core"; import { type OurFileRouter } from "@/app/api/uploadthing/core";
import { getErrorMessage } from "@/lib/handle-error"; import { getErrorMessage } from "@/lib/handle-error";