mirror of
https://github.com/hzrd149/nostrudel.git
synced 2025-03-26 17:52:18 +01:00
fix clipboard on http
This commit is contained in:
parent
f7a913ca60
commit
7cbaa2edf6
@ -1,16 +1,21 @@
|
||||
import { MenuItem } from "@chakra-ui/react";
|
||||
import { MenuItem, useToast } from "@chakra-ui/react";
|
||||
|
||||
import { NostrEvent } from "../../types/nostr-event";
|
||||
import { getSharableEventAddress } from "../../helpers/nip19";
|
||||
import { ShareIcon } from "../icons";
|
||||
|
||||
export default function CopyShareLinkMenuItem({ event }: { event: NostrEvent }) {
|
||||
const toast = useToast();
|
||||
const address = getSharableEventAddress(event);
|
||||
|
||||
return (
|
||||
address && (
|
||||
<MenuItem
|
||||
onClick={() => window.navigator.clipboard.writeText("https://njump.me/" + address)}
|
||||
onClick={() => {
|
||||
const text = "https://njump.me/" + address;
|
||||
if (navigator.clipboard) navigator.clipboard.writeText(text);
|
||||
else toast({ description: text, isClosable: true, duration: null });
|
||||
}}
|
||||
icon={<ShareIcon />}
|
||||
>
|
||||
Copy share link
|
||||
|
@ -1,9 +1,10 @@
|
||||
import { useState } from "react";
|
||||
import { IconButton, IconButtonProps } from "@chakra-ui/react";
|
||||
import { IconButton, IconButtonProps, useToast } from "@chakra-ui/react";
|
||||
|
||||
import { CheckIcon, CopyToClipboardIcon } from "./icons";
|
||||
|
||||
export const CopyIconButton = ({ text, ...props }: { text?: string } & Omit<IconButtonProps, "icon">) => {
|
||||
const toast = useToast();
|
||||
const [copied, setCopied] = useState(false);
|
||||
|
||||
return (
|
||||
@ -14,7 +15,7 @@ export const CopyIconButton = ({ text, ...props }: { text?: string } & Omit<Icon
|
||||
navigator.clipboard.writeText(text);
|
||||
setCopied(true);
|
||||
setTimeout(() => setCopied(false), 2000);
|
||||
}
|
||||
} else toast({ description: text, isClosable: true, duration: null });
|
||||
}}
|
||||
{...props}
|
||||
/>
|
||||
|
@ -1,8 +1,9 @@
|
||||
import { Button, ButtonProps } from "@chakra-ui/react";
|
||||
import { Button, ButtonProps, useToast } from "@chakra-ui/react";
|
||||
import { CheckIcon, CopyToClipboardIcon } from "./icons";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function VersionButton({ ...props }: Omit<ButtonProps, "children">) {
|
||||
const toast = useToast();
|
||||
const [copied, setCopied] = useState(false);
|
||||
const version = [import.meta.env.VITE_APP_VERSION, import.meta.env.VITE_COMMIT_HASH].filter(Boolean).join("-");
|
||||
|
||||
@ -18,7 +19,7 @@ export default function VersionButton({ ...props }: Omit<ButtonProps, "children"
|
||||
navigator.clipboard.writeText(version);
|
||||
setCopied(true);
|
||||
setTimeout(() => setCopied(false), 2000);
|
||||
}
|
||||
} else toast({ description: version, isClosable: true, duration: null });
|
||||
}}
|
||||
{...props}
|
||||
>
|
||||
|
@ -34,7 +34,7 @@ function rejectPending() {
|
||||
|
||||
function onVisibilityChange() {
|
||||
if (document.visibilityState === "visible") {
|
||||
if (!pendingRequest) return;
|
||||
if (!pendingRequest || !navigator.clipboard) return;
|
||||
|
||||
// read the result from the clipboard
|
||||
setTimeout(() => {
|
||||
@ -92,7 +92,7 @@ async function nip04Decrypt(pubkey: string, data: string): Promise<string> {
|
||||
}
|
||||
|
||||
const amberSignerService = {
|
||||
supported: navigator.userAgent.includes("Android"),
|
||||
supported: navigator.userAgent.includes("Android") && navigator.clipboard,
|
||||
getPublicKey,
|
||||
signEvent,
|
||||
nip04Encrypt,
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { MenuItem, useDisclosure } from "@chakra-ui/react";
|
||||
import { MenuItem, useDisclosure, useToast } from "@chakra-ui/react";
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
import { CustomMenuIconButton, MenuIconButtonProps } from "../../../components/menu-icon-button";
|
||||
@ -14,6 +14,7 @@ export default function CommunityPostMenu({
|
||||
approvals,
|
||||
...props
|
||||
}: Omit<MenuIconButtonProps, "children"> & { event: NostrEvent; approvals: NostrEvent[] }) {
|
||||
const toast = useToast();
|
||||
const debugModal = useDisclosure();
|
||||
|
||||
return (
|
||||
@ -22,7 +23,11 @@ export default function CommunityPostMenu({
|
||||
<OpenInAppMenuItem event={event} />
|
||||
<CopyShareLinkMenuItem event={event} />
|
||||
<MenuItem
|
||||
onClick={() => window.navigator.clipboard.writeText(nip19.noteEncode(event.id))}
|
||||
onClick={() => {
|
||||
const text = nip19.noteEncode(event.id);
|
||||
if (navigator.clipboard) navigator.clipboard.writeText(text);
|
||||
else toast({ description: text, isClosable: true, duration: null });
|
||||
}}
|
||||
icon={<CopyToClipboardIcon />}
|
||||
>
|
||||
Copy Note ID
|
||||
|
@ -98,7 +98,7 @@ export function SearchPage() {
|
||||
<Flex gap="2" wrap="wrap">
|
||||
<Flex gap="2" grow={1}>
|
||||
<IconButton onClick={qrScannerModal.onOpen} icon={<QrCodeIcon />} aria-label="Qr Scanner" />
|
||||
{!!navigator.clipboard.readText && (
|
||||
{!!navigator.clipboard?.readText && (
|
||||
<IconButton onClick={readClipboard} icon={<CopyToClipboardIcon />} aria-label="Read clipboard" />
|
||||
)}
|
||||
<Input type="search" value={searchInput} onChange={(e) => setSearchInput(e.target.value)} />
|
||||
|
@ -1,4 +1,4 @@
|
||||
import { MenuItem, useDisclosure } from "@chakra-ui/react";
|
||||
import { MenuItem, useDisclosure, useToast } from "@chakra-ui/react";
|
||||
import { Link as RouterLink } from "react-router-dom";
|
||||
import { nip19 } from "nostr-tools";
|
||||
|
||||
@ -31,6 +31,7 @@ export const UserProfileMenu = ({
|
||||
showRelaySelectionModal,
|
||||
...props
|
||||
}: { pubkey: string; showRelaySelectionModal?: () => void } & Omit<MenuIconButtonProps, "children">) => {
|
||||
const toast = useToast();
|
||||
const account = useCurrentAccount();
|
||||
const metadata = useUserMetadata(pubkey);
|
||||
const userRelays = useUserRelays(pubkey);
|
||||
@ -69,13 +70,21 @@ export const UserProfileMenu = ({
|
||||
Login as {truncatedId(getUserDisplayName(metadata, pubkey))}
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
onClick={() => window.navigator.clipboard.writeText("https://njump.me/" + sharableId)}
|
||||
onClick={() => {
|
||||
const text = "https://njump.me/" + sharableId;
|
||||
if (navigator.clipboard) navigator.clipboard?.writeText(text);
|
||||
else toast({ description: text, isClosable: true, duration: null });
|
||||
}}
|
||||
icon={<ShareIcon />}
|
||||
>
|
||||
Copy share link
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
onClick={() => window.navigator.clipboard.writeText("nostr:" + sharableId)}
|
||||
onClick={() => {
|
||||
const text = "nostr:" + sharableId;
|
||||
if (navigator.clipboard) navigator.clipboard?.writeText(text);
|
||||
else toast({ description: text, isClosable: true, duration: null });
|
||||
}}
|
||||
icon={<CopyToClipboardIcon />}
|
||||
>
|
||||
Copy Embed Code
|
||||
|
Loading…
x
Reference in New Issue
Block a user