mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-09-28 20:43:33 +02:00
fix build
This commit is contained in:
@@ -10,7 +10,7 @@ import { nip19 } from "nostr-tools";
|
|||||||
import { matchSorter } from "match-sorter/dist/match-sorter.esm.js";
|
import { matchSorter } from "match-sorter/dist/match-sorter.esm.js";
|
||||||
|
|
||||||
import { Emoji, useContextEmojis } from "../providers/emoji-provider";
|
import { Emoji, useContextEmojis } from "../providers/emoji-provider";
|
||||||
import { useUserDirectoryContext } from "../providers/user-directory-provider";
|
import { useUserSearchDirectoryContext } from "../providers/user-directory-provider";
|
||||||
import { UserAvatar } from "./user-avatar";
|
import { UserAvatar } from "./user-avatar";
|
||||||
|
|
||||||
export type PeopleToken = { pubkey: string; names: string[] };
|
export type PeopleToken = { pubkey: string; names: string[] };
|
||||||
@@ -57,7 +57,7 @@ const Loading: ReactTextareaAutocompleteProps<
|
|||||||
|
|
||||||
function useAutocompleteTriggers() {
|
function useAutocompleteTriggers() {
|
||||||
const emojis = useContextEmojis();
|
const emojis = useContextEmojis();
|
||||||
const getDirectory = useUserDirectoryContext();
|
const getDirectory = useUserSearchDirectoryContext();
|
||||||
|
|
||||||
const triggers: TriggerType<Token> = {
|
const triggers: TriggerType<Token> = {
|
||||||
":": {
|
":": {
|
||||||
|
@@ -17,7 +17,7 @@ import { useForm } from "react-hook-form";
|
|||||||
|
|
||||||
import { EventSplit } from "../../helpers/nostr/zaps";
|
import { EventSplit } from "../../helpers/nostr/zaps";
|
||||||
import { AddIcon } from "../icons";
|
import { AddIcon } from "../icons";
|
||||||
import { useUserDirectoryContext } from "../../providers/user-directory-provider";
|
import { useUserSearchDirectoryContext } from "../../providers/user-directory-provider";
|
||||||
import { useAsync } from "react-use";
|
import { useAsync } from "react-use";
|
||||||
import { getUserDisplayName } from "../../helpers/user-metadata";
|
import { getUserDisplayName } from "../../helpers/user-metadata";
|
||||||
import userMetadataService from "../../services/user-metadata";
|
import userMetadataService from "../../services/user-metadata";
|
||||||
@@ -58,10 +58,10 @@ function AddUserForm({
|
|||||||
});
|
});
|
||||||
watch("percent");
|
watch("percent");
|
||||||
|
|
||||||
const getDirectory = useUserDirectoryContext();
|
const getDirectory = useUserSearchDirectoryContext();
|
||||||
const { value: users } = useAsync(async () => {
|
const { value: users } = useAsync(async () => {
|
||||||
const dir = await getDirectory();
|
const dir = await getDirectory();
|
||||||
return dir.map((pubkey) => ({ pubkey, metadata: userMetadataService.getSubject(pubkey).value }));
|
return dir.map(({ pubkey }) => ({ pubkey, metadata: userMetadataService.getSubject(pubkey).value }));
|
||||||
}, [getDirectory]);
|
}, [getDirectory]);
|
||||||
|
|
||||||
const submit = handleSubmit((values) => {
|
const submit = handleSubmit((values) => {
|
||||||
|
@@ -5,7 +5,7 @@ import { useAsync, useThrottle } from "react-use";
|
|||||||
import { matchSorter } from "match-sorter";
|
import { matchSorter } from "match-sorter";
|
||||||
import { nip19 } from "nostr-tools";
|
import { nip19 } from "nostr-tools";
|
||||||
|
|
||||||
import { useUserDirectoryContext } from "../../providers/user-directory-provider";
|
import { useUserSearchDirectoryContext } from "../../providers/user-directory-provider";
|
||||||
import { UserAvatar } from "../user-avatar";
|
import { UserAvatar } from "../user-avatar";
|
||||||
import { useUserMetadata } from "../../hooks/use-user-metadata";
|
import { useUserMetadata } from "../../hooks/use-user-metadata";
|
||||||
import { getUserDisplayName } from "../../helpers/user-metadata";
|
import { getUserDisplayName } from "../../helpers/user-metadata";
|
||||||
@@ -23,7 +23,7 @@ function UserOption({ pubkey }: { pubkey: string }) {
|
|||||||
|
|
||||||
export default function SearchModal({ isOpen, onClose }: Omit<ModalProps, "children">) {
|
export default function SearchModal({ isOpen, onClose }: Omit<ModalProps, "children">) {
|
||||||
const searchRef = useRef<HTMLInputElement | null>(null);
|
const searchRef = useRef<HTMLInputElement | null>(null);
|
||||||
const getDirectory = useUserDirectoryContext();
|
const getDirectory = useUserSearchDirectoryContext();
|
||||||
|
|
||||||
const [inputValue, setInputValue] = useState("");
|
const [inputValue, setInputValue] = useState("");
|
||||||
const search = useThrottle(inputValue);
|
const search = useThrottle(inputValue);
|
||||||
|
@@ -9,7 +9,7 @@ import { InvoiceModalProvider } from "./invoice-modal";
|
|||||||
import NotificationTimelineProvider from "./notification-timeline";
|
import NotificationTimelineProvider from "./notification-timeline";
|
||||||
import PostModalProvider from "./post-modal-provider";
|
import PostModalProvider from "./post-modal-provider";
|
||||||
import { DefaultEmojiProvider, UserEmojiProvider } from "./emoji-provider";
|
import { DefaultEmojiProvider, UserEmojiProvider } from "./emoji-provider";
|
||||||
import { AllUserDirectoryProvider } from "./user-directory-provider";
|
import { AllUserSearchDirectoryProvider } from "./user-directory-provider";
|
||||||
import MuteModalProvider from "./mute-modal-provider";
|
import MuteModalProvider from "./mute-modal-provider";
|
||||||
import BreakpointProvider from "./breakpoint-provider";
|
import BreakpointProvider from "./breakpoint-provider";
|
||||||
|
|
||||||
@@ -39,9 +39,9 @@ export function PageProviders({ children }: { children: React.ReactNode }) {
|
|||||||
<NotificationTimelineProvider>
|
<NotificationTimelineProvider>
|
||||||
<DefaultEmojiProvider>
|
<DefaultEmojiProvider>
|
||||||
<UserEmojiProvider>
|
<UserEmojiProvider>
|
||||||
<AllUserDirectoryProvider>
|
<AllUserSearchDirectoryProvider>
|
||||||
<PostModalProvider>{children}</PostModalProvider>
|
<PostModalProvider>{children}</PostModalProvider>
|
||||||
</AllUserDirectoryProvider>
|
</AllUserSearchDirectoryProvider>
|
||||||
</UserEmojiProvider>
|
</UserEmojiProvider>
|
||||||
</DefaultEmojiProvider>
|
</DefaultEmojiProvider>
|
||||||
</NotificationTimelineProvider>
|
</NotificationTimelineProvider>
|
||||||
|
@@ -1,17 +1,13 @@
|
|||||||
import { PropsWithChildren, createContext, useCallback, useContext } from "react";
|
import { PropsWithChildren, createContext, useCallback, useContext } from "react";
|
||||||
|
|
||||||
import { useCurrentAccount } from "../hooks/use-current-account";
|
|
||||||
import useUserContactList from "../hooks/use-user-contact-list";
|
|
||||||
import { getPubkeysFromList } from "../helpers/nostr/lists";
|
|
||||||
import userMetadataService from "../services/user-metadata";
|
|
||||||
import db from "../services/db";
|
import db from "../services/db";
|
||||||
|
|
||||||
export type UserDirectory = { pubkey: string; names: [] }[];
|
export type UserDirectory = { pubkey: string; names: [] }[];
|
||||||
export type GetDirectoryFn = () => Promise<UserDirectory> | UserDirectory;
|
export type GetDirectoryFn = () => Promise<UserDirectory> | UserDirectory;
|
||||||
const UserDirectoryContext = createContext<GetDirectoryFn>(async () => []);
|
const UserSearchDirectoryContext = createContext<GetDirectoryFn>(async () => []);
|
||||||
|
|
||||||
export function useUserDirectoryContext() {
|
export function useUserSearchDirectoryContext() {
|
||||||
return useContext(UserDirectoryContext);
|
return useContext(UserSearchDirectoryContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
// export function getNameDirectory(directory: UserDirectory) {
|
// export function getNameDirectory(directory: UserDirectory) {
|
||||||
@@ -46,19 +42,19 @@ export function useUserDirectoryContext() {
|
|||||||
// return <UserDirectoryProvider getDirectory={getDirectory}>{children}</UserDirectoryProvider>;
|
// return <UserDirectoryProvider getDirectory={getDirectory}>{children}</UserDirectoryProvider>;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
export function AllUserDirectoryProvider({ children }: PropsWithChildren) {
|
export function AllUserSearchDirectoryProvider({ children }: PropsWithChildren) {
|
||||||
const getDirectory = useCallback(async () => {
|
const getDirectory = useCallback(async () => {
|
||||||
return await db.getAll("userSearch");
|
return await db.getAll("userSearch");
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
return <UserDirectoryProvider getDirectory={getDirectory}>{children}</UserDirectoryProvider>;
|
return <UserSearchDirectoryProvider getDirectory={getDirectory}>{children}</UserSearchDirectoryProvider>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function UserDirectoryProvider({
|
export default function UserSearchDirectoryProvider({
|
||||||
children,
|
children,
|
||||||
getDirectory,
|
getDirectory,
|
||||||
}: PropsWithChildren & { getDirectory: GetDirectoryFn }) {
|
}: PropsWithChildren & { getDirectory: GetDirectoryFn }) {
|
||||||
const parent = useContext(UserDirectoryContext);
|
const parent = useContext(UserSearchDirectoryContext);
|
||||||
const wrapper = useCallback<() => Promise<UserDirectory>>(async () => {
|
const wrapper = useCallback<() => Promise<UserDirectory>>(async () => {
|
||||||
const dir = parent ? await parent() : [];
|
const dir = parent ? await parent() : [];
|
||||||
const newDir = await getDirectory();
|
const newDir = await getDirectory();
|
||||||
@@ -68,5 +64,5 @@ export default function UserDirectoryProvider({
|
|||||||
return dir;
|
return dir;
|
||||||
}, [parent, getDirectory]);
|
}, [parent, getDirectory]);
|
||||||
|
|
||||||
return <UserDirectoryContext.Provider value={wrapper}>{children}</UserDirectoryContext.Provider>;
|
return <UserSearchDirectoryContext.Provider value={wrapper}>{children}</UserSearchDirectoryContext.Provider>;
|
||||||
}
|
}
|
||||||
|
@@ -22,7 +22,6 @@ import NostrPublishAction from "../../../classes/nostr-publish-action";
|
|||||||
import { unique } from "../../../helpers/array";
|
import { unique } from "../../../helpers/array";
|
||||||
import MagicTextArea, { RefType } from "../../../components/magic-textarea";
|
import MagicTextArea, { RefType } from "../../../components/magic-textarea";
|
||||||
import { useContextEmojis } from "../../../providers/emoji-provider";
|
import { useContextEmojis } from "../../../providers/emoji-provider";
|
||||||
import UserDirectoryProvider from "../../../providers/user-directory-provider";
|
|
||||||
import { TrustProvider } from "../../../providers/trust";
|
import { TrustProvider } from "../../../providers/trust";
|
||||||
import { nostrBuildUploadImage } from "../../../helpers/nostr-build";
|
import { nostrBuildUploadImage } from "../../../helpers/nostr-build";
|
||||||
import { UploadImageIcon } from "../../../components/icons";
|
import { UploadImageIcon } from "../../../components/icons";
|
||||||
@@ -96,7 +95,6 @@ export default function ReplyForm({ item, onCancel, onSubmitted }: ReplyFormProp
|
|||||||
});
|
});
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UserDirectoryProvider getDirectory={() => threadMembers}>
|
|
||||||
<Flex as="form" direction="column" gap="2" pb="4" onSubmit={submit}>
|
<Flex as="form" direction="column" gap="2" pb="4" onSubmit={submit}>
|
||||||
<MagicTextArea
|
<MagicTextArea
|
||||||
placeholder="Reply"
|
placeholder="Reply"
|
||||||
@@ -146,6 +144,5 @@ export default function ReplyForm({ item, onCancel, onSubmitted }: ReplyFormProp
|
|||||||
</Box>
|
</Box>
|
||||||
)}
|
)}
|
||||||
</Flex>
|
</Flex>
|
||||||
</UserDirectoryProvider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -43,7 +43,7 @@ import { UserEmojiProvider } from "../../../providers/emoji-provider";
|
|||||||
import StreamStatusBadge from "../components/status-badge";
|
import StreamStatusBadge from "../components/status-badge";
|
||||||
import ChatMessageForm from "./stream-chat/stream-chat-form";
|
import ChatMessageForm from "./stream-chat/stream-chat-form";
|
||||||
import useStreamChatTimeline from "./stream-chat/use-stream-chat-timeline";
|
import useStreamChatTimeline from "./stream-chat/use-stream-chat-timeline";
|
||||||
import UserDirectoryProvider from "../../../providers/user-directory-provider";
|
import UserSearchDirectoryProvider from "../../../providers/user-directory-provider";
|
||||||
import StreamChatLog from "./stream-chat/chat-log";
|
import StreamChatLog from "./stream-chat/chat-log";
|
||||||
import TopZappers from "../components/top-zappers";
|
import TopZappers from "../components/top-zappers";
|
||||||
import StreamHashtags from "../components/stream-hashtags";
|
import StreamHashtags from "../components/stream-hashtags";
|
||||||
@@ -206,20 +206,20 @@ function StreamPage({ stream }: { stream: ParsedStream }) {
|
|||||||
const isMobile = useBreakpointValue({ base: true, lg: false });
|
const isMobile = useBreakpointValue({ base: true, lg: false });
|
||||||
const Layout = isMobile ? MobileStreamPage : DesktopStreamPage;
|
const Layout = isMobile ? MobileStreamPage : DesktopStreamPage;
|
||||||
|
|
||||||
const chatTimeline = useStreamChatTimeline(stream);
|
// const chatTimeline = useStreamChatTimeline(stream);
|
||||||
const chatLog = useSubject(chatTimeline.timeline);
|
// const chatLog = useSubject(chatTimeline.timeline);
|
||||||
const pubkeysInChat = useMemo(() => {
|
// const pubkeysInChat = useMemo(() => {
|
||||||
const set = new Set<string>();
|
// const set = new Set<string>();
|
||||||
for (const event of chatLog) {
|
// for (const event of chatLog) {
|
||||||
set.add(event.pubkey);
|
// set.add(event.pubkey);
|
||||||
}
|
// }
|
||||||
return Array.from(set);
|
// return Array.from(set);
|
||||||
}, [chatLog]);
|
// }, [chatLog]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<UserDirectoryProvider getDirectory={() => pubkeysInChat}>
|
// <UserDirectoryProvider getDirectory={() => pubkeysInChat}>
|
||||||
<Layout stream={stream} />
|
<Layout stream={stream} />
|
||||||
</UserDirectoryProvider>
|
// </UserDirectoryProvider>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user