This commit is contained in:
Ren Amamiya
2023-07-23 21:39:04 +07:00
parent 71c4f3db22
commit 22a678ec08
16 changed files with 49 additions and 20 deletions

View File

@@ -12,9 +12,9 @@ import { usePublish } from '@utils/hooks/usePublish';
export function CreateStep4Screen() { export function CreateStep4Screen() {
const navigate = useNavigate(); const navigate = useNavigate();
const publish = usePublish();
const profile = useOnboarding((state) => state.profile); const profile = useOnboarding((state) => state.profile);
const { publish } = usePublish();
const { account } = useAccount(); const { account } = useAccount();
const [username, setUsername] = useState(''); const [username, setUsername] = useState('');

View File

@@ -114,11 +114,11 @@ const INITIAL_LIST = [
export function CreateStep5Screen() { export function CreateStep5Screen() {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const navigate = useNavigate(); const navigate = useNavigate();
const publish = usePublish();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [follows, setFollows] = useState([]); const [follows, setFollows] = useState([]);
const { publish } = usePublish();
const { account } = useAccount(); const { account } = useAccount();
const { status, data } = useQuery(['trending-profiles'], async () => { const { status, data } = useQuery(['trending-profiles'], async () => {
const res = await fetch('https://api.nostr.band/v0/trending/profiles'); const res = await fetch('https://api.nostr.band/v0/trending/profiles');

View File

@@ -9,10 +9,11 @@ import { useAccount } from '@utils/hooks/useAccount';
import { usePublish } from '@utils/hooks/usePublish'; import { usePublish } from '@utils/hooks/usePublish';
export function OnboardingScreen() { export function OnboardingScreen() {
const publish = usePublish();
const navigate = useNavigate(); const navigate = useNavigate();
const { publish } = usePublish();
const { status, account } = useAccount(); const { status, account } = useAccount();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const submit = async () => { const submit = async () => {

View File

@@ -14,7 +14,7 @@ export function ChatMessageForm({
userPubkey: string; userPubkey: string;
userPrivkey: string; userPrivkey: string;
}) { }) {
const publish = usePublish(); const { publish } = usePublish();
const [value, setValue] = useState(''); const [value, setValue] = useState('');
const encryptMessage = useCallback(async () => { const encryptMessage = useCallback(async () => {

View File

@@ -19,7 +19,7 @@ import { usePublish } from '@utils/hooks/usePublish';
export function AddImageBlock() { export function AddImageBlock() {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const publish = usePublish(); const { publish } = usePublish();
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);

View File

@@ -1,13 +1,13 @@
import { useQuery } from '@tanstack/react-query'; import { useQuery } from '@tanstack/react-query';
import { useCallback } from 'react'; import { useCallback } from 'react';
import { UserBlock } from '@app/space//components/blocks/user';
import { AddBlock } from '@app/space/components/add'; import { AddBlock } from '@app/space/components/add';
import { FeedBlock } from '@app/space/components/blocks/feed'; import { FeedBlock } from '@app/space/components/blocks/feed';
import { FollowingBlock } from '@app/space/components/blocks/following'; import { FollowingBlock } from '@app/space/components/blocks/following';
import { HashtagBlock } from '@app/space/components/blocks/hashtag'; import { HashtagBlock } from '@app/space/components/blocks/hashtag';
import { ImageBlock } from '@app/space/components/blocks/image'; import { ImageBlock } from '@app/space/components/blocks/image';
import { ThreadBlock } from '@app/space/components/blocks/thread'; import { ThreadBlock } from '@app/space/components/blocks/thread';
import { UserBlock } from '@app/space/components/blocks/user';
import { getBlocks } from '@libs/storage'; import { getBlocks } from '@libs/storage';

View File

@@ -57,7 +57,7 @@ export function Composer() {
}); });
const upload = useImageUploader(); const upload = useImageUploader();
const publish = usePublish(); const { publish } = usePublish();
const uploadImage = async (file?: string) => { const uploadImage = async (file?: string) => {
const image = await upload(file); const image = await upload(file);

View File

@@ -17,7 +17,6 @@ import { usePublish } from '@utils/hooks/usePublish';
export function EditProfileModal() { export function EditProfileModal() {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const publish = usePublish();
const [isOpen, setIsOpen] = useState(false); const [isOpen, setIsOpen] = useState(false);
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
@@ -25,6 +24,7 @@ export function EditProfileModal() {
const [banner, setBanner] = useState(''); const [banner, setBanner] = useState('');
const [nip05, setNIP05] = useState({ verified: false, text: '' }); const [nip05, setNIP05] = useState({ verified: false, text: '' });
const { publish } = usePublish();
const { account } = useAccount(); const { account } = useAccount();
const { const {
register, register,

View File

@@ -28,7 +28,7 @@ export function NoteActions({
<NoteReply id={id} pubkey={pubkey} /> <NoteReply id={id} pubkey={pubkey} />
<NoteReaction id={id} pubkey={pubkey} /> <NoteReaction id={id} pubkey={pubkey} />
<NoteRepost id={id} pubkey={pubkey} /> <NoteRepost id={id} pubkey={pubkey} />
<NoteZap /> <NoteZap id={id} />
</div> </div>
{!noOpenThread && ( {!noOpenThread && (
<> <>

View File

@@ -32,7 +32,7 @@ export function NoteReaction({ id, pubkey }: { id: string; pubkey: string }) {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const [reaction, setReaction] = useState<string | null>(null); const [reaction, setReaction] = useState<string | null>(null);
const publish = usePublish(); const { publish } = usePublish();
const getReactionImage = (content: string) => { const getReactionImage = (content: string) => {
const reaction: { img: string } = REACTIONS.find((el) => el.content === content); const reaction: { img: string } = REACTIONS.find((el) => el.content === content);

View File

@@ -7,7 +7,7 @@ import { FULL_RELAYS } from '@stores/constants';
import { usePublish } from '@utils/hooks/usePublish'; import { usePublish } from '@utils/hooks/usePublish';
export function NoteRepost({ id, pubkey }: { id: string; pubkey: string }) { export function NoteRepost({ id, pubkey }: { id: string; pubkey: string }) {
const publish = usePublish(); const { publish } = usePublish();
const submit = async () => { const submit = async () => {
const tags = [ const tags = [

View File

@@ -1,13 +1,26 @@
import { NostrEvent } from '@nostr-dev-kit/ndk';
import * as Tooltip from '@radix-ui/react-tooltip'; import * as Tooltip from '@radix-ui/react-tooltip';
import { ZapIcon } from '@shared/icons'; import { ZapIcon } from '@shared/icons';
export function NoteZap() { import { useEvent } from '@utils/hooks/useEvent';
import { usePublish } from '@utils/hooks/usePublish';
export function NoteZap({ id }: { id: string }) {
const { createZap } = usePublish();
const { data: event } = useEvent(id);
const submit = async () => {
const res = await createZap(event as NostrEvent, 21000);
console.log(res);
};
return ( return (
<Tooltip.Root delayDuration={150}> <Tooltip.Root delayDuration={150}>
<Tooltip.Trigger asChild> <Tooltip.Trigger asChild>
<button <button
type="button" type="button"
onClick={() => submit()}
className="group inline-flex h-7 w-7 items-center justify-center" className="group inline-flex h-7 w-7 items-center justify-center"
> >
<ZapIcon className="h-5 w-5 text-zinc-300 group-hover:text-orange-400" /> <ZapIcon className="h-5 w-5 text-zinc-300 group-hover:text-orange-400" />

View File

@@ -10,9 +10,9 @@ import { usePublish } from '@utils/hooks/usePublish';
import { displayNpub } from '@utils/shortenKey'; import { displayNpub } from '@utils/shortenKey';
export function NoteReplyForm({ id, pubkey }: { id: string; pubkey: string }) { export function NoteReplyForm({ id, pubkey }: { id: string; pubkey: string }) {
const publish = usePublish(); const { publish } = usePublish();
const { status, user } = useProfile(pubkey); const { status, user } = useProfile(pubkey);
const [value, setValue] = useState(''); const [value, setValue] = useState('');
const submit = () => { const submit = () => {

View File

@@ -4,16 +4,18 @@ import { useNDK } from '@libs/ndk/provider';
import { createNote, getNoteByID } from '@libs/storage'; import { createNote, getNoteByID } from '@libs/storage';
import { parser } from '@utils/parser'; import { parser } from '@utils/parser';
import { LumeEvent } from '@utils/types';
export function useEvent(id: string, fallback?: string) { export function useEvent(id: string, fallback?: string) {
const { ndk } = useNDK(); const { ndk } = useNDK();
const { status, data, error, isFetching } = useQuery(['note', id], async () => { const { status, data, error, isFetching } = useQuery(['note', id], async () => {
const result = await getNoteByID(id); const result = await getNoteByID(id);
if (result) { if (result) {
return result; return result as LumeEvent;
} else { } else {
if (fallback) { if (fallback) {
const embed = JSON.parse(fallback); const embed: LumeEvent = JSON.parse(fallback);
embed['event_id'] = embed.id;
await createNote( await createNote(
embed.id, embed.id,
embed.pubkey, embed.pubkey,
@@ -40,7 +42,7 @@ export function useEvent(id: string, fallback?: string) {
// @ts-ignore // @ts-ignore
event['content'] = parser(event); event['content'] = parser(event);
} }
return event; return event as LumeEvent;
} else { } else {
throw new Error('Event not found'); throw new Error('Event not found');
} }

View File

@@ -1,4 +1,5 @@
import { NDKEvent, NDKKind, NDKPrivateKeySigner } from '@nostr-dev-kit/ndk'; import { NDKEvent, NDKKind, NDKPrivateKeySigner, NostrEvent } from '@nostr-dev-kit/ndk';
import destr from 'destr';
import { useNDK } from '@libs/ndk/provider'; import { useNDK } from '@libs/ndk/provider';
@@ -38,5 +39,17 @@ export function usePublish() {
return event; return event;
}; };
return publish; const createZap = async (event: NostrEvent, amount: number) => {
if (!privkey) throw new Error('Private key not found');
if (typeof event.tags === 'string') event.tags = destr(event.tags);
const signer = new NDKPrivateKeySigner(privkey);
ndk.signer = signer;
const ndkEvent = new NDKEvent(ndk, event);
const res = await ndkEvent.zap(amount, 'test zap from lume');
return res;
};
return { publish, createZap };
} }

View File

@@ -10,8 +10,8 @@ import { nip02ToArray } from '@utils/transform';
export function useSocial() { export function useSocial() {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
const publish = usePublish();
const { publish } = usePublish();
const { fetcher, relayUrls } = useNDK(); const { fetcher, relayUrls } = useNDK();
const { account } = useAccount(); const { account } = useAccount();
const { status, data: userFollows } = useQuery( const { status, data: userFollows } = useQuery(