2026-01-13 01:14:26 +01:00

270 lines
8.4 KiB
TypeScript

import type { ActionReturnType } from '../../types';
import { formatCurrencyAsString } from '../../../util/formatCurrency';
import * as langProvider from '../../../util/oldLangProvider';
import { getPeerTitle } from '../../helpers/peers';
import { addActionHandler, getGlobal, setGlobal } from '../../index';
import {
removeGiftInfoOriginalDetails,
updateGiftAuctionState,
updateGiftAuctionUserState,
updateStarsBalance,
} from '../../reducers';
import { updateTabState } from '../../reducers/tabs';
import { selectPeer, selectTabState } from '../../selectors';
addActionHandler('apiUpdate', (global, actions, update): ActionReturnType => {
switch (update['@type']) {
case 'updatePaymentStateCompleted': {
const { paymentState, tabId } = update;
const form = paymentState.form!;
const { invoice } = form;
const { totalAmount, currency } = invoice;
const inputInvoice = paymentState.inputInvoice;
if (inputInvoice?.type === 'stars') {
actions.closeStarsBalanceModal({ tabId });
actions.showNotification({
message: langProvider.oldTranslate('StarsAcquiredInfo', inputInvoice.stars),
title: langProvider.oldTranslate('StarsAcquired'),
icon: 'star',
tabId,
});
actions.requestConfetti({ withStars: true, tabId });
} else if (inputInvoice?.type === 'giftcode') {
const giftModalState = selectTabState(global, tabId).giftModal;
if (giftModalState && inputInvoice?.userIds[0] === giftModalState.forPeerId) {
actions.showNotification({
message: {
key: 'GiftSent',
},
tabId,
});
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftModal({ tabId });
}
} else {
actions.showNotification({
tabId,
message: langProvider.oldTranslate('PaymentInfoHint', [
formatCurrencyAsString(totalAmount, currency, langProvider.getTranslationFn().code),
form.title,
]),
});
}
setGlobal(global);
break;
}
case 'updateStarPaymentStateCompleted': {
const { paymentState, tabId } = update;
const { inputInvoice, subscriptionInfo, form } = paymentState;
if (inputInvoice?.type === 'chatInviteSubscription' && subscriptionInfo) {
const amount = subscriptionInfo.subscriptionPricing!.amount;
actions.showNotification({
tabId,
title: langProvider.oldTranslate('StarsSubscriptionCompleted'),
message: langProvider.oldTranslate('StarsSubscriptionCompletedText', [
amount,
subscriptionInfo.title,
], undefined, amount),
icon: 'star',
});
}
if (form?.invoice.subscriptionPeriod) {
const amount = form.invoice.totalAmount;
actions.showNotification({
tabId,
title: langProvider.oldTranslate('StarsSubscriptionCompleted'),
message: langProvider.oldTranslate('StarsSubscriptionCompletedText', [
amount,
form.title,
], undefined, amount),
icon: 'star',
});
}
if (inputInvoice?.type === 'giftcode') {
if (!inputInvoice.userIds) {
return;
}
const giftModalState = selectTabState(global, tabId).giftModal;
if (giftModalState && inputInvoice.userIds[0] === giftModalState.forPeerId) {
actions.showNotification({
message: {
key: 'StarsGiftCompleted',
},
tabId,
});
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftModal({ tabId });
}
}
if (inputInvoice?.type === 'premiumGiftStars') {
const giftModalState = selectTabState(global, tabId).giftModal;
if (giftModalState && inputInvoice.userId === giftModalState.forPeerId) {
actions.showNotification({
message: {
key: 'StarsGiftCompleted',
},
tabId,
});
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftModal({ tabId });
}
}
if (inputInvoice?.type === 'starsgift') {
if (!inputInvoice.userId) {
return;
}
const starsModalState = selectTabState(global, tabId).starsGiftModal;
if (starsModalState?.isOpen && inputInvoice.userId === starsModalState.forUserId) {
global = updateTabState(global, {
starsGiftModal: {
...starsModalState,
isCompleted: true,
},
}, tabId);
}
}
if (inputInvoice?.type === 'stargift') {
if (!inputInvoice.peerId) {
return;
}
const starGiftModalState = selectTabState(global, tabId).giftModal;
if (starGiftModalState && inputInvoice.peerId === starGiftModalState.forPeerId) {
actions.showNotification({
message: {
key: 'StarsGiftCompleted',
},
tabId,
});
actions.reloadPeerSavedGifts({ peerId: starGiftModalState.forPeerId });
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftModal({ tabId });
}
}
if (inputInvoice?.type === 'stargiftResale') {
const starGiftModalState = selectTabState(global, tabId).giftInfoModal;
if (starGiftModalState) {
actions.showNotification({
message: {
key: 'StarsGiftBought',
},
tabId,
});
if (starGiftModalState.peerId) {
actions.reloadPeerSavedGifts({ peerId: starGiftModalState.peerId });
}
actions.reloadPeerSavedGifts({ peerId: inputInvoice.peerId });
actions.requestConfetti({ withStars: true, tabId });
actions.closeGiftInfoModal({ tabId });
}
}
if (inputInvoice?.type === 'stargiftUpgrade' && global.currentUserId) {
actions.reloadPeerSavedGifts({ peerId: global.currentUserId });
}
if (inputInvoice?.type === 'stargiftDropOriginalDetails') {
global = getGlobal();
global = removeGiftInfoOriginalDetails(global, tabId);
setGlobal(global);
actions.closeGiftDescriptionRemoveModal({ tabId });
actions.showNotification({
message: { key: 'RemoveGiftDescriptionSuccessMessage' },
tabId,
});
if (global.currentUserId) {
actions.reloadPeerSavedGifts({ peerId: global.currentUserId });
}
}
if (inputInvoice?.type === 'stargiftPrepaidUpgrade') {
actions.reloadPeerSavedGifts({ peerId: inputInvoice.peerId });
const lang = langProvider.getTranslationFn();
const peer = selectPeer(global, inputInvoice.peerId);
const peerTitle = peer ? getPeerTitle(lang, peer) : undefined;
actions.showNotification({
icon: 'gift',
title: { key: 'GiftUpgradeSentTitle' },
message: {
key: 'GiftUpgradeSentMessage',
variables: { user: peerTitle },
},
tabId,
});
}
if (inputInvoice?.type === 'stargiftAuctionBid') {
const giftAuction = global.giftAuctionByGiftId?.[inputInvoice.giftId];
const giftsPerRound = giftAuction?.gift.giftsPerRound;
actions.showNotification({
icon: 'auction-filled',
title: {
key: inputInvoice.isUpdateBid ? 'GiftAuctionBidIncreasedTitle' : 'GiftAuctionBidPlacedTitle',
},
message: {
key: 'GiftAuctionBidPlacedMessage',
variables: { count: giftsPerRound },
},
tabId,
});
if (giftAuction) {
actions.loadGiftAuction({ giftId: inputInvoice.giftId });
}
}
break;
}
case 'updateStarsBalance': {
global = updateStarsBalance(global, update.balance);
setGlobal(global);
actions.loadStarStatus();
break;
}
case 'updateStarGiftAuctionState': {
const { giftId, state } = update;
global = updateGiftAuctionState(global, giftId, state);
setGlobal(global);
break;
}
case 'updateStarGiftAuctionUserState': {
const { giftId, userState } = update;
global = updateGiftAuctionUserState(global, giftId, userState);
setGlobal(global);
break;
}
}
});