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
+ Problem
+ Amount (Sats)
+ Merits
+ When
+
+
+
+ {#each $merits as [id, merit], _ (id)}
+ {
+ console.log(merit.Request.rawEvent());
+ }}
+ class="bg-accent cursor-pointer"
+ >
+
+
+
+
+
+
+ {merit.Problem()}
+ {merit.Sats}
+ {merit.Merits}
+ {unixToRelativeTime(merit.TimeStamp * 1000)}
+
+ {/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
}