1.3.1 • Published 7 days ago

@snort/system-react v1.3.1

Weekly downloads
-
License
MIT
Repository
-
Last release
7 days ago

@snort/system-react

React hooks for @snort/system

Available hooks

useRequestBuilder(RequestBuilder)

The main hook which allows you to subscribe to nostr relays and returns a reactive store.

useUserProfile(pubkey: string | undefined)

Profile hook, profile loading is automated, this hook will return the profile from cache and also refresh the cache in the background (stale-while-revalidate)

useEventFeed(NostrLink) / useEventsFeed(Array<NostrLink>)

A simple hook which can load events using the NostrLink class, this class contains one NIP-19 entity nevent/naddr etc.

useReactions(id, Array<NostrLink>)

Loads reactions for a set of events, this can be a set of posts on a profile or an arbitary list of events.

useEventReactions(NostrLink, Array<NostrEvent>)

Process a set of related events (usually results from useReactions) and return likes/dislikes/reposts/zaps

useUserSearch()

Search for profiles in the profile cache, this also returns exact links if they match

useSystemState(System)

Hook state of the nostr system

Example:

import { useMemo } from "react";
import { SnortContext, useRequestBuilder, useUserProfile } from "@snort/system-react";
import { NostrSystem, NoteCollection, RequestBuilder, TaggedNostrEvent } from "@snort/system";

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: TaggedNostrEvent }) {
  const profile = useUserProfile(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(sub);
  return (
    <>
      {data.map(a => (
        <Note ev={a} />
      ))}
    </>
  );
}

export function MyApp() {
  return (
    <SnortContext.Provider value={System}>
      <UserPosts pubkey="63fe6318dc58583cfe16810f86dd09e18bfd76aabc24a0081ce2856f330504ed" />
    </SnortContext.Provider>
  );
}
1.3.1

7 days ago

1.3.0

8 days ago

1.2.12

2 months ago

1.2.10

3 months ago

1.2.11

3 months ago

1.2.9

3 months ago

1.2.8

3 months ago

1.2.6

3 months ago

1.2.1

3 months ago

1.2.0

4 months ago

1.1.8

5 months ago

1.1.7

5 months ago

1.1.6

5 months ago

1.1.1

6 months ago

1.0.19

7 months ago

1.0.18

7 months ago

1.0.17

7 months ago

1.0.16

7 months ago

1.0.9

10 months ago

1.1.5

5 months ago

1.1.4

6 months ago

1.1.3

6 months ago

1.1.2

6 months ago

1.0.11

10 months ago

1.0.10

10 months ago

1.0.15

8 months ago

1.0.14

8 months ago

1.0.13

8 months ago

1.0.12

9 months ago

1.0.8

11 months ago

1.0.7

11 months ago

1.0.6

11 months ago

1.0.5

11 months ago

1.0.4

11 months ago

1.0.3

11 months ago

1.0.2

11 months ago

1.0.1

11 months ago

1.0.0

11 months ago