add option for opening embedded notes in side drawer

This commit is contained in:
hzrd149 2024-07-22 07:46:58 -05:00
parent 2d78537545
commit 162daf4079
7 changed files with 91 additions and 34 deletions

View File

@ -25,10 +25,10 @@
"@chakra-ui/shared-utils": "^2.0.4",
"@chakra-ui/styled-system": "^2.9.2",
"@chakra-ui/theme-tools": "^2.1.2",
"@codemirror/autocomplete": "^6.12.0",
"@codemirror/autocomplete": "^6.17.0",
"@codemirror/lang-json": "^6.0.1",
"@codemirror/language": "^6.10.1",
"@codemirror/view": "^6.26.2",
"@codemirror/language": "^6.10.2",
"@codemirror/view": "^6.28.6",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@getalby/bitcoin-connect": "^3.4.1",
@ -38,8 +38,8 @@
"@noble/secp256k1": "^1.7.0",
"@scure/base": "^1.1.6",
"@snort/worker-relay": "^1.1.0",
"@uiw/codemirror-theme-github": "^4.21.21",
"@uiw/react-codemirror": "^4.21.21",
"@uiw/codemirror-theme-github": "^4.23.0",
"@uiw/react-codemirror": "^4.23.0",
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
"bech32": "^2.0.0",
"blossom-client-sdk": "^0.7.0",

View File

