snort/packages/system-react
Kieran 7ec602cc16
Some checks reported errors
continuous-integration/drone/push Build encountered an error
Rename files
2023-06-21 16:48:35 +01:00
..
example @snort/system-react package 2023-06-16 20:31:33 +01:00
src @snort/system-react package 2023-06-16 20:31:33 +01:00
package.json Rename files 2023-06-21 16:48:35 +01:00
README.md @snort/system-react package 2023-06-16 20:31:33 +01:00
tsconfig.json @snort/system-react package 2023-06-16 20:31:33 +01:00

@snort/system-react

React hooks for @snort/system

Sample:

import { useMemo } from "react"
import { useRequestBuilder, useUserProfile } from "@snort/system-react";
import { FlatNoteStore, NostrSystem, RequestBuilder, TaggedRawEvent } from "@snort/system"

// singleton nostr system class
const System = new NostrSystem({});

// some bootstrap relays
[
    "wss://relay.snort.social",
    "wss://nos.lol"
].forEach(r => System.ConnectToRelay(r, { read: true, write: false }));

export function Note({ ev }: { ev: TaggedRawEvent }) {
    // get profile from cache or request a profile from relays
    const profile = useUserProfile(System, ev.pubkey);

    return <div>
        Post by: {profile.name ?? profile.display_name}
        <p>
            {ev.content}
        </p>
    </div>
}

export function UserPosts(props: { pubkey: string }) {
    const sub = useMemo(() => {
        const rb = new RequestBuilder("get-posts");
        rb.withFilter()
            .authors([props.pubkey])
            .kinds([1])
            .limit(10);

        return rb;
    }, [props.pubkey]);

    const data = useRequestBuilder<FlatNoteStore>(System, FlatNoteStore, sub);
    return (
        <>
            {data.data.map(a => <Note ev={a} />)}
        </>
    )
}

export function MyApp() {
    return (
        <UserPosts pubkey="63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed" />
    )
}