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,40 +93,51 @@ 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(
account.publicKey, note,
selectedValue().amount || 0, account.publicKey,
comment(), selectedValue().amount || 0,
account.relays, comment(),
); 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,
); );
}
if (success) { handleZap(success);
props.onSuccess(selectedValue());
return; return;
} }
toast?.sendWarning(
intl.formatMessage(toastZapFail),
);
props.onFail(selectedValue())
} }
}; };
const handleZap = (success = false) => {
if (success) {
props.onSuccess(selectedValue());
return;
}
toast?.sendWarning(
intl.formatMessage(toastZapFail),
);
props.onFail(selectedValue());
};
return ( return (
<Modal open={props.open} onClose={() => props.onCancel({ amount: 0, message: '' })}> <Modal open={props.open} onClose={() => props.onCancel({ amount: 0, message: '' })}>
<div id={props.id} class={styles.customZap}> <div id={props.id} class={styles.customZap}>

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,29 +271,33 @@ const NoteFooter: Component<{
props.updateState('satsZapped', (z) => z + amount); props.updateState('satsZapped', (z) => z + amount);
}); });
const success = await zapNote(props.note, account.publicKey, amount, message, account.relays);
props.updateState('isZapping', () => false); setTimeout(async () => {
const success = await zapNote(props.note, account.publicKey, amount, message, account.relays);
if (success) { props.updateState('isZapping', () => false);
props.customZapInfo.onSuccess({
if (success) {
props.customZapInfo.onSuccess({
emoji,
amount,
message,
});
return;
}
batch(() => {
props.updateState('zappedAmount', () => -amount);
props.updateState('zapped', () => props.note.post.noteActions.zapped);
});
props.customZapInfo.onFail({
emoji, emoji,
amount, amount,
message, message,
}); });
return; }, lottieDuration());
}
batch(() => {
props.updateState('zappedAmount', () => -amount);
props.updateState('zapped', () => props.note.post.noteActions.zapped);
});
props.customZapInfo.onFail({
emoji,
amount,
message,
});
} }
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();
}, },
}); });