From d2b861713395921e5b4f9769363ddfa7b5877fb0 Mon Sep 17 00:00:00 2001 From: zubiden <19638254+zubiden@users.noreply.github.com> Date: Thu, 6 Nov 2025 11:36:53 +0100 Subject: [PATCH] UI: Fix RTL styles after reload on some components (#6442) --- src/assets/localization/fallback.strings | 2 +- src/components/common/Audio.tsx | 20 +++++++++------- src/components/common/AvatarList.tsx | 4 ++-- .../common/ChatForumLastMessage.tsx | 4 ++-- src/components/common/DeleteChatModal.tsx | 24 ++++++++++--------- src/components/common/DeleteMessageModal.tsx | 2 +- src/components/common/DotAnimation.tsx | 10 ++++---- src/components/common/File.tsx | 9 +++---- src/components/common/GroupChatInfo.tsx | 2 +- src/components/common/ManageUsernames.tsx | 24 ++++++++++--------- src/components/common/PremiumProgress.tsx | 5 ++-- .../common/PrivacySettingsNoticeModal.tsx | 24 +++++++++++-------- src/components/common/PrivateChatInfo.tsx | 13 +++++----- .../common/pickers/ChatOrUserPicker.tsx | 6 +++-- src/components/common/pickers/PickerItem.tsx | 4 ++-- src/components/left/main/Chat.scss | 4 ++++ src/components/left/main/LeftMainHeader.scss | 2 +- src/components/left/main/LeftMainHeader.tsx | 12 +++++----- .../left/settings/PrivacyMessages.tsx | 6 ++--- .../left/settings/SettingsPrivacy.tsx | 10 ++++---- .../settings/SettingsPrivacyVisibility.tsx | 6 ++--- src/components/main/NewContactModal.tsx | 2 +- .../main/premium/PremiumMainModal.tsx | 4 ++-- .../premium/PremiumSubscriptionOption.tsx | 4 +++- src/components/middle/MiddleColumn.tsx | 14 +++++------ src/components/middle/ReactorListModal.tsx | 4 ++-- .../middle/composer/AttachmentModal.tsx | 2 +- .../middle/composer/CustomSendMenu.tsx | 2 +- .../middle/composer/MessageInput.tsx | 4 +++- .../middle/message/CommentButton.tsx | 4 ++-- .../middle/message/MessageContextMenu.tsx | 4 ++-- src/components/middle/message/WebPage.tsx | 4 +--- .../modals/stars/StarsPaymentModal.tsx | 2 +- src/components/payment/Checkout.tsx | 2 +- src/components/payment/PaymentModal.tsx | 2 +- src/components/story/StoryRibbon.tsx | 4 ++-- src/components/story/StoryToggler.module.scss | 8 ++++++- src/components/story/StoryToggler.tsx | 6 ++--- src/components/ui/Checkbox.scss | 4 ++-- src/components/ui/Checkbox.tsx | 4 ++-- src/components/ui/InputText.tsx | 4 ++-- src/components/ui/ListItem.scss | 13 ++-------- src/components/ui/ListItem.tsx | 4 ++-- src/components/ui/MenuItem.tsx | 5 ++-- src/components/ui/Radio.tsx | 4 ++-- src/components/ui/RangeSlider.tsx | 4 ++-- src/components/ui/SearchInput.tsx | 2 +- src/components/ui/TabList.tsx | 8 +++---- src/types/language.d.ts | 1 + 49 files changed, 169 insertions(+), 149 deletions(-) diff --git a/src/assets/localization/fallback.strings b/src/assets/localization/fallback.strings index 8bab9584d..4e6abf16b 100644 --- a/src/assets/localization/fallback.strings +++ b/src/assets/localization/fallback.strings @@ -2314,4 +2314,4 @@ "UserNoteTitle" = "Notes"; "UserNoteHint" = "only visible to you"; "EditUserNoteHint" = "Notes are only visible to you."; - +"AriaStoryTogglerOpen" = "Open Story List"; diff --git a/src/components/common/Audio.tsx b/src/components/common/Audio.tsx index 8ba1d0d1f..73400d650 100644 --- a/src/components/common/Audio.tsx +++ b/src/components/common/Audio.tsx @@ -11,6 +11,7 @@ import type { import type { BufferedRange } from '../../hooks/useBuffering'; import type { OldLangFn } from '../../hooks/useOldLang'; import type { ThemeKey } from '../../types'; +import type { LangFn } from '../../util/localization'; import { ApiMediaFormat } from '../../api/types'; import { AudioOrigin } from '../../types'; @@ -38,6 +39,7 @@ import { MAX_EMPTY_WAVEFORM_POINTS, renderWaveform } from './helpers/waveform'; import useAppLayout from '../../hooks/useAppLayout'; import useAudioPlayer from '../../hooks/useAudioPlayer'; import useBuffering from '../../hooks/useBuffering'; +import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; import useMedia from '../../hooks/useMedia'; import useMediaWithLoadProgress from '../../hooks/useMediaWithLoadProgress'; @@ -133,8 +135,8 @@ const Audio = ({ const isVoice = Boolean(voice || video); const isSeeking = useRef(false); const seekerRef = useRef(); - const lang = useOldLang(); - const { isRtl } = lang; + const oldLang = useOldLang(); + const lang = useLang(); const { isMobile } = useAppLayout(); const [isActivated, setIsActivated] = useState(false); @@ -314,7 +316,7 @@ const Audio = ({ function renderSecondLine() { if (isVoice) { return ( -
+
{formatMediaDuration((voice || video)!.duration)}
); @@ -323,7 +325,7 @@ const Audio = ({ const { performer } = audio!; return ( -
+
{formatMediaDuration(duration)} {performer && {renderText(performer)}} @@ -364,14 +366,14 @@ const Audio = ({ className="date" onClick={handleDateClick} > - {formatPastTimeShort(lang, date * 1000)} + {formatPastTimeShort(oldLang, date * 1000)} )}
{withSeekline && ( -
+
{playProgress < 1 && formatMediaDuration(duration * playProgress, duration)} @@ -462,6 +464,7 @@ const Audio = ({ {origin === AudioOrigin.Search && renderWithTitle()} {origin !== AudioOrigin.Search && audio && renderAudio( lang, + oldLang, audio, duration, isPlaying, @@ -506,7 +509,8 @@ function getSeeklineSpikeAmounts(isMobile?: boolean, withAvatar?: boolean) { } function renderAudio( - lang: OldLangFn, + lang: LangFn, + oldLang: OldLangFn, audio: ApiAudio, duration: number, isPlaying: boolean, @@ -554,7 +558,7 @@ function renderAudio( <> - {formatMediaDateTime(lang, date * 1000, true)} + {formatMediaDateTime(oldLang, date * 1000, true)} )} diff --git a/src/components/common/AvatarList.tsx b/src/components/common/AvatarList.tsx index b7586be08..e1c8ead30 100644 --- a/src/components/common/AvatarList.tsx +++ b/src/components/common/AvatarList.tsx @@ -6,7 +6,7 @@ import type { AvatarSize } from './Avatar'; import buildClassName from '../../util/buildClassName'; -import useOldLang from '../../hooks/useOldLang'; +import useLang from '../../hooks/useLang'; import Avatar, { AVATAR_SIZES } from './Avatar'; @@ -29,7 +29,7 @@ const AvatarList: FC = ({ limit = DEFAULT_LIMIT, badgeText, }) => { - const lang = useOldLang(); + const lang = useLang(); const pxSize = typeof size === 'number' ? size : AVATAR_SIZES[size]; diff --git a/src/components/common/ChatForumLastMessage.tsx b/src/components/common/ChatForumLastMessage.tsx index 37122b4ee..496354d48 100644 --- a/src/components/common/ChatForumLastMessage.tsx +++ b/src/components/common/ChatForumLastMessage.tsx @@ -18,7 +18,7 @@ import renderText from './helpers/renderText'; import { getIsMobile } from '../../hooks/useAppLayout'; import { useFastClick } from '../../hooks/useFastClick'; -import useOldLang from '../../hooks/useOldLang'; +import useLang from '../../hooks/useLang'; import TopicIcon from './TopicIcon'; @@ -47,7 +47,7 @@ const ChatForumLastMessage = ({ const lastMessageRef = useRef(); const mainColumnRef = useRef(); - const lang = useOldLang(); + const lang = useLang(); const [lastActiveTopic, ...otherTopics] = useMemo(() => { if (!topics) { diff --git a/src/components/common/DeleteChatModal.tsx b/src/components/common/DeleteChatModal.tsx index 0ee811a42..531e98ce0 100644 --- a/src/components/common/DeleteChatModal.tsx +++ b/src/components/common/DeleteChatModal.tsx @@ -17,6 +17,7 @@ import { selectIsChatWithSelf, selectUser } from '../../global/selectors'; import { isUserId } from '../../util/entities/ids'; import renderText from './helpers/renderText'; +import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; import useOldLang from '../../hooks/useOldLang'; @@ -72,7 +73,8 @@ const DeleteChatModal: FC = ({ deleteChat, } = getActions(); - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); const chatTitle = getChatTitle(lang, chat); const handleDeleteForAll = useLastCallback(() => { @@ -129,7 +131,7 @@ const DeleteChatModal: FC = ({ peer={chat} isSavedMessages={isChatWithSelf} /> -

{lang(renderTitle())}

+

{oldLang(renderTitle())}

); } @@ -159,7 +161,7 @@ const DeleteChatModal: FC = ({ return (

{renderText( - isChatWithSelf ? lang('ClearHistoryMyNotesMessage') : lang('ClearHistoryMessageSingle', chatTitle), + isChatWithSelf ? oldLang('ClearHistoryMyNotesMessage') : oldLang('ClearHistoryMessageSingle', chatTitle), ['simple_markdown', 'emoji'], )}

@@ -168,16 +170,16 @@ const DeleteChatModal: FC = ({ if (isChannel && chat.isCreator) { return (

- {renderText(lang('ChatList.DeleteAndLeaveGroupConfirmation', chatTitle), ['simple_markdown', 'emoji'])} + {renderText(oldLang('ChatList.DeleteAndLeaveGroupConfirmation', chatTitle), ['simple_markdown', 'emoji'])}

); } if ((isChannel && !chat.isCreator) || isBasicGroup || isSuperGroup) { - return

{renderText(lang('ChannelLeaveAlertWithName', chatTitle), ['simple_markdown', 'emoji'])}

; + return

{renderText(oldLang('ChannelLeaveAlertWithName', chatTitle), ['simple_markdown', 'emoji'])}

; } - return

{renderText(lang('ChatList.DeleteChatConfirmation', contactName), ['simple_markdown', 'emoji'])}

; + return

{renderText(oldLang('ChatList.DeleteChatConfirmation', contactName), ['simple_markdown', 'emoji'])}

; } function renderActionText() { @@ -211,17 +213,17 @@ const DeleteChatModal: FC = ({
{isBot && !isSavedDialog && ( )} {canDeleteForAll && ( )} {!isPrivateChat && chat.isCreator && !isSavedDialog && ( )} - +
); diff --git a/src/components/common/DeleteMessageModal.tsx b/src/components/common/DeleteMessageModal.tsx index 514a9661b..f576d1266 100644 --- a/src/components/common/DeleteMessageModal.tsx +++ b/src/components/common/DeleteMessageModal.tsx @@ -357,7 +357,7 @@ const DeleteMessageModal: FC = ({ return (
{shouldShowOption && ( = ({ content, className }) => { - const lang = useOldLang(); +const DotAnimation = ({ content, className }: OwnProps) => { + const lang = useLang(); return ( {renderText(content)} @@ -22,4 +22,4 @@ const DotAnimation: FC = ({ content, className }) => { ); }; -export default DotAnimation; +export default memo(DotAnimation); diff --git a/src/components/common/File.tsx b/src/components/common/File.tsx index 7a39e1755..71e40c2e5 100644 --- a/src/components/common/File.tsx +++ b/src/components/common/File.tsx @@ -1,5 +1,4 @@ import type { ElementRef, FC } from '../../lib/teact/teact'; -import type React from '../../lib/teact/teact'; import { memo, useMemo, useRef, useState, } from '../../lib/teact/teact'; @@ -15,6 +14,7 @@ import renderText from './helpers/renderText'; import useAppLayout from '../../hooks/useAppLayout'; import useCanvasBlur from '../../hooks/useCanvasBlur'; +import useLang from '../../hooks/useLang'; import useMediaTransitionDeprecated from '../../hooks/useMediaTransitionDeprecated'; import useOldLang from '../../hooks/useOldLang'; import useShowTransitionDeprecated from '../../hooks/useShowTransitionDeprecated'; @@ -68,7 +68,8 @@ const File: FC = ({ onClick, onDateClick, }) => { - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); let elementRef = useRef(); if (ref) { elementRef = ref; @@ -160,13 +161,13 @@ const File: FC = ({ {!sender && Boolean(timestamp) && ( <> - {formatMediaDateTime(lang, timestamp * 1000, true)} + {formatMediaDateTime(oldLang, timestamp * 1000, true)} )}
{sender && Boolean(timestamp) && ( - {formatPastTimeShort(lang, timestamp * 1000)} + {formatPastTimeShort(oldLang, timestamp * 1000)} )}
); diff --git a/src/components/common/GroupChatInfo.tsx b/src/components/common/GroupChatInfo.tsx index eb7b510a1..636c63341 100644 --- a/src/components/common/GroupChatInfo.tsx +++ b/src/components/common/GroupChatInfo.tsx @@ -233,7 +233,7 @@ const GroupChatInfo: FC = ({ className={ buildClassName('ChatInfo', className) } - dir={!noRtl && oldLang.isRtl ? 'rtl' : undefined} + dir={!noRtl && lang.isRtl ? 'rtl' : undefined} onClick={onClick} > {!noAvatar && !isTopic && ( diff --git a/src/components/common/ManageUsernames.tsx b/src/components/common/ManageUsernames.tsx index e835b88db..fdaa900f8 100644 --- a/src/components/common/ManageUsernames.tsx +++ b/src/components/common/ManageUsernames.tsx @@ -10,6 +10,7 @@ import buildClassName from '../../util/buildClassName'; import { copyTextToClipboard } from '../../util/clipboard'; import { isBetween } from '../../util/math'; +import useLang from '../../hooks/useLang'; import useOldLang from '../../hooks/useOldLang'; import usePreviousDeprecated from '../../hooks/usePreviousDeprecated'; @@ -45,7 +46,8 @@ const ManageUsernames: FC = ({ sortUsernames, sortChatUsernames, } = getActions(); - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); const [usernameForConfirm, setUsernameForConfirm] = useState(); const usernameList = useMemo(() => usernames.map(({ username }) => username), [usernames]); @@ -71,9 +73,9 @@ const ManageUsernames: FC = ({ const handleCopyUsername = useCallback((value: string) => { copyTextToClipboard(`@${value}`); showNotification({ - message: lang('UsernameCopied'), + message: oldLang('UsernameCopied'), }); - }, [lang, showNotification]); + }, [oldLang, showNotification]); const handleUsernameClick = useCallback((data: ApiUsername) => { if (data.isEditable) { @@ -147,7 +149,7 @@ const ManageUsernames: FC = ({ <>

- {lang('lng_usernames_subtitle')} + {oldLang('lng_usernames_subtitle')}

{usernames.map((usernameData, i) => { @@ -165,7 +167,7 @@ const ManageUsernames: FC = ({ onDrag={handleDrag} onDragEnd={handleDragEnd} style={`top: ${isDragged ? draggedTop : top}px;`} - knobStyle={`${lang.isRtl ? 'left' : 'right'}: 3rem;`} + knobStyle="inset-inline-end: 3rem;" isDisabled={!usernameData.isActive} > = ({ handler: () => { handleCopyUsername(usernameData.username); }, - title: lang('Copy'), + title: oldLang('Copy'), icon: 'copy', }, ]} @@ -193,22 +195,22 @@ const ManageUsernames: FC = ({ @ {usernameData.username} - {lang(subtitle)} + {oldLang(subtitle)} ); })}

- {lang('lng_usernames_description')} + {oldLang('lng_usernames_description')}

= ({ animationDirection = 'none', className, }) => { - const lang = useOldLang(); const floatingBadgeContentRef = useRef(); const parentContainerRef = useRef(); @@ -72,6 +71,8 @@ const PremiumProgress: FC = ({ const prevRightText = usePrevious(rightText); const prevIsNegative = usePrevious(isNegative); + const lang = useLang(); + const BEAK_WIDTH_PX = 28; const PROGRESS_BORDER_RADIUS_PX = REM; const CORNER_BEAK_THRESHOLD = BEAK_WIDTH_PX / 2 + PROGRESS_BORDER_RADIUS_PX; diff --git a/src/components/common/PrivacySettingsNoticeModal.tsx b/src/components/common/PrivacySettingsNoticeModal.tsx index a3b86babf..15e9cb868 100644 --- a/src/components/common/PrivacySettingsNoticeModal.tsx +++ b/src/components/common/PrivacySettingsNoticeModal.tsx @@ -9,6 +9,7 @@ import { selectTabState, selectUser } from '../../global/selectors'; import { LOCAL_TGS_URLS } from './helpers/animatedAssets'; import renderText from './helpers/renderText'; +import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; import useOldLang from '../../hooks/useOldLang'; @@ -32,7 +33,6 @@ type StateProps = { const CLOSE_ANIMATION_DURATION = ANIMATION_DURATION + ANIMATION_END_DELAY; const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & StateProps) => { - const lang = useOldLang(); const { updateGlobalPrivacySettings, openPremiumModal, @@ -41,6 +41,10 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta setPrivacyVisibility, loadUser, } = getActions(); + + const oldLang = useOldLang(); + const lang = useLang(); + const userName = getUserFirstOrLastName(user); const handleShowReadTime = useLastCallback(() => { @@ -48,7 +52,7 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta closePrivacySettingsNoticeModal(); setTimeout(() => { - showNotification({ message: lang('PremiumReadSet') }); + showNotification({ message: oldLang('PremiumReadSet') }); }, CLOSE_ANIMATION_DURATION); }); @@ -61,7 +65,7 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta closePrivacySettingsNoticeModal(); setTimeout(() => { - showNotification({ message: lang('PremiumLastSeenSet') }); + showNotification({ message: oldLang('PremiumLastSeenSet') }); }, CLOSE_ANIMATION_DURATION); }); @@ -98,11 +102,11 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta noLoop />

- {lang(isReadDate ? 'PremiumReadHeader1' : 'PremiumLastSeenHeader1')} + {oldLang(isReadDate ? 'PremiumReadHeader1' : 'PremiumLastSeenHeader1')}

{renderText( - lang( + oldLang( isReadDate ? 'PremiumReadText1' : 'PremiumLastSeenText1Locked', userName, ), @@ -113,13 +117,13 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta onClick={isReadDate ? handleShowReadTime : handleShowLastSeen} className={styles.button} > - {lang(isReadDate ? 'PremiumReadButton1' : 'PremiumLastSeenButton1')} + {oldLang(isReadDate ? 'PremiumReadButton1' : 'PremiumLastSeenButton1')} - {lang('PremiumOr')} -

{lang('PremiumReadHeader2')}

+ {oldLang('PremiumOr')} +

{oldLang('PremiumReadHeader2')}

{renderText( - lang(isReadDate ? 'PremiumReadText2' : 'PremiumLastSeenText2', userName), + oldLang(isReadDate ? 'PremiumReadText2' : 'PremiumLastSeenText2', userName), ['simple_markdown'], )}

@@ -128,7 +132,7 @@ const PrivacySettingsNoticeModal = ({ isOpen, isReadDate, user }: OwnProps & Sta onClick={handleOpenPremium} className={styles.button} > - {lang('PremiumLastSeenButton2')} + {oldLang('PremiumLastSeenButton2')} diff --git a/src/components/common/PrivateChatInfo.tsx b/src/components/common/PrivateChatInfo.tsx index f78f12fc0..f58b8e565 100644 --- a/src/components/common/PrivateChatInfo.tsx +++ b/src/components/common/PrivateChatInfo.tsx @@ -1,5 +1,4 @@ import type { FC } from '../../lib/teact/teact'; -import type React from '../../lib/teact/teact'; import { memo, useEffect, useMemo } from '../../lib/teact/teact'; import { getActions, withGlobal } from '../../global'; @@ -18,6 +17,7 @@ import buildClassName from '../../util/buildClassName'; import renderText from './helpers/renderText'; import useIntervalForceUpdate from '../../hooks/schedulers/useIntervalForceUpdate'; +import useLang from '../../hooks/useLang'; import useLastCallback from '../../hooks/useLastCallback'; import useOldLang from '../../hooks/useOldLang'; @@ -109,7 +109,8 @@ const PrivateChatInfo: FC = ({ loadMoreProfilePhotos, } = getActions(); - const lang = useOldLang(); + const oldLang = useOldLang(); + const lang = useLang(); const { id: userId } = user || {}; @@ -158,14 +159,14 @@ const PrivateChatInfo: FC = ({ if (withUpdatingStatus && !areMessagesLoaded) { return ( - + ); } if (customPeer?.subtitleKey) { return ( - {lang(customPeer.subtitleKey)} + {oldLang(customPeer.subtitleKey)} ); } @@ -182,7 +183,7 @@ const PrivateChatInfo: FC = ({ return undefined; } - const translatedStatus = getUserStatus(lang, user, userStatus); + const translatedStatus = getUserStatus(oldLang, user, userStatus); const mainUserNameClassName = buildClassName('handle', translatedStatus && 'withStatus'); return ( @@ -193,7 +194,7 @@ const PrivateChatInfo: FC = ({ } const customTitle = adminMember - ? adminMember.customTitle || lang(adminMember.isOwner ? 'GroupInfo.LabelOwner' : 'GroupInfo.LabelAdmin') + ? adminMember.customTitle || oldLang(adminMember.isOwner ? 'GroupInfo.LabelOwner' : 'GroupInfo.LabelAdmin') : undefined; function renderNameTitle() { diff --git a/src/components/common/pickers/ChatOrUserPicker.tsx b/src/components/common/pickers/ChatOrUserPicker.tsx index 77c1b5fac..0f55dc2c9 100644 --- a/src/components/common/pickers/ChatOrUserPicker.tsx +++ b/src/components/common/pickers/ChatOrUserPicker.tsx @@ -23,6 +23,7 @@ import useSelector from '../../../hooks/data/useSelector'; import useInfiniteScroll from '../../../hooks/useInfiniteScroll'; import useInputFocusOnOpen from '../../../hooks/useInputFocusOnOpen'; import useKeyboardListNavigation from '../../../hooks/useKeyboardListNavigation'; +import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; @@ -78,6 +79,7 @@ const ChatOrUserPicker: FC = ({ const { loadTopics } = getActions(); const oldLang = useOldLang(); + const lang = useLang(); const containerRef = useRef(); const topicContainerRef = useRef(); const searchRef = useRef(); @@ -244,7 +246,7 @@ const ChatOrUserPicker: FC = ({ function renderTopicList() { return ( <> -
+
@@ -291,7 +293,7 @@ const ChatOrUserPicker: FC = ({ function renderChatList() { return ( <> -
+
)} -
+
{viewportIds?.length ? ( = ({ } return ( -
+
diff --git a/src/components/middle/composer/CustomSendMenu.tsx b/src/components/middle/composer/CustomSendMenu.tsx index ebfad3ac2..e6fd224db 100644 --- a/src/components/middle/composer/CustomSendMenu.tsx +++ b/src/components/middle/composer/CustomSendMenu.tsx @@ -154,7 +154,7 @@ const CustomSendMenu: FC = ({ 'CustomSendMenu_items', areItemsHidden && 'CustomSendMenu_items-hidden', )} - dir={oldLang.isRtl ? 'rtl' : undefined} + dir={lang.isRtl ? 'rtl' : undefined} > {onSendSilent && {oldLang('SendWithoutSound')}} {canSchedule && onSendSchedule && ( diff --git a/src/components/middle/composer/MessageInput.tsx b/src/components/middle/composer/MessageInput.tsx index 1eb4261e5..99f383300 100644 --- a/src/components/middle/composer/MessageInput.tsx +++ b/src/components/middle/composer/MessageInput.tsx @@ -34,6 +34,7 @@ import { isSelectionInsideInput } from './helpers/selection'; import useAppLayout from '../../../hooks/useAppLayout'; import useDerivedState from '../../../hooks/useDerivedState'; import useFlag from '../../../hooks/useFlag'; +import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; import useInputCustomEmojis from './hooks/useInputCustomEmojis'; @@ -167,6 +168,7 @@ const MessageInput: FC = ({ const absoluteContainerRef = useRef(); const oldLang = useOldLang(); + const lang = useLang(); const isContextMenuOpenRef = useRef(false); const [isTextFormatterOpen, openTextFormatter, closeTextFormatter] = useFlag(); const [textFormatterAnchorPosition, setTextFormatterAnchorPosition] = useState(); @@ -572,7 +574,7 @@ const MessageInput: FC = ({ const placeholderAriaLabel = typeof placeholder === 'string' ? placeholder : undefined; return ( -
+
= ({ function renderRecentRepliers() { return ( Boolean(recentRepliers?.length) && ( -
+
{recentRepliers.map((peer) => ( = ({ isLoading && 'loading', asActionButton && 'as-action-button', )} - dir={oldLang.isRtl ? 'rtl' : 'ltr'} + dir={lang.isRtl ? 'rtl' : 'ltr'} onClick={handleClick} role="button" tabIndex={0} diff --git a/src/components/middle/message/MessageContextMenu.tsx b/src/components/middle/message/MessageContextMenu.tsx index ce784c132..3fa435fab 100644 --- a/src/components/middle/message/MessageContextMenu.tsx +++ b/src/components/middle/message/MessageContextMenu.tsx @@ -404,7 +404,7 @@ const MessageContextMenu: FC = ({ 'MessageContextMenu_items scrollable-content custom-scroll', areItemsHidden && 'MessageContextMenu_items-hidden', )} - dir={oldLang.isRtl ? 'rtl' : undefined} + dir={lang.isRtl ? 'rtl' : undefined} > {shouldShowGiftButton && ( @@ -504,7 +504,7 @@ const MessageContextMenu: FC = ({ disabled={!canShowReactionsCount && !seenByDatesCount} > - + {canShowReactionsCount && message.reactors?.count ? ( canShowSeenBy && seenByDatesCount ? oldLang( diff --git a/src/components/middle/message/WebPage.tsx b/src/components/middle/message/WebPage.tsx index aefb54803..ccbf38bac 100644 --- a/src/components/middle/message/WebPage.tsx +++ b/src/components/middle/message/WebPage.tsx @@ -19,7 +19,6 @@ import useDynamicColorListener from '../../../hooks/stickers/useDynamicColorList import useEnsureStory from '../../../hooks/useEnsureStory'; import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; -import useOldLang from '../../../hooks/useOldLang'; import Audio from '../../common/Audio'; import Document from '../../common/Document'; @@ -98,7 +97,6 @@ const WebPage: FC = ({ const { openUrl, openTelegramLink } = getActions(); const stickersRef = useRef(); - const oldLang = useOldLang(); const lang = useLang(); const handleMediaClick = useLastCallback(() => { @@ -191,7 +189,7 @@ const WebPage: FC = ({
-
+
{paidMediaMessage ? ( ) : inviteCustomPeer ? ( diff --git a/src/components/payment/Checkout.tsx b/src/components/payment/Checkout.tsx index 1ac7e4b89..8c587645e 100644 --- a/src/components/payment/Checkout.tsx +++ b/src/components/payment/Checkout.tsx @@ -159,7 +159,7 @@ const Checkout: FC = ({ function renderTos(url: string) { return ( = ({ onClose={closeModal} onCloseAnimationEnd={handleModalClose} > -
+