diff --git a/src/components/MeritsAndSatflow.svelte b/src/components/MeritsAndSatflow.svelte index e700daa..c7d10b5 100644 --- a/src/components/MeritsAndSatflow.svelte +++ b/src/components/MeritsAndSatflow.svelte @@ -2,7 +2,6 @@ import * as Card from '@/components/ui/card'; import * as Table from '@/components/ui/table'; import { Rocket } from '@/event_helpers/rockets'; - import type { NDKEvent } from '@nostr-dev-kit/ndk'; import { writable } from 'svelte/store'; import Pie from './Pie.svelte'; import { Avatar, Name } from '@nostr-dev-kit/ndk-svelte-components'; diff --git a/src/components/ProductCard.svelte b/src/components/ProductCard.svelte index 9e2455e..5a5240b 100644 --- a/src/components/ProductCard.svelte +++ b/src/components/ProductCard.svelte @@ -11,7 +11,10 @@ {#if product.Validate()} - {product.Group()} {#if product.Option().length > 0}(variant: {product.Option()}){/if} + {product.Group()} + {#if product.Option().length > 0}(variant: {product.Option()}){/if} {product.Description()} @@ -27,9 +30,11 @@ {:else} - cover +
+ cover +
{/if} - + {#if !rocket.Products().get(product.ID())} {:else} diff --git a/src/components/ProductFomo.svelte b/src/components/ProductFomo.svelte index 8219961..35e0fbf 100644 --- a/src/components/ProductFomo.svelte +++ b/src/components/ProductFomo.svelte @@ -1,17 +1,13 @@ @@ -52,53 +53,8 @@ {#each $groups as [identifier, products] (identifier)} - - {#if currentPage} - - - {/if} - {#if products.length > 1} - - - - - - - - {#each pages as page (page.key)} - {#if page.type === "ellipsis"} - - - - {:else} - - - {page.value} - - - {/if} - {/each} - - - - - - - - {/if} - - - + {/each} -
diff --git a/src/components/ProductGroup.svelte b/src/components/ProductGroup.svelte new file mode 100644 index 0000000..1b29e63 --- /dev/null +++ b/src/components/ProductGroup.svelte @@ -0,0 +1,50 @@ + + + + {#if currentPage} + + {#if unratifiedZaps} + + {/if} + + {/if} + {#if products.length > 1} + + + + + + + + {#each pages as page (page.key)} + {#if page.type === 'ellipsis'} + + + + {:else} + + + {page.value} + + + {/if} + {/each} + + + + + + + + {/if} + diff --git a/src/routes/products/+page.svelte b/src/routes/products/+page.svelte index c202c69..685b5a0 100644 --- a/src/routes/products/+page.svelte +++ b/src/routes/products/+page.svelte @@ -5,8 +5,8 @@ import { onDestroy } from 'svelte'; import { derived } from 'svelte/store'; import Heading from '../../components/Heading.svelte'; - import ProductCard from '../../components/ProductCard.svelte'; import { Product, Rocket } from '@/event_helpers/rockets'; + import ProductGroup from '../../components/ProductGroup.svelte'; let rockets: NDKEventStore | undefined; let products: NDKEventStore | undefined; @@ -26,30 +26,41 @@ }); let productsToRender = derived([rocketsWithProducts, products], ([$rocketsWP, $products]) => { - let data = new Map(); + let data = new Map>(); let productMap = new Map($products.map((e) => [e.id, e])); for (let r of $rocketsWP) { - let events = []; + let events: Product[] = []; for (let p of r.getMatchingTags('product')) { let productEvent = productMap.get(p[1].split(':')[0]); if (productEvent) { - events.push(productEvent); + events.push(new Product(productEvent)); } } if (events.length > 0) { - data.set(r, events); + data.set(new Rocket(r), groups(events)); } } + + function groups(products: Product[]): Map { + return products.reduce((acc, product) => { + const group = product.Group(); + if (!acc.has(group)) { + acc.set(group, []); + } + acc.get(group)!.push(product); + return acc; + }, new Map()); + } return data; }); {#if productsToRender && $productsToRender} - {#each $productsToRender as [r, p] (r.id)} - -
- {#each p as product (product.id)} - + {#each $productsToRender as [rocket, groups] (rocket.Event.id)} + +
+ {#each groups as [identifier, products] (identifier)} + {/each}
{/each}