Fix note zapping state managment

This commit is contained in:
Bojan Mojsilovic 2024-04-19 18:09:47 +02:00
parent de0cdd6c09
commit 15a0b3d3f1
2 changed files with 32 additions and 23 deletions

View File

@ -1,5 +1,5 @@
import { A } from '@solidjs/router';
import { batch, Component, createMemo, For, Match, Show, Switch } from 'solid-js';
import { batch, Component, createEffect, createMemo, For, Match, Show, Switch } from 'solid-js';
import { PrimalNote, ZapOption } from '../../types/primal';
import ParsedNote from '../ParsedNote/ParsedNote';
import NoteFooter from './NoteFooter/NoteFooter';
@ -82,7 +82,7 @@ const Note: Component<{
app?.actions.closeCustomZapModal();
batch(() => {
updateFooterState('zappedAmount', () => zapOption.amount || 0);
updateFooterState('zappedNow', () => true);
// updateFooterState('zappedNow', () => true);
updateFooterState('zapped', () => true);
updateFooterState('showZapAnim', () => true)
});
@ -91,8 +91,10 @@ const Note: Component<{
const onSuccessZap = (zapOption: ZapOption) => {
app?.actions.closeCustomZapModal();
batch(() => {
updateFooterState('zapCount', (z) => z + 1);
// updateFooterState('satsZapped', (z) => z + (zapOption.amount || 0));
updateFooterState('isZapping', () => false);
updateFooterState('zappedNow', () => false);
// updateFooterState('zappedNow', () => false);
updateFooterState('showZapAnim', () => false);
updateFooterState('hideZapIcon', () => false);
updateFooterState('zapped', () => true);
@ -103,8 +105,9 @@ const Note: Component<{
app?.actions.closeCustomZapModal();
batch(() => {
updateFooterState('zappedAmount', () => -(zapOption.amount || 0));
updateFooterState('satsZapped', (z) => z - (zapOption.amount || 0));
updateFooterState('isZapping', () => false);
updateFooterState('zappedNow', () => true);
// updateFooterState('zappedNow', () => true);
updateFooterState('showZapAnim', () => false);
updateFooterState('hideZapIcon', () => false);
updateFooterState('zapped', () => props.note.post.noteActions.zapped);
@ -115,8 +118,9 @@ const Note: Component<{
app?.actions.closeCustomZapModal();
batch(() => {
updateFooterState('zappedAmount', () => -(zapOption.amount || 0));
updateFooterState('satsZapped', (z) => z - (zapOption.amount || 0));
updateFooterState('isZapping', () => false);
updateFooterState('zappedNow', () => true);
// updateFooterState('zappedNow', () => true);
updateFooterState('showZapAnim', () => false);
updateFooterState('hideZapIcon', () => false);
updateFooterState('zapped', () => props.note.post.noteActions.zapped);
@ -153,9 +157,9 @@ const Note: Component<{
}
const reactionSum = () => {
const { likes, zaps, reposts } = props.note.post;
const { likes, zapCount, reposts } = footerState;
return (likes || 0) + (zaps || 0) + (reposts || 0);
return (likes || 0) + (zapCount || 0) + (reposts || 0);
};
const firstZap = createMemo(() => (threadContext?.topZaps[props.note.post.id] || [])[0]);

View File

@ -234,6 +234,7 @@ const NoteFooter: Component<{
batch(() => {
props.updateState('showZapAnim', () => false);
props.updateState('hideZapIcon', () => false);
props.updateState('zapped', () => true);
});
medZapAnimation?.removeEventListener('complete', onAnimDone);
}
@ -258,24 +259,39 @@ const NoteFooter: Component<{
return;
}
const amount = settings?.defaultZap.amount || 10;
const message = settings?.defaultZap.message || '';
const emoji = settings?.defaultZap.emoji;
batch(() => {
props.updateState('zappedAmount', () => settings?.defaultZap.amount || 0);
props.updateState('zappedNow', () => true);
props.updateState('isZapping', () => true);
props.updateState('showZapAnim', () => true);
props.updateState('satsZapped', (z) => z + amount);
});
const success = await zapNote(props.note, account.publicKey, settings?.defaultZap.amount || 10, settings?.defaultZap.message || '', account.relays);
const success = await zapNote(props.note, account.publicKey, amount, message, account.relays);
props.updateState('isZapping', () => false);
if (success) {
props.customZapInfo.onSuccess({
emoji,
amount,
message,
});
return;
}
batch(() => {
props.updateState('zappedAmount', () => -(settings?.defaultZap.amount || 0));
props.updateState('zappedNow', () => true);
props.updateState('zappedAmount', () => -amount);
props.updateState('zapped', () => props.note.post.noteActions.zapped);
});
props.customZapInfo.onFail({
emoji,
amount,
message,
});
}
const buttonTypeClasses: Record<string, string> = {
@ -285,17 +301,6 @@ const NoteFooter: Component<{
repost: styles.repostType,
};
createEffect(() => {
if (props.state.zappedNow) {
batch(() => {
props.updateState('zapCount', (z) => z + 1);
props.updateState('satsZapped', (z) => z + props.state.zappedAmount);
props.updateState('zapped', () => true);
});
props.updateState('zappedNow', () => false);
}
});
createEffect(() => {
if (props.state.showZapAnim) {
animateZap();