From 53ea788142cd7d46d248f8a93fcd0de3e149c5c0 Mon Sep 17 00:00:00 2001 From: David Arranz Date: Mon, 16 Dec 2024 17:58:39 +0100 Subject: [PATCH] =?UTF-8?q?En=20el=20filtro=20de=20la=20b=C3=BAsqueda=20de?= =?UTF-8?q?l=20cat=C3=A1logo,=20poner=20filtros=20complejos=20compuestos?= =?UTF-8?q?=20por=20AND?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/package.json | 2 +- .../auth/LoginPageWithLanguageSelector.tsx | 11 ++++++- .../components/CatalogDataTableFilter.tsx | 31 ++++++++----------- .../components/CatalogPickerDataTable.tsx | 4 +-- .../editors/QuoteDetailsCardEditor.tsx | 1 - .../app/support/components/SupportModal.tsx | 1 - .../DataTableToolbar/DataTableToolbar.tsx | 16 ++++++++-- .../SorteableDataTable/SortableDataTable.tsx | 6 ---- .../src/lib/axios/createAxiosDataProvider.ts | 4 +-- .../lib/hooks/useDataTable/useDataTable.tsx | 2 +- .../WarnAboutChangeProvider.tsx | 2 +- client/src/locales/en.json | 13 ++++++-- client/src/locales/es.json | 13 ++++++-- package.json | 2 +- server/package.json | 2 +- shared/package.json | 2 +- 16 files changed, 66 insertions(+), 46 deletions(-) diff --git a/client/package.json b/client/package.json index d0818e2..344c23f 100644 --- a/client/package.json +++ b/client/package.json @@ -1,7 +1,7 @@ { "name": "@uecko-presupuestador/client", "private": true, - "version": "1.0.7", + "version": "1.0.8", "author": "Rodax Software ", "type": "module", "scripts": { diff --git a/client/src/app/auth/LoginPageWithLanguageSelector.tsx b/client/src/app/auth/LoginPageWithLanguageSelector.tsx index 29da0ae..0348b29 100644 --- a/client/src/app/auth/LoginPageWithLanguageSelector.tsx +++ b/client/src/app/auth/LoginPageWithLanguageSelector.tsx @@ -1,7 +1,7 @@ import { Container, FormTextField } from "@/components"; import { FormSubmitButton } from "@/components/Forms/FormSubmitButton"; import { UeckoLogo } from "@/components/UeckoLogo/UeckoLogo"; -import { useLogin } from "@/lib/hooks"; +import { useIsLoggedIn, useLogin } from "@/lib/hooks"; import { Alert, AlertDescription, @@ -42,6 +42,9 @@ const languages = [ export const LoginPageWithLanguageSelector = () => { const { t, i18n } = useTranslation(); + + const { isSuccess: isLoggedInSuccess, data: { authenticated = false } = {} } = useIsLoggedIn(); + const [language, setLanguage] = useState(i18n.language); const navigate = useNavigate(); const { toast } = useToast(); @@ -54,6 +57,12 @@ export const LoginPageWithLanguageSelector = () => { } }, []); + useEffect(() => { + if (isLoggedInSuccess && authenticated) { + navigate("/quotes", { replace: true }); + } + }, [isLoggedInSuccess, authenticated]); + const changeLanguage = (lng: string) => { i18n.changeLanguage(lng); setLanguage(lng); diff --git a/client/src/app/catalog/components/CatalogDataTableFilter.tsx b/client/src/app/catalog/components/CatalogDataTableFilter.tsx index a2c8d9d..802d597 100644 --- a/client/src/app/catalog/components/CatalogDataTableFilter.tsx +++ b/client/src/app/catalog/components/CatalogDataTableFilter.tsx @@ -4,18 +4,16 @@ import { ButtonGroup } from "@/components"; import { DataTableFilterField, useDataTableContext } from "@/lib/hooks"; import { Badge, Button, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/ui"; import { t } from "i18next"; -import { PlusIcon, XIcon } from "lucide-react"; +import { PlusIcon, SearchIcon, XIcon } from "lucide-react"; import React from "react"; interface CatalogDataTableFilterProps extends React.HTMLAttributes { table: Table; filterFields?: DataTableFilterField[]; - fullWidthFilter?: boolean; } export function CatalogDataTableFilter({ table, - fullWidthFilter, className, children, ...props @@ -54,9 +52,10 @@ export function CatalogDataTableFilter({ return ( -
-
-
+
+
+ +
{globalFilter && globalFilter.map((filterTerm) => ( ({ -

Quitar este término del filtro

+

{t("catalog.filter.badget_remove_tooltip")}

- Eliminar filtro {filterTerm} + {t("catalog.filter.badget_remove_tooltip")}
))} @@ -88,7 +87,7 @@ export function CatalogDataTableFilter({ value={inputValue} onChange={(e) => setInputValue(e.target.value)} onKeyDown={handleKeyDown} - placeholder='Escribe aquí para filtrar...' + placeholder={t("common.filter.input_placeholder")} className='flex-1 w-full h-8 bg-transparent outline-none placeholder:text-muted-foreground' /> @@ -101,11 +100,11 @@ export function CatalogDataTableFilter({ className='h-8 px-2 transition-all lg:px-3' > - {t("common.reset_filter")} + {t("common.filter.reset_filter")} -

Quitar todos los términos del filtro

+

{t("common.filter.reset_filter")}

)} @@ -118,22 +117,18 @@ export function CatalogDataTableFilter({ className='w-8 h-8 p-0 hover:bg-muted' > - Añadir término al filtro + {t("common.filter.button_add_term")} -

Añadir término al filtro (o pulsa Enter)

+

{t("common.filter.button_add_term_tooltip")}

- -

- Presiona Enter o haz clic en el botón + para añadir un término al filtro. Usa múltiples - términos para una búsqueda más amplia. -

+

{t("common.filter.help_text")}

); diff --git a/client/src/app/quotes/components/CatalogPickerDataTable.tsx b/client/src/app/quotes/components/CatalogPickerDataTable.tsx index e4c3202..a34a665 100644 --- a/client/src/app/quotes/components/CatalogPickerDataTable.tsx +++ b/client/src/app/quotes/components/CatalogPickerDataTable.tsx @@ -1,8 +1,8 @@ import { DataTableSkeleton, ErrorOverlay, SimpleEmptyState } from "@/components"; +import { CatalogDataTableFilter } from "@/app/catalog/components/CatalogDataTableFilter"; import { useCatalogList } from "@/app/catalog/hooks"; import { DataTable } from "@/components"; -import { DataTableToolbar } from "@/components/DataTable/DataTableToolbar"; import { useDataTable, useDataTableContext } from "@/lib/hooks"; import { Button } from "@/ui"; import { IListArticles_Response_DTO, MoneyValue } from "@shared/contexts"; @@ -141,7 +141,7 @@ export const CatalogPickerDataTable = ({ paginationOptions={{ visible: true, enablePageSizeSelector: false }} footerClassName='px-10 pt-2 border-t' > - + ); }; diff --git a/client/src/app/quotes/components/editors/QuoteDetailsCardEditor.tsx b/client/src/app/quotes/components/editors/QuoteDetailsCardEditor.tsx index 6d27f5a..d994258 100644 --- a/client/src/app/quotes/components/editors/QuoteDetailsCardEditor.tsx +++ b/client/src/app/quotes/components/editors/QuoteDetailsCardEditor.tsx @@ -215,7 +215,6 @@ export const QuoteDetailsCardEditor = ({ const handleAppendCatalogArticle = useCallback( (article: any, quantity: number = 1) => { - console.log(article); fieldActions.append({ ...article, quantity: { diff --git a/client/src/app/support/components/SupportModal.tsx b/client/src/app/support/components/SupportModal.tsx index 9b453d3..00d5b8c 100644 --- a/client/src/app/support/components/SupportModal.tsx +++ b/client/src/app/support/components/SupportModal.tsx @@ -86,7 +86,6 @@ export default function SupportModal() { }; const handleClose = () => { - console.log("handleClose", incidenceValue.trim()); if (incidenceValue.trim()) { setShowConfirmDialog(true); } else { diff --git a/client/src/components/DataTable/DataTableToolbar/DataTableToolbar.tsx b/client/src/components/DataTable/DataTableToolbar/DataTableToolbar.tsx index 352ffec..9dfbbc1 100644 --- a/client/src/components/DataTable/DataTableToolbar/DataTableToolbar.tsx +++ b/client/src/components/DataTable/DataTableToolbar/DataTableToolbar.tsx @@ -6,6 +6,7 @@ import { cn } from "@/lib/utils"; import { Button, Input } from "@/ui"; import { t } from "i18next"; import { SearchIcon, XIcon } from "lucide-react"; +import { ChangeEvent } from "react"; import { DataTableColumnOptions } from "./DataTableColumnOptions"; interface DataTableToolbarProps extends React.HTMLAttributes { @@ -21,6 +22,15 @@ export function DataTableToolbar({ }: DataTableToolbarProps) { const { globalFilter, isFiltered, setGlobalFilter, resetGlobalFilter } = useDataTableContext(); + const handleOnChange = (event: ChangeEvent) => { + const value = String(event.target.value); + if (value === "") { + resetGlobalFilter(); + } else { + setGlobalFilter([value]); + } + }; + return (
({ setGlobalFilter(String(event.target.value))} + onChange={handleOnChange} className={cn("h-8 w-full transition-all")} /> @@ -46,7 +56,7 @@ export function DataTableToolbar({ className='h-8 px-2 transition-all lg:px-3' > - {t("common.reset_filter")} + {t("common.filter.reset_filter")} )}
diff --git a/client/src/components/SorteableDataTable/SortableDataTable.tsx b/client/src/components/SorteableDataTable/SortableDataTable.tsx index a9a30fe..8f0391a 100644 --- a/client/src/components/SorteableDataTable/SortableDataTable.tsx +++ b/client/src/components/SorteableDataTable/SortableDataTable.tsx @@ -206,12 +206,6 @@ export function SortableDataTable({ columns, data, actions }: SortableDataTableP updateItem: (rowIndex: number, rowData: any, fieldName: string, value: unknown) => { // Skip page index reset until after next rerender // skipAutoResetPageIndex(); - console.log({ - rowIndex, - rowData, - fieldName, - value, - }); actions.update(rowIndex, { ...rowData, [`${fieldName}`]: value }); }, diff --git a/client/src/lib/axios/createAxiosDataProvider.ts b/client/src/lib/axios/createAxiosDataProvider.ts index 0cc1dbc..2921385 100644 --- a/client/src/lib/axios/createAxiosDataProvider.ts +++ b/client/src/lib/axios/createAxiosDataProvider.ts @@ -127,7 +127,7 @@ export const createAxiosDataProvider = ( const formData = new FormData(); formData.append(key || "file", file); - console.log(file); + //console.log(file); const response = await httpClient.post(url, formData, { headers: { @@ -181,7 +181,7 @@ export const createAxiosDataProvider = ( throw new Error('"url" or "path" param is missing'); } - console.log(apiUrl, path, url, requestUrl.toString()); + //console.log(apiUrl, path, url, requestUrl.toString()); // Preparar la respuesta personalizada let customResponse; diff --git a/client/src/lib/hooks/useDataTable/useDataTable.tsx b/client/src/lib/hooks/useDataTable/useDataTable.tsx index 92c0796..1048abd 100644 --- a/client/src/lib/hooks/useDataTable/useDataTable.tsx +++ b/client/src/lib/hooks/useDataTable/useDataTable.tsx @@ -153,7 +153,7 @@ export function useDataTable({ const sortingUpdater: OnChangeFn = (updater) => { if (typeof updater === "function") { const newSorting = updater(sorting); - console.log(newSorting); + //console.log(newSorting); //setSorting(newSorting); } }; diff --git a/client/src/lib/hooks/useUnsavedChangesNotifier/WarnAboutChangeProvider.tsx b/client/src/lib/hooks/useUnsavedChangesNotifier/WarnAboutChangeProvider.tsx index 197730a..c63c896 100644 --- a/client/src/lib/hooks/useUnsavedChangesNotifier/WarnAboutChangeProvider.tsx +++ b/client/src/lib/hooks/useUnsavedChangesNotifier/WarnAboutChangeProvider.tsx @@ -35,7 +35,7 @@ export const UnsavedWarnProvider = ({ children }: PropsWithChildren) => { { - console.log("onCancel"); + //console.log("onCancel"); onCancel(); }} onConfirm={() => onConfirm()} diff --git a/client/src/locales/en.json b/client/src/locales/en.json index b37d8aa..a2433a3 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -29,8 +29,6 @@ "go_to_prev_page": "Go to previous page", "go_to_next_page": "Go to next page", "go_to_last_page": "Go to last page", - "filter_placeholder": "Type here to filter...", - "reset_filter": "Reset filter", "error": "Error", "actions": "Actions", "open_menu": "Open menu", @@ -57,7 +55,16 @@ "duplicate": "Duplicate", "print": "Print", "disable_preview": "Disable preview", - "enable_preview": "Enable preview" + "enable_preview": "Enable preview", + "filter": { + "reset_filter": "Reset filter", + "badget_remove_tooltip": "Remove this filter term", + "input_placeholder": "Type here to filter...", + "button_add_term": "Add filter term", + "button_add_term_tooltip": "Add filter term (or press Enter)", + "button_remove_all": "Remove all terms from filter", + "help_text": "Press Enter or click the + button to add a term to the filter. Use multiple terms for a broader search." + } }, "components": { "loading_indicator": { diff --git a/client/src/locales/es.json b/client/src/locales/es.json index 1d180fe..2d9cbb1 100644 --- a/client/src/locales/es.json +++ b/client/src/locales/es.json @@ -29,8 +29,6 @@ "go_to_prev_page": "Ir a la página anterior", "go_to_next_page": "Ir a la página siguiente", "go_to_last_page": "Ir a la última página", - "filter_placeholder": "Escribe aquí para filtrar...", - "reset_filter": "Quitar el filtro", "error": "Error", "actions": "Acciones", "open_menu": "Abrir el menú", @@ -57,7 +55,16 @@ "duplicate": "Duplicar", "print": "Imprimir", "disable_preview": "Ocultar vista previa", - "enable_preview": "Mostrar vista previa" + "enable_preview": "Mostrar vista previa", + "filter": { + "reset_filter": "Quitar el filtro", + "badget_remove_tooltip": "Quitar este término del filtro", + "input_placeholder": "Escribe aquí para filtrar...", + "button_add_term": "Añadir término al filtro", + "button_add_term_tooltip": "Añadir término al filtro (o pulsa Enter)", + "button_remove_all": "Quitar todos los términos del filtro", + "help_text": "Presiona Enter o haz clic en el botón + para añadir un término al filtro. Usa múltiples términos para una búsqueda más amplia." + } }, "components": { "LoadingIndicator": { diff --git a/package.json b/package.json index 9ac8c76..a50a5a3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uecko-presupuestador", - "version": "1.0.6", + "version": "1.0.8", "author": "Rodax Software ", "license": "ISC", "private": true, diff --git a/server/package.json b/server/package.json index 45bb621..17e1864 100644 --- a/server/package.json +++ b/server/package.json @@ -1,7 +1,7 @@ { "name": "@uecko-presupuestador/server", "private": true, - "version": "1.0.6", + "version": "1.0.8", "author": "Rodax Software ", "main": "./src/index.ts", "scripts": { diff --git a/shared/package.json b/shared/package.json index 3aba7ce..ceb8220 100644 --- a/shared/package.json +++ b/shared/package.json @@ -1,7 +1,7 @@ { "name": "@uecko-presupuestador/shared", "private": false, - "version": "1.0.6", + "version": "1.0.8", "main": "./index.ts", "author": "Rodax Software ", "license": "ISC",