From 737738faf5ca6c7bafbf7c537342c514617d667c Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 7 Aug 2024 20:49:38 +0800 Subject: [PATCH] Problem: most important rockets not shown on top `/rockets` --- src/views/rockets/Rockets.svelte | 43 ++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/views/rockets/Rockets.svelte b/src/views/rockets/Rockets.svelte index 289a0be..c561363 100644 --- a/src/views/rockets/Rockets.svelte +++ b/src/views/rockets/Rockets.svelte @@ -13,28 +13,51 @@ _rockets?.unsubscribe(); }); - let rockets = derived(_rockets, ($rockets)=>{ - let _r = new Map() + let rockets = derived(_rockets, ($rockets) => { + let _r = new Map(); + for (let e of $rockets) { - let existing = _r.get(`${e.pubkey}${e.dTag}`) + let existing = _r.get(`${e.pubkey}${e.dTag}`); if (!existing) { - existing = new Rocket(e) + existing = new Rocket(e); } - if (existing.Event.created_at <= e.created_at) { - _r.set(`${e.pubkey}${e.dTag}`, existing) + const existingCreatedAt = existing.Event?.created_at ?? 0; + const newCreatedAt = e.created_at ?? 0; + + if (existingCreatedAt <= newCreatedAt) { + _r.set(`${e.pubkey}${e.dTag}`, existing); } } - return Array.from(_r, ([_, r])=>{return r}) - }) - + let rocketArray = Array.from(_r.values()); + + rocketArray.sort((a, b) => { + // First condition: "Nostrocket" at the top + if (a.Name() === 'Nostrocket') return -1; + if (b.Name() === 'Nostrocket') return 1; + + // Second condition: "test" rockets grouped underneath + const aIsTest = a.Name().toLowerCase().includes('test'); + const bIsTest = b.Name().toLowerCase().includes('test'); + if (aIsTest && !bIsTest) return 1; + if (!aIsTest && bIsTest) return -1; + + // Default sorting by created_at, handling undefined + const aCreatedAt = a.Event?.created_at ?? 0; + const bCreatedAt = b.Event?.created_at ?? 0; + return aCreatedAt - bCreatedAt; + }); + + return rocketArray; + }); + //todo: until we have namerocket working, just manually dedupe rockets based on my pubkey //todo: write a recognizer/validator for rocket events {#if rockets && $rockets} - + {#each $rockets as rocket (`${rocket.Event.pubkey}${rocket.Name()}`)}