diff --git a/src/components/MeritSummaryCard.svelte b/src/components/MeritSummaryCard.svelte index 66a87db..a49f2be 100644 --- a/src/components/MeritSummaryCard.svelte +++ b/src/components/MeritSummaryCard.svelte @@ -10,11 +10,12 @@ import { Separator } from '$lib/components/ui/separator/index.js'; import * as Table from '@/components/ui/table'; - import { RocketATagFilter } from '@/event_helpers/rockets'; + import { Rocket, RocketATagFilter } from '@/event_helpers/rockets'; import { derived } from 'svelte/store'; import { goto } from '$app/navigation'; import { base } from '$app/paths'; import { unixToRelativeTime } from '@/helpers'; + import RocketCard from './RocketCard.svelte'; export let merit: MeritRequest; export let rocket: NDKEvent; @@ -30,7 +31,7 @@ let vMap = new Map(); for (let v of $_votes) { let vote = new Vote(v); - if (vote.BasicValidation()) { + if (vote.BasicValidation() && vote.ValidateAgainstRocket(new Rocket(rocket))) { vMap.set(vote.ID, vote); } } @@ -107,7 +108,7 @@ console.log(vote.Event.rawEvent()); goto(`${base}/rockets/merits/${vote.ID}`); }} - class="cursor-pointer {vote.VoteDirection == "ratify"?"bg-lime-600":"bg-red-700"} " + class="cursor-pointer {vote.VoteDirection == "ratify"?"bg-lime-600":"bg-red-700"} {vote.VoteDirection == "ratify"?"hover:bg-lime-700":"hover:bg-red-800"}" >
@@ -135,6 +136,6 @@ > - + diff --git a/src/components/VoteOnMeritRequest.svelte b/src/components/VoteOnMeritRequest.svelte index 2887ba9..d32c184 100644 --- a/src/components/VoteOnMeritRequest.svelte +++ b/src/components/VoteOnMeritRequest.svelte @@ -1,14 +1,16 @@ {#if $currentUser} @@ -39,14 +51,23 @@ variant="default" class="m-2" on:click={() => { - publish($ndk, 'ratify'); + if (currentUserHasVotepower) { + publish($ndk, 'ratify'); + } else { + alert(`Your pubkey does not have votepower in ${rocket.Name()}`) + } + }}>Vote to Approve {:else} diff --git a/src/lib/event_helpers/merits.ts b/src/lib/event_helpers/merits.ts index 8af738a..3c5a0ee 100644 --- a/src/lib/event_helpers/merits.ts +++ b/src/lib/event_helpers/merits.ts @@ -1,5 +1,5 @@ import type { NDKEvent, NDKFilter, NDKTag } from '@nostr-dev-kit/ndk'; -import { getNumberFromTag, isValidUrl } from './rockets'; +import { Rocket, getNumberFromTag, isValidUrl } from './rockets'; export class MeritRequest { ID: string; @@ -30,7 +30,7 @@ export class MeritRequest { } return _solution; } - IncludedInRocketState(rocket: NDKEvent): boolean { + IncludedInRocketState(rocket: Rocket): boolean { return true; } BasicValidation(): boolean { @@ -105,6 +105,13 @@ export class Vote { } return valid; } + ValidateAgainstRocket(rocket:Rocket):boolean { + let valid = true; + if (!(rocket.VotePowerForPubkey(this.Pubkey) > 0)) { + valid = false + } + return valid + } RocketTag(): NDKTag | undefined { let tag: NDKTag | undefined = undefined; if (this.BasicValidation()) { diff --git a/src/lib/event_helpers/rockets.ts b/src/lib/event_helpers/rockets.ts index 6a77e9c..6604f53 100644 --- a/src/lib/event_helpers/rockets.ts +++ b/src/lib/event_helpers/rockets.ts @@ -1,4 +1,22 @@ -import { NDKEvent, type NDKFilter, type NDKTag } from '@nostr-dev-kit/ndk'; +import { NDKEvent, type NDKTag } from '@nostr-dev-kit/ndk'; + +export class Rocket { + Event: NDKEvent; + Name():string { + return this.Event.dTag! + } + VotePowerForPubkey(pubkey:string):number { + let votepower = 0 + if (this.Event.pubkey == pubkey) { + //todo: calculate votepower for pubkey based on approved merit requests + votepower++ + } + return votepower + } + constructor(event:NDKEvent) { + this.Event = event; + } +} export class RocketProduct { ID: string;