mirror of
https://github.com/aljazceru/hypergolic.git
synced 2025-12-23 08:14:24 +01:00
problem: not clear when a merit request is approved
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import * as Card from '$lib/components/ui/card/index.js';
|
import * as Card from '$lib/components/ui/card/index.js';
|
||||||
import { MapOfVotes, Vote, Votes, type MeritRequest } from '@/event_helpers/merits';
|
import { MapOfVotes, Votes, type MeritRequest, type VoteDirection } from '@/event_helpers/merits';
|
||||||
import { ndk } from '@/ndk';
|
import { ndk } from '@/ndk';
|
||||||
import { NDKEvent, type NDKKind } from '@nostr-dev-kit/ndk';
|
import { NDKEvent, type NDKKind } from '@nostr-dev-kit/ndk';
|
||||||
import { Avatar, Name } from '@nostr-dev-kit/ndk-svelte-components';
|
import { Avatar, Name } from '@nostr-dev-kit/ndk-svelte-components';
|
||||||
@@ -14,18 +14,20 @@
|
|||||||
import { getRocketURL, unixToRelativeTime } from '@/helpers';
|
import { getRocketURL, unixToRelativeTime } from '@/helpers';
|
||||||
import { derived } from 'svelte/store';
|
import { derived } from 'svelte/store';
|
||||||
|
|
||||||
|
import { goto } from '$app/navigation';
|
||||||
|
import { base } from '$app/paths';
|
||||||
import { Button } from '$lib/components/ui/button/index.js';
|
import { Button } from '$lib/components/ui/button/index.js';
|
||||||
import { Label } from '$lib/components/ui/label/index.js';
|
import { Label } from '$lib/components/ui/label/index.js';
|
||||||
import { Textarea } from '$lib/components/ui/textarea/index.js';
|
import { Textarea } from '$lib/components/ui/textarea/index.js';
|
||||||
import Alert from '@/components/ui/alert/alert.svelte';
|
|
||||||
import { currentUser } from '@/stores/session';
|
import { currentUser } from '@/stores/session';
|
||||||
import CornerDownLeft from 'lucide-svelte/icons/corner-down-left';
|
import CornerDownLeft from 'lucide-svelte/icons/corner-down-left';
|
||||||
import { goto } from '$app/navigation';
|
import Alert from './Alert.svelte';
|
||||||
import { base } from '$app/paths';
|
|
||||||
|
|
||||||
export let merit: MeritRequest;
|
export let merit: MeritRequest;
|
||||||
export let rocket: NDKEvent;
|
export let rocket: NDKEvent;
|
||||||
|
|
||||||
|
let result: VoteDirection | undefined;
|
||||||
|
|
||||||
let parsedRocket = new Rocket(rocket);
|
let parsedRocket = new Rocket(rocket);
|
||||||
|
|
||||||
let _votes = $ndk.storeSubscribe(
|
let _votes = $ndk.storeSubscribe(
|
||||||
@@ -45,10 +47,15 @@
|
|||||||
|
|
||||||
let rocketUpdates = derived([votes, currentUser], ([$votes, $currentUser]) => {
|
let rocketUpdates = derived([votes, currentUser], ([$votes, $currentUser]) => {
|
||||||
let events: NDKEvent[] = [];
|
let events: NDKEvent[] = [];
|
||||||
if ($currentUser && parsedRocket && parsedRocket.VotePowerForPubkey($currentUser.pubkey) > 0) {
|
|
||||||
let votes = new Votes(Array.from($votes, ([_, v]) => v));
|
let votes = new Votes(Array.from($votes, ([_, v]) => v));
|
||||||
let result = votes.Results().Result(parsedRocket);
|
result = votes.Results().Result(parsedRocket);
|
||||||
if (result && result == 'ratify' && !merit.IncludedInRocketState(parsedRocket)) {
|
if (result && result == 'ratify' && !merit.IncludedInRocketState(parsedRocket)) {
|
||||||
|
if (
|
||||||
|
$currentUser &&
|
||||||
|
parsedRocket &&
|
||||||
|
parsedRocket.VotePowerForPubkey($currentUser.pubkey) > 0
|
||||||
|
) {
|
||||||
let e = parsedRocket.CreateUnsignedAMRProof(merit, votes);
|
let e = parsedRocket.CreateUnsignedAMRProof(merit, votes);
|
||||||
if (e) {
|
if (e) {
|
||||||
e.ndk = $ndk;
|
e.ndk = $ndk;
|
||||||
@@ -68,6 +75,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return events;
|
return events;
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -76,9 +84,22 @@
|
|||||||
console.log(c);
|
console.log(c);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let border = '';
|
||||||
|
let background = '';
|
||||||
|
$: {
|
||||||
|
if (result == 'blackball' && !merit.IncludedInRocketState(parsedRocket)) {
|
||||||
|
border = 'border-red-600';
|
||||||
|
background = 'bg-red-600';
|
||||||
|
}
|
||||||
|
if (merit.IncludedInRocketState(parsedRocket)) {
|
||||||
|
border = 'border-lime-600';
|
||||||
|
background = 'bg-lime-600';
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Card.Root class="sm:col-span-2">
|
<Card.Root class="sm:col-span-2 {border}">
|
||||||
<Card.Header class="pb-3">
|
<Card.Header class="pb-3">
|
||||||
<div class="flex flex-nowrap justify-between">
|
<div class="flex flex-nowrap justify-between">
|
||||||
<Card.Title>Problem: {merit.Problem().substring(0, 20)}</Card.Title>{#if merit.Solution()}<a
|
<Card.Title>Problem: {merit.Problem().substring(0, 20)}</Card.Title>{#if merit.Solution()}<a
|
||||||
@@ -178,8 +199,15 @@
|
|||||||
</div></Card.Content
|
</div></Card.Content
|
||||||
>
|
>
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Card.Footer class="flex flex-row items-center border-t px-6 py-3">
|
<Card.Footer class="flex flex-row justify-center border-t px-6 py-3 text-center {background}">
|
||||||
|
{#if merit.IncludedInRocketState(parsedRocket)}
|
||||||
|
<span class="scroll-m-20 text-lg font-semibold tracking-tight md:text-xl">APPROVED</span>
|
||||||
|
<!-- <Alert><div slot="title">Approved</div>This Merit Request has been approved!</Alert> -->
|
||||||
|
{:else if result == 'blackball'}
|
||||||
|
<span class="scroll-m-20 text-lg font-semibold tracking-tight md:text-xl">REJECTED</span>
|
||||||
|
{:else if !result}
|
||||||
<VoteOnMeritRequest {merit} rocket={new Rocket(rocket)} />
|
<VoteOnMeritRequest {merit} rocket={new Rocket(rocket)} />
|
||||||
|
{/if}
|
||||||
</Card.Footer>
|
</Card.Footer>
|
||||||
</Card.Root>
|
</Card.Root>
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
import ProposedProducts from './ProposedProducts.svelte';
|
import ProposedProducts from './ProposedProducts.svelte';
|
||||||
import Todo from './Todo.svelte';
|
import Todo from './Todo.svelte';
|
||||||
import MeritRequests from './MeritRequests.svelte';
|
import MeritRequests from './MeritRequests.svelte';
|
||||||
|
import Button from '@/components/ui/button/button.svelte';
|
||||||
|
|
||||||
export let rocket: NDKEvent;
|
export let rocket: NDKEvent;
|
||||||
</script>
|
</script>
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
<Card.Description class="flex space-x-4">
|
<Card.Description class="flex space-x-4">
|
||||||
<CreateNewProduct rocketEvent={rocket} />
|
<CreateNewProduct rocketEvent={rocket} />
|
||||||
<CreateMeritRequest rocketEvent={rocket} />
|
<CreateMeritRequest rocketEvent={rocket} />
|
||||||
|
<Button on:click={()=>{console.log(rocket.rawEvent())}}>Print to Console</Button>
|
||||||
</Card.Description>
|
</Card.Description>
|
||||||
</Card.Header>
|
</Card.Header>
|
||||||
<Card.Footer></Card.Footer>
|
<Card.Footer></Card.Footer>
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ export class MeritRequest {
|
|||||||
Pubkey: string;
|
Pubkey: string;
|
||||||
TimeStamp: number;
|
TimeStamp: number;
|
||||||
RocketTag: string | undefined; //31108:<pubkey>:<dtag>
|
RocketTag: string | undefined; //31108:<pubkey>:<dtag>
|
||||||
|
LeadTime: number;
|
||||||
|
LastLTUpdate: number;
|
||||||
Problem(): string {
|
Problem(): string {
|
||||||
let _problem = '';
|
let _problem = '';
|
||||||
//todo: handle 1971 problem tracker event tags somehow
|
//todo: handle 1971 problem tracker event tags somehow
|
||||||
@@ -31,7 +33,8 @@ export class MeritRequest {
|
|||||||
return _solution;
|
return _solution;
|
||||||
}
|
}
|
||||||
IncludedInRocketState(rocket: Rocket): boolean {
|
IncludedInRocketState(rocket: Rocket): boolean {
|
||||||
return false;
|
let included = rocket.ApprovedMeritRequests()
|
||||||
|
return Boolean(included.get(this.ID))
|
||||||
}
|
}
|
||||||
BasicValidation(): boolean {
|
BasicValidation(): boolean {
|
||||||
//todo: make a ValidateAgainstRocket and check that pubkey is in WoT
|
//todo: make a ValidateAgainstRocket and check that pubkey is in WoT
|
||||||
@@ -62,7 +65,13 @@ export class MeritRequest {
|
|||||||
kinds: [kind as number]
|
kinds: [kind as number]
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
constructor(request: NDKEvent) {
|
constructor(request: NDKEvent | string) {
|
||||||
|
if (typeof request == 'string') {
|
||||||
|
console.log(69)
|
||||||
|
} else {
|
||||||
|
console.log(71)
|
||||||
|
this.LeadTime = 0;
|
||||||
|
this.LastLTUpdate = 0;
|
||||||
this.Event = request;
|
this.Event = request;
|
||||||
this.ID = request.id;
|
this.ID = request.id;
|
||||||
this.Pubkey = request.pubkey;
|
this.Pubkey = request.pubkey;
|
||||||
@@ -83,6 +92,7 @@ export class MeritRequest {
|
|||||||
this.Merits = getNumberFromTag('merits', request);
|
this.Merits = getNumberFromTag('merits', request);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class Vote {
|
export class Vote {
|
||||||
ID: string;
|
ID: string;
|
||||||
@@ -272,8 +282,7 @@ export class MapOfVotes {
|
|||||||
if (
|
if (
|
||||||
vote.BasicValidation() &&
|
vote.BasicValidation() &&
|
||||||
vote.ValidateAgainstRocket(rocket) &&
|
vote.ValidateAgainstRocket(rocket) &&
|
||||||
vote.ValidateAgainstMeritRequest(merit) &&
|
vote.ValidateAgainstMeritRequest(merit)
|
||||||
!merit.IncludedInRocketState(rocket)
|
|
||||||
) {
|
) {
|
||||||
this.Votes.set(vote.ID, vote); //only show the latest vote from each pubkey
|
this.Votes.set(vote.ID, vote); //only show the latest vote from each pubkey
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -103,6 +103,11 @@ export class Rocket {
|
|||||||
}
|
}
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
// ApprovedMeritRequests():Map<string, MeritRequest> {
|
||||||
|
// let amr = new Map<string, MeritRequest>()
|
||||||
|
|
||||||
|
// return amr
|
||||||
|
// }
|
||||||
UpsertProduct(id: string, price: number, maxSales?: number): NDKEvent {
|
UpsertProduct(id: string, price: number, maxSales?: number): NDKEvent {
|
||||||
let event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
let event = new NDKEvent(this.Event.ndk, this.Event.rawEvent());
|
||||||
event.created_at = Math.floor(new Date().getTime() / 1000);
|
event.created_at = Math.floor(new Date().getTime() / 1000);
|
||||||
|
|||||||
Reference in New Issue
Block a user