Files
hypergolic/src/components/VoteOnMeritRequest.svelte
Bob aadae07cd2 problem: no voting notification for merit request
solution: after voting, also send a kind 1 event
2024-07-29 21:47:37 +08:00

90 lines
1.9 KiB
Svelte

<script lang="ts">
import { Button } from '@/components/ui/button';
import {
MeritRequest,
prepareMeritNoteEvent,
prepareMeritVoteEvent,
type VoteDirection
} from '@/event_helpers/merits';
import type { Rocket } from '@/event_helpers/rockets';
import { ndk } from '@/ndk';
import { currentUser } from '@/stores/session';
import type NDKSvelte from '@nostr-dev-kit/ndk-svelte';
import Login from './Login.svelte';
export let merit: MeritRequest;
export let rocket: Rocket;
function publish(ndk: NDKSvelte, direction: VoteDirection) {
if (!ndk.signer) {
throw new Error('no ndk signer found');
}
let author = $currentUser;
if (!author) {
throw new Error('no current user');
}
prepareMeritVoteEvent({
ndk,
author,
rocket,
merit,
direction
})
.publish()
.then((x) => {
console.log(x);
});
let content;
if (direction === 'ratify') {
content = `I ratify your merit request: \n\n${merit.Problem()}`;
} else {
content = `I reject your merit request: \n\n${merit.Problem()}`;
}
prepareMeritNoteEvent({
ndk,
author,
merit,
content
})
.publish()
.then((x) => {
console.log(x);
});
}
$: currentUserHasVotepower = false;
$: {
if (currentUser && $currentUser) {
currentUserHasVotepower = rocket.VotePowerForPubkey($currentUser.pubkey) > 0;
}
}
</script>
{#if $currentUser}
<Button
variant="default"
class="m-2"
on:click={() => {
if (currentUserHasVotepower) {
publish($ndk, 'ratify');
} else {
alert(`Your pubkey does not have votepower in ${rocket.Name()}`);
}
}}>Vote to Approve</Button
>
<Button
variant="destructive"
class="m-2"
on:click={() => {
if (currentUserHasVotepower) {
publish($ndk, 'blackball');
} else {
alert(`Your pubkey does not have votepower in ${rocket.Name()}`);
}
}}>Vote to Reject</Button
>
{:else}
<Login />
{/if}