.
This commit is contained in:
parent
608169c2b9
commit
bb3ab3dbb4
@ -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'
|
||||||
|
|||||||
@ -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 });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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();
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -81,7 +81,7 @@ export const SettingsEditor = () => {
|
|||||||
//onSettled: () => {},
|
//onSettled: () => {},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
reset(getValues());
|
reset(getValues());
|
||||||
toast("Ajustes guardados");
|
toast.success("Ajustes guardados");
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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}
|
||||||
|
|||||||
@ -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 />
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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>) => {
|
||||||
|
|||||||
@ -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>) => {
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user