fix build

This commit is contained in:
hzrd149
2023-10-18 10:53:08 -05:00
parent 0e1cbfcb30
commit 701a309a62
7 changed files with 77 additions and 84 deletions

View File

@@ -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> = {
":": { ":": {

View File

@@ -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) => {

View File

@@ -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);

View File

@@ -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>

View File

@@ -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>;
} }

View File

@@ -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,56 +95,54 @@ 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" autoFocus
autoFocus mb="2"
mb="2" rows={4}
rows={4} isRequired
isRequired value={getValues().content}
value={getValues().content} onChange={(e) => setValue("content", e.target.value, { shouldDirty: true })}
onChange={(e) => setValue("content", e.target.value, { shouldDirty: true })} instanceRef={(inst) => (textAreaRef.current = inst)}
instanceRef={(inst) => (textAreaRef.current = inst)} onPaste={(e) => {
onPaste={(e) => { const imageFile = Array.from(e.clipboardData.files).find((f) => f.type.includes("image"));
const imageFile = Array.from(e.clipboardData.files).find((f) => f.type.includes("image")); if (imageFile) uploadImage(imageFile);
if (imageFile) uploadImage(imageFile); }}
/>
<Flex gap="2" alignItems="center">
<VisuallyHiddenInput
type="file"
accept="image/*"
ref={imageUploadRef}
onChange={(e) => {
const img = e.target.files?.[0];
if (img) uploadImage(img);
}} }}
/> />
<Flex gap="2" alignItems="center"> <IconButton
<VisuallyHiddenInput icon={<UploadImageIcon />}
type="file" aria-label="Upload Image"
accept="image/*" title="Upload Image"
ref={imageUploadRef} onClick={() => imageUploadRef.current?.click()}
onChange={(e) => { isLoading={uploading}
const img = e.target.files?.[0]; size="sm"
if (img) uploadImage(img); />
}} <UserAvatarStack label="Notify" pubkeys={notifyPubkeys} />
/> <ButtonGroup size="sm" ml="auto">
<IconButton <Button onClick={onCancel}>Cancel</Button>
icon={<UploadImageIcon />} <Button type="submit" colorScheme="primary" size="sm">
aria-label="Upload Image" Submit
title="Upload Image" </Button>
onClick={() => imageUploadRef.current?.click()} </ButtonGroup>
isLoading={uploading}
size="sm"
/>
<UserAvatarStack label="Notify" pubkeys={notifyPubkeys} />
<ButtonGroup size="sm" ml="auto">
<Button onClick={onCancel}>Cancel</Button>
<Button type="submit" colorScheme="primary" size="sm">
Submit
</Button>
</ButtonGroup>
</Flex>
{getValues().content.length > 0 && (
<Box p="2" borderWidth={1} borderRadius="md" mb="2">
<TrustProvider trust>
<NoteContents event={draft} />
</TrustProvider>
</Box>
)}
</Flex> </Flex>
</UserDirectoryProvider> {getValues().content.length > 0 && (
<Box p="2" borderWidth={1} borderRadius="md" mb="2">
<TrustProvider trust>
<NoteContents event={draft} />
</TrustProvider>
</Box>
)}
</Flex>
); );
} }

View File

@@ -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>
); );
} }