reuse relayprovider

This commit is contained in:
Ren Amamiya
2023-04-29 10:25:40 +07:00
parent be8b40c86d
commit 3f06193c59
27 changed files with 151 additions and 156 deletions

View File

@@ -1,4 +1,5 @@
import { AvatarUploader } from '@lume/shared/avatarUploader';
import { RelayContext } from '@lume/shared/relayProvider';
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
@@ -6,14 +7,15 @@ import { createChannel } from '@lume/utils/storage';
import { Dialog, Transition } from '@headlessui/react';
import { Cancel, Plus } from 'iconoir-react';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { Fragment, useEffect, useState } from 'react';
import { Fragment, useContext, useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
import { useSWRConfig } from 'swr';
import { navigate } from 'vite-plugin-ssr/client/router';
export default function ChannelCreateModal() {
const pool: any = useContext(RelayContext);
const { account, isError, isLoading } = useActiveAccount();
const { mutate } = useSWRConfig();
@@ -41,7 +43,6 @@ export default function ChannelCreateModal() {
setLoading(true);
if (!isError && !isLoading && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: JSON.stringify(data),
created_at: dateToUnix(),

View File

@@ -1,17 +1,19 @@
import UserReply from '@lume/app/channel/components/messages/userReply';
import { ImagePicker } from '@lume/shared/form/imagePicker';
import { RelayContext } from '@lume/shared/relayProvider';
import { channelContentAtom, channelReplyAtom } from '@lume/stores/channel';
import { FULL_RELAYS, WRITEONLY_RELAYS } from '@lume/stores/constants';
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { Cancel } from 'iconoir-react';
import { useAtom, useAtomValue } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { useContext } from 'react';
export default function ChannelMessageForm({ channelID }: { channelID: string | string[] }) {
const pool: any = useContext(RelayContext);
const { account, isLoading, isError } = useActiveAccount();
const [value, setValue] = useAtom(channelContentAtom);
@@ -34,7 +36,6 @@ export default function ChannelMessageForm({ channelID }: { channelID: string |
}
if (!isError && !isLoading && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: value,
created_at: dateToUnix(),
@@ -46,7 +47,7 @@ export default function ChannelMessageForm({ channelID }: { channelID: string |
event.sig = signEvent(event, account.privkey);
// publish note
pool.publish(event, FULL_RELAYS);
pool.publish(event, WRITEONLY_RELAYS);
// reset state
resetValue();
// reset channel reply

View File

@@ -1,18 +1,19 @@
import { RelayContext } from '@lume/shared/relayProvider';
import Tooltip from '@lume/shared/tooltip';
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { EyeClose } from 'iconoir-react';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { useContext } from 'react';
export default function MessageHideButton({ id }: { id: string }) {
const pool: any = useContext(RelayContext);
const { account, isError, isLoading } = useActiveAccount();
const hideMessage = () => {
if (!isError && !isLoading && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: '',
created_at: dateToUnix(),

View File

@@ -1,18 +1,19 @@
import { RelayContext } from '@lume/shared/relayProvider';
import Tooltip from '@lume/shared/tooltip';
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { MicMute } from 'iconoir-react';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { useContext } from 'react';
export default function MessageMuteButton({ pubkey }: { pubkey: string }) {
const pool: any = useContext(RelayContext);
const { account, isError, isLoading } = useActiveAccount();
const muteUser = () => {
if (!isError && !isLoading && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: '',
created_at: dateToUnix(),

View File

@@ -1,4 +1,5 @@
import { AvatarUploader } from '@lume/shared/avatarUploader';
import { RelayContext } from '@lume/shared/relayProvider';
import { DEFAULT_AVATAR, WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
@@ -6,12 +7,12 @@ import { getChannel, updateChannelMetadata } from '@lume/utils/storage';
import { Dialog, Transition } from '@headlessui/react';
import { Cancel, EditPencil } from 'iconoir-react';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { Fragment, useEffect, useState } from 'react';
import { Fragment, useContext, useEffect, useState } from 'react';
import { useForm } from 'react-hook-form';
export default function ChannelUpdateModal({ id }: { id: string }) {
const pool: any = useContext(RelayContext);
const { account, isError, isLoading } = useActiveAccount();
const [isOpen, setIsOpen] = useState(false);
@@ -47,7 +48,6 @@ export default function ChannelUpdateModal({ id }: { id: string }) {
setLoading(true);
if (!isError && !isLoading && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: JSON.stringify(data),
created_at: dateToUnix(),

View File

@@ -10,7 +10,7 @@ export function LayoutChannel({ children }: { children: React.ReactNode }) {
data-tauri-drag-region
className="relative h-11 shrink-0 border-b border-zinc-100 bg-white dark:border-zinc-900 dark:bg-black"
>
<AppHeader collector={true} />
<AppHeader />
</div>
<div className="relative flex min-h-0 w-full flex-1">
<div className="relative w-[68px] shrink-0 border-r border-zinc-900">

View File

@@ -3,8 +3,9 @@ import ChannelMembers from '@lume/app/channel/components/members';
import ChannelMessageForm from '@lume/app/channel/components/messages/form';
import ChannelMetadata from '@lume/app/channel/components/metadata';
import ChannelUpdateModal from '@lume/app/channel/components/updateModal';
import { RelayContext } from '@lume/shared/relayProvider';
import { channelMessagesAtom, channelReplyAtom } from '@lume/stores/channel';
import { FULL_RELAYS } from '@lume/stores/constants';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix, hoursAgo } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { usePageContext } from '@lume/utils/hooks/usePageContext';
@@ -12,8 +13,7 @@ import { arrayObjToPureArr } from '@lume/utils/transform';
import { useSetAtom } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { RelayPool } from 'nostr-relaypool';
import { Suspense, lazy, useEffect, useRef } from 'react';
import { Suspense, lazy, useContext, useEffect, useRef } from 'react';
import useSWRSubscription from 'swr/subscription';
let mutedList: any = [];
@@ -31,6 +31,7 @@ if (typeof window !== 'undefined') {
const ChannelMessageList = lazy(() => import('@lume/app/channel/components/messageList'));
export function Page() {
const pool: any = useContext(RelayContext);
const pageContext = usePageContext();
const searchParams: any = pageContext.urlParsed.search;
@@ -49,7 +50,6 @@ export function Page() {
useSWRSubscription(channelID ? ['channel', channelID] : null, ([, key], {}: any) => {
// subscribe to channel
const pool = new RelayPool(FULL_RELAYS);
const unsubscribe = pool.subscribe(
[
{
@@ -59,8 +59,8 @@ export function Page() {
limit: 20,
},
],
FULL_RELAYS,
(event) => {
READONLY_RELAYS,
(event: { id: string; pubkey: string }) => {
const message: any = event;
if (hided.includes(event.id)) {
message['hide'] = true;

View File

@@ -1,16 +1,17 @@
import { ImagePicker } from '@lume/shared/form/imagePicker';
import { RelayContext } from '@lume/shared/relayProvider';
import { chatContentAtom } from '@lume/stores/chat';
import { FULL_RELAYS, WRITEONLY_RELAYS } from '@lume/stores/constants';
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix } from '@lume/utils/getDate';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { useAtom } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, nip04, signEvent } from 'nostr-tools';
import { useCallback } from 'react';
import { useCallback, useContext } from 'react';
export default function ChatMessageForm({ receiverPubkey }: { receiverPubkey: string }) {
const pool: any = useContext(RelayContext);
const { account, isLoading, isError } = useActiveAccount();
const [value, setValue] = useAtom(chatContentAtom);
@@ -27,7 +28,6 @@ export default function ChatMessageForm({ receiverPubkey }: { receiverPubkey: st
if (!isError && !isLoading && account) {
encryptMessage(account.privkey)
.then((encryptedContent) => {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: encryptedContent,
created_at: dateToUnix(),
@@ -38,7 +38,7 @@ export default function ChatMessageForm({ receiverPubkey }: { receiverPubkey: st
event.id = getEventHash(event);
event.sig = signEvent(event, account.privkey);
// publish note
pool.publish(event, FULL_RELAYS);
pool.publish(event, WRITEONLY_RELAYS);
// reset state
resetValue();
})

View File

@@ -10,7 +10,7 @@ export function LayoutChat({ children }: { children: React.ReactNode }) {
data-tauri-drag-region
className="relative h-11 shrink-0 border-b border-zinc-100 bg-white dark:border-zinc-900 dark:bg-black"
>
<AppHeader collector={true} />
<AppHeader />
</div>
<div className="relative flex min-h-0 w-full flex-1">
<div className="relative w-[68px] shrink-0 border-r border-zinc-900">

View File

@@ -1,18 +1,19 @@
import ChatMessageForm from '@lume/app/chat/components/messages/form';
import { RelayContext } from '@lume/shared/relayProvider';
import { chatMessagesAtom } from '@lume/stores/chat';
import { FULL_RELAYS } from '@lume/stores/constants';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { usePageContext } from '@lume/utils/hooks/usePageContext';
import { useSetAtom } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { RelayPool } from 'nostr-relaypool';
import { Suspense, lazy, useEffect } from 'react';
import { Suspense, lazy, useContext, useEffect } from 'react';
import useSWRSubscription from 'swr/subscription';
const ChatMessageList = lazy(() => import('@lume/app/chat/components/messageList'));
export function Page() {
const pool: any = useContext(RelayContext);
const pageContext = usePageContext();
const searchParams: any = pageContext.urlParsed.search;
@@ -24,7 +25,6 @@ export function Page() {
const resetChatMessages = useResetAtom(chatMessagesAtom);
useSWRSubscription(pubkey ? ['chat', pubkey] : null, ([, key], {}: any) => {
const pool = new RelayPool(FULL_RELAYS);
const unsubscribe = pool.subscribe(
[
{
@@ -40,7 +40,7 @@ export function Page() {
limit: 20,
},
],
FULL_RELAYS,
READONLY_RELAYS,
(event: any) => {
setChatMessages((prev) => [...prev, event]);
}

View File

@@ -1,5 +1,6 @@
import LumeIcon from '@lume/shared/icons/lume';
import { FULL_RELAYS } from '@lume/stores/constants';
import { RelayContext } from '@lume/shared/relayProvider';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { dateToUnix, hoursAgo } from '@lume/utils/getDate';
import {
addToBlacklist,
@@ -12,11 +13,11 @@ import {
} from '@lume/utils/storage';
import { getParentID, nip02ToArray } from '@lume/utils/transform';
import { RelayPool } from 'nostr-relaypool';
import { useEffect, useRef } from 'react';
import { useContext, useEffect, useRef } from 'react';
import { navigate } from 'vite-plugin-ssr/client/router';
export function Page() {
const pool: any = useContext(RelayContext);
const now = useRef(new Date());
useEffect(() => {
@@ -28,7 +29,6 @@ export function Page() {
const lastLogin = await getLastLogin();
const notes = await countTotalNotes();
const pool = new RelayPool(FULL_RELAYS);
const follows = nip02ToArray(JSON.parse(account.follows));
const query = [];
@@ -71,7 +71,7 @@ export function Page() {
// subscribe relays
unsubscribe = pool.subscribe(
query,
FULL_RELAYS,
READONLY_RELAYS,
(event: any) => {
switch (event.kind) {
// short text note
@@ -140,7 +140,7 @@ export function Page() {
}
clearTimeout(timeout);
};
}, []);
}, [pool]);
return (
<div className="h-screen w-screen bg-zinc-50 text-zinc-900 dark:bg-black dark:text-white">

View File

@@ -1,4 +1,5 @@
import { ImagePicker } from '@lume/shared/form/imagePicker';
import { RelayContext } from '@lume/shared/relayProvider';
import { WRITEONLY_RELAYS } from '@lume/stores/constants';
import { noteContentAtom } from '@lume/stores/note';
import { dateToUnix } from '@lume/utils/getDate';
@@ -6,17 +7,17 @@ import { useActiveAccount } from '@lume/utils/hooks/useActiveAccount';
import { useAtom } from 'jotai';
import { useResetAtom } from 'jotai/utils';
import { RelayPool } from 'nostr-relaypool';
import { getEventHash, signEvent } from 'nostr-tools';
import { useContext } from 'react';
export default function NoteForm() {
const pool: any = useContext(RelayContext);
const { account, isLoading, isError } = useActiveAccount();
const [value, setValue] = useAtom(noteContentAtom);
const resetValue = useResetAtom(noteContentAtom);
const submitEvent = () => {
if (!isLoading && !isError && account) {
const pool = new RelayPool(WRITEONLY_RELAYS);
const event: any = {
content: value,
created_at: dateToUnix(),

View File

@@ -1,14 +1,15 @@
import { contentParser } from '@lume/app/newsfeed/components/contentParser';
import { NoteDefaultUser } from '@lume/app/newsfeed/components/user/default';
import { RelayContext } from '@lume/shared/relayProvider';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { RelayPool } from 'nostr-relaypool';
import { memo } from 'react';
import { memo, useContext } from 'react';
import useSWRSubscription from 'swr/subscription';
export const NoteParent = memo(function NoteParent({ id }: { id: string }) {
const pool: any = useContext(RelayContext);
const { data, error } = useSWRSubscription(id ? id : null, (key, { next }) => {
const pool = new RelayPool(READONLY_RELAYS);
const unsubscribe = pool.subscribe(
[
{

View File

@@ -1,41 +1,36 @@
import { contentParser } from '@lume/app/newsfeed/components/contentParser';
import { NoteDefaultUser } from '@lume/app/newsfeed/components/user/default';
import { RelayContext } from '@lume/shared/relayProvider';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { RelayPool } from 'nostr-relaypool';
import { memo } from 'react';
import { memo, useContext } from 'react';
import useSWRSubscription from 'swr/subscription';
export const NoteQuote = memo(function NoteQuote({ id }: { id: string }) {
const { data, error } = useSWRSubscription(
id
? [
{
ids: [id],
kinds: [1],
},
]
: null,
(key, { next }) => {
const pool = new RelayPool(READONLY_RELAYS);
const unsubscribe = pool.subscribe(
key,
READONLY_RELAYS,
(event: any) => {
next(null, event);
},
undefined,
undefined,
{
unsubscribeOnEose: true,
}
);
const pool: any = useContext(RelayContext);
return () => {
unsubscribe();
};
}
);
const { data, error } = useSWRSubscription(id ? id : null, (key, { next }) => {
const unsubscribe = pool.subscribe(
[
{
ids: [key],
},
],
READONLY_RELAYS,
(event: any) => {
next(null, event);
},
undefined,
undefined,
{
unsubscribeOnEose: true,
}
);
return () => {
unsubscribe();
};
});
return (
<div className="relative mb-2 mt-3 rounded-lg border border-zinc-700 bg-zinc-800 p-2 py-3">

View File

@@ -1,17 +1,17 @@
import { contentParser } from '@lume/app/newsfeed/components/contentParser';
import { NoteDefaultUser } from '@lume/app/newsfeed/components/user/default';
import { RelayContext } from '@lume/shared/relayProvider';
import { READONLY_RELAYS } from '@lume/stores/constants';
import { RelayPool } from 'nostr-relaypool';
import { memo } from 'react';
import { memo, useContext } from 'react';
import useSWRSubscription from 'swr/subscription';
import { navigate } from 'vite-plugin-ssr/client/router';
export const RootNote = memo(function RootNote({ id, fallback }: { id: string; fallback?: any }) {
const pool: any = useContext(RelayContext);
const parseFallback = fallback.length > 0 ? JSON.parse(fallback) : null;
const { data, error } = useSWRSubscription(parseFallback ? null : id, (key, { next }) => {
const pool = new RelayPool(READONLY_RELAYS);
const unsubscribe = pool.subscribe(
[
{

View File

@@ -10,7 +10,7 @@ export function LayoutNewsfeed({ children }: { children: React.ReactNode }) {
data-tauri-drag-region
className="relative h-11 shrink-0 border-b border-zinc-100 bg-white dark:border-zinc-900 dark:bg-black"
>
<AppHeader collector={true} />
<AppHeader />
</div>
<div className="relative flex min-h-0 w-full flex-1">
<div className="relative w-[68px] shrink-0 border-r border-zinc-900">