diff --git a/sepa/sitio2/src/lib/components/Loading.svelte b/sepa/sitio2/src/lib/components/Loading.svelte new file mode 100644 index 0000000..dfffb4b --- /dev/null +++ b/sepa/sitio2/src/lib/components/Loading.svelte @@ -0,0 +1,17 @@ + + +{#if loading} +
+ +
+ +{:else} + +{/if} diff --git a/sepa/sitio2/src/lib/components/SearchBar.svelte b/sepa/sitio2/src/lib/components/SearchBar.svelte index a58ca8b..b16aec4 100644 --- a/sepa/sitio2/src/lib/components/SearchBar.svelte +++ b/sepa/sitio2/src/lib/components/SearchBar.svelte @@ -1,17 +1,25 @@
- - + +
diff --git a/sepa/sitio2/src/lib/components/ui/button/button.svelte b/sepa/sitio2/src/lib/components/ui/button/button.svelte index f578a57..60cee5d 100644 --- a/sepa/sitio2/src/lib/components/ui/button/button.svelte +++ b/sepa/sitio2/src/lib/components/ui/button/button.svelte @@ -2,6 +2,7 @@ import { Button as ButtonPrimitive } from 'bits-ui'; import { type Events, type Props, buttonVariants } from './index.js'; import { cn } from '$lib/utils.js'; + import Loading from '$lib/components/Loading.svelte'; type $$Props = Props; type $$Events = Events; @@ -10,16 +11,19 @@ export let variant: $$Props['variant'] = 'default'; export let size: $$Props['size'] = 'default'; export let builders: $$Props['builders'] = []; + export let loading = false; export { className as class }; - + + + diff --git a/sepa/sitio2/src/lib/components/ui/button/index.ts b/sepa/sitio2/src/lib/components/ui/button/index.ts index d376139..d6431f3 100644 --- a/sepa/sitio2/src/lib/components/ui/button/index.ts +++ b/sepa/sitio2/src/lib/components/ui/button/index.ts @@ -32,6 +32,7 @@ type Size = VariantProps['size']; type Props = ButtonPrimitive.Props & { variant?: Variant; size?: Size; + loading?: boolean; }; type Events = ButtonPrimitive.Events; diff --git a/sepa/sitio2/src/lib/sepa-utils.ts b/sepa/sitio2/src/lib/sepa-utils.ts index f6a7ba9..40f1a79 100644 --- a/sepa/sitio2/src/lib/sepa-utils.ts +++ b/sepa/sitio2/src/lib/sepa-utils.ts @@ -28,3 +28,14 @@ export const pesosFormatter = new Intl.NumberFormat('es-AR', { style: 'currency', currency: 'ARS' }); + +export function parseMarcas(marcas: readonly string[]) { + const x = marcas + .map((m) => m.trim().replaceAll(/['`´]/g, '')) + .filter((m) => !['sin marca', 'VARIOS'].includes(m)) + .filter((m) => m.length > 0); + if (x.length === 0) { + return ['n/a']; + } + return Array.from(new Set(x)); +} diff --git a/sepa/sitio2/src/routes/search/[query]/+page.svelte b/sepa/sitio2/src/routes/search/[query]/+page.svelte index 786345b..1ee7ae4 100644 --- a/sepa/sitio2/src/routes/search/[query]/+page.svelte +++ b/sepa/sitio2/src/routes/search/[query]/+page.svelte @@ -6,19 +6,9 @@ import { ArrowLeft } from 'lucide-svelte'; import type { PageData } from './$types'; import { goto } from '$app/navigation'; + import ProductCard from './ProductCard.svelte'; export let data: PageData; - - function parseMarcas(marcas: readonly string[]) { - const x = marcas - .map((m) => m.trim().replaceAll(/['`´]/g, '')) - .filter((m) => !['sin marca', 'VARIOS'].includes(m)) - .filter((m) => m.length > 0); - if (x.length === 0) { - return ['n/a']; - } - return Array.from(new Set(x)); - } @@ -39,26 +29,7 @@

{:else} {#each data.collapsedProductos as producto} - - - - {parseMarcas(Array.from(producto.marcas)).join('/')} - en - {producto.in_datasets_count} cadena{#if producto.in_datasets_count > 1}s{/if} - - EAN {producto.id_producto} - - - {#each producto.descriptions as description} - {description} - {#if description !== producto.descriptions[producto.descriptions.length - 1]} - {' '} - {/if} - {/each} - - - + {/each} {/if} diff --git a/sepa/sitio2/src/routes/search/[query]/ProductCard.svelte b/sepa/sitio2/src/routes/search/[query]/ProductCard.svelte new file mode 100644 index 0000000..b57883a --- /dev/null +++ b/sepa/sitio2/src/routes/search/[query]/ProductCard.svelte @@ -0,0 +1,44 @@ + + + + + + + {parseMarcas(Array.from(producto.marcas)).join('/')} + en + {producto.in_datasets_count} cadena{#if producto.in_datasets_count > 1}s{/if} + + EAN {producto.id_producto} + + + {#each producto.descriptions as description} + {description} + {#if description !== producto.descriptions[producto.descriptions.length - 1]} + {' '} + {/if} + {/each} + + + +