its for when you want to get like notifications for your reposts
1import { render } from "solid-js/web";
2
3import "bsky-repost-likes-monitor/style.css";
4import {
5 App,
6 AppProps,
7 ConnectionStatus,
8 Notification,
9} from "bsky-repost-likes-monitor";
10import { Component, createSignal } from "solid-js";
11import { onMessage, sendMessage } from "webext-bridge/popup";
12import store from "@/utils/store";
13
14const Wrapped: Component = () => {
15 const [actorId, setActorId] = createSignal<string>("");
16 const [serviceDomain, setWsUrl] = createSignal<string>("");
17 const [items, setItems] = createSignal<Notification[]>([]);
18 const [connectionStatus, setConnectionStatus] =
19 createSignal<ConnectionStatus>("disconnected");
20 const [error, setError] = createSignal<string | null>(null);
21
22 onMessage("setError", ({ data }) => {
23 setError(data);
24 });
25 onMessage("setConnectionStatus", ({ data }) => {
26 setConnectionStatus(data);
27 });
28 onMessage("setItems", ({ data }) => {
29 setItems(data);
30 });
31
32 const connect = async () => {
33 try {
34 await sendMessage(
35 "connectService",
36 {
37 actorId: actorId(),
38 serviceDomain: serviceDomain(),
39 },
40 "background",
41 );
42 await store.actorId.setValue(actorId());
43 await store.serviceDomain.setValue(serviceDomain());
44 } catch (error) {
45 setError(`failed to connect: ${error}`);
46 }
47 };
48
49 const disconnect = async () => {
50 try {
51 await sendMessage("disconnectService", {}, "background");
52 } catch (error) {
53 setError(`failed to disconnect: ${error}`);
54 }
55 };
56
57 onCleanup(disconnect);
58 onMount(async () => {
59 await store.actorId.getValue().then(setActorId);
60 await store.serviceDomain.getValue().then(setWsUrl);
61
62 await sendMessage("connectionStatus", {}, "background").then(
63 setConnectionStatus,
64 );
65 await sendMessage("error", {}, "background").then(setError);
66 await sendMessage("items", {}, "background").then(setItems);
67 });
68
69 const props: AppProps = {
70 actorIdSignal: [actorId, setActorId],
71 serviceDomainSignal: [serviceDomain, setWsUrl],
72 items,
73 clearItems: () => {
74 setItems([]);
75 sendMessage("clearItems", {}, "background");
76 },
77 connectionStatus: connectionStatus,
78 error,
79 connect,
80 disconnect,
81 isExtension: true,
82 };
83
84 return <App {...props}></App>;
85};
86
87render(() => <Wrapped />, document.getElementById("root")!);