mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-03-23 00:02:10 +01:00
Fix broken quote repost in drawer
reorganize providers
This commit is contained in:
parent
58317916ed
commit
59821df735
src
app.tsxuser-follow-button.tsx
components
common-menu-items
embed-event/event-types
embedded-dm.tsxembedded-note.tsxembedded-reaction.tsxembedded-stream.tsxembedded-torrent-comment.tsx
embed-types
event-reactions
layout
magic-textarea.tsxmessage-block.tsxmessage-bubble.tsxnote
npub-autocomplete.tsxopen-graph-card.tsxpeople-list-selection
post-modal
relay-selection
search-modal
sensitive-content-warning.tsxtimeline-page
generic-note-timeline
article-note.tsxgeneric-timeline-note.tsxindex.tsxrelay-recommendation.tsxreply-note.tsxrepost-note.tsxstream-note.tsx
index.tsxmedia-timeline
timeline-health
helpers/nostr
hooks
index.tsxproviders
drawer-sub-view-provider.tsx
global
breakpoint-provider.tsxdycryption-provider.tsxemoji-provider.tsxindex.tsxnotification-timeline.tsxsigning-provider.tsxuser-directory-provider.tsx
index.tsxlocal
additional-relay-context.tsxexpanded.tsxintersection-observer.tsxpeople-list-provider.tsxrelay-selection-provider.tsxthread-provider.tsxtrust.tsx
route
views
badges
channels
channel.tsx
components
channel-card.tsxchannel-join-button.tsxchannel-message-content.tsxchannel-metadata-drawer.tsxsend-message-form.tsx
index.tsxcommunities
community
dms
18
src/app.tsx
18
src/app.tsx
@ -5,7 +5,6 @@ import { css, Global } from "@emotion/react";
|
||||
|
||||
import { ErrorBoundary } from "./components/error-boundary";
|
||||
import Layout from "./components/layout";
|
||||
import { PageProviders } from "./providers";
|
||||
import DrawerSubViewProvider from "./providers/drawer-sub-view-provider";
|
||||
import useSetColorMode from "./hooks/use-set-color-mode";
|
||||
|
||||
@ -79,6 +78,7 @@ import DVMFeedView from "./views/dvm-feed/feed";
|
||||
import TransformNoteView from "./views/tools/transform-note";
|
||||
import SatelliteCDNView from "./views/tools/satellite-cdn";
|
||||
import OtherStuffView from "./views/other-stuff";
|
||||
import { RouteProviders } from "./providers/route";
|
||||
const UserTracksTab = lazy(() => import("./views/user/tracks"));
|
||||
|
||||
const ToolsHomeView = lazy(() => import("./views/tools"));
|
||||
@ -133,24 +133,24 @@ const RootPage = () => {
|
||||
useSetColorMode();
|
||||
|
||||
return (
|
||||
<PageProviders>
|
||||
<RouteProviders>
|
||||
<Layout>
|
||||
<ScrollRestoration />
|
||||
<Suspense fallback={<Spinner />}>
|
||||
<Outlet />
|
||||
</Suspense>
|
||||
</Layout>
|
||||
</PageProviders>
|
||||
</RouteProviders>
|
||||
);
|
||||
};
|
||||
const NoLayoutPage = () => {
|
||||
return (
|
||||
<PageProviders>
|
||||
<RouteProviders>
|
||||
<ScrollRestoration />
|
||||
<Suspense fallback={<Spinner />}>
|
||||
<Outlet />
|
||||
</Suspense>
|
||||
</PageProviders>
|
||||
</RouteProviders>
|
||||
);
|
||||
};
|
||||
|
||||
@ -183,17 +183,17 @@ const router = createHashRouter([
|
||||
{
|
||||
path: "streams/moderation",
|
||||
element: (
|
||||
<PageProviders>
|
||||
<RouteProviders>
|
||||
<StreamModerationView />
|
||||
</PageProviders>
|
||||
</RouteProviders>
|
||||
),
|
||||
},
|
||||
{
|
||||
path: "streams/:naddr",
|
||||
element: (
|
||||
<PageProviders>
|
||||
<RouteProviders>
|
||||
<StreamView />
|
||||
</PageProviders>
|
||||
</RouteProviders>
|
||||
),
|
||||
},
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { MenuItem } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { useDeleteEventContext } from "../../providers/delete-event-provider";
|
||||
import { useDeleteEventContext } from "../../providers/route/delete-event-provider";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { TrashIcon } from "../icons";
|
||||
|
||||
|
@ -3,7 +3,7 @@ import { MenuItem } from "@chakra-ui/react";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { MuteIcon, UnmuteIcon } from "../icons";
|
||||
import { useMuteModalContext } from "../../providers/mute-modal-provider";
|
||||
import { useMuteModalContext } from "../../providers/route/mute-modal-provider";
|
||||
import useUserMuteFunctions from "../../hooks/use-user-mute-functions";
|
||||
|
||||
export default function MuteUserMenuItem({ event }: { event: NostrEvent }) {
|
||||
|
@ -3,7 +3,7 @@ import { MenuItem, useToast } from "@chakra-ui/react";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../providers/global/signing-provider";
|
||||
import useUserPinList from "../../hooks/use-user-pin-list";
|
||||
import { DraftNostrEvent, NostrEvent, isETag } from "../../types/nostr-event";
|
||||
import { PIN_LIST_KIND, listAddEvent, listRemoveEvent } from "../../helpers/nostr/lists";
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Card, CardBody, CardHeader, CardProps, LinkBox, Text } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import UserLink from "../../user-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
|
@ -9,7 +9,7 @@ import { UserDnsIdentityIcon } from "../../user-dns-identity-icon";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import appSettings from "../../../services/settings/app-settings";
|
||||
import EventVerificationIcon from "../../event-verification-icon";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import { NoteLink } from "../../note-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Card, CardProps, Flex, LinkBox, Spacer, Text } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import UserAvatarLink from "../../user-avatar-link";
|
||||
import UserLink from "../../user-link";
|
||||
import Timestamp from "../../timestamp";
|
||||
|
@ -8,7 +8,7 @@ import UserLink from "../../user-link";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import useEventNaddr from "../../../hooks/use-event-naddr";
|
||||
import Timestamp from "../../timestamp";
|
||||
import { useBreakpointValue } from "../../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../../providers/global/breakpoint-provider";
|
||||
|
||||
export default function EmbeddedStream({ event, ...props }: Omit<CardProps, "children"> & { event: NostrEvent }) {
|
||||
const stream = parseStreamEvent(event);
|
||||
|
@ -7,7 +7,7 @@ import UserLink from "../../user-link";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import appSettings from "../../../services/settings/app-settings";
|
||||
import EventVerificationIcon from "../../event-verification-icon";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import Timestamp from "../../timestamp";
|
||||
import { getNeventForEventId } from "../../../helpers/nip19";
|
||||
import { CompactNoteContent } from "../../compact-note-content";
|
||||
|
@ -2,7 +2,7 @@ import { MouseEventHandler, MutableRefObject, forwardRef, useCallback, useMemo,
|
||||
import { Image, ImageProps, Link, LinkProps } from "@chakra-ui/react";
|
||||
|
||||
import appSettings from "../../services/settings/app-settings";
|
||||
import { useTrusted } from "../../providers/trust";
|
||||
import { useTrusted } from "../../providers/local/trust";
|
||||
import { EmbedableContent, defaultGetLocation } from "../../helpers/embeds";
|
||||
import { getMatchLink } from "../../helpers/regexp";
|
||||
import { useRegisterSlide } from "../lightbox-provider";
|
||||
@ -10,7 +10,7 @@ import { isImageURL } from "../../helpers/url";
|
||||
import PhotoGallery, { PhotoWithoutSize } from "../photo-gallery";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useAppSettings from "../../hooks/use-app-settings";
|
||||
import { useBreakpointValue } from "../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../providers/global/breakpoint-provider";
|
||||
import useElementBlur from "../../hooks/use-element-blur";
|
||||
|
||||
export type TrustImageProps = ImageProps;
|
||||
|
@ -2,7 +2,7 @@ import styled from "@emotion/styled";
|
||||
import { isVideoURL } from "../../helpers/url";
|
||||
import useAppSettings from "../../hooks/use-app-settings";
|
||||
import useElementBlur from "../../hooks/use-element-blur";
|
||||
import { useTrusted } from "../../providers/trust";
|
||||
import { useTrusted } from "../../providers/local/trust";
|
||||
|
||||
const StyledVideo = styled.video`
|
||||
max-width: 30rem;
|
||||
|
@ -3,7 +3,7 @@ import { useToast } from "@chakra-ui/react";
|
||||
|
||||
import { ReactionGroup, draftEventReaction } from "../../helpers/nostr/reactions";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../providers/global/signing-provider";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import clientRelaysService from "../../services/client-relays";
|
||||
import NostrPublishAction from "../../classes/nostr-publish-action";
|
||||
|
@ -7,7 +7,7 @@ import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import AccountSwitcher from "./account-switcher";
|
||||
import PublishLog from "../publish-log";
|
||||
import NavItems from "./nav-items";
|
||||
import { PostModalContext } from "../../providers/post-modal-provider";
|
||||
import { PostModalContext } from "../../providers/route/post-modal-provider";
|
||||
import { WritingIcon } from "../icons";
|
||||
|
||||
const hideScrollbar = css`
|
||||
|
@ -9,7 +9,7 @@ import MobileBottomNav from "./mobile-bottom-nav";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import accountService from "../../services/account";
|
||||
import GhostToolbar from "./ghost-toolbar";
|
||||
import { useBreakpointValue } from "../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../providers/global/breakpoint-provider";
|
||||
import SearchModal from "../search-modal";
|
||||
import { useLocation } from "react-router-dom";
|
||||
|
||||
|
@ -3,7 +3,7 @@ import { useContext, useEffect } from "react";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { PostModalContext } from "../../providers/post-modal-provider";
|
||||
import { PostModalContext } from "../../providers/route/post-modal-provider";
|
||||
import { DirectMessagesIcon, NotesIcon, NotificationsIcon, PlusCircleIcon, SearchIcon } from "../icons";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import MobileSideDrawer from "./mobile-side-drawer";
|
||||
|
@ -9,8 +9,8 @@ import "@webscopeio/react-textarea-autocomplete/style.css";
|
||||
import { nip19 } from "nostr-tools";
|
||||
import { matchSorter } from "match-sorter/dist/match-sorter.esm.js";
|
||||
|
||||
import { Emoji, useContextEmojis } from "../providers/emoji-provider";
|
||||
import { useUserSearchDirectoryContext } from "../providers/user-directory-provider";
|
||||
import { Emoji, useContextEmojis } from "../providers/global/emoji-provider";
|
||||
import { useUserSearchDirectoryContext } from "../providers/global/user-directory-provider";
|
||||
import UserAvatar from "./user-avatar";
|
||||
import { UserDnsIdentityIcon } from "./user-dns-identity-icon";
|
||||
|
||||
|
@ -4,7 +4,7 @@ import useCurrentAccount from "../hooks/use-current-account";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import UserAvatar from "./user-avatar";
|
||||
import MessageBubble, { MessageBubbleProps } from "./message-bubble";
|
||||
import { useThreadsContext } from "../providers/thread-provider";
|
||||
import { useThreadsContext } from "../providers/local/thread-provider";
|
||||
import ThreadButton from "../views/dms/components/thread-button";
|
||||
|
||||
function MessageBubbleWithThread({ message, showThreadButton = true, ...props }: MessageBubbleProps) {
|
||||
|
@ -2,7 +2,7 @@ import { ReactNode, useRef } from "react";
|
||||
import { ButtonGroup, Card, CardBody, CardFooter, CardHeader, CardProps } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../providers/local/intersection-observer";
|
||||
import { getEventUID } from "../helpers/nostr/events";
|
||||
import Timestamp from "./timestamp";
|
||||
import NoteZapButton from "./note/note-zap-button";
|
||||
|
@ -12,7 +12,7 @@ import {
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import useEventReactions from "../../../hooks/use-event-reactions";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import eventReactionsService from "../../../services/event-reactions";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
|
@ -15,7 +15,7 @@ import {
|
||||
import dayjs from "dayjs";
|
||||
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import useUserLists from "../../../hooks/use-user-lists";
|
||||
import {
|
||||
NOTE_LIST_KIND,
|
||||
|
@ -4,7 +4,7 @@ import { NostrEvent } from "../../../types/nostr-event";
|
||||
import AddReactionButton from "./add-reaction-button";
|
||||
import EventReactionButtons from "../../event-reactions/event-reactions";
|
||||
import useEventReactions from "../../../hooks/use-event-reactions";
|
||||
import { useBreakpointValue } from "../../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../../providers/global/breakpoint-provider";
|
||||
|
||||
export default function NoteReactions({ event, ...props }: Omit<ButtonGroupProps, "children"> & { event: NostrEvent }) {
|
||||
const reactions = useEventReactions(event.id) ?? [];
|
||||
|
@ -3,7 +3,7 @@ import { ButtonProps, IconButton } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { QuoteRepostIcon } from "../../icons";
|
||||
import { PostModalContext } from "../../../providers/post-modal-provider";
|
||||
import { PostModalContext } from "../../../providers/route/post-modal-provider";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
|
||||
export type QuoteRepostButtonProps = Omit<ButtonProps, "children" | "onClick"> & {
|
||||
|
@ -21,7 +21,7 @@ import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event";
|
||||
import { EmbedEvent } from "../../embed-event";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import { ChevronDownIcon, ChevronUpIcon, ExternalLinkIcon } from "../../icons";
|
||||
import useUserCommunitiesList from "../../../hooks/use-user-communities-list";
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
|
@ -22,7 +22,7 @@ import NoteMenu from "./note-menu";
|
||||
import UserLink from "../user-link";
|
||||
import { UserDnsIdentityIcon } from "../user-dns-identity-icon";
|
||||
import NoteZapButton from "./note-zap-button";
|
||||
import { ExpandProvider } from "../../providers/expanded";
|
||||
import { ExpandProvider } from "../../providers/local/expanded";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import appSettings from "../../services/settings/app-settings";
|
||||
import EventVerificationIcon from "../event-verification-icon";
|
||||
@ -30,8 +30,8 @@ import RepostButton from "./components/repost-button";
|
||||
import QuoteRepostButton from "./components/quote-repost-button";
|
||||
import { ReplyIcon } from "../icons";
|
||||
import NoteContentWithWarning from "./note-content-with-warning";
|
||||
import { TrustProvider } from "../../providers/trust";
|
||||
import { useRegisterIntersectionEntity } from "../../providers/intersection-observer";
|
||||
import { TrustProvider } from "../../providers/local/trust";
|
||||
import { useRegisterIntersectionEntity } from "../../providers/local/intersection-observer";
|
||||
import BookmarkButton from "./components/bookmark-button";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import NoteReactions from "./components/note-reactions";
|
||||
@ -40,7 +40,7 @@ import { getReferences } from "../../helpers/nostr/events";
|
||||
import Timestamp from "../timestamp";
|
||||
import OpenInDrawerButton from "../open-in-drawer-button";
|
||||
import { getSharableEventAddress } from "../../helpers/nip19";
|
||||
import { useBreakpointValue } from "../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../providers/global/breakpoint-provider";
|
||||
import HoverLinkOverlay from "../hover-link-overlay";
|
||||
import NoteCommunityMetadata from "./note-community-metadata";
|
||||
import useSingleEvent from "../../hooks/use-single-event";
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
|
||||
import { NoteContents } from "./text-note-contents";
|
||||
import { useExpand } from "../../providers/expanded";
|
||||
import { useExpand } from "../../providers/local/expanded";
|
||||
import SensitiveContentWarning from "../sensitive-content-warning";
|
||||
import useAppSettings from "../../hooks/use-app-settings";
|
||||
|
||||
|
@ -5,7 +5,7 @@ import { NostrEvent } from "../../types/nostr-event";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { RelayIconStack, RelayIconStackProps } from "../relay-icon-stack";
|
||||
import { getEventUID } from "../../helpers/nostr/events";
|
||||
import { useBreakpointValue } from "../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../providers/global/breakpoint-provider";
|
||||
|
||||
export type NoteRelaysProps = {
|
||||
event: NostrEvent;
|
||||
|
@ -3,7 +3,7 @@ import { forwardRef } from "react";
|
||||
import { useAsync } from "react-use";
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
import { useUserSearchDirectoryContext } from "../providers/user-directory-provider";
|
||||
import { useUserSearchDirectoryContext } from "../providers/global/user-directory-provider";
|
||||
import userMetadataService from "../services/user-metadata";
|
||||
import { getUserDisplayName } from "../helpers/user-metadata";
|
||||
|
||||
|
@ -12,7 +12,7 @@ import {
|
||||
Text,
|
||||
} from "@chakra-ui/react";
|
||||
import useOpenGraphData from "../hooks/use-open-graph-data";
|
||||
import { useBreakpointValue } from "../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../providers/global/breakpoint-provider";
|
||||
|
||||
export default function OpenGraphCard({ url, ...props }: { url: URL } & Omit<CardProps, "children">) {
|
||||
const { value: data } = useOpenGraphData(url);
|
||||
|
@ -9,7 +9,7 @@ import {
|
||||
MenuOptionGroup,
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import { usePeopleListContext } from "../../providers/local/people-list-provider";
|
||||
import useUserLists from "../../hooks/use-user-lists";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { PEOPLE_LIST_KIND, getListName } from "../../helpers/nostr/lists";
|
||||
|
@ -25,10 +25,10 @@ import { Kind } from "nostr-tools";
|
||||
import { ChevronDownIcon, ChevronUpIcon, UploadImageIcon } from "../icons";
|
||||
import NostrPublishAction from "../../classes/nostr-publish-action";
|
||||
import { useWriteRelayUrls } from "../../hooks/use-client-relays";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../providers/global/signing-provider";
|
||||
import { NoteContents } from "../note/text-note-contents";
|
||||
import { PublishDetails } from "../publish-details";
|
||||
import { TrustProvider } from "../../providers/trust";
|
||||
import { TrustProvider } from "../../providers/local/trust";
|
||||
import {
|
||||
correctContentMentions,
|
||||
createEmojiTags,
|
||||
@ -39,13 +39,13 @@ import {
|
||||
} from "../../helpers/nostr/post";
|
||||
import { UserAvatarStack } from "../compact-user-stack";
|
||||
import MagicTextArea, { RefType } from "../magic-textarea";
|
||||
import { useContextEmojis } from "../../providers/emoji-provider";
|
||||
import { useContextEmojis } from "../../providers/global/emoji-provider";
|
||||
import CommunitySelect from "./community-select";
|
||||
import ZapSplitCreator, { fillRemainingPercent } from "./zap-split-creator";
|
||||
import { EventSplit } from "../../helpers/nostr/zaps";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import useCacheForm from "../../hooks/use-cache-form";
|
||||
import { useAdditionalRelayContext } from "../../providers/additional-relay-context";
|
||||
import { useAdditionalRelayContext } from "../../providers/local/additional-relay-context";
|
||||
import { useTextAreaUploadFileWithForm } from "../../hooks/use-textarea-upload-file";
|
||||
import { useThrottle } from "react-use";
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Button, ButtonProps, useDisclosure } from "@chakra-ui/react";
|
||||
|
||||
import { RelayIcon } from "../icons";
|
||||
import { useRelaySelectionContext } from "../../providers/relay-selection-provider";
|
||||
import { useRelaySelectionContext } from "../../providers/local/relay-selection-provider";
|
||||
import RelaySelectionModal from "./relay-selection-modal";
|
||||
|
||||
export default function RelaySelectionButton({ ...props }: ButtonProps) {
|
||||
|
@ -5,7 +5,7 @@ import { useAsync, useThrottle } from "react-use";
|
||||
import { matchSorter } from "match-sorter";
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
import { useUserSearchDirectoryContext } from "../../providers/user-directory-provider";
|
||||
import { useUserSearchDirectoryContext } from "../../providers/global/user-directory-provider";
|
||||
import UserAvatar from "../user-avatar";
|
||||
import { useUserMetadata } from "../../hooks/use-user-metadata";
|
||||
import { getUserDisplayName } from "../../helpers/user-metadata";
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { Alert, AlertDescription, AlertIcon, AlertProps, AlertTitle, Button, Spacer } from "@chakra-ui/react";
|
||||
|
||||
import { useExpand } from "../providers/expanded";
|
||||
import { useBreakpointValue } from "../providers/breakpoint-provider";
|
||||
import { useExpand } from "../providers/local/expanded";
|
||||
import { useBreakpointValue } from "../providers/global/breakpoint-provider";
|
||||
|
||||
export default function SensitiveContentWarning({ description }: { description?: string } & AlertProps) {
|
||||
const expand = useExpand();
|
||||
|
@ -3,7 +3,7 @@ import { Box } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import EmbeddedArticle from "../../embed-event/event-types/embedded-article";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
|
||||
function ArticleNote({ article }: { article: NostrEvent }) {
|
||||
|
@ -10,7 +10,7 @@ import ArticleNote from "./article-note";
|
||||
import StreamNote from "./stream-note";
|
||||
import RelayRecommendation from "./relay-recommendation";
|
||||
import BadgeAwardCard from "../../../views/badges/components/badge-award-card";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventUID, isReply } from "../../../helpers/nostr/events";
|
||||
import { STREAM_KIND } from "../../../helpers/nostr/stream";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
|
@ -8,7 +8,10 @@ import useSubject from "../../../hooks/use-subject";
|
||||
import TimelineLoader from "../../../classes/timeline-loader";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { ExtendedIntersectionObserverEntry, useIntersectionObserver } from "../../../providers/intersection-observer";
|
||||
import {
|
||||
ExtendedIntersectionObserverEntry,
|
||||
useIntersectionObserver,
|
||||
} from "../../../providers/local/intersection-observer";
|
||||
import GenericTimelineNote from "./generic-timeline-note";
|
||||
|
||||
const NOTE_BUFFER = 5;
|
||||
|
@ -6,7 +6,7 @@ import UserAvatar from "../../user-avatar";
|
||||
import UserLink from "../../user-link";
|
||||
import RelayCard from "../../../views/relays/components/relay-card";
|
||||
import { safeRelayUrl } from "../../../helpers/url";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
|
||||
export default function RelayRecommendation({ event }: { event: NostrEvent }) {
|
||||
const safeUrl = safeRelayUrl(event.content);
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { memo, useRef } from "react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import Note from "../../note";
|
||||
|
||||
function ReplyNote({ event }: { event: NostrEvent }) {
|
||||
|
@ -9,9 +9,9 @@ import NoteMenu from "../../note/note-menu";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import { UserDnsIdentityIcon } from "../../user-dns-identity-icon";
|
||||
import UserLink from "../../user-link";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import { useReadRelayUrls } from "../../../hooks/use-client-relays";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import useSingleEvent from "../../../hooks/use-single-event";
|
||||
import { EmbedEvent } from "../../embed-event";
|
||||
import useUserMuteFilter from "../../../hooks/use-user-mute-filter";
|
||||
|
@ -19,7 +19,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { parseStreamEvent } from "../../../helpers/nostr/stream";
|
||||
import useEventNaddr from "../../../hooks/use-event-naddr";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import UserAvatar from "../../user-avatar";
|
||||
import UserLink from "../../user-link";
|
||||
import StreamStatusBadge from "../../../views/streams/components/status-badge";
|
||||
|
@ -2,7 +2,7 @@ import { useCallback } from "react";
|
||||
import { Flex, FlexProps } from "@chakra-ui/react";
|
||||
import { useSearchParams } from "react-router-dom";
|
||||
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import GenericNoteTimeline from "./generic-note-timeline";
|
||||
import MediaTimeline from "./media-timeline";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
|
@ -8,12 +8,12 @@ import { getMatchLink } from "../../../helpers/regexp";
|
||||
import { LightboxProvider } from "../../lightbox-provider";
|
||||
import { isImageURL } from "../../../helpers/url";
|
||||
import { EmbeddedImageProps, GalleryImage } from "../../embed-types";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import PhotoGallery, { PhotoWithoutSize } from "../../photo-gallery";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { useBreakpointValue } from "../../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../../providers/global/breakpoint-provider";
|
||||
|
||||
function CustomGalleryImage({ event, ...props }: EmbeddedImageProps & { event: NostrEvent }) {
|
||||
const ref = useRef<HTMLImageElement | null>(null);
|
||||
|
@ -19,7 +19,7 @@ import TimelineLoader from "../../../classes/timeline-loader";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { getEventRelays, handleEventFromRelay } from "../../../services/event-relays";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { RelayFavicon } from "../../relay-favicon";
|
||||
import { NoteLink } from "../../note-link";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
|
@ -26,7 +26,7 @@ import {
|
||||
isPubkeyInList,
|
||||
} from "../helpers/nostr/lists";
|
||||
import { getEventCoordinate } from "../helpers/nostr/events";
|
||||
import { useSigningContext } from "../providers/signing-provider";
|
||||
import { useSigningContext } from "../providers/global/signing-provider";
|
||||
import NostrPublishAction from "../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../services/client-relays";
|
||||
import useUserContactList from "../hooks/use-user-contact-list";
|
||||
@ -34,7 +34,7 @@ import replaceableEventLoaderService from "../services/replaceable-event-request
|
||||
import useAsyncErrorHandler from "../hooks/use-async-error-handler";
|
||||
import NewListModal from "../views/lists/components/new-list-modal";
|
||||
import useUserMuteFunctions from "../hooks/use-user-mute-functions";
|
||||
import { useMuteModalContext } from "../providers/mute-modal-provider";
|
||||
import { useMuteModalContext } from "../providers/route/mute-modal-provider";
|
||||
|
||||
function UsersLists({ pubkey }: { pubkey: string }) {
|
||||
const toast = useToast();
|
||||
|
@ -2,7 +2,7 @@ import { DraftNostrEvent, NostrEvent, Tag } from "../../types/nostr-event";
|
||||
import { getMatchEmoji, getMatchHashtag } from "../regexp";
|
||||
import { getReferences } from "./events";
|
||||
import { getPubkeyFromDecodeResult, safeDecode } from "../nip19";
|
||||
import { Emoji } from "../../providers/emoji-provider";
|
||||
import { Emoji } from "../../providers/global/emoji-provider";
|
||||
import { EventSplit } from "./zaps";
|
||||
import { unique } from "../array";
|
||||
import relayHintService from "../../services/event-relay-hint";
|
||||
|
@ -3,7 +3,7 @@ import { useToast } from "@chakra-ui/react";
|
||||
|
||||
import { nostrBuildUploadImage } from "../helpers/nostr-build";
|
||||
import { RefType } from "../components/magic-textarea";
|
||||
import { useSigningContext } from "../providers/signing-provider";
|
||||
import { useSigningContext } from "../providers/global/signing-provider";
|
||||
import { UseFormGetValues, UseFormSetValue } from "react-hook-form";
|
||||
|
||||
export function useTextAreaUploadFileWithForm(
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { useInterval } from "react-use";
|
||||
import TimelineLoader from "../classes/timeline-loader";
|
||||
import { useIntersectionMapCallback } from "../providers/intersection-observer";
|
||||
import { useIntersectionMapCallback } from "../providers/local/intersection-observer";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
|
||||
export function useTimelineCurserIntersectionCallback(timeline: TimelineLoader) {
|
||||
|
@ -7,7 +7,7 @@ import {
|
||||
muteListRemovePubkey,
|
||||
pruneExpiredPubkeys,
|
||||
} from "../helpers/nostr/mute-list";
|
||||
import { useSigningContext } from "../providers/signing-provider";
|
||||
import { useSigningContext } from "../providers/global/signing-provider";
|
||||
import clientRelaysService from "../services/client-relays";
|
||||
import replaceableEventLoaderService from "../services/replaceable-event-requester";
|
||||
import useAsyncErrorHandler from "./use-async-error-handler";
|
||||
|
@ -1,7 +1,7 @@
|
||||
import "./polyfill";
|
||||
import { createRoot } from "react-dom/client";
|
||||
import { App } from "./app";
|
||||
import { GlobalProviders } from "./providers";
|
||||
import { GlobalProviders } from "./providers/global";
|
||||
|
||||
// setup dayjs
|
||||
import dayjs from "dayjs";
|
||||
|
@ -28,8 +28,8 @@ import { Location, RouteObject, RouterProvider, To, createMemoryRouter, useNavig
|
||||
import { ErrorBoundary } from "../components/error-boundary";
|
||||
import ThreadView from "../views/thread";
|
||||
import { ChevronLeftIcon, ChevronRightIcon, ExternalLinkIcon } from "../components/icons";
|
||||
import { PageProviders } from ".";
|
||||
import { logger } from "../helpers/debug";
|
||||
import { RouteProviders } from "./route";
|
||||
|
||||
const TorrentDetailsView = lazy(() => import("../views/torrents/torrent"));
|
||||
|
||||
@ -68,17 +68,15 @@ function DrawerSubView({
|
||||
<DrawerBody px="2" pb="2" pt="0">
|
||||
<ErrorBoundary>
|
||||
<IsInDrawerContext.Provider value={true}>
|
||||
<PageProviders>
|
||||
<Suspense
|
||||
fallback={
|
||||
<Heading size="md" mx="auto" my="4">
|
||||
<Spinner /> Loading page
|
||||
</Heading>
|
||||
}
|
||||
>
|
||||
<RouterProvider router={router} />
|
||||
</Suspense>
|
||||
</PageProviders>
|
||||
<Suspense
|
||||
fallback={
|
||||
<Heading size="md" mx="auto" my="4">
|
||||
<Spinner /> Loading page
|
||||
</Heading>
|
||||
}
|
||||
>
|
||||
<RouterProvider router={router} />
|
||||
</Suspense>
|
||||
</IsInDrawerContext.Provider>
|
||||
</ErrorBoundary>
|
||||
</DrawerBody>
|
||||
@ -90,11 +88,19 @@ function DrawerSubView({
|
||||
const routes: RouteObject[] = [
|
||||
{
|
||||
path: "/n/:id",
|
||||
element: <ThreadView />,
|
||||
element: (
|
||||
<RouteProviders>
|
||||
<ThreadView />
|
||||
</RouteProviders>
|
||||
),
|
||||
},
|
||||
{
|
||||
path: "/torrents/:id",
|
||||
element: <TorrentDetailsView />,
|
||||
element: (
|
||||
<RouteProviders>
|
||||
<TorrentDetailsView />
|
||||
</RouteProviders>
|
||||
),
|
||||
},
|
||||
];
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext, useMemo, useRef } from "react";
|
||||
import { nanoid } from "nanoid";
|
||||
|
||||
import Subject from "../classes/subject";
|
||||
import Subject from "../../classes/subject";
|
||||
import { useSigningContext } from "./signing-provider";
|
||||
import useSubject from "../hooks/use-subject";
|
||||
import createDefer, { Deferred } from "../classes/deferred";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import createDefer, { Deferred } from "../../classes/deferred";
|
||||
|
||||
class DecryptionContainer {
|
||||
id = nanoid();
|
@ -1,11 +1,11 @@
|
||||
import { PropsWithChildren, createContext, useContext } from "react";
|
||||
import { lib } from "emojilib";
|
||||
|
||||
import useReplaceableEvents from "../hooks/use-replaceable-events";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import { isEmojiTag } from "../types/nostr-event";
|
||||
import useFavoriteEmojiPacks from "../hooks/use-favorite-emoji-packs";
|
||||
import { getPackCordsFromFavorites } from "../helpers/nostr/emoji-packs";
|
||||
import useReplaceableEvents from "../../hooks/use-replaceable-events";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { isEmojiTag } from "../../types/nostr-event";
|
||||
import useFavoriteEmojiPacks from "../../hooks/use-favorite-emoji-packs";
|
||||
import { getPackCordsFromFavorites } from "../../helpers/nostr/emoji-packs";
|
||||
|
||||
const defaultEmojis = Object.entries(lib).map(([name, emojiObject]) => ({
|
||||
...emojiObject,
|
38
src/providers/global/index.tsx
Normal file
38
src/providers/global/index.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import React, { PropsWithChildren, useMemo } from "react";
|
||||
import { ChakraProvider, localStorageManager } from "@chakra-ui/react";
|
||||
|
||||
import { SigningProvider } from "./signing-provider";
|
||||
import buildTheme from "../../theme";
|
||||
import useAppSettings from "../../hooks/use-app-settings";
|
||||
import NotificationTimelineProvider from "./notification-timeline";
|
||||
import { DefaultEmojiProvider, UserEmojiProvider } from "./emoji-provider";
|
||||
import { AllUserSearchDirectoryProvider } from "./user-directory-provider";
|
||||
import BreakpointProvider from "./breakpoint-provider";
|
||||
import DecryptionProvider from "./dycryption-provider";
|
||||
|
||||
// Top level providers, should be render as close to the root as possible
|
||||
export const GlobalProviders = ({ children }: { children: React.ReactNode }) => {
|
||||
const { theme: themeName, primaryColor, maxPageWidth } = useAppSettings();
|
||||
const theme = useMemo(
|
||||
() => buildTheme(themeName, primaryColor, maxPageWidth !== "none" ? maxPageWidth : undefined),
|
||||
[themeName, primaryColor, maxPageWidth],
|
||||
);
|
||||
|
||||
return (
|
||||
<ChakraProvider theme={theme} colorModeManager={localStorageManager}>
|
||||
<BreakpointProvider>
|
||||
<SigningProvider>
|
||||
<DecryptionProvider>
|
||||
<NotificationTimelineProvider>
|
||||
<DefaultEmojiProvider>
|
||||
<UserEmojiProvider>
|
||||
<AllUserSearchDirectoryProvider>{children}</AllUserSearchDirectoryProvider>
|
||||
</UserEmojiProvider>
|
||||
</DefaultEmojiProvider>
|
||||
</NotificationTimelineProvider>
|
||||
</DecryptionProvider>
|
||||
</SigningProvider>
|
||||
</BreakpointProvider>
|
||||
</ChakraProvider>
|
||||
);
|
||||
};
|
@ -1,13 +1,13 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext, useMemo } from "react";
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import { useReadRelayUrls } from "../hooks/use-client-relays";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import TimelineLoader from "../classes/timeline-loader";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import useClientSideMuteFilter from "../hooks/use-client-side-mute-filter";
|
||||
import useTimelineLoader from "../hooks/use-timeline-loader";
|
||||
import { TORRENT_COMMENT_KIND } from "../helpers/nostr/torrents";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { TORRENT_COMMENT_KIND } from "../../helpers/nostr/torrents";
|
||||
|
||||
type NotificationTimelineContextType = {
|
||||
timeline?: TimelineLoader;
|
@ -1,9 +1,9 @@
|
||||
import { useToast } from "@chakra-ui/react";
|
||||
import React, { useCallback, useContext, useMemo } from "react";
|
||||
import useSubject from "../hooks/use-subject";
|
||||
import accountService from "../services/account";
|
||||
import signingService from "../services/signing";
|
||||
import { DraftNostrEvent, NostrEvent } from "../types/nostr-event";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import accountService from "../../services/account";
|
||||
import signingService from "../../services/signing";
|
||||
import { DraftNostrEvent, NostrEvent } from "../../types/nostr-event";
|
||||
|
||||
export type SigningContextType = {
|
||||
requestSignature: (draft: DraftNostrEvent) => Promise<NostrEvent>;
|
@ -1,6 +1,6 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext } from "react";
|
||||
|
||||
import db from "../services/db";
|
||||
import db from "../../services/db";
|
||||
|
||||
export type UserDirectory = { pubkey: string; names: [] }[];
|
||||
export type GetDirectoryFn = () => Promise<UserDirectory> | UserDirectory;
|
@ -1,57 +0,0 @@
|
||||
import React, { useMemo } from "react";
|
||||
import { ChakraProvider, localStorageManager } from "@chakra-ui/react";
|
||||
|
||||
import { SigningProvider } from "./signing-provider";
|
||||
import buildTheme from "../theme";
|
||||
import useAppSettings from "../hooks/use-app-settings";
|
||||
import DeleteEventProvider from "./delete-event-provider";
|
||||
import { InvoiceModalProvider } from "./invoice-modal";
|
||||
import NotificationTimelineProvider from "./notification-timeline";
|
||||
import PostModalProvider from "./post-modal-provider";
|
||||
import { DefaultEmojiProvider, UserEmojiProvider } from "./emoji-provider";
|
||||
import { AllUserSearchDirectoryProvider } from "./user-directory-provider";
|
||||
import MuteModalProvider from "./mute-modal-provider";
|
||||
import BreakpointProvider from "./breakpoint-provider";
|
||||
import DecryptionProvider from "./dycryption-provider";
|
||||
|
||||
// Top level providers, should be render as close to the root as possible
|
||||
export const GlobalProviders = ({ children }: { children: React.ReactNode }) => {
|
||||
const { theme: themeName, primaryColor, maxPageWidth } = useAppSettings();
|
||||
const theme = useMemo(
|
||||
() => buildTheme(themeName, primaryColor, maxPageWidth !== "none" ? maxPageWidth : undefined),
|
||||
[themeName, primaryColor, maxPageWidth],
|
||||
);
|
||||
|
||||
return (
|
||||
<ChakraProvider theme={theme} colorModeManager={localStorageManager}>
|
||||
{children}
|
||||
</ChakraProvider>
|
||||
);
|
||||
};
|
||||
|
||||
/** Providers that provider functionality to pages (needs to be rendered under a router) */
|
||||
export function PageProviders({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<BreakpointProvider>
|
||||
<SigningProvider>
|
||||
<DecryptionProvider>
|
||||
<DeleteEventProvider>
|
||||
<MuteModalProvider>
|
||||
<InvoiceModalProvider>
|
||||
<NotificationTimelineProvider>
|
||||
<DefaultEmojiProvider>
|
||||
<UserEmojiProvider>
|
||||
<AllUserSearchDirectoryProvider>
|
||||
<PostModalProvider>{children}</PostModalProvider>
|
||||
</AllUserSearchDirectoryProvider>
|
||||
</UserEmojiProvider>
|
||||
</DefaultEmojiProvider>
|
||||
</NotificationTimelineProvider>
|
||||
</InvoiceModalProvider>
|
||||
</MuteModalProvider>
|
||||
</DeleteEventProvider>
|
||||
</DecryptionProvider>
|
||||
</SigningProvider>
|
||||
</BreakpointProvider>
|
||||
);
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
import React, { useContext } from "react";
|
||||
import { unique } from "../helpers/array";
|
||||
import { safeRelayUrl } from "../helpers/url";
|
||||
import { unique } from "../../helpers/array";
|
||||
import { safeRelayUrl } from "../../helpers/url";
|
||||
|
||||
export const RelayContext = React.createContext<string[]>([]);
|
||||
|
@ -11,7 +11,7 @@ import {
|
||||
} from "react";
|
||||
import { useMount, useUnmount } from "react-use";
|
||||
|
||||
import Subject from "../classes/subject";
|
||||
import Subject from "../../classes/subject";
|
||||
|
||||
export type ExtendedIntersectionObserverEntry = { entry: IntersectionObserverEntry; id: string | undefined };
|
||||
export type ExtendedIntersectionObserverCallback = (
|
@ -1,12 +1,12 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext, useMemo } from "react";
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import { getPubkeysFromList } from "../helpers/nostr/lists";
|
||||
import useReplaceableEvent from "../hooks/use-replaceable-event";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import { NostrQuery } from "../types/nostr-query";
|
||||
import useRouteSearchValue from "../hooks/use-route-search-value";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { getPubkeysFromList } from "../../helpers/nostr/lists";
|
||||
import useReplaceableEvent from "../../hooks/use-replaceable-event";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { NostrQuery } from "../../types/nostr-query";
|
||||
import useRouteSearchValue from "../../hooks/use-route-search-value";
|
||||
|
||||
export type ListId = "following" | "global" | string;
|
||||
export type Person = { pubkey: string; relay?: string };
|
@ -1,8 +1,8 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext, useMemo } from "react";
|
||||
import { useLocation, useNavigate } from "react-router-dom";
|
||||
|
||||
import { useReadRelayUrls } from "../hooks/use-client-relays";
|
||||
import { unique } from "../helpers/array";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import { unique } from "../../helpers/array";
|
||||
|
||||
type RelaySelectionContextType = {
|
||||
relays: string[];
|
@ -1,8 +1,8 @@
|
||||
import { PropsWithChildren, createContext, useCallback, useContext, useMemo } from "react";
|
||||
|
||||
import TimelineLoader from "../classes/timeline-loader";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import useSubject from "../hooks/use-subject";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
|
||||
export type Thread = {
|
||||
root?: NostrEvent;
|
@ -1,8 +1,8 @@
|
||||
import React, { PropsWithChildren, useContext } from "react";
|
||||
import { NostrEvent } from "../types/nostr-event";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import useUserContactList from "../hooks/use-user-contact-list";
|
||||
import { getPubkeysFromList } from "../helpers/nostr/lists";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import useUserContactList from "../../hooks/use-user-contact-list";
|
||||
import { getPubkeysFromList } from "../../helpers/nostr/lists";
|
||||
|
||||
const TrustContext = React.createContext<boolean>(false);
|
||||
|
@ -23,18 +23,18 @@ import {
|
||||
import { Event, Kind } from "nostr-tools";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import signingService from "../services/signing";
|
||||
import createDefer, { Deferred } from "../classes/deferred";
|
||||
import useEventRelays from "../hooks/use-event-relays";
|
||||
import { useWriteRelayUrls } from "../hooks/use-client-relays";
|
||||
import { RelayFavicon } from "../components/relay-favicon";
|
||||
import { ExternalLinkIcon } from "../components/icons";
|
||||
import { getEventCoordinate, getEventUID, isReplaceable } from "../helpers/nostr/events";
|
||||
import NostrPublishAction from "../classes/nostr-publish-action";
|
||||
import { Tag } from "../types/nostr-event";
|
||||
import deleteEventService from "../services/delete-events";
|
||||
import { EmbedEvent } from "../components/embed-event";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import signingService from "../../services/signing";
|
||||
import createDefer, { Deferred } from "../../classes/deferred";
|
||||
import useEventRelays from "../../hooks/use-event-relays";
|
||||
import { useWriteRelayUrls } from "../../hooks/use-client-relays";
|
||||
import { RelayFavicon } from "../../components/relay-favicon";
|
||||
import { ExternalLinkIcon } from "../../components/icons";
|
||||
import { getEventCoordinate, getEventUID, isReplaceable } from "../../helpers/nostr/events";
|
||||
import NostrPublishAction from "../../classes/nostr-publish-action";
|
||||
import { Tag } from "../../types/nostr-event";
|
||||
import deleteEventService from "../../services/delete-events";
|
||||
import { EmbedEvent } from "../../components/embed-event";
|
||||
|
||||
type DeleteEventContextType = {
|
||||
isLoading: boolean;
|
17
src/providers/route/index.tsx
Normal file
17
src/providers/route/index.tsx
Normal file
@ -0,0 +1,17 @@
|
||||
import DeleteEventProvider from "./delete-event-provider";
|
||||
import InvoiceModalProvider from "./invoice-modal";
|
||||
import MuteModalProvider from "./mute-modal-provider";
|
||||
import PostModalProvider from "./post-modal-provider";
|
||||
|
||||
/** Providers that provider functionality to pages (needs to be rendered under a router) */
|
||||
export function RouteProviders({ children }: { children: React.ReactNode }) {
|
||||
return (
|
||||
<DeleteEventProvider>
|
||||
<MuteModalProvider>
|
||||
<InvoiceModalProvider>
|
||||
<PostModalProvider>{children}</PostModalProvider>
|
||||
</InvoiceModalProvider>
|
||||
</MuteModalProvider>
|
||||
</DeleteEventProvider>
|
||||
);
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
import React, { useCallback, useContext, useState } from "react";
|
||||
import InvoiceModal from "../components/invoice-modal";
|
||||
import createDefer, { Deferred } from "../classes/deferred";
|
||||
import appSettings from "../services/settings/app-settings";
|
||||
import InvoiceModal from "../../components/invoice-modal";
|
||||
import createDefer, { Deferred } from "../../classes/deferred";
|
||||
import appSettings from "../../services/settings/app-settings";
|
||||
|
||||
export type InvoiceModalContext = {
|
||||
requestPay: (invoice: string) => Promise<void>;
|
||||
@ -17,7 +17,7 @@ export function useInvoiceModalContext() {
|
||||
return useContext(InvoiceModalContext);
|
||||
}
|
||||
|
||||
export const InvoiceModalProvider = ({ children }: { children: React.ReactNode }) => {
|
||||
export default function InvoiceModalProvider({ children }: { children: React.ReactNode }) {
|
||||
const [invoice, setInvoice] = useState<string>();
|
||||
const [defer, setDefer] = useState<Deferred<void>>();
|
||||
|
||||
@ -60,4 +60,4 @@ export const InvoiceModalProvider = ({ children }: { children: React.ReactNode }
|
||||
{invoice && <InvoiceModal isOpen onClose={handleClose} invoice={invoice} onPaid={handlePaid} />}
|
||||
</InvoiceModalContext.Provider>
|
||||
);
|
||||
};
|
||||
}
|
@ -21,26 +21,26 @@ import { PropsWithChildren, createContext, useCallback, useContext, useMemo, use
|
||||
import dayjs from "dayjs";
|
||||
import { useInterval } from "react-use";
|
||||
|
||||
import { getUserDisplayName } from "../helpers/user-metadata";
|
||||
import { useUserMetadata } from "../hooks/use-user-metadata";
|
||||
import useCurrentAccount from "../hooks/use-current-account";
|
||||
import { getUserDisplayName } from "../../helpers/user-metadata";
|
||||
import { useUserMetadata } from "../../hooks/use-user-metadata";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import {
|
||||
createEmptyMuteList,
|
||||
getPubkeysExpiration,
|
||||
muteListAddPubkey,
|
||||
muteListRemovePubkey,
|
||||
pruneExpiredPubkeys,
|
||||
} from "../helpers/nostr/mute-list";
|
||||
import { cloneList } from "../helpers/nostr/lists";
|
||||
import { useSigningContext } from "./signing-provider";
|
||||
import NostrPublishAction from "../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../services/client-relays";
|
||||
import replaceableEventLoaderService from "../services/replaceable-event-requester";
|
||||
import useUserMuteList from "../hooks/use-user-mute-list";
|
||||
import { DraftNostrEvent } from "../types/nostr-event";
|
||||
import UserAvatar from "../components/user-avatar";
|
||||
import UserLink from "../components/user-link";
|
||||
import { ChevronDownIcon } from "../components/icons";
|
||||
} from "../../helpers/nostr/mute-list";
|
||||
import { cloneList } from "../../helpers/nostr/lists";
|
||||
import { useSigningContext } from "../global/signing-provider";
|
||||
import NostrPublishAction from "../../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../../services/client-relays";
|
||||
import replaceableEventLoaderService from "../../services/replaceable-event-requester";
|
||||
import useUserMuteList from "../../hooks/use-user-mute-list";
|
||||
import { DraftNostrEvent } from "../../types/nostr-event";
|
||||
import UserAvatar from "../../components/user-avatar";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { ChevronDownIcon } from "../../components/icons";
|
||||
|
||||
type MuteModalContextType = {
|
||||
openModal: (pubkey: string) => void;
|
@ -1,7 +1,7 @@
|
||||
import React, { PropsWithChildren, useCallback, useMemo, useState } from "react";
|
||||
import { useDisclosure } from "@chakra-ui/react";
|
||||
import { ErrorBoundary } from "../components/error-boundary";
|
||||
import PostModal, { PostModalProps } from "../components/post-modal";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
import PostModal, { PostModalProps } from "../../components/post-modal";
|
||||
|
||||
export type PostModalContextType = {
|
||||
openModal: (props?: PostModalProps) => void;
|
@ -1,9 +1,8 @@
|
||||
import { Link, useLocation } from "react-router-dom";
|
||||
import useSubject from "../hooks/use-subject";
|
||||
import accountService from "../services/account";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import accountService from "../../services/account";
|
||||
import { Button, Flex, Heading, Spinner, Text } from "@chakra-ui/react";
|
||||
import { deleteDatabase } from "../services/db";
|
||||
import { ExternalLinkIcon } from "../components/icons";
|
||||
import { deleteDatabase } from "../../services/db";
|
||||
|
||||
export default function RequireCurrentAccount({ children }: { children: JSX.Element }) {
|
||||
let location = useLocation();
|
@ -23,7 +23,7 @@ import { getBadgeAwardPubkeys, getBadgeDescription, getBadgeImage, getBadgeName
|
||||
import BadgeMenu from "./components/badge-menu";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { Flex, SimpleGrid } from "@chakra-ui/react";
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider";
|
||||
import PeopleListSelection from "../../components/people-list-selection/people-list-selection";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { getEventUID } from "../../helpers/nostr/events";
|
||||
|
@ -5,7 +5,7 @@ import { Link as RouterLink } from "react-router-dom";
|
||||
import { getBadgeAwardBadge, getBadgeAwardPubkeys, getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges";
|
||||
import useReplaceableEvent from "../../../hooks/use-replaceable-event";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import UserLink from "../../../components/user-link";
|
||||
|
@ -6,7 +6,7 @@ import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventCoordinate, getEventUID } from "../../../helpers/nostr/events";
|
||||
import BadgeMenu from "./badge-menu";
|
||||
import { getBadgeImage, getBadgeName } from "../../../helpers/nostr/badges";
|
||||
|
@ -5,7 +5,7 @@ import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/m
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import NoteDebugModal from "../../../components/debug-modals/note-debug-modal";
|
||||
import { CodeIcon, TrashIcon } from "../../../components/icons";
|
||||
import { useDeleteEventContext } from "../../../providers/delete-event-provider";
|
||||
import { useDeleteEventContext } from "../../../providers/route/delete-event-provider";
|
||||
import OpenInAppMenuItem from "../../../components/common-menu-items/open-in-app";
|
||||
import CopyEmbedCodeMenuItem from "../../../components/common-menu-items/copy-embed-code";
|
||||
|
||||
|
@ -6,11 +6,11 @@ import { Kind } from "nostr-tools";
|
||||
import { ExternalLinkIcon } from "../../components/icons";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider";
|
||||
import PeopleListSelection from "../../components/people-list-selection/people-list-selection";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import BadgeAwardCard from "./components/badge-award-card";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
|
@ -7,7 +7,7 @@ import useSingleEvent from "../../hooks/use-single-event";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useChannelMetadata from "../../hooks/use-channel-metadata";
|
||||
import RelaySelectionProvider, { useRelaySelectionContext } from "../../providers/relay-selection-provider";
|
||||
import RelaySelectionProvider, { useRelaySelectionContext } from "../../providers/local/relay-selection-provider";
|
||||
import { ChevronLeftIcon } from "../../components/icons";
|
||||
import RelaySelectionButton from "../../components/relay-selection/relay-selection-button";
|
||||
import ChannelMetadataDrawer from "./components/channel-metadata-drawer";
|
||||
@ -16,8 +16,8 @@ import ChannelMenu from "./components/channel-menu";
|
||||
import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import ThreadsProvider from "../../providers/thread-provider";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import ThreadsProvider from "../../providers/local/thread-provider";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { groupMessages } from "../../helpers/nostr/dms";
|
||||
|
@ -18,7 +18,7 @@ import {
|
||||
|
||||
import useChannelMetadata from "../../../hooks/use-channel-metadata";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
import UserLink from "../../../components/user-link";
|
||||
|
@ -5,7 +5,7 @@ import { Button, ButtonProps, useToast } from "@chakra-ui/react";
|
||||
import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event";
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import { CHANNELS_LIST_KIND, listAddEvent, listRemoveEvent } from "../../../helpers/nostr/lists";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import useUserChannelsList from "../../../hooks/use-user-channels-list";
|
||||
|
@ -2,7 +2,7 @@ import { memo, useMemo } from "react";
|
||||
import { Box, BoxProps } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { TrustProvider } from "../../../providers/trust";
|
||||
import { TrustProvider } from "../../../providers/local/trust";
|
||||
import { EmbedableContent, embedUrls } from "../../../helpers/embeds";
|
||||
import {
|
||||
embedCashuTokens,
|
||||
|
@ -21,11 +21,11 @@ import useChannelMetadata from "../../../hooks/use-channel-metadata";
|
||||
import useTimelineLoader from "../../../hooks/use-timeline-loader";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../../providers/local/intersection-observer";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import UserAvatar from "../../../components/user-avatar";
|
||||
import { useRelaySelectionContext } from "../../../providers/relay-selection-provider";
|
||||
import { useRelaySelectionContext } from "../../../providers/local/relay-selection-provider";
|
||||
import { UserDnsIdentityIcon } from "../../../components/user-dns-identity-icon";
|
||||
import ChannelJoinButton from "./channel-join-button";
|
||||
import { ExternalLinkIcon } from "../../../components/icons";
|
||||
|
@ -4,14 +4,14 @@ import dayjs from "dayjs";
|
||||
import { Kind } from "nostr-tools";
|
||||
|
||||
import { Button, Flex, FlexProps, Heading, useToast } from "@chakra-ui/react";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import MagicTextArea, { RefType } from "../../../components/magic-textarea";
|
||||
import { useTextAreaUploadFileWithForm } from "../../../hooks/use-textarea-upload-file";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import { createEmojiTags, ensureNotifyPubkeys, getContentMentions } from "../../../helpers/nostr/post";
|
||||
import { useContextEmojis } from "../../../providers/emoji-provider";
|
||||
import { useContextEmojis } from "../../../providers/global/emoji-provider";
|
||||
|
||||
export default function ChannelMessageForm({
|
||||
channel,
|
||||
|
@ -3,17 +3,17 @@ import { Box, Card, CardBody, CardHeader, Flex, LinkBox, Text } from "@chakra-ui
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import RelaySelectionProvider, { useRelaySelectionContext } from "../../providers/relay-selection-provider";
|
||||
import RelaySelectionProvider, { useRelaySelectionContext } from "../../providers/local/relay-selection-provider";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { ErrorBoundary } from "../../components/error-boundary";
|
||||
import RelaySelectionButton from "../../components/relay-selection/relay-selection-button";
|
||||
import { useCallback, useRef } from "react";
|
||||
import useClientSideMuteFilter from "../../hooks/use-client-side-mute-filter";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider";
|
||||
import PeopleListSelection from "../../components/people-list-selection/people-list-selection";
|
||||
import ChannelCard from "./components/channel-card";
|
||||
|
||||
|
@ -16,7 +16,7 @@ import {
|
||||
} from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventUID } from "../../../helpers/nostr/events";
|
||||
import { getCommunityImage, getCommunityName } from "../../../helpers/nostr/communities";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
|
@ -34,7 +34,7 @@ import UserLink from "../../../components/user-link";
|
||||
import { TrashIcon } from "../../../components/icons";
|
||||
import Upload01 from "../../../components/icons/upload-01";
|
||||
import { nostrBuildUploadImage } from "../../../helpers/nostr-build";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import { RelayUrlInput } from "../../../components/relay-url-input";
|
||||
import { safeRelayUrl } from "../../../helpers/url";
|
||||
import { RelayFavicon } from "../../../components/relay-favicon";
|
||||
|
@ -8,7 +8,7 @@ import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import { getCommunityName } from "../../../helpers/nostr/communities";
|
||||
import { COMMUNITIES_LIST_KIND, listAddCoordinate, listRemoveCoordinate } from "../../../helpers/nostr/lists";
|
||||
import { getEventCoordinate } from "../../../helpers/nostr/events";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import { useMemo } from "react";
|
||||
import { AvatarGroup, Button, Flex, SimpleGrid, Switch, useDisclosure } from "@chakra-ui/react";
|
||||
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/people-list-provider";
|
||||
import PeopleListProvider, { usePeopleListContext } from "../../providers/local/people-list-provider";
|
||||
import PeopleListSelection from "../../components/people-list-selection/people-list-selection";
|
||||
import { PointerCommunityCard } from "./components/community-card";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
|
@ -29,7 +29,7 @@ import useUserCommunitiesList from "../../hooks/use-user-communities-list";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import CommunityCard from "./components/community-card";
|
||||
import CommunityCreateModal, { FormValues } from "./components/community-create-modal";
|
||||
import { useSigningContext } from "../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../providers/global/signing-provider";
|
||||
import { DraftNostrEvent } from "../../types/nostr-event";
|
||||
import {
|
||||
COMMUNITY_APPROVAL_KIND,
|
||||
@ -50,7 +50,7 @@ import useUserMuteFilter from "../../hooks/use-user-mute-filter";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import useReplaceableEvents from "../../hooks/use-replaceable-events";
|
||||
import { getEventCoordinate, sortByDate } from "../../helpers/nostr/events";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import ApprovedEvent from "../community/components/community-approved-post";
|
||||
import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status";
|
||||
|
||||
|
@ -15,19 +15,19 @@ import { NostrEvent } from "../../types/nostr-event";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import UserAvatarLink from "../../components/user-avatar-link";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { AdditionalRelayProvider } from "../../providers/additional-relay-context";
|
||||
import { AdditionalRelayProvider } from "../../providers/local/additional-relay-context";
|
||||
|
||||
import TrendUp01 from "../../components/icons/trend-up-01";
|
||||
import Clock from "../../components/icons/clock";
|
||||
import Hourglass03 from "../../components/icons/hourglass-03";
|
||||
import VerticalCommunityDetails from "./components/vertical-community-details";
|
||||
import { useBreakpointValue } from "../../providers/breakpoint-provider";
|
||||
import { useBreakpointValue } from "../../providers/global/breakpoint-provider";
|
||||
import HorizontalCommunityDetails from "./components/horizonal-community-details";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { getEventCoordinate, getEventUID } from "../../helpers/nostr/events";
|
||||
import { WritingIcon } from "../../components/icons";
|
||||
import { PostModalContext } from "../../providers/post-modal-provider";
|
||||
import { PostModalContext } from "../../providers/route/post-modal-provider";
|
||||
import CommunityEditModal from "./components/community-edit-modal";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
|
@ -3,7 +3,7 @@ import { ModalProps, useToast } from "@chakra-ui/react";
|
||||
import dayjs from "dayjs";
|
||||
|
||||
import { DraftNostrEvent, NostrEvent } from "../../../types/nostr-event";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import {
|
||||
COMMUNITY_DEFINITION_KIND,
|
||||
getCommunityDescription,
|
||||
|
@ -18,7 +18,7 @@ import { useReadRelayUrls } from "../../../hooks/use-client-relays";
|
||||
import { getCommunityRelays } from "../../../helpers/nostr/communities";
|
||||
import { getEventCoordinate } from "../../../helpers/nostr/events";
|
||||
import { COMMUNITIES_LIST_KIND } from "../../../helpers/nostr/lists";
|
||||
import IntersectionObserverProvider from "../../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../../providers/local/intersection-observer";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status";
|
||||
|
@ -22,7 +22,7 @@ import { useNavigateInDrawer } from "../../../providers/drawer-sub-view-provider
|
||||
import { getSharableEventAddress } from "../../../helpers/nip19";
|
||||
import HoverLinkOverlay from "../../../components/hover-link-overlay";
|
||||
import { CompactNoteContent } from "../../../components/compact-note-content";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import { useRegisterIntersectionEntity } from "../../../providers/local/intersection-observer";
|
||||
import { getEventUID, parseHardcodedNoteContent } from "../../../helpers/nostr/events";
|
||||
import UserLink from "../../../components/user-link";
|
||||
import UserAvatarLink from "../../../components/user-avatar-link";
|
||||
|
@ -3,7 +3,7 @@ import { Card, CardProps, IconButton, Text, useToast } from "@chakra-ui/react";
|
||||
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import useEventReactions from "../../../hooks/use-event-reactions";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import { draftEventReaction, groupReactions } from "../../../helpers/nostr/reactions";
|
||||
import clientRelaysService from "../../../services/client-relays";
|
||||
import { getCommunityPostVote } from "../../../helpers/nostr/communities";
|
||||
@ -12,7 +12,7 @@ import eventReactionsService from "../../../services/event-reactions";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import { ChevronDownIcon, ChevronUpIcon } from "../../../components/icons";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
import { useAdditionalRelayContext } from "../../../providers/additional-relay-context";
|
||||
import { useAdditionalRelayContext } from "../../../providers/local/additional-relay-context";
|
||||
|
||||
export default function PostVoteButtons({ event, ...props }: Omit<CardProps, "children"> & { event: NostrEvent }) {
|
||||
const account = useCurrentAccount();
|
||||
|
@ -8,7 +8,7 @@ import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import VerticalPageLayout from "../../components/vertical-page-layout";
|
||||
import CommunityCard from "../communities/components/community-card";
|
||||
import { getEventUID } from "../../helpers/nostr/events";
|
||||
|
@ -3,7 +3,7 @@ import { useOutletContext } from "react-router-dom";
|
||||
import { COMMUNITY_APPROVAL_KIND, buildApprovalMap, getCommunityMods } from "../../../helpers/nostr/communities";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../../providers/local/intersection-observer";
|
||||
import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status";
|
||||
import useUserMuteFilter from "../../../hooks/use-user-mute-filter";
|
||||
import ApprovedEvent from "../components/community-approved-post";
|
||||
|
@ -12,11 +12,13 @@ import {
|
||||
getCommunityRelays,
|
||||
} from "../../../helpers/nostr/communities";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import IntersectionObserverProvider, { useRegisterIntersectionEntity } from "../../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider, {
|
||||
useRegisterIntersectionEntity,
|
||||
} from "../../../providers/local/intersection-observer";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status";
|
||||
import { CheckIcon } from "../../../components/icons";
|
||||
import { useSigningContext } from "../../../providers/signing-provider";
|
||||
import { useSigningContext } from "../../../providers/global/signing-provider";
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import NostrPublishAction from "../../../classes/nostr-publish-action";
|
||||
import { useWriteRelayUrls } from "../../../hooks/use-client-relays";
|
||||
|
@ -10,7 +10,7 @@ import {
|
||||
} from "../../../helpers/nostr/communities";
|
||||
import useSubject from "../../../hooks/use-subject";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import IntersectionObserverProvider from "../../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../../providers/local/intersection-observer";
|
||||
import TimelineActionAndStatus from "../../../components/timeline-page/timeline-action-and-status";
|
||||
import useUserMuteFilter from "../../../hooks/use-user-mute-filter";
|
||||
import useEventsReactions from "../../../hooks/use-events-reactions";
|
||||
|
@ -8,19 +8,19 @@ import UserAvatar from "../../components/user-avatar";
|
||||
import UserLink from "../../components/user-link";
|
||||
import { isHexKey } from "../../helpers/nip19";
|
||||
import useSubject from "../../hooks/use-subject";
|
||||
import RequireCurrentAccount from "../../providers/require-current-account";
|
||||
import RequireCurrentAccount from "../../providers/route/require-current-account";
|
||||
import useTimelineLoader from "../../hooks/use-timeline-loader";
|
||||
import useCurrentAccount from "../../hooks/use-current-account";
|
||||
import { useReadRelayUrls } from "../../hooks/use-client-relays";
|
||||
import IntersectionObserverProvider from "../../providers/intersection-observer";
|
||||
import IntersectionObserverProvider from "../../providers/local/intersection-observer";
|
||||
import { useTimelineCurserIntersectionCallback } from "../../hooks/use-timeline-cursor-intersection-callback";
|
||||
import TimelineActionAndStatus from "../../components/timeline-page/timeline-action-and-status";
|
||||
import { UserDnsIdentityIcon } from "../../components/user-dns-identity-icon";
|
||||
import { useDecryptionContext } from "../../providers/dycryption-provider";
|
||||
import { useDecryptionContext } from "../../providers/global/dycryption-provider";
|
||||
import SendMessageForm from "./components/send-message-form";
|
||||
import { groupMessages } from "../../helpers/nostr/dms";
|
||||
import ThreadDrawer from "./components/thread-drawer";
|
||||
import ThreadsProvider from "../../providers/thread-provider";
|
||||
import ThreadsProvider from "../../providers/local/thread-provider";
|
||||
import { useRouterMarker } from "../../providers/drawer-sub-view-provider";
|
||||
import TimelineLoader from "../../classes/timeline-loader";
|
||||
import DirectMessageBlock from "./components/direct-message-block";
|
||||
|
@ -2,7 +2,7 @@ import { useState } from "react";
|
||||
import { Alert, AlertDescription, AlertIcon, Button, ButtonProps } from "@chakra-ui/react";
|
||||
|
||||
import { UnlockIcon } from "../../../components/icons";
|
||||
import { useDecryptionContainer } from "../../../providers/dycryption-provider";
|
||||
import { useDecryptionContainer } from "../../../providers/global/dycryption-provider";
|
||||
import useCurrentAccount from "../../../hooks/use-current-account";
|
||||
import { getDMRecipient, getDMSender } from "../../../helpers/nostr/dms";
|
||||
import { NostrEvent } from "../../../types/nostr-event";
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user