5 changed files with 161 additions and 2 deletions
@ -0,0 +1,32 @@ |
|||||||
|
<script lang="ts"> |
||||||
|
import ParsedContent from "./content/ParsedContent.svelte"; |
||||||
|
export let sendReply: (content: string) => void = (content: string) => {}; |
||||||
|
export let submitting = false; |
||||||
|
let submit = () => { |
||||||
|
sendReply(content); |
||||||
|
}; |
||||||
|
let content = ""; |
||||||
|
</script> |
||||||
|
|
||||||
|
<div class=""> |
||||||
|
<textarea |
||||||
|
disabled={submitting} |
||||||
|
bind:value={content} |
||||||
|
class="textarea textarea-primary w-full" |
||||||
|
placeholder="reply..." |
||||||
|
></textarea> |
||||||
|
<div class="flex"> |
||||||
|
<div class="flex-auto"></div> |
||||||
|
<button |
||||||
|
on:click={submit} |
||||||
|
disabled={submitting} |
||||||
|
class="btn btn-primary align-bottom mt-2 btn-sm align-right" |
||||||
|
> |
||||||
|
{#if submitting} |
||||||
|
Sending |
||||||
|
{:else} |
||||||
|
Send |
||||||
|
{/if} |
||||||
|
</button> |
||||||
|
</div> |
||||||
|
</div> |
||||||
@ -0,0 +1,76 @@ |
|||||||
|
<script lang="ts"> |
||||||
|
import { ndk } from "$lib/stores/ndk"; |
||||||
|
import { NDKEvent, NDKRelaySet, type NDKTag } from "@nostr-dev-kit/ndk"; |
||||||
|
import { reply_kind } from "$lib/kinds"; |
||||||
|
import { getUserRelays, logged_in_user } from "$lib/stores/users"; |
||||||
|
import { selected_repo } from "$lib/stores/repo"; |
||||||
|
import Compose from "$lib/components/events/Compose.svelte"; |
||||||
|
import { selected_pr_full } from "$lib/stores/PR"; |
||||||
|
|
||||||
|
export let reply_to_event_id = ""; |
||||||
|
|
||||||
|
let repo_id: string; |
||||||
|
let pr_id: string; |
||||||
|
|
||||||
|
let submitting = false; |
||||||
|
let submitted = false; |
||||||
|
let edit_mode = false; |
||||||
|
$: { |
||||||
|
repo_id = $selected_repo.repo_id; |
||||||
|
pr_id = $selected_pr_full.summary.id; |
||||||
|
|
||||||
|
edit_mode = |
||||||
|
$logged_in_user !== undefined && |
||||||
|
repo_id.length > 0 && |
||||||
|
pr_id.length > 0 && |
||||||
|
!submitted; |
||||||
|
} |
||||||
|
|
||||||
|
async function sendReply(content: string) { |
||||||
|
if (!$logged_in_user) return; |
||||||
|
let event = new NDKEvent(ndk); |
||||||
|
event.kind = reply_kind; |
||||||
|
event.tags.push(["e", pr_id, "root"]); |
||||||
|
if (reply_to_event_id.length > 0) { |
||||||
|
event.tags.push(["e", pr_id, "reply"]); |
||||||
|
} |
||||||
|
event.tags.push(["r", `r-${repo_id}`]); |
||||||
|
event.content = content; |
||||||
|
submitting = true; |
||||||
|
let relays = [...$selected_repo.relays]; |
||||||
|
try { |
||||||
|
event.sign(); |
||||||
|
} catch { |
||||||
|
alert("failed to sign event"); |
||||||
|
} |
||||||
|
try { |
||||||
|
let user_relays = await getUserRelays($logged_in_user.hexpubkey); |
||||||
|
relays = [ |
||||||
|
...relays, |
||||||
|
...(user_relays.ndk_relays |
||||||
|
? user_relays.ndk_relays.writeRelayUrls |
||||||
|
: []), |
||||||
|
// TODO: pr event pubkey relays |
||||||
|
]; |
||||||
|
} catch { |
||||||
|
alert("failed to get user relays"); |
||||||
|
} |
||||||
|
try { |
||||||
|
let res = await event.publish( |
||||||
|
NDKRelaySet.fromRelayUrls(relays, ndk), |
||||||
|
); |
||||||
|
submitting = false; |
||||||
|
submitted = true; |
||||||
|
setTimeout(() => { |
||||||
|
submitted = false; |
||||||
|
}, 5000); |
||||||
|
} catch {} |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
{#if edit_mode} |
||||||
|
<Compose {sendReply} {submitting} /> |
||||||
|
{/if} |
||||||
|
{#if submitted} |
||||||
|
<div>sent!</div> |
||||||
|
{/if} |
||||||
Loading…
Reference in new issue