@ -1,6 +1,6 @@
import { MouseEventHandler, useCallback } from "react";
import { Card, CardProps, Flex, LinkBox, Spacer } from "@chakra-ui/react";
import { Link as RouterLink } from "react-router-dom";
import { Link as RouterLink, useNavigate } from "react-router-dom";
import { NostrEvent } from "../../../types/nostr-event";
import UserAvatarLink from "../../user/user-avatar-link";
@ -16,10 +16,12 @@ import { useNavigateInDrawer } from "../../../providers/drawer-sub-view-provider
import HoverLinkOverlay from "../../hover-link-overlay";
import singleEventService from "../../../services/single-event";
import relayHintService from "../../../services/event-relay-hint";
import localSettings from "../../../services/local-settings";
export default function EmbeddedNote({ event, ...props }: Omit<CardProps, "children"> & { event: NostrEvent }) {
const { showSignatureVerification } = useSubject(appSettings);
const navigate = useNavigateInDrawer();
const enableDrawer = useSubject(localSettings.enableNoteThreadDrawer);
const navigate = enableDrawer ? useNavigateInDrawer() : useNavigate();
const to = `/n/${relayHintService.getSharableEventAddress(event)}`;
const handleClick = useCallback<MouseEventHandler>(

View File

@ -14,7 +14,7 @@ import {
Tag,
Text,
} from "@chakra-ui/react";
import { Link as RouterLink } from "react-router-dom";
import { Link as RouterLink, useNavigate } from "react-router-dom";
import UserAvatarLink from "../../user/user-avatar-link";
import UserLink from "../../user/user-link";
@ -26,9 +26,12 @@ import { formatBytes } from "../../../helpers/number";
import { useNavigateInDrawer } from "../../../providers/drawer-sub-view-provider";
import HoverLinkOverlay from "../../hover-link-overlay";
import relayHintService from "../../../services/event-relay-hint";
import useSubject from "../../../hooks/use-subject";
import localSettings from "../../../services/local-settings";
export default function EmbeddedTorrent({ torrent, ...props }: Omit<CardProps, "children"> & { torrent: NostrEvent }) {
const navigate = useNavigateInDrawer();
const enableDrawer = useSubject(localSettings.enableNoteThreadDrawer);
const navigate = enableDrawer ? useNavigateInDrawer() : useNavigate();
const link = `/torrents/${relayHintService.getSharableEventAddress(torrent)}`;
const handleClick = useCallback<MouseEventHandler>(

View File

@ -104,9 +104,18 @@ class NullableNumberLocalStorageEntry extends NullableLocalStorageEntry<number>
const idbMaxEvents = new NumberLocalStorageEntry("nostr-idb-max-events", 10_000);
const wasmPersistForDays = new NullableNumberLocalStorageEntry("wasm-relay-oldest-event", 365);
// note behavior
const enableNoteThreadDrawer = new LocalStorageEntry(
"enable-note-thread-drawer",
false,
(raw) => raw === "true",
(v) => String(v),
);
const localSettings = {
idbMaxEvents,
wasmPersistForDays,
enableNoteThreadDrawer,
};
if (import.meta.env.DEV) {

View File

@ -26,11 +26,13 @@ import IntersectionObserverProvider from "../../providers/local/intersection-obs
import { useNavigateInDrawer } from "../../providers/drawer-sub-view-provider";
import useEventIntersectionRef from "../../hooks/use-event-intersection-ref";
import useShareableEventAddress from "../../hooks/use-shareable-event-address";
import localSettings from "../../services/local-settings";
const THREAD_KINDS = [kinds.ShortTextNote, TORRENT_COMMENT_KIND];
function ReplyEntry({ event }: { event: NostrEvent }) {
const navigate = useNavigateInDrawer();
const enableDrawer = useSubject(localSettings.enableNoteThreadDrawer);
const navigate = enableDrawer ? useNavigateInDrawer() : useNavigate();
const address = useShareableEventAddress(event);
const onClick = useCallback<MouseEventHandler>(
(e) => {

View File

@ -19,10 +19,14 @@ import {
import { AppSettings } from "../../services/settings/migrations";
import { AppearanceIcon } from "../../components/icons";
import useSubject from "../../hooks/use-subject";
import localSettings from "../../services/local-settings";
export default function DisplaySettings() {
const { register } = useFormContext<AppSettings>();
const enableNoteDrawer = useSubject(localSettings.enableNoteThreadDrawer);
return (
<AccordionItem>
<h2>
@ -130,6 +134,21 @@ export default function DisplaySettings() {
<span>Enabled: shows a warning for notes with NIP-36 Content Warning</span>
</FormHelperText>
</FormControl>
<FormControl>
<Flex alignItems="center">
<FormLabel htmlFor="enableNoteDrawer" mb="0">
Open embedded notes in side drawer
</FormLabel>
<Switch
id="enableNoteDrawer"
checked={enableNoteDrawer}
onChange={() => localSettings.enableNoteThreadDrawer.next(!localSettings.enableNoteThreadDrawer.value)}
/>
</Flex>
<FormHelperText>
<span>Enabled: Clicking on an embedded note will open it in a side drawer</span>
</FormHelperText>
</FormControl>
<FormControl>
<FormLabel htmlFor="muted-words" mb="0">
Muted words

View File

@ -2033,7 +2033,7 @@
human-id "^1.0.2"
prettier "^2.7.1"
"@codemirror/autocomplete@^6.0.0", "@codemirror/autocomplete@^6.12.0":
"@codemirror/autocomplete@^6.0.0":
version "6.12.0"
resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.12.0.tgz#3fa620a8a3f42ded7751749916e8375f6bbbb333"
integrity sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==
@ -2043,6 +2043,16 @@
"@codemirror/view" "^6.17.0"
"@lezer/common" "^1.0.0"
"@codemirror/autocomplete@^6.17.0":
version "6.17.0"
resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.17.0.tgz#24ff5fc37fd91f6439df6f4ff9c8e910cde1b053"
integrity sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.17.0"
"@lezer/common" "^1.0.0"
"@codemirror/commands@^6.0.0", "@codemirror/commands@^6.1.0":
version "6.3.3"
resolved "https://registry.yarnpkg.com/@codemirror/commands/-/commands-6.3.3.tgz#03face5bf5f3de0fc4e09b177b3c91eda2ceb7e9"
@ -2061,7 +2071,7 @@
"@codemirror/language" "^6.0.0"
"@lezer/json" "^1.0.0"
"@codemirror/language@^6.0.0", "@codemirror/language@^6.10.1":
"@codemirror/language@^6.0.0":
version "6.10.1"
resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05"
integrity sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==
@ -2073,6 +2083,18 @@
"@lezer/lr" "^1.0.0"
style-mod "^4.0.0"
"@codemirror/language@^6.10.2":
version "6.10.2"
resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.2.tgz#4056dc219619627ffe995832eeb09cea6060be61"
integrity sha512-kgbTYTo0Au6dCSc/TFy7fK3fpJmgHDv1sG1KNQKJXVi+xBTEeBPY/M30YXiU6mMXeH+YIDLsbrT4ZwNRdtF+SA==
dependencies:
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.23.0"
"@lezer/common" "^1.1.0"
"@lezer/highlight" "^1.0.0"
"@lezer/lr" "^1.0.0"
style-mod "^4.0.0"
"@codemirror/lint@^6.0.0":
version "6.5.0"
resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9"
@ -2115,10 +2137,10 @@
style-mod "^4.1.0"
w3c-keyname "^2.2.4"
"@codemirror/view@^6.26.2":
version "6.26.3"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.26.3.tgz#47aebd49a6ee3c8d36b82046d3bffe6056b8039f"
integrity sha512-gmqxkPALZjkgSxIeeweY/wGQXBfwTUaLs8h7OKtSwfbj9Ct3L11lD+u1sS7XHppxFQoMDiMDp07P9f3I2jWOHw==
"@codemirror/view@^6.28.6":
version "6.28.6"
resolved "https://registry.yarnpkg.com/@codemirror/view/-/view-6.28.6.tgz#570de85d1055f7f9946a0082d5f7db9981a3e808"
integrity sha512-bhwB1AZ6zU4M3dNKm8Aa2BXwj5mWDqE9IWpqxYKJoLCnx+AcwcMuLO01tLWgc1mx4vT1IVYVqx86YoqUsATrqQ==
dependencies:
"@codemirror/state" "^6.4.0"
style-mod "^4.1.0"
@ -3133,10 +3155,10 @@
resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.7.tgz#114e2ffc8d5be4915fdd5bc90668fc0ceaadb760"
integrity sha512-LKzNTjj+2j09wAo/vvVjzgw5qckJJzhdGgWHW7j69QIGdq/KnZrMAMIHQiWGl3Ccflh5/CudBAntTPYdprPltA==
"@uiw/codemirror-extensions-basic-setup@4.21.21":
version "4.21.21"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.21.21.tgz#243ef309cb53253b14187649a7abc0d996420a20"
integrity sha512-+0i9dPrRSa8Mf0CvyrMvnAhajnqwsP3IMRRlaHDRgsSGL8igc4z7MhvUPn+7cWFAAqWzQRhMdMSWzo6/TEa3EA==
"@uiw/codemirror-extensions-basic-setup@4.23.0":
version "4.23.0"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.23.0.tgz#c3c181153335c208a25d59b8ecbc7fc87fe85356"
integrity sha512-+k5nkRpUWGaHr1JWT8jcKsVewlXw5qBgSopm9LW8fZ6KnSNZBycz8kHxh0+WSvckmXEESGptkIsb7dlkmJT/hQ==
dependencies:
"@codemirror/autocomplete" "^6.0.0"
"@codemirror/commands" "^6.0.0"
@ -3146,32 +3168,32 @@
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@uiw/codemirror-theme-github@^4.21.21":
version "4.21.21"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.21.21.tgz#0e0fd13500e6c17032a9b9fccb276e13f6681a91"
integrity sha512-msrpNrKk/CZQHk58TshI8aH7FpEyL404m/vWlGUdL2jGW7IRKm0nXn1lXXQ/snzk65h88GO6u9fiiv0pxRuZfQ==
"@uiw/codemirror-theme-github@^4.23.0":
version "4.23.0"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-theme-github/-/codemirror-theme-github-4.23.0.tgz#68daf01c5c55d20f82362d9d2b84a0d2acf69a8b"
integrity sha512-1pJ9V7LQXoojfgYXgI4yn8CfaYBm9HS919xC32/rs81Wl1lhYEOhiYRmNcpnJQDu9ZMgO8ebPMgAVU21z/C76g==
dependencies:
"@uiw/codemirror-themes" "4.21.21"
"@uiw/codemirror-themes" "4.23.0"
"@uiw/codemirror-themes@4.21.21":
version "4.21.21"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-themes/-/codemirror-themes-4.21.21.tgz#26efb06ecce9a51aa73d39311c90f8fcb06fdc43"
integrity sha512-ljVcMGdaxo75UaH+EqxJ+jLyMVVgeSfW2AKyT1VeLy+4SDpuqNQ7wq5XVxktsG6LH+OvgSFndWXgPANf4+gQcA==
"@uiw/codemirror-themes@4.23.0":
version "4.23.0"
resolved "https://registry.yarnpkg.com/@uiw/codemirror-themes/-/codemirror-themes-4.23.0.tgz#cc5b5242d3e67caf49c2a9120e804b16ad79f86d"
integrity sha512-9fiji9xooZyBQozR1i6iTr56YP7j/Dr/VgsNWbqf5Szv+g+4WM1iZuiDGwNXmFMWX8gbkDzp6ASE21VCPSofWw==
dependencies:
"@codemirror/language" "^6.0.0"
"@codemirror/state" "^6.0.0"
"@codemirror/view" "^6.0.0"
"@uiw/react-codemirror@^4.21.21":
version "4.21.21"
resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.21.21.tgz#986b18dbd6dc69aa470fc3d4e47b89b504af6778"
integrity sha512-PaxBMarufMWoR0qc5zuvBSt76rJ9POm9qoOaJbqRmnNL2viaF+d+Paf2blPSlm1JSnqn7hlRjio+40nZJ9TKzw==
"@uiw/react-codemirror@^4.23.0":
version "4.23.0"
resolved "https://registry.yarnpkg.com/@uiw/react-codemirror/-/react-codemirror-4.23.0.tgz#5eeadcd5de61213ad76ac3c772fffb7e5b54b465"
integrity sha512-MnqTXfgeLA3fsUUQjqjJgemEuNyoGALgsExVm0NQAllAAi1wfj+IoKFeK+h3XXMlTFRCFYOUh4AHDv0YXJLsOg==
dependencies:
"@babel/runtime" "^7.18.6"
"@codemirror/commands" "^6.1.0"
"@codemirror/state" "^6.1.1"
"@codemirror/theme-one-dark" "^6.0.0"
"@uiw/codemirror-extensions-basic-setup" "4.21.21"
"@uiw/codemirror-extensions-basic-setup" "4.23.0"
codemirror "^6.0.0"
"@ungap/structured-clone@^1.0.0":