From f1a82ff0795148ec640265753ef70d2df1652991 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Tue, 27 Dec 2022 02:46:07 +0100 Subject: [PATCH] Sticker Sets: Reorder sets after sending (#2223) --- src/api/gramjs/methods/messages.ts | 3 +++ src/api/gramjs/updater.ts | 20 ++++++++++++++----- src/api/types/updates.ts | 8 +++++++- src/components/common/StickerSetModal.tsx | 15 ++++++++------ src/components/middle/composer/Composer.tsx | 9 +++++++-- .../middle/composer/StickerPicker.tsx | 6 ++++-- src/components/middle/composer/SymbolMenu.tsx | 12 ++++++++--- src/global/actions/apiUpdaters/misc.ts | 8 ++++++++ src/global/actions/ui/misc.ts | 10 ++++++++-- 9 files changed, 70 insertions(+), 21 deletions(-) diff --git a/src/api/gramjs/methods/messages.ts b/src/api/gramjs/methods/messages.ts index 62c938e07..0089b1e05 100644 --- a/src/api/gramjs/methods/messages.ts +++ b/src/api/gramjs/methods/messages.ts @@ -217,6 +217,7 @@ export function sendMessage( noWebPage, sendAs, serverTimeOffset, + shouldUpdateStickerSetsOrder, }: { chat: ApiChat; text?: string; @@ -234,6 +235,7 @@ export function sendMessage( noWebPage?: boolean; sendAs?: ApiUser | ApiChat; serverTimeOffset?: number; + shouldUpdateStickerSetsOrder?: boolean; }, onProgress?: ApiOnProgress, ) { @@ -329,6 +331,7 @@ export function sendMessage( ...(media && { media }), ...(noWebPage && { noWebpage: noWebPage }), ...(sendAs && { sendAs: buildInputPeer(sendAs.id, sendAs.accessHash) }), + ...(shouldUpdateStickerSetsOrder && { updateStickersetsOrder: shouldUpdateStickerSetsOrder }), }), true); })(); diff --git a/src/api/gramjs/updater.ts b/src/api/gramjs/updater.ts index ad0463644..15bd11e6d 100644 --- a/src/api/gramjs/updater.ts +++ b/src/api/gramjs/updater.ts @@ -915,14 +915,24 @@ export function updater(update: Update, originRequest?: GramJs.AnyRequest) { onUpdate({ '@type': 'updateFavoriteStickers' }); } else if (update instanceof GramJs.UpdateRecentStickers) { onUpdate({ '@type': 'updateRecentStickers' }); + } else if (update instanceof GramJs.UpdateMoveStickerSetToTop) { + if (!update.masks) { + onUpdate({ + '@type': 'updateMoveStickerSetToTop', + isCustomEmoji: update.emojis, + id: update.stickerset.toString(), + }); + } } else if (update instanceof GramJs.UpdateStickerSets) { onUpdate({ '@type': 'updateStickerSets' }); } else if (update instanceof GramJs.UpdateStickerSetsOrder) { - onUpdate({ - '@type': 'updateStickerSetsOrder', - order: update.order.map((n) => n.toString()), - isCustomEmoji: update.emojis, - }); + if (!update.masks) { + onUpdate({ + '@type': 'updateStickerSetsOrder', + order: update.order.map((n) => n.toString()), + isCustomEmoji: update.emojis, + }); + } } else if (update instanceof GramJs.UpdateNewStickerSet) { if (update.stickerset instanceof GramJs.messages.StickerSet) { const stickerSet = buildStickerSet(update.stickerset.set); diff --git a/src/api/types/updates.ts b/src/api/types/updates.ts index 56eda6ebe..eebc417c8 100644 --- a/src/api/types/updates.ts +++ b/src/api/types/updates.ts @@ -391,6 +391,12 @@ export type ApiUpdateRecentStickers = { '@type': 'updateRecentStickers'; }; +export type ApiUpdateMoveStickerSetToTop = { + '@type': 'updateMoveStickerSetToTop'; + isCustomEmoji?: boolean; + id: string; +}; + export type ApiUpdateStickerSets = { '@type': 'updateStickerSets'; }; @@ -570,7 +576,7 @@ export type ApiUpdate = ( ApiUpdateAvatar | ApiUpdateMessageImage | ApiUpdateDraftMessage | ApiUpdateError | ApiUpdateResetContacts | ApiUpdateStartEmojiInteraction | ApiUpdateFavoriteStickers | ApiUpdateStickerSet | ApiUpdateStickerSets | ApiUpdateStickerSetsOrder | - ApiUpdateRecentStickers | ApiUpdateSavedGifs | ApiUpdateNewScheduledMessage | + ApiUpdateRecentStickers | ApiUpdateSavedGifs | ApiUpdateNewScheduledMessage | ApiUpdateMoveStickerSetToTop | ApiUpdateScheduledMessageSendSucceeded | ApiUpdateScheduledMessage | ApiUpdateDeleteScheduledMessages | ApiUpdateResetMessages | ApiUpdateTwoFaError | ApiUpdateTwoFaStateWaitCode | ApiUpdateWebViewResultSent | diff --git a/src/components/common/StickerSetModal.tsx b/src/components/common/StickerSetModal.tsx index 104eec419..c785ff78f 100644 --- a/src/components/common/StickerSetModal.tsx +++ b/src/components/common/StickerSetModal.tsx @@ -79,8 +79,9 @@ const StickerSetModal: FC = ({ const prevStickerSet = usePrevious(stickerSet); const renderingStickerSet = stickerSet || prevStickerSet; + const isAdded = renderingStickerSet?.installedDate; const isEmoji = renderingStickerSet?.isEmoji; - const isButtonLocked = !renderingStickerSet?.installedDate && isSetPremium && !isCurrentUserPremium; + const isButtonLocked = !isAdded && isSetPremium && !isCurrentUserPremium; const [requestCalendar, calendar] = useSchedule(canScheduleUntilOnline); @@ -104,14 +105,16 @@ const StickerSetModal: FC = ({ if (shouldSchedule || isScheduleRequested) { requestCalendar((scheduledAt) => { - sendMessage({ sticker, isSilent, scheduledAt }); + sendMessage({ + sticker, isSilent, scheduledAt, + }); onClose(); }); } else { - sendMessage({ sticker, isSilent }); + sendMessage({ sticker, isSilent, shouldUpdateStickerSetsOrder: isAdded }); onClose(); } - }, [onClose, requestCalendar, sendMessage, shouldSchedule]); + }, [onClose, requestCalendar, sendMessage, shouldSchedule, isAdded]); const handleButtonClick = useCallback(() => { if (renderingStickerSet) { @@ -133,7 +136,7 @@ const StickerSetModal: FC = ({ const suffix = isEmoji ? 'Emoji' : 'Sticker'; return lang( - renderingStickerSet.installedDate ? `StickerPack.Remove${suffix}Count` : `StickerPack.Add${suffix}Count`, + isAdded ? `StickerPack.Remove${suffix}Count` : `StickerPack.Add${suffix}Count`, renderingStickerSet.count, 'i', ); @@ -171,7 +174,7 @@ const StickerSetModal: FC = ({