diff --git a/src/components/CreateMeritRequest.svelte b/src/components/CreateMeritRequest.svelte index 74fc398..65f64c2 100644 --- a/src/components/CreateMeritRequest.svelte +++ b/src/components/CreateMeritRequest.svelte @@ -1,35 +1,65 @@ - + Create a Merit Request - + {#if !currentUser} @@ -80,7 +113,7 @@ bind:value={problem} id="name" placeholder="Describe the problem you solved, links to github are also acceptable" - class="col-span-3" + class="col-span-3 {problem.length < 10 ? 'border-red-600' : 'border-green-700'}" />
@@ -89,20 +122,14 @@ bind:value={solution} id="desc" placeholder="Link to your solution (e.g. a merged PR or some other evidence)" - class="col-span-3" + class="col-span-3 {validateSolution(solution)? 'border-green-700':'border-red-600'}" />
- - -
-
- You are requesting {sats} Merits + + + {#if parseInt(sats, 10) > 0} + {/if}
@@ -117,20 +144,15 @@
{#if wts} - If your Merit Request is approved, it will be auctioned to potential sponsors. You can set a minimum amount below which your Approved Merit Request will not be sold. + Your Merits will be auctioned to potential sponsors as soon as it is approved, enabling you + to be paid in Sats for your work. Tip: you don't have to decide right now, you can do this + at any time. -
- - -
- +
+ + +
{/if} - - + text={['remove white border on focus so that the validation indication color can be seen']} + />
diff --git a/src/components/MeritRequests.svelte b/src/components/MeritRequests.svelte new file mode 100644 index 0000000..bb946cb --- /dev/null +++ b/src/components/MeritRequests.svelte @@ -0,0 +1,96 @@ + + + + + Merit Requests + Merit Requests + + + + + + Contributor + + Amount (Sats) + Merits + + + + + {#each $merits as [id, merit], _ (id)} + { + console.log(merit.Request.rawEvent()); + }} + class="bg-accent cursor-pointer" + > + +
+ +
+
+ + {merit.Sats} + {merit.Merits} + +
+ {/each} +
+
+
+
diff --git a/src/components/RocketDashboard.svelte b/src/components/RocketDashboard.svelte index 23c793b..61f4995 100644 --- a/src/components/RocketDashboard.svelte +++ b/src/components/RocketDashboard.svelte @@ -1,17 +1,14 @@ @@ -41,6 +38,8 @@ + + Actions diff --git a/src/lib/event_helpers/merits.ts b/src/lib/event_helpers/merits.ts new file mode 100644 index 0000000..955678e --- /dev/null +++ b/src/lib/event_helpers/merits.ts @@ -0,0 +1,40 @@ +import type { NDKEvent } from "@nostr-dev-kit/ndk"; +import { getNumberFromTag } from "./rockets"; + +export class MeritRequest { + ID: string; + Sats: number; + Merits: number; + Request: NDKEvent; + Pubkey: string; + TimeStamp: number; + Problem():string { + let _problem = "" + //todo: handle 1971 problem tracker event tags somehow + for (let problem of this.Request.getMatchingTags("problem")) { + if (problem && problem.length > 2) { + _problem = problem[2] + } + } + return _problem + } + IncludedInRocketState(rocket: NDKEvent): boolean { + return true + } + Valid(rocket: NDKEvent): boolean { + //todo: validate pubkey is in WoT + let valid = true; + return valid; + } + constructor(request: NDKEvent) { + this.Request = request; + this.ID = request.id; + this.Pubkey = request.pubkey + if (this.Request.created_at) { + this.TimeStamp = this.Request.created_at + } + + this.Sats = getNumberFromTag("sats", request) + this.Merits = getNumberFromTag("merits", request) + } +} \ No newline at end of file diff --git a/src/lib/event_helpers/rockets.ts b/src/lib/event_helpers/rockets.ts index 4bb874f..5ab4735 100644 --- a/src/lib/event_helpers/rockets.ts +++ b/src/lib/event_helpers/rockets.ts @@ -120,10 +120,18 @@ function getZapRequest(zapReceipt: NDKEvent): NDKEvent | undefined { } function getZapAmount(zapRequest?: NDKEvent): number { - let amount = 0; - let amountTag = zapRequest?.getMatchingTags('amount'); - if (amountTag?.length == 1) { - amount = parseInt(amountTag[0][1], 10); - } - return amount; + return getNumberFromTag("amount", zapRequest) +} + +export function getNumberFromTag(tag:string, event?: NDKEvent): number { + let amountTag = event?.getMatchingTags(tag); + if (amountTag && amountTag[0] && amountTag[0][1]) { + try { + let amount = parseInt(amountTag[0][1], 10); + return amount + } catch { + console.log("ERROR: could not find number in tag: ", tag, event) + } + } + return 0 }