Compare commits

..

No commits in common. "957a92aad920bf83c765e00cf6ac71d732883e15" and "d0183609677b16635963419897cd011404a06bfb" have entirely different histories.

14 changed files with 695 additions and 744 deletions

View File

@ -1,34 +1,26 @@
import { Suspense, lazy } from "react";
import { Navigate, Outlet, RouterProvider, createBrowserRouter } from "react-router-dom";
import { LoadingOverlay, ProtectedRoute } from "./components";
// Lazy load components
const DealerLayout = lazy(() => import("./app").then((m) => ({ default: m.DealerLayout })));
const DealersList = lazy(() => import("./app").then((m) => ({ default: m.DealersList })));
const ErrorPage = lazy(() => import("./app").then((m) => ({ default: m.ErrorPage })));
const LoginPageWithLanguageSelector = lazy(() =>
import("./app").then((m) => ({ default: m.LoginPageWithLanguageSelector }))
);
const LogoutPage = lazy(() => import("./app").then((m) => ({ default: m.LogoutPage })));
const QuoteCreate = lazy(() => import("./app").then((m) => ({ default: m.QuoteCreate })));
const QuoteEdit = lazy(() => import("./app").then((m) => ({ default: m.QuoteEdit })));
const SettingsEditor = lazy(() => import("./app").then((m) => ({ default: m.SettingsEditor })));
const SettingsLayout = lazy(() => import("./app").then((m) => ({ default: m.SettingsLayout })));
const CatalogLayout = lazy(() => import("./app").then((m) => ({ default: m.CatalogLayout })));
const CatalogList = lazy(() => import("./app").then((m) => ({ default: m.CatalogList })));
const DashboardPage = lazy(() => import("./app").then((m) => ({ default: m.DashboardPage })));
const QuotesLayout = lazy(() => import("./app").then((m) => ({ default: m.QuotesLayout })));
const QuotesList = lazy(() => import("./app").then((m) => ({ default: m.QuotesList })));
import {
DealerLayout,
DealersList,
ErrorPage,
LoginPageWithLanguageSelector,
LogoutPage,
QuoteCreate,
QuoteEdit,
SettingsEditor,
SettingsLayout,
} from "./app";
import { CatalogLayout, CatalogList } from "./app/catalog";
import { DashboardPage } from "./app/dashboard";
import { QuotesLayout } from "./app/quotes";
import { QuotesList } from "./app/quotes/list";
import { ProtectedRoute } from "./components";
export const Routes = () => {
const routesForErrors = [
{
path: "*",
Element: (
<Suspense fallback={<LoadingOverlay />}>
<ErrorPage />
</Suspense>
),
Component: ErrorPage,
},
];
@ -46,105 +38,71 @@ export const Routes = () => {
path: "/home",
element: (
<ProtectedRoute>
<Suspense fallback={<LoadingOverlay />}>
<DashboardPage />
</Suspense>
<DashboardPage />
</ProtectedRoute>
),
},
{
path: "/catalog",
element: (
<Suspense fallback={<LoadingOverlay />}>
<CatalogLayout>
<Outlet />
</CatalogLayout>
</Suspense>
<CatalogLayout>
<Outlet />
</CatalogLayout>
),
children: [
{
index: true,
element: (
<Suspense fallback={<LoadingOverlay />}>
<CatalogList />
</Suspense>
),
element: <CatalogList />,
},
],
},
{
path: "/dealers",
element: (
<Suspense fallback={<LoadingOverlay />}>
<DealerLayout>
<Outlet />
</DealerLayout>
</Suspense>
<DealerLayout>
<Outlet />
</DealerLayout>
),
children: [
{
index: true,
element: (
<Suspense fallback={<LoadingOverlay />}>
<DealersList />
</Suspense>
),
element: <DealersList />,
},
],
},
{
path: "/quotes",
element: (
<Suspense fallback={<LoadingOverlay />}>
<QuotesLayout>
<Outlet />
</QuotesLayout>
</Suspense>
<QuotesLayout>
<Outlet />
</QuotesLayout>
),
children: [
{
index: true,
element: (
<Suspense fallback={<LoadingOverlay />}>
<QuotesList />
</Suspense>
),
element: <QuotesList />,
},
{
path: "add",
element: (
<Suspense fallback={<LoadingOverlay />}>
<QuoteCreate />
</Suspense>
),
element: <QuoteCreate />,
},
{
path: "edit/:id",
element: (
<Suspense fallback={<LoadingOverlay />}>
<QuoteEdit />
</Suspense>
),
element: <QuoteEdit />,
},
],
},
{
path: "/settings",
element: (
<Suspense fallback={<LoadingOverlay />}>
<SettingsLayout>
<Outlet />
</SettingsLayout>
</Suspense>
<SettingsLayout>
<Outlet />
</SettingsLayout>
),
children: [
{
index: true,
element: (
<Suspense fallback={<LoadingOverlay />}>
<SettingsEditor />
</Suspense>
),
element: <SettingsEditor />,
},
],
},
@ -158,11 +116,7 @@ export const Routes = () => {
const routesForNotAuthenticatedOnly = [
{
path: "/login",
element: (
<Suspense fallback={<LoadingOverlay />}>
<LoginPageWithLanguageSelector />
</Suspense>
),
Component: LoginPageWithLanguageSelector,
},
];

View File

@ -117,11 +117,10 @@ export function CatalogDataTableFilter<TData>({
<Tooltip>
<TooltipTrigger asChild>
<Button
variant='default'
variant='outline'
size='icon'
disabled={!inputValue}
onClick={addFilterTerm}
className='w-8 h-8 p-0 transition-all'
className='w-8 h-8 p-0 hover:bg-muted'
>
<PlusIcon className='w-4 h-4' />
<span className='sr-only'>{t("common.filter.button_add_term")}</span>

View File

@ -72,14 +72,17 @@ export const QuoteItemsSortableDataTableToolbar = ({ table }: { table: Table<any
<div className='flex space-x-2'>
<Tooltip>
<TooltipTrigger asChild>
<AppendEmptyRowButton variant='link' onClick={() => table.options.meta?.appendItem()} />
<AppendEmptyRowButton
variant='ghost'
onClick={() => table.options.meta?.appendItem()}
/>
</TooltipTrigger>
<TooltipContent>{t("common.append_empty_row_tooltip")}</TooltipContent>
</Tooltip>
<Tooltip>
<TooltipTrigger asChild>
<AppendCatalogArticleRowButton
variant='link'
variant='ghost'
onClick={() => {
if (table.options.meta && table.options.meta.pickCatalogArticle) {
table.options.meta?.pickCatalogArticle();
@ -92,7 +95,7 @@ export const QuoteItemsSortableDataTableToolbar = ({ table }: { table: Table<any
<Tooltip>
<TooltipTrigger asChild>
<AppendBlockRowButton
variant='link'
variant='ghost'
onClick={() => {
if (table.options.meta && table.options.meta.pickBlock) {
table.options.meta?.pickBlock();

View File

@ -100,32 +100,32 @@ export const QuoteEdit = () => {
id_article: "",
description: "",
quantity: {
amount: null,
amount: undefined,
scale: 2,
},
unit_price: {
amount: null,
amount: undefined,
scale: 2,
currency_code: quoteCurrency.code,
currency_code: "",
},
subtotal_price: {
amount: null,
amount: undefined,
scale: 2,
currency_code: quoteCurrency.code,
currency_code: "",
},
discount: {
amount: null,
amount: undefined,
scale: 2,
},
total_price: {
amount: null,
amount: undefined,
scale: 2,
currency_code: quoteCurrency.code,
currency_code: "",
},
},
],
}),
[quoteCurrency.code]
[]
);
const { useOne, useUpdate } = useQuotes();

View File

@ -3,10 +3,10 @@ import { PlusIcon } from "lucide-react";
export const SimpleEmptyState = ({
title = "Esto está muy vacío",
subtitle = "Empieza solicitando la carga del catálogo",
buttonText = "Solicitar carga del catálogo",
subtitle = "Empieza dando de alta un item",
buttonText = "Nuevo item",
onButtonClick = () => {},
actions = () => <></>,
actions = undefined,
}) => {
return (
<div className='text-center'>

View File

@ -1,7 +1,6 @@
{
"translation": {
"common": {
"loading": "Loading...",
"required": "required",
"cancel": "Cancel",
"no": "No",

View File

@ -1,7 +1,6 @@
{
"translation": {
"common": {
"loading": "Cargando...",
"required": "obligatorio",
"cancel": "Cancelar",
"no": "No",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

1
dist/client/assets/index-CRnRspMf.css vendored Normal file

File diff suppressed because one or more lines are too long

636
dist/client/assets/index-Dma5RbLy.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
<!doctype html><html><head><meta charset="UTF-8"/><meta name="robots" content="noindex, nofollow"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link href="https://fonts.upset.dev/css2?family=Poppins&display=swap" rel="stylesheet"/><title>Presupuestador Uecko</title><script type="module" crossorigin src="/assets/index-C4qjCyTZ.js"></script><link rel="stylesheet" crossorigin href="/assets/index-enIG-PHa.css"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="uecko"></div></body></html>
<!doctype html><html><head><meta charset="UTF-8"/><meta name="robots" content="noindex, nofollow"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width,initial-scale=1"/><link href="https://fonts.upset.dev/css2?family=Poppins&display=swap" rel="stylesheet"/><title>Presupuestador Uecko</title><script type="module" crossorigin src="/assets/index-Dma5RbLy.js"></script><link rel="stylesheet" crossorigin href="/assets/index-CRnRspMf.css"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="uecko"></div></body></html>