From 4db25ed767a50393380d6257d98cc17ca3bba737 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 8 Aug 2024 23:31:02 +0800 Subject: [PATCH] problem: not clear which rockets are for testing, and which are real --- src/components/CreateAMRAuction.svelte | 16 ++- src/components/RocketCard.svelte | 29 ++--- src/components/SellMeritsTable.svelte | 103 +++++++++++++++++ src/routes/products/+page.svelte | 121 ++++++++++++++------ src/routes/sellmerits/+page.svelte | 152 ++++++------------------- src/views/rockets/Rockets.svelte | 99 +++++++++++----- 6 files changed, 326 insertions(+), 194 deletions(-) create mode 100644 src/components/SellMeritsTable.svelte diff --git a/src/components/CreateAMRAuction.svelte b/src/components/CreateAMRAuction.svelte index 67d2d71..5e36f22 100644 --- a/src/components/CreateAMRAuction.svelte +++ b/src/components/CreateAMRAuction.svelte @@ -4,15 +4,18 @@ import Button from '@/components/ui/button/button.svelte'; import { ndk } from '@/ndk'; import { currentUser } from '@/stores/session'; + import ExclamationTriangle from 'svelte-radix/ExclamationTriangle.svelte'; + import * as Alert from '$lib/components/ui/alert/index.js'; import validate from 'bitcoin-address-validation'; export let amrAuction: AMRAuction | undefined; export let rocket: Rocket; - export let selected_amrs: Map; + export let selected_amrs: AMRAuction | undefined; let bitcoinAddress: string = ''; $: bitcoinAddressInValid = true; $: bitcoinAddressError = ''; + $: isTestRocket = rocket.Name().toLowerCase().includes('test'); $: if (bitcoinAddress) { if (!validate(bitcoinAddress)) { @@ -49,7 +52,7 @@ console.log('AMRAuction', e); e.publish().then((x) => { console.log(x, e); - selected_amrs = new Map(); + selected_amrs = undefined; //goto(`${base}/rockets/${getRocketURL(e)}`); }); } @@ -60,6 +63,15 @@ You are selling {amrAuction.Merits} Merits
+ {#if isTestRocket} + + + Warning + Please do not enter a real Bitcoin address, as this is a test rocket. + + {/if}
- + {rocket.Name()} {rocket.Mission()} @@ -27,17 +28,19 @@
- - - + +
+ + +
diff --git a/src/components/SellMeritsTable.svelte b/src/components/SellMeritsTable.svelte new file mode 100644 index 0000000..ccf9a49 --- /dev/null +++ b/src/components/SellMeritsTable.svelte @@ -0,0 +1,103 @@ + + +{#if $currentUser && amr.length > 0} + + + + + Selected + AMR + Merits + Status + Receiving Address + Sats (approx) + + + + {#each rocket.PendingAMRAuctions().filter((r) => { + return Boolean(r.Owner == $currentUser.pubkey); + }) as p} + + + {p.AMRIDs.length > 1 ? 'multiple' : p.AMRIDs[0].substring(0, 12)} + {p.Merits} + Pending + {p.RxAddress} + {p.Merits} + + {/each} + + {#each amr as a, id (a.ID)} + {#if rocket.CanThisAMRBeSold(a.ID)} + + { + toggleSelected(a); + }} + /> + + { + goto(`${base}/rockets/merits/${a.ID}`); + }} + > + {a.ID.substring(0, 6)} + + + {a.Merits} + {a.Extra?.eventAMR ? 'pending' : 'Eligible'} + {a.Extra?.eventAMR?.RxAddress} + {a.Merits} + + {/if} + {/each} + + + +{/if} diff --git a/src/routes/products/+page.svelte b/src/routes/products/+page.svelte index 685b5a0..832fac4 100644 --- a/src/routes/products/+page.svelte +++ b/src/routes/products/+page.svelte @@ -7,6 +7,9 @@ import Heading from '../../components/Heading.svelte'; import { Product, Rocket } from '@/event_helpers/rockets'; import ProductGroup from '../../components/ProductGroup.svelte'; + import * as Tabs from '$lib/components/ui/tabs/index.js'; + import ExclamationTriangle from 'svelte-radix/ExclamationTriangle.svelte'; + import * as Alert from '$lib/components/ui/alert/index.js'; let rockets: NDKEventStore | undefined; let products: NDKEventStore | undefined; @@ -25,43 +28,95 @@ return $rockets; }); - let productsToRender = derived([rocketsWithProducts, products], ([$rocketsWP, $products]) => { - let data = new Map>(); - let productMap = new Map($products.map((e) => [e.id, e])); - for (let r of $rocketsWP) { - let events: Product[] = []; - for (let p of r.getMatchingTags('product')) { - let productEvent = productMap.get(p[1].split(':')[0]); - if (productEvent) { - events.push(new Product(productEvent)); - } - } - if (events.length > 0) { - data.set(new Rocket(r), groups(events)); - } - } + let productsToRenderStore = derived( + [rocketsWithProducts, products], + ([$rocketsWP, $products]) => { + let mainnet: Map> = new Map(); + let testnet: Map> = new Map(); - function groups(products: Product[]): Map { - return products.reduce((acc, product) => { - const group = product.Group(); - if (!acc.has(group)) { - acc.set(group, []); + let productMap = new Map($products.map((e) => [e.id, e])); + + for (let r of $rocketsWP) { + let events: Product[] = []; + for (let p of r.getMatchingTags('product')) { + let productEvent = productMap.get(p[1].split(':')[0]); + if (productEvent) { + events.push(new Product(productEvent)); + } } - acc.get(group)!.push(product); - return acc; - }, new Map()); + if (events.length > 0) { + let groupedProducts = groups(events); + if (r.dTag!.toLowerCase().includes('test')) { + testnet.set(new Rocket(r), groupedProducts); + } else { + mainnet.set(new Rocket(r), groupedProducts); + } + } + } + + 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 { mainnet, testnet }; } - return data; + ); + + let mainnet: Map> = new Map(); + let testnet: Map> = new Map(); + + productsToRenderStore.subscribe(($productsToRenderStore) => { + mainnet = $productsToRenderStore.mainnet; + testnet = $productsToRenderStore.testnet; }); -{#if productsToRender && $productsToRender} - {#each $productsToRender as [rocket, groups] (rocket.Event.id)} - -
- {#each groups as [identifier, products] (identifier)} - + + + + Mainnet + Testnet + + + {#if mainnet.size > 0} + {#each mainnet as [rocket, groups] (rocket.Event.id)} + +
+ {#each groups as [identifier, products] (identifier)} + + {/each} +
{/each} -
- {/each} -{/if} + {:else} + + Currently, there are no products on the mainnet; you can check the testnet. + + {/if} + + + + + Note + The following products are for testing purposes only. Please do not send real Bitcoin. + + {#each testnet as [rocket, groups] (rocket.Event.id)} + +
+ {#each groups as [identifier, products] (identifier)} + + {/each} +
+ {/each} +
+ diff --git a/src/routes/sellmerits/+page.svelte b/src/routes/sellmerits/+page.svelte index 8a2829f..de4e7b6 100644 --- a/src/routes/sellmerits/+page.svelte +++ b/src/routes/sellmerits/+page.svelte @@ -1,8 +1,4 @@ {#if rockets && $rockets} - - - {#each $rockets as rocket (`${rocket.Event.pubkey}${rocket.Name()}`)} - - {/each} + + + Mainnet + Testnet + + +
+ {#each mainnet as rocket (`${rocket.Event.pubkey}${rocket.Name()}`)} + + {/each} +
+
+ + + + Note + The following rocket is for testing purposes only. Any rocket with "test" in its name is + intended solely for testing. + +
+ {#each testnet as rocket (`${rocket.Event.pubkey}${rocket.Name()}`)} + + {/each} +
+
+
{/if}