Delay zapping after the animation has completed

This commit is contained in:
Bojan Mojsilovic 2024-04-22 15:41:19 +02:00
parent 37a522ecbe
commit ec0bd99d84
3 changed files with 57 additions and 36 deletions

View File

@ -11,6 +11,7 @@ import { PrimalNote, PrimalUser, ZapOption } from '../../types/primal';
import { debounce } from '../../utils'; import { debounce } from '../../utils';
import ButtonPrimary from '../Buttons/ButtonPrimary'; import ButtonPrimary from '../Buttons/ButtonPrimary';
import Modal from '../Modal/Modal'; import Modal from '../Modal/Modal';
import { lottieDuration } from '../Note/NoteFooter/NoteFooter';
import TextInput from '../TextInput/TextInput'; import TextInput from '../TextInput/TextInput';
import { useToastContext } from '../Toaster/Toaster'; import { useToastContext } from '../Toaster/Toaster';
@ -92,27 +93,39 @@ const CustomZap: Component<{
if (account?.hasPublicKey()) { if (account?.hasPublicKey()) {
props.onConfirm(selectedValue()); props.onConfirm(selectedValue());
let success = false; const note = props.note;
if (props.note) { if (note) {
success = await zapNote( setTimeout(async () => {
props.note, const success = await zapNote(
note,
account.publicKey, account.publicKey,
selectedValue().amount || 0, selectedValue().amount || 0,
comment(), comment(),
account.relays, account.relays,
); );
handleZap(success);
}, lottieDuration());
return;
} }
else if (props.profile) {
success = await zapProfile( if (props.profile) {
const success = await zapProfile(
props.profile, props.profile,
account.publicKey, account.publicKey,
selectedValue().amount || 0, selectedValue().amount || 0,
comment(), comment(),
account.relays, account.relays,
); );
}
handleZap(success);
return;
}
}
};
const handleZap = (success = false) => {
if (success) { if (success) {
props.onSuccess(selectedValue()); props.onSuccess(selectedValue());
return; return;
@ -122,8 +135,7 @@ const CustomZap: Component<{
intl.formatMessage(toastZapFail), intl.formatMessage(toastZapFail),
); );
props.onFail(selectedValue()) props.onFail(selectedValue());
}
}; };
return ( return (

View File

@ -23,6 +23,8 @@ import { NoteFooterState } from '../Note';
import { SetStoreFunction } from 'solid-js/store'; import { SetStoreFunction } from 'solid-js/store';
import BookmarkNote from '../../BookmarkNote/BookmarkNote'; import BookmarkNote from '../../BookmarkNote/BookmarkNote';
export const lottieDuration = () => zapMD.op * 1_000 / zapMD.fr;
const NoteFooter: Component<{ const NoteFooter: Component<{
note: PrimalNote, note: PrimalNote,
wide?: boolean, wide?: boolean,
@ -269,6 +271,8 @@ const NoteFooter: Component<{
props.updateState('satsZapped', (z) => z + amount); props.updateState('satsZapped', (z) => z + amount);
}); });
setTimeout(async () => {
const success = await zapNote(props.note, account.publicKey, amount, message, account.relays); const success = await zapNote(props.note, account.publicKey, amount, message, account.relays);
props.updateState('isZapping', () => false); props.updateState('isZapping', () => false);
@ -292,6 +296,8 @@ const NoteFooter: Component<{
amount, amount,
message, message,
}); });
}, lottieDuration());
} }
const buttonTypeClasses: Record<string, string> = { const buttonTypeClasses: Record<string, string> = {

View File

@ -488,15 +488,18 @@ const Profile: Component = () => {
}, },
onSuccess: (zapOption: ZapOption) => { onSuccess: (zapOption: ZapOption) => {
app?.actions.closeCustomZapModal(); app?.actions.closeCustomZapModal();
app?.actions.resetCustomZap();
toaster?.sendSuccess(intl.formatMessage(toastZapProfile, { toaster?.sendSuccess(intl.formatMessage(toastZapProfile, {
name: authorName(profile?.userProfile) name: authorName(profile?.userProfile)
})) }))
}, },
onFail: (zapOption: ZapOption) => { onFail: (zapOption: ZapOption) => {
app?.actions.closeCustomZapModal(); app?.actions.closeCustomZapModal();
app?.actions.resetCustomZap();
}, },
onCancel: (zapOption: ZapOption) => { onCancel: (zapOption: ZapOption) => {
app?.actions.closeCustomZapModal(); app?.actions.closeCustomZapModal();
app?.actions.resetCustomZap();
}, },
}); });