Refactoring: Introduce eslint-plugin-simple-import-sort plugin (#3802)

This commit is contained in:
Alexander Zinchuk 2023-09-13 12:21:39 +02:00
parent 9439efa386
commit fb614840f6
820 changed files with 4985 additions and 4250 deletions

View File

@ -10,6 +10,7 @@
"no-async-without-await",
"teactn",
"no-null",
"simple-import-sort",
"react-hooks-static-deps",
"eslint-multitab-tt"
],
@ -149,7 +150,58 @@
"disallowTypeAnnotations": false
}
],
"teactn/prefer-separate-component-file": "off"
"teactn/prefer-separate-component-file": "off",
"simple-import-sort/imports": [
"error",
{
"groups": [
// Side effect imports
["^\\u0000"],
// Lib and global imports
[
"^react",
"^@?\\w",
"dist(/.*|$)",
"^(\\.+/)+(lib/(teact|gramjs))(/.*|$)",
"^(\\.+/)+global$"
],
// Type imports
[
"^(\\.+/)+.+\\u0000$",
"^(\\.+/|\\w+/)+(types)(/.*|$)",
"^(\\.+/|\\w+/)+(types)\\u0000"
],
// Config, utils, helpers
[
"^(\\.+/)+config",
"^(\\.+/)+(lib)(?!/(gramjs|teact))(/.*|$)",
"^(\\.+/)+global/.+",
"^(\\.+/)+(util)(/.*|$)",
"^\\.\\.(?!/?$)",
"^\\.\\./?$",
"^\\./(?=.*/)(?!/?$)",
"^\\.(?!/?$)",
"^\\./?$"
],
// Hooks
[
".+(/hooks/)(.*|$)"
],
// Components
[
"\/[A-Z](([a-z]+[A-Z]?)*)"
],
// Styles and CSS modules
[
"^.+\\.s?css$"
],
// Assets: images, stickers, etc
[
"^(\\.+/)+(assets)(/.*|$)"
]
]
}
]
},
"settings": {
"import/resolver": "webpack",

241
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -108,6 +108,7 @@
"eslint-plugin-react": "^7.32.2",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-hooks-static-deps": "^1.0.7",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-teactn": "git+https://github.com/korenskoy/eslint-plugin-teactn#c2c39dd005d58c07c24c4361de804dce1c6261b5",
"git-revision-webpack-plugin": "^5.0.0",
"gitlog": "^4.0.4",

View File

@ -1,16 +1,18 @@
/* eslint-disable @typescript-eslint/naming-convention */
import BigInt from 'big-integer';
import localDb from '../localDb';
import { Api as GramJs } from '../../../lib/gramjs';
import type { ApiAppConfig } from '../../types';
import type { ApiLimitType } from '../../../global/types';
import { buildJson } from './misc';
import type { ApiAppConfig } from '../../types';
import {
DEFAULT_LIMITS,
SERVICE_NOTIFICATIONS_USER_ID,
STORY_EXPIRE_PERIOD,
STORY_VIEWERS_EXPIRE_PERIOD,
} from '../../../config';
import localDb from '../localDb';
import { buildJson } from './misc';
type LimitType = 'default' | 'premium';
type Limit = 'upload_max_fileparts' | 'stickers_faved_limit' | 'saved_gifs_limit' | 'dialog_filters_chats_limit' |

View File

@ -1,4 +1,5 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiAttachBot,
ApiAttachBotIcon,
@ -15,12 +16,12 @@ import type {
} from '../../types';
import { pick } from '../../../util/iteratees';
import { buildApiPhoto, buildApiThumbnailFromStripped } from './common';
import { buildApiDocument, buildApiWebDocument, buildVideoFromDocument } from './messageContent';
import { buildStickerFromDocument } from './symbols';
import localDb from '../localDb';
import { buildApiPeerId } from './peers';
import { buildApiPhoto, buildApiThumbnailFromStripped } from './common';
import { omitVirtualClassFields } from './helpers';
import { buildApiDocument, buildApiWebDocument, buildVideoFromDocument } from './messageContent';
import { buildApiPeerId } from './peers';
import { buildStickerFromDocument } from './symbols';
export function buildApiBotInlineResult(result: GramJs.BotInlineResult, queryId: string): ApiBotInlineResult {
const {

View File

@ -1,3 +1,5 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiCallProtocol,
ApiPhoneCallConnection,
@ -5,8 +7,8 @@ import type {
GroupCallParticipantVideo,
SsrcGroup,
} from '../../../lib/secret-sauce';
import { Api as GramJs } from '../../../lib/gramjs';
import type { ApiGroupCall, ApiPhoneCall } from '../../types';
import { getApiChatIdFromMtpPeer, isPeerUser } from './peers';
export function buildApiGroupCallParticipant(participant: GramJs.GroupCallParticipant): GroupCallParticipant {

View File

@ -1,30 +1,32 @@
import type BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiBotCommand,
ApiChat,
ApiChatAdminRights,
ApiChatBannedRights,
ApiBotCommand,
ApiChatFolder,
ApiChatMember,
ApiRestrictionReason,
ApiExportedInvite,
ApiChatInviteImporter,
ApiChatSettings,
ApiTopic,
ApiSendAsPeerId,
ApiChatReactions,
ApiChatlistInvite,
ApiChatlistExportedInvite,
ApiChatlistInvite,
ApiChatMember,
ApiChatReactions,
ApiChatSettings,
ApiExportedInvite,
ApiRestrictionReason,
ApiSendAsPeerId,
ApiTopic,
} from '../../types';
import { pick, pickTruthy } from '../../../util/iteratees';
import { getServerTime, getServerTimeOffset } from '../../../util/serverTime';
import { buildApiUsernames } from './common';
import { omitVirtualClassFields } from './helpers';
import {
buildApiPeerId, getApiChatIdFromMtpPeer, isPeerChat, isPeerUser,
} from './peers';
import { omitVirtualClassFields } from './helpers';
import { getServerTime, getServerTimeOffset } from '../../../util/serverTime';
import { buildApiReaction } from './reactions';
import { buildApiUsernames } from './common';
type PeerEntityApiChatFields = Omit<ApiChat, (
'id' | 'type' | 'title' |

View File

@ -1,23 +1,24 @@
import { Api as GramJs } from '../../../lib/gramjs';
import { strippedPhotoToJpg } from '../../../lib/gramjs/Utils';
import type { ApiPrivacySettings, PrivacyVisibility } from '../../../types';
import type {
ApiPhoto,
ApiPhotoSize,
ApiThumbnail,
ApiVideoSize,
ApiUsername,
ApiFormattedText,
ApiMessageEntity,
ApiMessageEntityDefault,
ApiPhoto,
ApiPhotoSize,
ApiThumbnail,
ApiUsername,
ApiVideoSize,
} from '../../types';
import {
ApiMessageEntityTypes,
} from '../../types';
import type { ApiPrivacySettings, PrivacyVisibility } from '../../../types';
import { compact } from '../../../util/iteratees';
import { bytesToDataUri } from './helpers';
import { pathBytesToSvg } from './pathBytesToSvg';
import { compact } from '../../../util/iteratees';
import { buildApiPeerId } from './peers';
const DEFAULT_THUMB_SIZE = { w: 100, h: 100 };

View File

@ -1,24 +1,24 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiFormattedText,
ApiMessage,
ApiWebPage,
ApiWebPageStoryData,
ApiWebDocument,
ApiMessageExtendedMediaPreview,
ApiPoll,
ApiInvoice,
ApiGame,
ApiLocation,
ApiAudio,
ApiContact,
ApiDocument,
ApiVoice,
ApiAudio,
ApiVideo,
ApiPhoto,
ApiSticker,
ApiFormattedText,
ApiGame,
ApiInvoice,
ApiLocation,
ApiMessage,
ApiMessageExtendedMediaPreview,
ApiMessageStoryData,
ApiPhoto,
ApiPoll,
ApiSticker,
ApiVideo,
ApiVoice,
ApiWebDocument,
ApiWebPage,
ApiWebPageStoryData,
} from '../../types';
import type { UniversalMessage } from './messages';

View File

@ -1,26 +1,27 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiMessage,
ApiMessageForwardInfo,
ApiPhoto,
ApiSticker,
ApiVideo,
ApiAction,
ApiContact,
ApiAttachment,
ApiNewPoll,
ApiMessageEntity,
ApiReplyKeyboard,
ApiKeyboardButton,
ApiChat,
ApiThreadInfo,
ApiContact,
ApiGroupCall,
ApiKeyboardButton,
ApiMessage,
ApiMessageEntity,
ApiMessageForwardInfo,
ApiNewPoll,
ApiPhoto,
ApiReplyKeyboard,
ApiSponsoredMessage,
ApiUser,
PhoneCallAction,
ApiTypeReplyTo,
ApiSticker,
ApiStory,
ApiStorySkipped,
ApiThreadInfo,
ApiTypeReplyTo,
ApiUser,
ApiVideo,
PhoneCallAction,
} from '../../types';
import {
ApiMessageEntityTypes,
@ -34,13 +35,9 @@ import {
SUPPORTED_IMAGE_CONTENT_TYPES,
SUPPORTED_VIDEO_CONTENT_TYPES,
} from '../../../config';
import { pick } from '../../../util/iteratees';
import { getEmojiOnlyCountForMessage } from '../../../global/helpers/getEmojiOnlyCountForMessage';
import { pick } from '../../../util/iteratees';
import { getServerTime, getServerTimeOffset } from '../../../util/serverTime';
import { buildMessageContent, buildMessageTextContent } from './messageContent';
import {
buildApiPhoto,
} from './common';
import { interpolateArray } from '../../../util/waveform';
import { buildPeer } from '../gramjsBuilders';
import {
@ -48,9 +45,13 @@ import {
resolveMessageApiChatId,
serializeBytes,
} from '../helpers';
import { buildApiCallDiscardReason } from './calls';
import {
buildApiPhoto,
} from './common';
import { buildMessageContent, buildMessageTextContent } from './messageContent';
import { buildApiPeerId, getApiChatIdFromMtpPeer, isPeerUser } from './peers';
import { buildMessageReactions } from './reactions';
import { buildApiCallDiscardReason } from './calls';
const LOCAL_MESSAGES_LIMIT = 1e6; // 1M

View File

@ -1,18 +1,19 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiConfig, ApiCountry, ApiSession, ApiUrlAuthResult, ApiWallpaper, ApiWebSession, ApiLangString,
} from '../../types';
import type { ApiPrivacyKey } from '../../../types';
import type {
ApiConfig, ApiCountry, ApiLangString,
ApiSession, ApiUrlAuthResult, ApiWallpaper, ApiWebSession,
} from '../../types';
import { buildApiReaction } from './reactions';
import { buildApiDocument } from './messageContent';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from './peers';
import { omit, pick } from '../../../util/iteratees';
import { getServerTime } from '../../../util/serverTime';
import { buildApiUser } from './users';
import { addUserToLocalDb } from '../helpers';
import { omitVirtualClassFields } from './helpers';
import { buildApiDocument } from './messageContent';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from './peers';
import { buildApiReaction } from './reactions';
import { buildApiUser } from './users';
export function buildApiWallpaper(wallpaper: GramJs.TypeWallPaper): ApiWallpaper | undefined {
if (wallpaper instanceof GramJs.WallPaperNoFile) {

View File

@ -1,13 +1,13 @@
import type { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiInvoice, ApiPaymentSavedInfo, ApiPremiumPromo, ApiPremiumSubscriptionOption,
ApiPaymentForm, ApiReceipt, ApiLabeledPrice, ApiPaymentCredentials,
ApiInvoice, ApiLabeledPrice, ApiPaymentCredentials,
ApiPaymentForm, ApiPaymentSavedInfo, ApiPremiumPromo, ApiPremiumSubscriptionOption,
ApiReceipt,
} from '../../types';
import { buildApiDocument, buildApiWebDocument } from './messageContent';
import { buildApiMessageEntity } from './common';
import { omitVirtualClassFields } from './helpers';
import { buildApiDocument, buildApiWebDocument } from './messageContent';
export function buildShippingOptions(shippingOptions: GramJs.ShippingOption[] | undefined) {
if (!shippingOptions) {

View File

@ -1,4 +1,5 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiAvailableReaction,
ApiPeerReaction,
@ -7,6 +8,7 @@ import type {
ApiReactionEmoji,
ApiReactions,
} from '../../types';
import { buildApiDocument } from './messageContent';
import { getApiChatIdFromMtpPeer } from './peers';

View File

@ -2,13 +2,14 @@ import type { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiChannelStatistics,
ApiGroupStatistics,
ApiMessageStatistics,
ApiMessagePublicForward,
ApiMessageStatistics,
StatisticsGraph,
StatisticsOverviewItem,
StatisticsOverviewPercentage,
StatisticsOverviewPeriod,
} from '../../types';
import { buildAvatarHash } from './chats';
import { buildApiPeerId } from './peers';

View File

@ -5,9 +5,9 @@ import type {
} from '../../types';
import { buildCollectionByCallback } from '../../../util/iteratees';
import { buildApiPeerId } from './peers';
import { buildPrivacyRules } from './common';
import { buildGeoPoint, buildMessageMediaContent, buildMessageTextContent } from './messageContent';
import { buildApiPeerId } from './peers';
import { buildApiReaction } from './reactions';
export function buildApiStory(userId: string, story: GramJs.TypeStoryItem): ApiTypeStory {

View File

@ -1,11 +1,12 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiEmojiInteraction, ApiStickerSetInfo, ApiSticker, ApiStickerSet, GramJsEmojiInteraction,
ApiEmojiInteraction, ApiSticker, ApiStickerSet, ApiStickerSetInfo, GramJsEmojiInteraction,
} from '../../types';
import { buildApiThumbnailFromCached, buildApiThumbnailFromPath } from './common';
import localDb from '../localDb';
import { compact } from '../../../util/iteratees';
import localDb from '../localDb';
import { buildApiThumbnailFromCached, buildApiThumbnailFromPath } from './common';
const LOTTIE_STICKER_MIME_TYPE = 'application/x-tgsticker';
const VIDEO_STICKER_MIME_TYPE = 'video/webm';

View File

@ -1,4 +1,5 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiEmojiStatus,
ApiPremiumGiftOption,
@ -7,9 +8,10 @@ import type {
ApiUserStatus,
ApiUserType,
} from '../../types';
import { buildApiPeerId } from './peers';
import { buildApiBotInfo } from './bots';
import { buildApiPhoto, buildApiUsernames } from './common';
import { buildApiPeerId } from './peers';
export function buildApiUserFullInfo(mtpUserFull: GramJs.users.UserFull): ApiUserFullInfo {
const {

View File

@ -1,41 +1,41 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import { generateRandomBytes, readBigIntFromBuffer } from '../../../lib/gramjs/Helpers';
import type { ApiPrivacyKey, PrivacyVisibility } from '../../../types';
import { generateRandomBytes, readBigIntFromBuffer } from '../../../lib/gramjs/Helpers';
import type {
ApiBotApp,
ApiChatAdminRights,
ApiChatBannedRights,
ApiChatFolder,
ApiChatReactions,
ApiFormattedText,
ApiGroupCall,
ApiMessageEntity,
ApiNewPoll,
ApiPhoto,
ApiPhoneCall,
ApiPhoto,
ApiPoll,
ApiReaction,
ApiReportReason,
ApiRequestInputInvoice,
ApiSendMessageAction,
ApiSticker,
ApiVideo,
ApiThemeParameters,
ApiPoll,
ApiRequestInputInvoice,
ApiChatReactions,
ApiReaction,
ApiFormattedText,
ApiBotApp,
ApiStory,
ApiStorySkipped,
ApiUser,
ApiThemeParameters,
ApiTypeReplyTo,
ApiUser,
ApiVideo,
} from '../../types';
import {
ApiMessageEntityTypes,
} from '../../types';
import localDb from '../localDb';
import { DEFAULT_STATUS_ICON_ID } from '../../../config';
import { pick } from '../../../util/iteratees';
import { deserializeBytes } from '../helpers';
import { DEFAULT_STATUS_ICON_ID } from '../../../config';
import localDb from '../localDb';
const CHANNEL_ID_MIN_LENGTH = 11; // Example: -1000000000

View File

@ -1,7 +1,9 @@
import { Api as GramJs } from '../../lib/gramjs';
import localDb from './localDb';
import type { StoryRepairInfo } from './localDb';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from './apiBuilders/peers';
import localDb from './localDb';
const LOG_BACKGROUND = '#111111DD';
const LOG_PREFIX_COLOR = '#E4D00A';

View File

@ -1,9 +1,11 @@
import BigInt from 'big-integer';
import type { Api as GramJs } from '../../lib/gramjs';
import { omitVirtualClassFields } from './apiBuilders/helpers';
import { DATA_BROADCAST_CHANNEL_NAME } from '../../config';
import { constructors } from '../../lib/gramjs/tl';
import type { Api as GramJs } from '../../lib/gramjs';
import { DATA_BROADCAST_CHANNEL_NAME } from '../../config';
import { throttle } from '../../util/schedulers';
import { omitVirtualClassFields } from './apiBuilders/helpers';
// eslint-disable-next-line no-restricted-globals
const IS_MULTITAB_SUPPORTED = 'BroadcastChannel' in self;

View File

@ -1,10 +1,12 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiChat, ApiPhoto, ApiReportReason, ApiUser,
} from '../../types';
import { buildInputPeer, buildInputPhoto, buildInputReportReason } from '../gramjsBuilders';
import { invokeRequest } from './client';
import { Api as GramJs } from '../../../lib/gramjs';
import { buildInputPeer, buildInputReportReason, buildInputPhoto } from '../gramjsBuilders';
export async function reportPeer({
peer,

View File

@ -1,10 +1,11 @@
import { errors } from '../../../lib/gramjs';
import type {
ApiUpdateAuthorizationState,
ApiUpdateAuthorizationStateType,
OnApiUpdate,
ApiUser,
ApiUserFullInfo,
OnApiUpdate,
} from '../../types';
import { DEBUG } from '../../../config';

View File

@ -6,18 +6,8 @@ import type {
ApiChat, ApiThemeParameters, ApiUser, OnApiUpdate,
} from '../../types';
import localDb from '../localDb';
import { WEB_APP_PLATFORM } from '../../../config';
import { invokeRequest } from './client';
import {
buildInputBotApp,
buildInputEntity,
buildInputPeer,
buildInputReplyToMessage,
buildInputThemeParams,
generateRandomBigInt,
} from '../gramjsBuilders';
import { buildApiUser } from '../apiBuilders/users';
import { buildCollectionByKey } from '../../../util/iteratees';
import {
buildApiAttachBot,
buildApiBotApp,
@ -27,10 +17,20 @@ import {
buildBotSwitchWebview,
} from '../apiBuilders/bots';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { addEntitiesToLocalDb, addUserToLocalDb, deserializeBytes } from '../helpers';
import { omitVirtualClassFields } from '../apiBuilders/helpers';
import { buildCollectionByKey } from '../../../util/iteratees';
import { buildApiUrlAuthResult } from '../apiBuilders/misc';
import { buildApiUser } from '../apiBuilders/users';
import {
buildInputBotApp,
buildInputEntity,
buildInputPeer,
buildInputReplyToMessage,
buildInputThemeParams,
generateRandomBigInt,
} from '../gramjsBuilders';
import { addEntitiesToLocalDb, addUserToLocalDb, deserializeBytes } from '../helpers';
import localDb from '../localDb';
import { invokeRequest } from './client';
let onUpdate: OnApiUpdate;

View File

@ -1,24 +1,25 @@
import BigInt from 'big-integer';
import type { JoinGroupCallPayload } from '../../../lib/secret-sauce';
import type {
ApiChat, ApiUser, OnApiUpdate, ApiGroupCall, ApiPhoneCall,
} from '../../types';
import { Api as GramJs } from '../../../lib/gramjs';
import { invokeRequest, invokeRequestBeacon } from './client';
import type { JoinGroupCallPayload } from '../../../lib/secret-sauce';
import type {
ApiChat, ApiGroupCall, ApiPhoneCall,
ApiUser, OnApiUpdate,
} from '../../types';
import { GROUP_CALL_PARTICIPANTS_LIMIT } from '../../../config';
import {
buildApiGroupCall,
buildApiGroupCallParticipant, buildCallProtocol,
buildPhoneCall,
} from '../apiBuilders/calls';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { buildApiUser } from '../apiBuilders/users';
import {
buildInputGroupCall, buildInputPeer, buildInputPhoneCall, generateRandomInt,
} from '../gramjsBuilders';
import {
buildCallProtocol,
buildApiGroupCall,
buildApiGroupCallParticipant, buildPhoneCall,
} from '../apiBuilders/calls';
import { buildApiUser } from '../apiBuilders/users';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { addEntitiesToLocalDb } from '../helpers';
import { GROUP_CALL_PARTICIPANTS_LIMIT } from '../../../config';
import { invokeRequest, invokeRequestBeacon } from './client';
let onUpdate: OnApiUpdate;

View File

@ -1,76 +1,76 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
OnApiUpdate,
ApiChat,
ApiMessage,
ApiUser,
ApiMessageEntity,
ApiFormattedText,
ApiChatFullInfo,
ApiChatFolder,
ApiChatBannedRights,
ApiChatAdminRights,
ApiChatBannedRights,
ApiChatFolder,
ApiChatFullInfo,
ApiChatReactions,
ApiFormattedText,
ApiGroupCall,
ApiUserStatus,
ApiMessage,
ApiMessageEntity,
ApiPhoto,
ApiTopic,
ApiChatReactions,
ApiUser,
ApiUserStatus,
OnApiUpdate,
} from '../../types';
import {
DEBUG,
ALL_FOLDER_ID,
ARCHIVED_FOLDER_ID,
DEBUG,
GENERAL_TOPIC_ID,
MAX_INT_32,
MEMBERS_LOAD_SLICE,
SERVICE_NOTIFICATIONS_USER_ID,
ALL_FOLDER_ID,
MAX_INT_32,
TOPICS_SLICE,
GENERAL_TOPIC_ID,
} from '../../../config';
import { invokeRequest, uploadFile } from './client';
import {
buildApiChatFromDialog,
getPeerKey,
buildChatMembers,
buildApiChatFromPreview,
buildApiChatFolder,
buildApiChatFolderFromSuggested,
buildApiChatBotCommands,
buildApiChatSettings,
buildApiChatReactions,
buildApiTopic,
buildApiChatlistInvite,
buildApiChatlistExportedInvite,
} from '../apiBuilders/chats';
import { buildApiMessage, buildMessageDraft } from '../apiBuilders/messages';
import { buildApiUser, buildApiUsersAndStatuses } from '../apiBuilders/users';
import { buildCollectionByKey } from '../../../util/iteratees';
import {
buildApiChatBotCommands,
buildApiChatFolder,
buildApiChatFolderFromSuggested,
buildApiChatFromDialog,
buildApiChatFromPreview,
buildApiChatlistExportedInvite,
buildApiChatlistInvite,
buildApiChatReactions,
buildApiChatSettings,
buildApiTopic,
buildChatMembers,
getPeerKey,
} from '../apiBuilders/chats';
import { buildApiPhoto } from '../apiBuilders/common';
import { buildApiMessage, buildMessageDraft } from '../apiBuilders/messages';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
import { buildStickerSet } from '../apiBuilders/symbols';
import { buildApiUser, buildApiUsersAndStatuses } from '../apiBuilders/users';
import {
buildChatAdminRights,
buildChatBannedRights,
buildFilterFromApiFolder,
buildInputChatReactions,
buildInputEntity,
buildInputPeer,
buildMtpMessageEntity,
buildFilterFromApiFolder,
isMessageWithMedia,
buildChatBannedRights,
buildChatAdminRights,
buildInputChatReactions,
buildInputPhoto,
buildMtpMessageEntity,
generateRandomBigInt,
isMessageWithMedia,
} from '../gramjsBuilders';
import {
addEntitiesToLocalDb,
addMessageToLocalDb,
addPhotoToLocalDb,
isChatFolder,
} from '../helpers';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
import { buildApiPhoto } from '../apiBuilders/common';
import { buildStickerSet } from '../apiBuilders/symbols';
import localDb from '../localDb';
import { updateChannelState } from '../updateManager';
import { scheduleMutedChatUpdate } from '../scheduleUnmute';
import { updateChannelState } from '../updateManager';
import { invokeRequest, uploadFile } from './client';
type FullChatData = {
fullInfo: ApiChatFullInfo;

View File

@ -1,10 +1,11 @@
import {
sessions, Api as GramJs,
Api as GramJs,
sessions,
} from '../../../lib/gramjs';
import TelegramClient from '../../../lib/gramjs/client/TelegramClient';
import { Logger as GramJsLogger } from '../../../lib/gramjs/extensions/index';
import type { TwoFaParams } from '../../../lib/gramjs/client/2fa';
import TelegramClient from '../../../lib/gramjs/client/TelegramClient';
import { Logger as GramJsLogger } from '../../../lib/gramjs/extensions/index';
import type {
ApiInitialArgs,
ApiMediaFormat,
@ -14,31 +15,33 @@ import type {
} from '../../types';
import {
DEBUG, DEBUG_GRAMJS, UPLOAD_WORKERS, IS_TEST, APP_CODE_NAME,
APP_CODE_NAME,
DEBUG, DEBUG_GRAMJS, IS_TEST, UPLOAD_WORKERS,
} from '../../../config';
import {
onRequestPhoneNumber, onRequestCode, onRequestPassword, onRequestRegistration,
onAuthError, onAuthReady, onCurrentUserUpdate, onRequestQrCode, onWebAuthTokenFailed,
} from './auth';
import { pause } from '../../../util/schedulers';
import { setMessageBuilderCurrentUserId } from '../apiBuilders/messages';
import downloadMediaWithClient, { parseMediaUrl } from './media';
import { buildApiUser, buildApiUserFullInfo } from '../apiBuilders/users';
import localDb, { clearLocalDb } from '../localDb';
import { buildApiPeerId } from '../apiBuilders/peers';
import { buildApiUser, buildApiUserFullInfo } from '../apiBuilders/users';
import {
addEntitiesToLocalDb,
addMessageToLocalDb, addStoryToLocalDb, addUserToLocalDb, isResponseUpdate, log,
} from '../helpers';
import { ChatAbortController } from '../ChatAbortController';
import localDb, { clearLocalDb } from '../localDb';
import {
updateChannelState,
getDifference,
init as initUpdatesManager,
processUpdate,
reset as resetUpdatesManager,
scheduleGetChannelDifference,
updateChannelState,
} from '../updateManager';
import { pause } from '../../../util/schedulers';
import {
onAuthError, onAuthReady, onCurrentUserUpdate, onRequestCode, onRequestPassword, onRequestPhoneNumber,
onRequestQrCode, onRequestRegistration, onWebAuthTokenFailed,
} from './auth';
import downloadMediaWithClient, { parseMediaUrl } from './media';
import { ChatAbortController } from '../ChatAbortController';
const DEFAULT_USER_AGENT = 'Unknown UserAgent';
const DEFAULT_PLATFORM = 'Unknown platform';

View File

@ -1,28 +1,28 @@
import type {
OnApiUpdate,
ApiInitialArgs,
ApiUpdate,
ApiOnProgress,
ApiUpdate,
OnApiUpdate,
} from '../../types';
import type { Methods, MethodArgs, MethodResponse } from './types';
import type { LocalDb } from '../localDb';
import type { MethodArgs, MethodResponse, Methods } from './types';
import { API_THROTTLE_RESET_UPDATES, API_UPDATE_THROTTLE } from '../../../config';
import { throttle, throttleWithTickEnd } from '../../../util/schedulers';
import { updateFullLocalDb } from '../localDb';
import { init as initUpdater } from '../updater';
import { init as initAuth } from './auth';
import { init as initChats } from './chats';
import { init as initMessages } from './messages';
import { init as initUsers } from './users';
import { init as initClient } from './client';
import { init as initStickers } from './symbols';
import { init as initManagement } from './management';
import { init as initTwoFaSettings } from './twoFaSettings';
import { init as initBots } from './bots';
import { init as initCalls } from './calls';
import { init as initPayments } from './payments';
import { init as initChats } from './chats';
import { init as initClient } from './client';
import * as methods from './index';
import { init as initManagement } from './management';
import { init as initMessages } from './messages';
import { init as initPayments } from './payments';
import { init as initStickers } from './symbols';
import { init as initTwoFaSettings } from './twoFaSettings';
import { init as initUsers } from './users';
let onUpdate: OnApiUpdate;

View File

@ -1,16 +1,16 @@
import { Api as GramJs } from '../../../lib/gramjs';
import { invokeRequest } from './client';
import { buildInputEntity, buildInputPeer } from '../gramjsBuilders';
import type {
ApiChat, ApiError, ApiUser, ApiUsername, OnApiUpdate,
} from '../../types';
import { USERNAME_PURCHASE_ERROR } from '../../../config';
import { addEntitiesToLocalDb } from '../helpers';
import { buildCollectionByKey } from '../../../util/iteratees';
import { buildApiExportedInvite, buildChatInviteImporter } from '../apiBuilders/chats';
import { buildApiUser } from '../apiBuilders/users';
import { buildCollectionByKey } from '../../../util/iteratees';
import { buildInputEntity, buildInputPeer } from '../gramjsBuilders';
import { addEntitiesToLocalDb } from '../helpers';
import { invokeRequest } from './client';
let onUpdate: OnApiUpdate;

View File

@ -1,5 +1,6 @@
import type { TelegramClient } from '../../../lib/gramjs';
import { Api as GramJs } from '../../../lib/gramjs';
import type { TelegramClient } from '../../../lib/gramjs';
import type { ApiOnProgress, ApiParsedMedia } from '../../types';
import {
ApiMediaFormat,
@ -12,9 +13,9 @@ import {
MEDIA_CACHE_NAME,
MEDIA_CACHE_NAME_AVATARS,
} from '../../../config';
import localDb from '../localDb';
import * as cacheApi from '../../../util/cacheApi';
import { getEntityTypeById } from '../gramjsBuilders';
import localDb from '../localDb';
const MEDIA_ENTITY_TYPES = new Set([
'msg', 'sticker', 'gif', 'wallpaper', 'photo', 'webDocument', 'document', 'videoAvatar',

View File

@ -1,25 +1,26 @@
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiAttachment,
ApiChat,
ApiContact,
ApiFormattedText,
ApiGlobalMessageSearchType,
ApiMessage,
ApiMessageEntity,
ApiMessageSearchType,
ApiNewPoll,
ApiOnProgress,
ApiPoll,
ApiReportReason,
ApiSendMessageAction,
ApiSticker,
ApiStory,
ApiStorySkipped,
ApiTypeReplyTo,
ApiUser,
ApiVideo,
OnApiUpdate,
ApiSendMessageAction,
ApiContact,
ApiPoll,
ApiFormattedText,
ApiTypeReplyTo,
ApiStory,
ApiStorySkipped,
} from '../../types';
import {
MAIN_THREAD_ID,
@ -33,51 +34,51 @@ import {
SUPPORTED_IMAGE_CONTENT_TYPES,
SUPPORTED_VIDEO_CONTENT_TYPES,
} from '../../../config';
import { handleGramJsUpdate, invokeRequest, uploadFile } from './client';
import {
buildApiMessage,
buildLocalForwardedMessage,
buildLocalMessage,
buildApiSponsoredMessage,
} from '../apiBuilders/messages';
import { getEmojiOnlyCountForMessage } from '../../../global/helpers/getEmojiOnlyCountForMessage';
import { fetchFile } from '../../../util/files';
import { compact } from '../../../util/iteratees';
import { getServerTimeOffset } from '../../../util/serverTime';
import { interpolateArray } from '../../../util/waveform';
import { buildApiChatFromPreview, buildApiSendAsPeerId } from '../apiBuilders/chats';
import { buildApiFormattedText } from '../apiBuilders/common';
import {
buildMessageMediaContent, buildMessageTextContent, buildWebPage,
} from '../apiBuilders/messageContent';
import { buildApiFormattedText } from '../apiBuilders/common';
import {
buildApiMessage,
buildApiSponsoredMessage,
buildLocalForwardedMessage,
buildLocalMessage,
} from '../apiBuilders/messages';
import { getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
import { buildApiUser } from '../apiBuilders/users';
import {
buildInputEntity,
buildInputMediaDocument,
buildInputPeer,
buildInputPoll,
buildInputPollFromExisting,
buildInputReplyTo,
buildInputReportReason,
buildInputStory,
buildInputTextWithEntities,
buildMessageFromUpdate,
buildMtpMessageEntity,
buildSendMessageAction,
generateRandomBigInt,
getEntityTypeById,
isMessageWithMedia,
isServiceMessageWithMedia,
buildSendMessageAction,
buildInputPollFromExisting,
buildInputTextWithEntities,
buildMessageFromUpdate,
buildInputStory,
buildInputReplyTo,
} from '../gramjsBuilders';
import { buildApiChatFromPreview, buildApiSendAsPeerId } from '../apiBuilders/chats';
import { fetchFile } from '../../../util/files';
import {
addEntitiesToLocalDb,
addMessageToLocalDb,
deserializeBytes,
resolveMessageApiChatId,
} from '../helpers';
import { interpolateArray } from '../../../util/waveform';
import { requestChatUpdate } from './chats';
import { getEmojiOnlyCountForMessage } from '../../../global/helpers/getEmojiOnlyCountForMessage';
import { getServerTimeOffset } from '../../../util/serverTime';
import { getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
import { updateChannelState } from '../updateManager';
import { compact } from '../../../util/iteratees';
import { requestChatUpdate } from './chats';
import { handleGramJsUpdate, invokeRequest, uploadFile } from './client';
const FAST_SEND_TIMEOUT = 1000;
const INPUT_WAVEFORM_LENGTH = 63;

View File

@ -1,24 +1,27 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import { invokeRequest } from './client';
import { buildInputInvoice, buildInputPeer, buildShippingInfo } from '../gramjsBuilders';
import type {
ApiChat, ApiRequestInputInvoice,
OnApiUpdate,
} from '../../types';
import {
buildApiInvoiceFromForm,
buildApiPremiumPromo,
buildApiPaymentForm,
buildApiPremiumPromo,
buildApiReceipt,
buildShippingOptions,
} from '../apiBuilders/payments';
import type {
ApiChat, OnApiUpdate, ApiRequestInputInvoice,
} from '../../types';
import localDb from '../localDb';
import { buildApiUser } from '../apiBuilders/users';
import { buildInputInvoice, buildInputPeer, buildShippingInfo } from '../gramjsBuilders';
import {
addEntitiesToLocalDb,
deserializeBytes,
serializeBytes,
} from '../helpers';
import { buildApiUser } from '../apiBuilders/users';
import localDb from '../localDb';
import { invokeRequest } from './client';
import { getTemporaryPaymentPassword } from './twoFaSettings';
let onUpdate: OnApiUpdate;

View File

@ -1,9 +1,9 @@
import BigInt from 'big-integer';
import type bigInt from 'big-integer';
import MTProtoState from '../../../lib/gramjs/network/MTProtoState';
import BigInt from 'big-integer';
import AuthKey from '../../../lib/gramjs/crypto/AuthKey';
import Logger from '../../../lib/gramjs/extensions/Logger';
import Helpers from '../../../lib/gramjs/Helpers';
import AuthKey from '../../../lib/gramjs/crypto/AuthKey';
import MTProtoState from '../../../lib/gramjs/network/MTProtoState';
type DhConfig = {
p: number[];

View File

@ -4,13 +4,13 @@ import { Api as GramJs } from '../../../lib/gramjs';
import type { ApiChat, ApiReaction } from '../../types';
import { REACTION_LIST_LIMIT, RECENT_REACTIONS_LIMIT, TOP_REACTIONS_LIMIT } from '../../../config';
import { buildInputPeer, buildInputReaction } from '../gramjsBuilders';
import { buildApiUser } from '../apiBuilders/users';
import { buildApiAvailableReaction, buildApiReaction, buildMessagePeerReaction } from '../apiBuilders/reactions';
import { invokeRequest } from './client';
import localDb from '../localDb';
import { addEntitiesToLocalDb } from '../helpers';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { buildApiAvailableReaction, buildApiReaction, buildMessagePeerReaction } from '../apiBuilders/reactions';
import { buildApiUser } from '../apiBuilders/users';
import { buildInputPeer, buildInputReaction } from '../gramjsBuilders';
import { addEntitiesToLocalDb } from '../helpers';
import localDb from '../localDb';
import { invokeRequest } from './client';
export function sendWatchingEmojiInteraction({
chat,

View File

@ -1,6 +1,8 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type { LANG_PACKS } from '../../../config';
import type { ApiPrivacyKey, InputPrivacyRules, LangCode } from '../../../types';
import type {
ApiAppConfig,
ApiConfig,
@ -10,11 +12,14 @@ import type {
ApiPhoto,
ApiUser,
} from '../../types';
import type { ApiPrivacyKey, InputPrivacyRules, LangCode } from '../../../types';
import type { LANG_PACKS } from '../../../config';
import { BLOCKED_LIST_LIMIT, DEFAULT_LANG_PACK, MAX_INT_32 } from '../../../config';
import { ACCEPTABLE_USERNAME_ERRORS } from './management';
import { buildCollectionByKey } from '../../../util/iteratees';
import { getServerTime } from '../../../util/serverTime';
import { buildAppConfig } from '../apiBuilders/appConfig';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { buildApiPhoto, buildPrivacyRules } from '../apiBuilders/common';
import { omitVirtualClassFields } from '../apiBuilders/helpers';
import {
buildApiConfig,
buildApiCountryList,
@ -23,20 +28,16 @@ import {
buildApiWallpaper,
buildApiWebSession, buildLangPack, buildLangPackString,
} from '../apiBuilders/misc';
import { buildApiPhoto, buildPrivacyRules } from '../apiBuilders/common';
import { buildApiUser } from '../apiBuilders/users';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { getApiChatIdFromMtpPeer } from '../apiBuilders/peers';
import { buildAppConfig } from '../apiBuilders/appConfig';
import { omitVirtualClassFields } from '../apiBuilders/helpers';
import { buildApiUser } from '../apiBuilders/users';
import {
buildInputEntity, buildInputPeer, buildInputPrivacyKey, buildInputPhoto,
buildInputEntity, buildInputPeer, buildInputPhoto,
buildInputPrivacyKey,
} from '../gramjsBuilders';
import { getClient, invokeRequest, uploadFile } from './client';
import { buildCollectionByKey } from '../../../util/iteratees';
import { getServerTime } from '../../../util/serverTime';
import { addEntitiesToLocalDb, addPhotoToLocalDb } from '../helpers';
import localDb from '../localDb';
import { getClient, invokeRequest, uploadFile } from './client';
import { ACCEPTABLE_USERNAME_ERRORS } from './management';
const BETA_LANG_CODES = ['ar', 'fa', 'id', 'ko', 'uz', 'en'];

View File

@ -2,16 +2,17 @@ import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiChat, ApiMessageStatistics, ApiMessagePublicForward, StatisticsGraph,
ApiChat, ApiMessagePublicForward, ApiMessageStatistics, StatisticsGraph,
} from '../../types';
import { invokeRequest } from './client';
import { addEntitiesToLocalDb } from '../helpers';
import { buildInputEntity } from '../gramjsBuilders';
import {
buildChannelStatistics, buildGroupStatistics, buildMessageStatistics, buildMessagePublicForwards, buildGraph,
buildChannelStatistics, buildGraph,
buildGroupStatistics, buildMessagePublicForwards, buildMessageStatistics,
} from '../apiBuilders/statistics';
import { buildApiUser } from '../apiBuilders/users';
import { buildInputEntity } from '../gramjsBuilders';
import { addEntitiesToLocalDb } from '../helpers';
import { invokeRequest } from './client';
export async function fetchChannelStatistics({
chat, dcId,

View File

@ -1,15 +1,19 @@
import { invokeRequest } from './client';
import type {
ApiUser, ApiUserStories, ApiReportReason, ApiTypeStory, ApiReaction, ApiStealthMode,
} from '../../types';
import type { PrivacyVisibility } from '../../../types';
import { Api as GramJs } from '../../../lib/gramjs';
import { addEntitiesToLocalDb, addStoryToLocalDb } from '../helpers';
import { buildApiUser } from '../apiBuilders/users';
import type { PrivacyVisibility } from '../../../types';
import type {
ApiReaction, ApiReportReason, ApiStealthMode,
ApiTypeStory, ApiUser, ApiUserStories,
} from '../../types';
import { STORY_LIST_LIMIT } from '../../../config';
import { buildCollectionByCallback } from '../../../util/iteratees';
import { buildApiPeerId } from '../apiBuilders/peers';
import {
buildApiStoryView, buildApiStory, buildApiUsersStories, buildApiStealthMode,
buildApiStealthMode,
buildApiStory, buildApiStoryView, buildApiUsersStories,
} from '../apiBuilders/stories';
import { buildApiUser } from '../apiBuilders/users';
import {
buildInputEntity,
buildInputPeer,
@ -18,8 +22,8 @@ import {
buildInputReaction,
buildInputReportReason,
} from '../gramjsBuilders';
import { STORY_LIST_LIMIT } from '../../../config';
import { buildCollectionByCallback } from '../../../util/iteratees';
import { addEntitiesToLocalDb, addStoryToLocalDb } from '../helpers';
import { invokeRequest } from './client';
export async function fetchAllStories({
stateHash,

View File

@ -1,19 +1,19 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
ApiStickerSetInfo, ApiSticker, ApiVideo, OnApiUpdate,
ApiSticker, ApiStickerSetInfo, ApiVideo, OnApiUpdate,
} from '../../types';
import { invokeRequest } from './client';
import { DEFAULT_GIF_SEARCH_BOT_USERNAME, RECENT_STATUS_LIMIT, RECENT_STICKERS_LIMIT } from '../../../config';
import { buildVideoFromDocument } from '../apiBuilders/messageContent';
import {
buildStickerSet, buildStickerSetCovered, processStickerPackResult, processStickerResult,
} from '../apiBuilders/symbols';
import { buildApiUserEmojiStatus } from '../apiBuilders/users';
import { buildInputStickerSet, buildInputDocument, buildInputStickerSetShortName } from '../gramjsBuilders';
import { buildVideoFromDocument } from '../apiBuilders/messageContent';
import { DEFAULT_GIF_SEARCH_BOT_USERNAME, RECENT_STATUS_LIMIT, RECENT_STICKERS_LIMIT } from '../../../config';
import { buildInputDocument, buildInputStickerSet, buildInputStickerSetShortName } from '../gramjsBuilders';
import localDb from '../localDb';
import { invokeRequest } from './client';
let onUpdate: OnApiUpdate;

View File

@ -3,7 +3,7 @@ import { Api as GramJs, errors } from '../../../lib/gramjs';
import type { OnApiUpdate } from '../../types';
import { DEBUG } from '../../../config';
import { invokeRequest, updateTwoFaSettings, getTmpPassword } from './client';
import { getTmpPassword, invokeRequest, updateTwoFaSettings } from './client';
const ApiErrors: { [k: string]: string } = {
EMAIL_UNCONFIRMED: 'Email unconfirmed',

View File

@ -1,26 +1,28 @@
import BigInt from 'big-integer';
import { Api as GramJs } from '../../../lib/gramjs';
import type {
OnApiUpdate, ApiUser, ApiChat, ApiSticker,
ApiChat, ApiSticker,
ApiUser, OnApiUpdate,
} from '../../types';
import { COMMON_CHATS_LIMIT, PROFILE_PHOTOS_LIMIT } from '../../../config';
import { invokeRequest } from './client';
import { searchMessagesLocal } from './messages';
import {
buildInputEntity,
buildInputPeer,
buildInputContact,
buildMtpPeerId,
getEntityTypeById,
buildInputEmojiStatus,
} from '../gramjsBuilders';
import { buildApiUser, buildApiUserFullInfo, buildApiUsersAndStatuses } from '../apiBuilders/users';
import { buildApiChatFromPreview } from '../apiBuilders/chats';
import { buildApiPhoto } from '../apiBuilders/common';
import { addEntitiesToLocalDb, addPhotoToLocalDb, addUserToLocalDb } from '../helpers';
import { buildApiPeerId } from '../apiBuilders/peers';
import { buildApiUser, buildApiUserFullInfo, buildApiUsersAndStatuses } from '../apiBuilders/users';
import {
buildInputContact,
buildInputEmojiStatus,
buildInputEntity,
buildInputPeer,
buildMtpPeerId,
getEntityTypeById,
} from '../gramjsBuilders';
import { addEntitiesToLocalDb, addPhotoToLocalDb, addUserToLocalDb } from '../helpers';
import localDb from '../localDb';
import { invokeRequest } from './client';
import { searchMessagesLocal } from './messages';
let onUpdate: OnApiUpdate;

View File

@ -1,6 +1,7 @@
import type { OnApiUpdate } from '../types';
import { getServerTime } from '../../util/serverTime';
import { MAX_INT_32 } from '../../config';
import { getServerTime } from '../../util/serverTime';
type UnmuteQueueItem = { chatId: string; topicId?: number; muteUntil: number };
const unmuteTimers = new Map<string, any>();

View File

@ -1,15 +1,16 @@
import { Api as GramJs } from '../../lib/gramjs';
import type { Update } from './updater';
import type { invokeRequest } from './methods/client';
import { UpdateConnectionState, UpdateServerTimeOffset } from '../../lib/gramjs/network';
import type { invokeRequest } from './methods/client';
import type { Update } from './updater';
import { DEBUG } from '../../config';
import localDb from './localDb';
import SortedQueue from '../../util/SortedQueue';
import { dispatchUserAndChatUpdates, sendUpdate, updater } from './updater';
import { addEntitiesToLocalDb } from './helpers';
import { buildInputEntity } from './gramjsBuilders';
import { buildApiPeerId } from './apiBuilders/peers';
import { buildInputEntity } from './gramjsBuilders';
import { addEntitiesToLocalDb } from './helpers';
import localDb from './localDb';
import { dispatchUserAndChatUpdates, sendUpdate, updater } from './updater';
export type State = {
seq: number;

View File

@ -1,79 +1,80 @@
import type { GroupCallConnectionData } from '../../lib/secret-sauce';
import { Api as GramJs, connection } from '../../lib/gramjs';
import type { GroupCallConnectionData } from '../../lib/secret-sauce';
import type {
ApiMessage, ApiMessageExtendedMediaPreview, ApiUpdate, ApiUpdateConnectionStateType, OnApiUpdate,
ApiStory, ApiStorySkipped,
ApiMessage, ApiMessageExtendedMediaPreview, ApiStory, ApiStorySkipped,
ApiUpdate, ApiUpdateConnectionStateType, OnApiUpdate,
} from '../types';
import localDb from './localDb';
import { DEBUG, GENERAL_TOPIC_ID } from '../../config';
import { omit, pick } from '../../util/iteratees';
import { getServerTimeOffset, setServerTimeOffset } from '../../util/serverTime';
import {
addMessageToLocalDb,
addEntitiesToLocalDb,
addPhotoToLocalDb,
resolveMessageApiChatId,
serializeBytes,
log,
swapLocalInvoiceMedia,
isChatFolder,
addStoryToLocalDb,
} from './helpers';
import { scheduleMutedTopicUpdate, scheduleMutedChatUpdate } from './scheduleUnmute';
import {
buildApiMessage,
buildApiMessageFromShort,
buildApiMessageFromShortChat,
buildApiMessageFromNotification,
buildMessageDraft,
} from './apiBuilders/messages';
import {
buildApiReaction,
buildMessageReactions,
} from './apiBuilders/reactions';
import {
buildChatMember,
buildChatMembers,
buildChatTypingStatus,
buildAvatarHash,
buildApiChatFromPreview,
buildApiChatFolder,
buildApiChatSettings,
} from './apiBuilders/chats';
import {
buildApiUser,
buildApiUserEmojiStatus,
buildApiUserStatus,
} from './apiBuilders/users';
import { omitVirtualClassFields } from './apiBuilders/helpers';
import {
buildApiNotifyException,
buildApiNotifyExceptionTopic,
buildPrivacyKey,
} from './apiBuilders/misc';
import {
buildApiMessageExtendedMediaPreview,
buildMessageMediaContent,
buildPoll,
buildPollResults,
} from './apiBuilders/messageContent';
import { buildApiStealthMode, buildApiStory } from './apiBuilders/stories';
import { buildApiPhoto, buildApiUsernames, buildPrivacyRules } from './apiBuilders/common';
import { buildApiBotMenuButton } from './apiBuilders/bots';
import {
buildApiGroupCall,
buildApiGroupCallParticipant,
buildPhoneCall,
getGroupCallId,
} from './apiBuilders/calls';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from './apiBuilders/peers';
import { buildApiEmojiInteraction, buildStickerSet } from './apiBuilders/symbols';
import { buildApiBotMenuButton } from './apiBuilders/bots';
import {
buildApiChatFolder,
buildApiChatFromPreview,
buildApiChatSettings,
buildAvatarHash,
buildChatMember,
buildChatMembers,
buildChatTypingStatus,
} from './apiBuilders/chats';
import { buildApiPhoto, buildApiUsernames, buildPrivacyRules } from './apiBuilders/common';
import { omitVirtualClassFields } from './apiBuilders/helpers';
import {
buildApiMessageExtendedMediaPreview,
buildMessageMediaContent,
buildPoll,
buildPollResults,
} from './apiBuilders/messageContent';
import {
buildApiMessage,
buildApiMessageFromNotification,
buildApiMessageFromShort,
buildApiMessageFromShortChat,
buildMessageDraft,
} from './apiBuilders/messages';
import {
buildApiNotifyException,
buildApiNotifyExceptionTopic,
buildPrivacyKey,
} from './apiBuilders/misc';
import { buildApiPeerId, getApiChatIdFromMtpPeer } from './apiBuilders/peers';
import {
buildApiReaction,
buildMessageReactions,
} from './apiBuilders/reactions';
import { buildApiStealthMode, buildApiStory } from './apiBuilders/stories';
import { buildApiEmojiInteraction, buildStickerSet } from './apiBuilders/symbols';
import {
buildApiUser,
buildApiUserEmojiStatus,
buildApiUserStatus,
} from './apiBuilders/users';
import {
buildChatPhotoForLocalDb,
buildMessageFromUpdate,
isMessageWithMedia,
buildChatPhotoForLocalDb,
} from './gramjsBuilders';
import {
addEntitiesToLocalDb,
addMessageToLocalDb,
addPhotoToLocalDb,
addStoryToLocalDb,
isChatFolder,
log,
resolveMessageApiChatId,
serializeBytes,
swapLocalInvoiceMedia,
} from './helpers';
import localDb from './localDb';
import { scheduleMutedChatUpdate, scheduleMutedTopicUpdate } from './scheduleUnmute';
export type Update = (
(GramJs.TypeUpdate | GramJs.TypeUpdates) & { _entities?: (GramJs.TypeUser | GramJs.TypeChat)[] }

View File

@ -1,17 +1,17 @@
import type { Api } from '../../../lib/gramjs';
import type { TypedBroadcastChannel } from '../../../util/multitab';
import type { ApiInitialArgs, ApiOnProgress, OnApiUpdate } from '../../types';
import type { LocalDb } from '../localDb';
import type { MethodArgs, MethodResponse, Methods } from '../methods/types';
import type { OriginRequest, ThenArg, WorkerMessageEvent } from './types';
import type { LocalDb } from '../localDb';
import type { TypedBroadcastChannel } from '../../../util/multitab';
import { IS_MULTITAB_SUPPORTED } from '../../../util/windowEnvironment';
import { DATA_BROADCAST_CHANNEL_NAME, DEBUG } from '../../../config';
import { logDebugMessage } from '../../../util/debugConsole';
import Deferred from '../../../util/Deferred';
import { getCurrentTabId, subscribeToMasterChange } from '../../../util/establishMultitabRole';
import generateUniqueId from '../../../util/generateUniqueId';
import { pause } from '../../../util/schedulers';
import { getCurrentTabId, subscribeToMasterChange } from '../../../util/establishMultitabRole';
import Deferred from '../../../util/Deferred';
import { logDebugMessage } from '../../../util/debugConsole';
import { IS_MULTITAB_SUPPORTED } from '../../../util/windowEnvironment';
type RequestStates = {
messageId: string;

View File

@ -1,7 +1,7 @@
import type { ApiInitialArgs, ApiUpdate } from '../../types';
import type { Methods, MethodArgs, MethodResponse } from '../methods/types';
import type { LocalDb } from '../localDb';
import type { DebugLevel } from '../../../util/debugConsole';
import type { ApiInitialArgs, ApiUpdate } from '../../types';
import type { LocalDb } from '../localDb';
import type { MethodArgs, MethodResponse, Methods } from '../methods/types';
export type ThenArg<T> = T extends Promise<infer U> ? U : T;

View File

@ -1,14 +1,14 @@
/* eslint-disable no-console */
import type { DebugLevel } from '../../../util/debugConsole';
import type { ApiOnProgress, ApiUpdate } from '../../types';
import type { OriginMessageEvent, WorkerMessageData } from './types';
import { DEBUG } from '../../../config';
import { callApi, cancelApiProgress, initApi } from '../methods/init';
import { log } from '../helpers';
import type { DebugLevel } from '../../../util/debugConsole';
import { DEBUG_LEVELS } from '../../../util/debugConsole';
import { throttleWithTickEnd } from '../../../util/schedulers';
import { log } from '../helpers';
import { callApi, cancelApiProgress, initApi } from '../methods/init';
declare const self: WorkerGlobalScope;

View File

@ -1,8 +1,9 @@
import type {
GroupCallParticipant,
ApiCallProtocol, ApiPhoneCallConnection,
GroupCallConnectionState,
ApiPhoneCallConnection,
ApiCallProtocol, VideoState, VideoRotation,
GroupCallParticipant,
VideoRotation,
VideoState,
} from '../../lib/secret-sauce';
export interface ApiGroupCall {

View File

@ -1,7 +1,7 @@
import type { ApiBotCommand } from './bots';
import type {
ApiChatReactions, ApiMessage, ApiPhoto, ApiStickerSet,
} from './messages';
import type { ApiBotCommand } from './bots';
import type { ApiChatInviteImporter } from './misc';
import type { ApiFakeType, ApiUsername } from './users';

View File

@ -1,6 +1,6 @@
import type { ApiLimitType, CallbackAction } from '../../global/types';
import type { ApiDocument, ApiPhoto, ApiReaction } from './messages';
import type { ApiUser } from './users';
import type { ApiLimitType, CallbackAction } from '../../global/types';
export interface ApiInitialArgs {
userAgent: string;

View File

@ -1,6 +1,6 @@
import type { ApiDocument, ApiMessageEntity, ApiPaymentCredentials } from './messages';
import type { ApiWebDocument } from './bots';
import type { ApiInvoiceContainer } from '../../types';
import type { ApiWebDocument } from './bots';
import type { ApiDocument, ApiMessageEntity, ApiPaymentCredentials } from './messages';
export interface ApiShippingAddress {
streetLine1: string;

View File

@ -1,5 +1,5 @@
import type { ApiGeoPoint, ApiMessage, ApiReaction } from './messages';
import type { ApiPrivacySettings } from '../../types';
import type { ApiGeoPoint, ApiMessage, ApiReaction } from './messages';
export interface ApiStory {
'@type'?: 'story';

View File

@ -1,16 +1,21 @@
import type {
GroupCallConnectionData,
GroupCallParticipant,
GroupCallConnectionState,
VideoState,
GroupCallParticipant,
VideoRotation,
VideoState,
} from '../../lib/secret-sauce';
import type { ApiPrivacyKey, PrivacyVisibility } from '../../types';
import type { ApiBotMenuButton } from './bots';
import type {
ApiGroupCall, ApiPhoneCall,
} from './calls';
import type {
ApiChat,
ApiChatFullInfo,
ApiTypingStatus,
ApiChatMember,
ApiChatFolder,
ApiChatFullInfo,
ApiChatMember,
ApiTypingStatus,
} from './chats';
import type {
ApiFormattedText,
@ -23,18 +28,13 @@ import type {
ApiStickerSet,
ApiThreadInfo,
} from './messages';
import type {
ApiEmojiStatus, ApiUser, ApiUserFullInfo, ApiUserStatus,
} from './users';
import type {
ApiEmojiInteraction, ApiError, ApiInviteInfo, ApiNotifyException, ApiSessionData,
} from './misc';
import type {
ApiGroupCall, ApiPhoneCall,
} from './calls';
import type { ApiBotMenuButton } from './bots';
import type { ApiPrivacyKey, PrivacyVisibility } from '../../types';
import type { ApiStealthMode, ApiStory, ApiStorySkipped } from './stories';
import type {
ApiEmojiStatus, ApiUser, ApiUserFullInfo, ApiUserStatus,
} from './users';
export type ApiUpdateReady = {
'@type': 'updateApiReady';

View File

@ -1,6 +1,6 @@
import type { ApiDocument, ApiPhoto } from './messages';
import type { ApiBotInfo } from './bots';
import type { API_CHAT_TYPES } from '../../config';
import type { ApiBotInfo } from './bots';
import type { ApiDocument, ApiPhoto } from './messages';
export interface ApiUser {
id: string;

View File

@ -1,5 +1,5 @@
import { IS_IOS, IS_SAFARI } from '../util/windowEnvironment';
import { initializeSoundsForSafari } from '../global/actions/ui/calls';
import { IS_IOS, IS_SAFARI } from '../util/windowEnvironment';
export { default as GroupCall } from '../components/calls/group/GroupCall';
export { default as ActiveCallHeader } from '../components/calls/ActiveCallHeader';

View File

@ -1,7 +1,7 @@
import { getActions, getGlobal } from '../global';
import { IS_MULTITAB_SUPPORTED } from '../util/windowEnvironment';
import { DEBUG } from '../config';
import { IS_MULTITAB_SUPPORTED } from '../util/windowEnvironment';
export { default as Main } from '../components/main/Main';
export { default as LockScreen } from '../components/main/LockScreen';

View File

@ -3,32 +3,32 @@ import React, { useEffect, useLayoutEffect } from '../lib/teact/teact';
import { getActions, withGlobal } from '../global';
import type { GlobalState } from '../global/types';
import type { UiLoaderPage } from './common/UiLoader';
import type { ThemeKey } from '../types';
import type { UiLoaderPage } from './common/UiLoader';
import { IS_INSTALL_PROMPT_SUPPORTED, IS_MULTITAB_SUPPORTED, PLATFORM_ENV } from '../util/windowEnvironment';
import {
DARK_THEME_BG_COLOR, INACTIVE_MARKER, LIGHT_THEME_BG_COLOR, PAGE_TITLE,
} from '../config';
import { selectTabState, selectTheme } from '../global/selectors';
import { updateSizes } from '../util/windowSize';
import { addActiveTabChangeListener } from '../util/activeTabMonitor';
import { hasStoredSession } from '../util/sessions';
import buildClassName from '../util/buildClassName';
import { parseInitialLocationHash } from '../util/routing';
import { setupBeforeInstallPrompt } from '../util/installPrompt';
import { parseInitialLocationHash } from '../util/routing';
import { hasStoredSession } from '../util/sessions';
import { IS_INSTALL_PROMPT_SUPPORTED, IS_MULTITAB_SUPPORTED, PLATFORM_ENV } from '../util/windowEnvironment';
import { updateSizes } from '../util/windowSize';
import useAppLayout from '../hooks/useAppLayout';
import useFlag from '../hooks/useFlag';
import usePrevious from '../hooks/usePrevious';
import useAppLayout from '../hooks/useAppLayout';
import Auth from './auth/Auth';
import Main from './main/Main.async';
import LockScreen from './main/LockScreen.async';
import AppInactive from './main/AppInactive';
import Transition from './ui/Transition';
import UiLoader from './common/UiLoader';
// import Test from './test/TestSvg';
import Auth from './auth/Auth';
import UiLoader from './common/UiLoader';
import AppInactive from './main/AppInactive';
import LockScreen from './main/LockScreen.async';
import Main from './main/Main.async';
import Transition from './ui/Transition';
import styles from './App.module.scss';

View File

@ -1,21 +1,23 @@
import '../../global/actions/initial';
import type { FC } from '../../lib/teact/teact';
import React, { memo, useRef } from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { GlobalState } from '../../global/types';
import '../../global/actions/initial';
import { PLATFORM_ENV } from '../../util/windowEnvironment';
import useHistoryBack from '../../hooks/useHistoryBack';
import useCurrentOrPrev from '../../hooks/useCurrentOrPrev';
import useElectronDrag from '../../hooks/useElectronDrag';
import useHistoryBack from '../../hooks/useHistoryBack';
import Transition from '../ui/Transition';
import AuthPhoneNumber from './AuthPhoneNumber';
import AuthCode from './AuthCode.async';
import AuthPassword from './AuthPassword.async';
import AuthRegister from './AuthRegister.async';
import AuthPhoneNumber from './AuthPhoneNumber';
import AuthQrCode from './AuthQrCode';
import AuthRegister from './AuthRegister.async';
import './Auth.scss';

View File

@ -1,8 +1,10 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';
import Loading from '../ui/Loading';
const AuthCodeAsync: FC = () => {

View File

@ -1,20 +1,22 @@
import type { FormEvent } from 'react';
import type { FC } from '../../lib/teact/teact';
import React, {
useState, useEffect, useCallback, memo, useRef,
memo, useCallback, useEffect, useRef, useState,
} from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { GlobalState } from '../../global/types';
import { IS_TOUCH_ENV } from '../../util/windowEnvironment';
import { pick } from '../../util/iteratees';
import { IS_TOUCH_ENV } from '../../util/windowEnvironment';
import renderText from '../common/helpers/renderText';
import useHistoryBack from '../../hooks/useHistoryBack';
import useLang from '../../hooks/useLang';
import TrackingMonkey from '../common/TrackingMonkey';
import InputText from '../ui/InputText';
import Loading from '../ui/Loading';
import TrackingMonkey from '../common/TrackingMonkey';
type StateProps = Pick<GlobalState, 'authPhoneNumber' | 'authIsCodeViaApp' | 'authIsLoading' | 'authError'>;

View File

@ -1,8 +1,10 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';
import Loading from '../ui/Loading';
const AuthPasswordAsync: FC = () => {

View File

@ -5,10 +5,11 @@ import { getActions, withGlobal } from '../../global';
import type { GlobalState } from '../../global/types';
import { pick } from '../../util/iteratees';
import useLang from '../../hooks/useLang';
import MonkeyPassword from '../common/PasswordMonkey';
import PasswordForm from '../common/PasswordForm';
import MonkeyPassword from '../common/PasswordMonkey';
type StateProps = Pick<GlobalState, 'authIsLoading' | 'authError' | 'authHint'>;

View File

@ -1,35 +1,35 @@
import type { ChangeEvent } from 'react';
import { requestMeasure } from '../../lib/fasterdom/fasterdom';
import monkeyPath from '../../assets/monkey.svg';
import type { FC } from '../../lib/teact/teact';
import React, {
memo, useCallback, useEffect, useLayoutEffect, useRef, useState,
} from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { ApiCountryCode } from '../../api/types';
import type { GlobalState } from '../../global/types';
import type { LangCode } from '../../types';
import type { ApiCountryCode } from '../../api/types';
import { IS_SAFARI, IS_TOUCH_ENV } from '../../util/windowEnvironment';
import { requestMeasure } from '../../lib/fasterdom/fasterdom';
import { preloadImage } from '../../util/files';
import preloadFonts from '../../util/fonts';
import { pick } from '../../util/iteratees';
import { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';
import { setLanguage } from '../../util/langProvider';
import useLang from '../../hooks/useLang';
import useFlag from '../../hooks/useFlag';
import useLangString from '../../hooks/useLangString';
import { formatPhoneNumber, getCountryCodesByIso, getCountryFromPhoneNumber } from '../../util/phoneNumber';
import { IS_SAFARI, IS_TOUCH_ENV } from '../../util/windowEnvironment';
import { getSuggestedLanguage } from './helpers/getSuggestedLanguage';
import useFlag from '../../hooks/useFlag';
import useLang from '../../hooks/useLang';
import useLangString from '../../hooks/useLangString';
import Button from '../ui/Button';
import Checkbox from '../ui/Checkbox';
import InputText from '../ui/InputText';
import Loading from '../ui/Loading';
import CountryCodeInput from './CountryCodeInput';
import monkeyPath from '../../assets/monkey.svg';
type StateProps = Pick<GlobalState, (
'connectionState' | 'authState' |
'authPhoneNumber' | 'authIsLoading' |

View File

@ -1,29 +1,29 @@
import type { FC } from '../../lib/teact/teact';
import React, {
useEffect, useRef, memo, useCallback, useLayoutEffect,
memo, useCallback, useEffect, useLayoutEffect, useRef,
} from '../../lib/teact/teact';
import { disableStrict, enableStrict } from '../../lib/fasterdom/stricterdom';
import { getActions, withGlobal } from '../../global';
import type { FC } from '../../lib/teact/teact';
import type { GlobalState } from '../../global/types';
import type { LangCode } from '../../types';
import { DEFAULT_LANG_CODE } from '../../config';
import { LOCAL_TGS_URLS } from '../common/helpers/animatedAssets';
import { setLanguage } from '../../util/langProvider';
import { disableStrict, enableStrict } from '../../lib/fasterdom/stricterdom';
import buildClassName from '../../util/buildClassName';
import { setLanguage } from '../../util/langProvider';
import { LOCAL_TGS_URLS } from '../common/helpers/animatedAssets';
import renderText from '../common/helpers/renderText';
import { getSuggestedLanguage } from './helpers/getSuggestedLanguage';
import useLangString from '../../hooks/useLangString';
import useAsync from '../../hooks/useAsync';
import useFlag from '../../hooks/useFlag';
import useLang from '../../hooks/useLang';
import useLangString from '../../hooks/useLangString';
import useMediaTransition from '../../hooks/useMediaTransition';
import useAsync from '../../hooks/useAsync';
import Loading from '../ui/Loading';
import Button from '../ui/Button';
import AnimatedIcon from '../common/AnimatedIcon';
import Button from '../ui/Button';
import Loading from '../ui/Loading';
import blankUrl from '../../assets/blank.png';

View File

@ -1,8 +1,10 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';
import Loading from '../ui/Loading';
const AuthRegisterAsync: FC = () => {

View File

@ -1,16 +1,17 @@
import type { ChangeEvent } from 'react';
import type { FC } from '../../lib/teact/teact';
import React, { useState, memo, useCallback } from '../../lib/teact/teact';
import React, { memo, useCallback, useState } from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { GlobalState } from '../../global/types';
import { pick } from '../../util/iteratees';
import useLang from '../../hooks/useLang';
import AvatarEditable from '../ui/AvatarEditable';
import Button from '../ui/Button';
import InputText from '../ui/InputText';
import AvatarEditable from '../ui/AvatarEditable';
type StateProps = Pick<GlobalState, 'authIsLoading' | 'authError'>;

View File

@ -1,17 +1,18 @@
import type { FC } from '../../lib/teact/teact';
import React, {
useState, memo, useCallback, useRef,
memo, useCallback, useRef, useState,
} from '../../lib/teact/teact';
import { withGlobal } from '../../global';
import type { ApiCountryCode } from '../../api/types';
import { ANIMATION_END_DELAY } from '../../config';
import { prepareSearchWordsForNeedle } from '../../util/searchWords';
import buildClassName from '../../util/buildClassName';
import renderText from '../common/helpers/renderText';
import useLang from '../../hooks/useLang';
import { isoToEmoji } from '../../util/emoji';
import { prepareSearchWordsForNeedle } from '../../util/searchWords';
import renderText from '../common/helpers/renderText';
import useLang from '../../hooks/useLang';
import useSyncEffect from '../../hooks/useSyncEffect';
import DropdownMenu from '../ui/DropdownMenu';

View File

@ -1,8 +1,10 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import useModuleLoader from '../../hooks/useModuleLoader';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';
type OwnProps = {
isActive?: boolean;
};

View File

@ -4,9 +4,10 @@ import { getActions, withGlobal } from '../../global';
import type { ApiGroupCall, ApiUser } from '../../api/types';
import { selectActiveGroupCall, selectPhoneCallUser } from '../../global/selectors/calls';
import { selectTabState } from '../../global/selectors';
import { selectActiveGroupCall, selectPhoneCallUser } from '../../global/selectors/calls';
import buildClassName from '../../util/buildClassName';
import useLang from '../../hooks/useLang';
import './ActiveCallHeader.scss';

View File

@ -1,9 +1,12 @@
import type { FC } from '../../../lib/teact/teact';
import React from '../../../lib/teact/teact';
import useModuleLoader from '../../../hooks/useModuleLoader';
import { Bundles } from '../../../util/moduleLoader';
import type { OwnProps } from './GroupCall';
import { Bundles } from '../../../util/moduleLoader';
import useModuleLoader from '../../../hooks/useModuleLoader';
const GroupCallAsync: FC<OwnProps> = (props) => {
const { groupCallId } = props;
const GroupCall = useModuleLoader(Bundles.Calls, 'GroupCall', !groupCallId);

View File

@ -1,40 +1,42 @@
import '../../../global/actions/calls';
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useEffect, useMemo, useRef, useState,
} from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
import '../../../global/actions/calls';
import type {
GroupCallConnectionState, GroupCallParticipant as TypeGroupCallParticipant,
} from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import type { VideoParticipant } from './hooks/useGroupCallVideoLayout';
import { IS_SCREENSHARE_SUPPORTED } from '../../../lib/secret-sauce';
import buildClassName from '../../../util/buildClassName';
import { selectChat, selectTabState } from '../../../global/selectors';
import {
selectCanInviteToActiveGroupCall,
selectGroupCall,
selectGroupCallParticipant,
selectIsAdminInActiveGroupCall,
} from '../../../global/selectors/calls';
import { selectChat, selectTabState } from '../../../global/selectors';
import buildClassName from '../../../util/buildClassName';
import { compact } from '../../../util/iteratees';
import useFlag from '../../../hooks/useFlag';
import useLang from '../../../hooks/useLang';
import useAppLayout from '../../../hooks/useAppLayout';
import useGroupCallVideoLayout from './hooks/useGroupCallVideoLayout';
import { useIntersectionObserver, useIsIntersecting } from '../../../hooks/useIntersectionObserver';
import useLastCallback from '../../../hooks/useLastCallback';
import useFlag from '../../../hooks/useFlag';
import { useFullscreenStatus } from '../../../hooks/useFullscreen';
import { useIntersectionObserver, useIsIntersecting } from '../../../hooks/useIntersectionObserver';
import useLang from '../../../hooks/useLang';
import useLastCallback from '../../../hooks/useLastCallback';
import useGroupCallVideoLayout from './hooks/useGroupCallVideoLayout';
import Button from '../../ui/Button';
import Modal from '../../ui/Modal';
import MicrophoneButton from './MicrophoneButton';
import Checkbox from '../../ui/Checkbox';
import GroupCallParticipantList from './GroupCallParticipantList';
import FloatingActionButton from '../../ui/FloatingActionButton';
import Modal from '../../ui/Modal';
import GroupCallParticipantList from './GroupCallParticipantList';
import GroupCallParticipantVideo from './GroupCallParticipantVideo';
import MicrophoneButton from './MicrophoneButton';
import styles from './GroupCall.module.scss';

View File

@ -1,5 +1,3 @@
import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';
import { THRESHOLD } from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useCallback, useMemo, useRef,
@ -7,22 +5,24 @@ import React, {
import { withGlobal } from '../../../global';
import type { ApiChat, ApiUser } from '../../../api/types';
import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';
import { GROUP_CALL_DEFAULT_VOLUME } from '../../../config';
import { THRESHOLD } from '../../../lib/secret-sauce';
import { selectChat, selectUser } from '../../../global/selectors';
import buildClassName from '../../../util/buildClassName';
import renderText from '../../common/helpers/renderText';
import { selectChat, selectUser } from '../../../global/selectors';
import formatGroupCallVolume from './helpers/formatGroupCallVolume';
import useLang from '../../../hooks/useLang';
import useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';
import useLang from '../../../hooks/useLang';
import useMenuPosition from '../../../hooks/useMenuPosition';
import Avatar from '../../common/Avatar';
import OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';
import FullNameTitle from '../../common/FullNameTitle';
import ListItem from '../../ui/ListItem';
import GroupCallParticipantMenu from './GroupCallParticipantMenu';
import FullNameTitle from '../../common/FullNameTitle';
import OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';
import styles from './GroupCallParticipant.module.scss';

View File

@ -1,16 +1,17 @@
import type { FC } from '../../../lib/teact/teact';
import React, { memo, useMemo } from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import buildClassName from '../../../util/buildClassName';
import { selectActiveGroupCall } from '../../../global/selectors/calls';
import buildClassName from '../../../util/buildClassName';
import useInfiniteScroll from '../../../hooks/useInfiniteScroll';
import useLastCallback from '../../../hooks/useLastCallback';
import GroupCallParticipant from './GroupCallParticipant';
import InfiniteScroll from '../../ui/InfiniteScroll';
import GroupCallParticipant from './GroupCallParticipant';
import styles from './GroupCallParticipantList.module.scss';

View File

@ -1,23 +1,25 @@
import type { GroupCallParticipant } from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useEffect, useState,
} from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
import type { GroupCallParticipant } from '../../../lib/secret-sauce';
import { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../config';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import { selectIsAdminInActiveGroupCall } from '../../../global/selectors/calls';
import buildClassName from '../../../util/buildClassName';
import useRunThrottled from '../../../hooks/useRunThrottled';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import useFlag from '../../../hooks/useFlag';
import useLang from '../../../hooks/useLang';
import useLastCallback from '../../../hooks/useLastCallback';
import { selectIsAdminInActiveGroupCall } from '../../../global/selectors/calls';
import useRunThrottled from '../../../hooks/useRunThrottled';
import Menu from '../../ui/Menu';
import MenuItem from '../../ui/MenuItem';
import AnimatedIcon from '../../common/AnimatedIcon';
import DeleteMemberModal from '../../right/DeleteMemberModal';
import Menu from '../../ui/Menu';
import MenuItem from '../../ui/MenuItem';
import './GroupCallParticipantMenu.scss';

View File

@ -1,35 +1,35 @@
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useCallback, useEffect, useMemo, useRef, useState,
} from '../../../lib/teact/teact';
import { withGlobal } from '../../../global';
import type { FC } from '../../../lib/teact/teact';
import type { VideoLayout, VideoParticipant } from './hooks/useGroupCallVideoLayout';
import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';
import type { ApiChat, ApiUser } from '../../../api/types';
import type { GroupCallParticipant as TypeGroupCallParticipant } from '../../../lib/secret-sauce';
import type { VideoLayout, VideoParticipant } from './hooks/useGroupCallVideoLayout';
import { IS_CANVAS_FILTER_SUPPORTED } from '../../../util/windowEnvironment';
import { GROUP_CALL_DEFAULT_VOLUME } from '../../../config';
import fastBlur from '../../../lib/fastBlur';
import { requestMutation } from '../../../lib/fasterdom/fasterdom';
import { getUserStreams, THRESHOLD } from '../../../lib/secret-sauce';
import buildClassName from '../../../util/buildClassName';
import { selectChat, selectUser } from '../../../global/selectors';
import { animate } from '../../../util/animation';
import buildClassName from '../../../util/buildClassName';
import { fastRaf } from '../../../util/schedulers';
import { requestMutation } from '../../../lib/fasterdom/fasterdom';
import { IS_CANVAS_FILTER_SUPPORTED } from '../../../util/windowEnvironment';
import formatGroupCallVolume from './helpers/formatGroupCallVolume';
import fastBlur from '../../../lib/fastBlur';
import useLang from '../../../hooks/useLang';
import useContextMenuHandlers from '../../../hooks/useContextMenuHandlers';
import useMenuPosition from '../../../hooks/useMenuPosition';
import useLastCallback from '../../../hooks/useLastCallback';
import useInterval from '../../../hooks/useInterval';
import useLang from '../../../hooks/useLang';
import useLastCallback from '../../../hooks/useLastCallback';
import useMenuPosition from '../../../hooks/useMenuPosition';
import Button from '../../ui/Button';
import OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';
import FullNameTitle from '../../common/FullNameTitle';
import GroupCallParticipantMenu from './GroupCallParticipantMenu';
import Button from '../../ui/Button';
import Skeleton from '../../ui/placeholder/Skeleton';
import GroupCallParticipantMenu from './GroupCallParticipantMenu';
import OutlinedMicrophoneIcon from './OutlinedMicrophoneIcon';
import styles from './GroupCallParticipantVideo.module.scss';

View File

@ -6,15 +6,16 @@ import { getActions, getGlobal, withGlobal } from '../../../global';
import type { ApiGroupCall } from '../../../api/types';
import { selectChat, selectTabState } from '../../../global/selectors';
import { selectChatGroupCall } from '../../../global/selectors/calls';
import buildClassName from '../../../util/buildClassName';
import { selectChat, selectTabState } from '../../../global/selectors';
import useCurrentOrPrev from '../../../hooks/useCurrentOrPrev';
import useLang from '../../../hooks/useLang';
import useShowTransition from '../../../hooks/useShowTransition';
import useCurrentOrPrev from '../../../hooks/useCurrentOrPrev';
import Button from '../../ui/Button';
import Avatar from '../../common/Avatar';
import Button from '../../ui/Button';
import './GroupCallTopPane.scss';

View File

@ -1,16 +1,18 @@
import type { GroupCallConnectionState } from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useCallback, useEffect, useMemo, useRef, useState,
} from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import type { GroupCallConnectionState } from '../../../lib/secret-sauce';
import { selectActiveGroupCall, selectGroupCallParticipant } from '../../../global/selectors/calls';
import buildClassName from '../../../util/buildClassName';
import { vibrateShort } from '../../../util/vibrate';
import usePrevious from '../../../hooks/usePrevious';
import { selectActiveGroupCall, selectGroupCallParticipant } from '../../../global/selectors/calls';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import useLang from '../../../hooks/useLang';
import usePrevious from '../../../hooks/usePrevious';
import AnimatedIcon from '../../common/AnimatedIcon';
import Button from '../../ui/Button';

View File

@ -1,9 +1,11 @@
import type { GroupCallParticipant } from '../../../lib/secret-sauce';
import { THRESHOLD } from '../../../lib/secret-sauce';
import type { FC } from '../../../lib/teact/teact';
import React, { memo, useMemo } from '../../../lib/teact/teact';
import type { GroupCallParticipant } from '../../../lib/secret-sauce';
import { THRESHOLD } from '../../../lib/secret-sauce';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import usePrevious from '../../../hooks/usePrevious';
import AnimatedIcon from '../../common/AnimatedIcon';

View File

@ -1,4 +1,5 @@
import type { GroupCallParticipant } from '../../../../lib/secret-sauce';
import { GROUP_CALL_DEFAULT_VOLUME, GROUP_CALL_VOLUME_MULTIPLIER } from '../../../../config';
export default function formatGroupCallVolume(participant: GroupCallParticipant) {

View File

@ -2,9 +2,10 @@ import type { RefObject } from 'react';
import {
useEffect, useMemo, useState,
} from '../../../../lib/teact/teact';
import useResizeObserver from '../../../../hooks/useResizeObserver';
import usePrevious from '../../../../hooks/usePrevious';
import useLastCallback from '../../../../hooks/useLastCallback';
import usePrevious from '../../../../hooks/usePrevious';
import useResizeObserver from '../../../../hooks/useResizeObserver';
const PADDING_HORIZONTAL = 10;
const PADDING_VERTICAL = 8;

View File

@ -1,8 +1,10 @@
import type { FC } from '../../../lib/teact/teact';
import React from '../../../lib/teact/teact';
import useModuleLoader from '../../../hooks/useModuleLoader';
import { Bundles } from '../../../util/moduleLoader';
import useModuleLoader from '../../../hooks/useModuleLoader';
type OwnProps = {
isActive?: boolean;
};

View File

@ -1,37 +1,39 @@
import '../../../global/actions/calls';
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useCallback, useEffect, useMemo, useRef,
} from '../../../lib/teact/teact';
import { getActions, withGlobal } from '../../../global';
import '../../../global/actions/calls';
import type { ApiPhoneCall, ApiUser } from '../../../api/types';
import {
getStreams, IS_SCREENSHARE_SUPPORTED, switchCameraInputP2p, toggleStreamP2p,
} from '../../../lib/secret-sauce';
import { selectTabState } from '../../../global/selectors';
import { selectPhoneCallUser } from '../../../global/selectors/calls';
import buildClassName from '../../../util/buildClassName';
import { formatMediaDuration } from '../../../util/dateFormat';
import {
IS_ANDROID,
IS_IOS,
IS_REQUEST_FULLSCREEN_SUPPORTED,
} from '../../../util/windowEnvironment';
import { LOCAL_TGS_URLS } from '../../common/helpers/animatedAssets';
import { selectTabState } from '../../../global/selectors';
import buildClassName from '../../../util/buildClassName';
import { selectPhoneCallUser } from '../../../global/selectors/calls';
import useLang from '../../../hooks/useLang';
import renderText from '../../common/helpers/renderText';
import useFlag from '../../../hooks/useFlag';
import { formatMediaDuration } from '../../../util/dateFormat';
import {
getStreams, IS_SCREENSHARE_SUPPORTED, switchCameraInputP2p, toggleStreamP2p,
} from '../../../lib/secret-sauce';
import useInterval from '../../../hooks/useInterval';
import useForceUpdate from '../../../hooks/useForceUpdate';
import useAppLayout from '../../../hooks/useAppLayout';
import Modal from '../../ui/Modal';
import useAppLayout from '../../../hooks/useAppLayout';
import useFlag from '../../../hooks/useFlag';
import useForceUpdate from '../../../hooks/useForceUpdate';
import useInterval from '../../../hooks/useInterval';
import useLang from '../../../hooks/useLang';
import AnimatedIcon from '../../common/AnimatedIcon';
import Avatar from '../../common/Avatar';
import Button from '../../ui/Button';
import Modal from '../../ui/Modal';
import PhoneCallButton from './PhoneCallButton';
import AnimatedIcon from '../../common/AnimatedIcon';
import styles from './PhoneCall.module.scss';

View File

@ -2,6 +2,7 @@ import type { FC } from '../../../lib/teact/teact';
import React from '../../../lib/teact/teact';
import type { OwnProps } from './RatePhoneCallModal';
import { Bundles } from '../../../util/moduleLoader';
import useModuleLoader from '../../../hooks/useModuleLoader';

View File

@ -1,16 +1,16 @@
import type { FC } from '../../../lib/teact/teact';
import React, {
memo, useRef, useState, useCallback,
memo, useCallback, useRef, useState,
} from '../../../lib/teact/teact';
import { getActions } from '../../../global';
import type { FC } from '../../../lib/teact/teact';
import useLang from '../../../hooks/useLang';
import buildClassName from '../../../util/buildClassName';
import Modal from '../../ui/Modal';
import useLang from '../../../hooks/useLang';
import Button from '../../ui/Button';
import InputText from '../../ui/InputText';
import Modal from '../../ui/Modal';
import styles from './RatePhoneCallModal.module.scss';

View File

@ -1,6 +1,8 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import type { OwnProps } from './AboutAdsModal';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';

View File

@ -2,10 +2,11 @@ import type { FC } from '../../lib/teact/teact';
import React, { memo } from '../../lib/teact/teact';
import renderText from './helpers/renderText';
import useLang from '../../hooks/useLang';
import Modal from '../ui/Modal';
import Button from '../ui/Button';
import Modal from '../ui/Modal';
import SafeLink from './SafeLink';
export type OwnProps = {

View File

@ -4,10 +4,11 @@ import React, {
} from '../../lib/teact/teact';
import { getGlobal } from '../../global';
import buildClassName from '../../util/buildClassName';
import { selectCanAnimateInterface } from '../../global/selectors';
import useLang from '../../hooks/useLang';
import buildClassName from '../../util/buildClassName';
import useFlag from '../../hooks/useFlag';
import useLang from '../../hooks/useLang';
import styles from './AnimatedCounter.module.scss';

View File

@ -4,9 +4,9 @@ import type { OwnProps as AnimatedStickerProps } from './AnimatedSticker';
import buildClassName from '../../util/buildClassName';
import useFlag from '../../hooks/useFlag';
import useLastCallback from '../../hooks/useLastCallback';
import useMediaTransition from '../../hooks/useMediaTransition';
import useFlag from '../../hooks/useFlag';
import AnimatedSticker from './AnimatedSticker';

View File

@ -1,7 +1,7 @@
import React, { memo } from '../../lib/teact/teact';
import type { OwnProps as AnimatedIconProps } from './AnimatedIcon';
import type { ApiSticker } from '../../api/types';
import type { OwnProps as AnimatedIconProps } from './AnimatedIcon';
import { ApiMediaFormat } from '../../api/types';
import { getStickerPreviewHash } from '../../global/helpers';

View File

@ -1,14 +1,15 @@
import React, { memo } from '../../lib/teact/teact';
import type { OwnProps as AnimatedIconProps } from './AnimatedIcon';
import AnimatedIcon from './AnimatedIcon';
import buildClassName from '../../util/buildClassName';
import buildStyle from '../../util/buildStyle';
import useFlag from '../../hooks/useFlag';
import useLastCallback from '../../hooks/useLastCallback';
import useMediaTransition from '../../hooks/useMediaTransition';
import useFlag from '../../hooks/useFlag';
import AnimatedIcon from './AnimatedIcon';
import styles from './AnimatedIconWithPreview.module.scss';

View File

@ -1,30 +1,29 @@
import type { RefObject } from 'react';
import type { FC } from '../../lib/teact/teact';
import type RLottieInstance from '../../lib/rlottie/RLottie';
import { requestMeasure } from '../../lib/fasterdom/fasterdom';
import { ensureRLottie, getRLottie } from '../../lib/rlottie/RLottie.async';
import React, {
useEffect, useRef, memo, useState,
memo, useEffect, useRef, useState,
} from '../../lib/teact/teact';
import { IS_ELECTRON } from '../../config';
import type RLottieInstance from '../../lib/rlottie/RLottie';
import { IS_ELECTRON } from '../../config';
import { requestMeasure } from '../../lib/fasterdom/fasterdom';
import { ensureRLottie, getRLottie } from '../../lib/rlottie/RLottie.async';
import buildClassName from '../../util/buildClassName';
import buildStyle from '../../util/buildStyle';
import generateUniqueId from '../../util/generateUniqueId';
import { hexToRgb } from '../../util/switchTheme';
import useLastCallback from '../../hooks/useLastCallback';
import useHeavyAnimationCheck, { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';
import usePriorityPlaybackCheck, { isPriorityPlaybackActive } from '../../hooks/usePriorityPlaybackCheck';
import useColorFilter from '../../hooks/stickers/useColorFilter';
import useBackgroundMode, { isBackgroundModeActive } from '../../hooks/useBackgroundMode';
import useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';
import { useStateRef } from '../../hooks/useStateRef';
import useHeavyAnimationCheck, { isHeavyAnimating } from '../../hooks/useHeavyAnimationCheck';
import useLastCallback from '../../hooks/useLastCallback';
import usePriorityPlaybackCheck, { isPriorityPlaybackActive } from '../../hooks/usePriorityPlaybackCheck';
import useSharedIntersectionObserver from '../../hooks/useSharedIntersectionObserver';
import useThrottledCallback from '../../hooks/useThrottledCallback';
import useColorFilter from '../../hooks/stickers/useColorFilter';
import { useStateRef } from '../../hooks/useStateRef';
import useSyncEffect from '../../hooks/useSyncEffect';
import useThrottledCallback from '../../hooks/useThrottledCallback';
import useUniqueId from '../../hooks/useUniqueId';
export type OwnProps = {

View File

@ -5,14 +5,12 @@ import React, {
import { getActions } from '../../global';
import type { ApiAudio, ApiMessage, ApiVoice } from '../../api/types';
import { ApiMediaFormat } from '../../api/types';
import type { ISettings } from '../../types';
import { AudioOrigin } from '../../types';
import type { BufferedRange } from '../../hooks/useBuffering';
import type { LangFn } from '../../hooks/useLang';
import type { ISettings } from '../../types';
import { ApiMediaFormat } from '../../api/types';
import { AudioOrigin } from '../../types';
import { MAX_EMPTY_WAVEFORM_POINTS, renderWaveform } from './helpers/waveform';
import renderText from './helpers/renderText';
import { getFileSizeString } from './helpers/documentInfo';
import {
getMediaDuration,
getMediaTransferState,
@ -21,25 +19,27 @@ import {
isMessageLocal,
isOwnMessage,
} from '../../global/helpers';
import { makeTrackId } from '../../util/audioPlayer';
import buildClassName from '../../util/buildClassName';
import { captureEvents } from '../../util/captureEvents';
import { formatMediaDateTime, formatMediaDuration, formatPastTimeShort } from '../../util/dateFormat';
import { decodeWaveform, interpolateArray } from '../../util/waveform';
import { makeTrackId } from '../../util/audioPlayer';
import { getFileSizeString } from './helpers/documentInfo';
import renderText from './helpers/renderText';
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';
import useShowTransition from '../../hooks/useShowTransition';
import type { BufferedRange } from '../../hooks/useBuffering';
import useBuffering from '../../hooks/useBuffering';
import useAudioPlayer from '../../hooks/useAudioPlayer';
import useLang from '../../hooks/useLang';
import { captureEvents } from '../../util/captureEvents';
import useMedia from '../../hooks/useMedia';
import useAppLayout from '../../hooks/useAppLayout';
import Button from '../ui/Button';
import ProgressSpinner from '../ui/ProgressSpinner';
import Link from '../ui/Link';
import ProgressSpinner from '../ui/ProgressSpinner';
import './Audio.scss';

View File

@ -1,8 +1,8 @@
import type { MouseEvent as ReactMouseEvent } from 'react';
import type { FC, TeactNode } from '../../lib/teact/teact';
import React, { memo, useRef } from '../../lib/teact/teact';
import { getActions } from '../../global';
import type { FC, TeactNode } from '../../lib/teact/teact';
import type { ApiChat, ApiPhoto, ApiUser } from '../../api/types';
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
import type { StoryViewerOrigin } from '../../types';
@ -14,20 +14,20 @@ import {
getChatTitle,
getUserColorKey,
getUserFullName,
isUserId,
getUserStoryHtmlId,
isChatWithRepliesBot,
isDeletedUser,
getUserStoryHtmlId,
isUserId,
} from '../../global/helpers';
import { getFirstLetters } from '../../util/textFormat';
import buildClassName, { createClassNameBuilder } from '../../util/buildClassName';
import { getFirstLetters } from '../../util/textFormat';
import renderText from './helpers/renderText';
import useMedia from '../../hooks/useMedia';
import useMediaTransition from '../../hooks/useMediaTransition';
import { useFastClick } from '../../hooks/useFastClick';
import useLang from '../../hooks/useLang';
import useLastCallback from '../../hooks/useLastCallback';
import { useFastClick } from '../../hooks/useFastClick';
import useMedia from '../../hooks/useMedia';
import useMediaTransition from '../../hooks/useMediaTransition';
import OptimizedVideo from '../ui/OptimizedVideo';
import AvatarStoryCircle from './AvatarStoryCircle';

View File

@ -1,10 +1,11 @@
import type { FC } from '../../lib/teact/teact';
import React, { memo } from '../../lib/teact/teact';
import type { AvatarSize } from './Avatar';
import type { ApiChat, ApiUser } from '../../api/types';
import type { AvatarSize } from './Avatar';
import buildClassName from '../../util/buildClassName';
import useLang from '../../hooks/useLang';
import Avatar from './Avatar';

View File

@ -3,13 +3,13 @@ import React, {
} from '../../lib/teact/teact';
import { withGlobal } from '../../global';
import type { AvatarSize } from './Avatar';
import type { ThemeKey } from '../../types';
import type { AvatarSize } from './Avatar';
import { REM } from './helpers/mediaDimensions';
import { DPR } from '../../util/windowEnvironment';
import { selectTheme, selectUser, selectUserStories } from '../../global/selectors';
import buildClassName from '../../util/buildClassName';
import { DPR } from '../../util/windowEnvironment';
import { REM } from './helpers/mediaDimensions';
interface OwnProps {
// eslint-disable-next-line react/no-unused-prop-types

View File

@ -1,6 +1,8 @@
import type { FC } from '../../lib/teact/teact';
import React from '../../lib/teact/teact';
import type { OwnProps } from './CalendarModal';
import { Bundles } from '../../util/moduleLoader';
import useModuleLoader from '../../hooks/useModuleLoader';

View File

@ -1,18 +1,20 @@
import type { FC } from '../../lib/teact/teact';
import React, {
memo, useState, useEffect, useMemo, useCallback,
memo, useCallback, useEffect, useMemo, useState,
} from '../../lib/teact/teact';
import type { LangFn } from '../../hooks/useLang';
import { MAX_INT_32 } from '../../config';
import buildClassName from '../../util/buildClassName';
import { formatTime, formatDateToString, getDayStart } from '../../util/dateFormat';
import type { LangFn } from '../../hooks/useLang';
import { formatDateToString, formatTime, getDayStart } from '../../util/dateFormat';
import useFlag from '../../hooks/useFlag';
import useLang from '../../hooks/useLang';
import usePrevious from '../../hooks/usePrevious';
import useFlag from '../../hooks/useFlag';
import Modal from '../ui/Modal';
import Button from '../ui/Button';
import Modal from '../ui/Modal';
import './CalendarModal.scss';

View File

@ -1,15 +1,24 @@
import type { FC } from '../../lib/teact/teact';
import React, {
memo, useEffect, useMemo, useState,
} from '../../lib/teact/teact';
import { getActions, withGlobal } from '../../global';
import type { FC } from '../../lib/teact/teact';
import type {
ApiChat, ApiCountryCode, ApiUser, ApiUsername,
} from '../../api/types';
import { MAIN_THREAD_ID } from '../../api/types';
import { TME_LINK_PREFIX } from '../../config';
import {
getChatLink,
getHasAdminRight,
getTopicLink,
isChatChannel,
isUserId,
isUserRightBanned,
selectIsChatMuted,
} from '../../global/helpers';
import {
selectChat,
selectChatFullInfo,
@ -19,23 +28,14 @@ import {
selectUser,
selectUserFullInfo,
} from '../../global/selectors';
import {
getChatLink,
getTopicLink,
getHasAdminRight,
isChatChannel,
isUserId,
isUserRightBanned,
selectIsChatMuted,
} from '../../global/helpers';
import renderText from './helpers/renderText';
import { copyTextToClipboard } from '../../util/clipboard';
import { formatPhoneNumberWithCode } from '../../util/phoneNumber';
import { debounce } from '../../util/schedulers';
import stopEvent from '../../util/stopEvent';
import renderText from './helpers/renderText';
import useLastCallback from '../../hooks/useLastCallback';
import useLang from '../../hooks/useLang';
import useLastCallback from '../../hooks/useLastCallback';
import ListItem from '../ui/ListItem';
import Switcher from '../ui/Switcher';

View File

@ -1,3 +1,4 @@
import type { FC } from '../../lib/teact/teact';
import React, {
memo,
useEffect,
@ -7,18 +8,18 @@ import React, {
} from '../../lib/teact/teact';
import { getActions } from '../../global';
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
import type { FC } from '../../lib/teact/teact';
import type { ApiChat } from '../../api/types';
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
import buildClassName from '../../util/buildClassName';
import { getOrderedTopics } from '../../global/helpers';
import { getIsMobile } from '../../hooks/useAppLayout';
import useLang from '../../hooks/useLang';
import { useFastClick } from '../../hooks/useFastClick';
import buildClassName from '../../util/buildClassName';
import { REM } from './helpers/mediaDimensions';
import renderText from './helpers/renderText';
import { getIsMobile } from '../../hooks/useAppLayout';
import { useFastClick } from '../../hooks/useFastClick';
import useLang from '../../hooks/useLang';
import TopicIcon from './TopicIcon';
import styles from './ChatForumLastMessage.module.scss';

View File

@ -1,8 +1,7 @@
import type { FC } from '../../lib/teact/teact';
import React, { memo, useCallback } from '../../lib/teact/teact';
import { getActions } from '../../global';
import type { FC } from '../../lib/teact/teact';
import buildClassName from '../../util/buildClassName';
import Link from '../ui/Link';

View File

@ -1,32 +1,32 @@
import type { FC } from '../../lib/teact/teact';
import React, {
memo, useRef, useState, useMemo,
memo, useMemo, useRef, useState,
} from '../../lib/teact/teact';
import { getActions } from '../../global';
import type { ApiChat, ApiTopic } from '../../api/types';
import { REM } from './helpers/mediaDimensions';
import { CHAT_HEIGHT_PX } from '../../config';
import renderText from './helpers/renderText';
import { getCanPostInChat, isUserId } from '../../global/helpers';
import buildClassName from '../../util/buildClassName';
import { REM } from './helpers/mediaDimensions';
import renderText from './helpers/renderText';
import useLastCallback from '../../hooks/useLastCallback';
import useInfiniteScroll from '../../hooks/useInfiniteScroll';
import useLang from '../../hooks/useLang';
import useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';
import useInputFocusOnOpen from '../../hooks/useInputFocusOnOpen';
import useKeyboardListNavigation from '../../hooks/useKeyboardListNavigation';
import useLang from '../../hooks/useLang';
import useLastCallback from '../../hooks/useLastCallback';
import Loading from '../ui/Loading';
import Modal from '../ui/Modal';
import InputText from '../ui/InputText';
import Button from '../ui/Button';
import InfiniteScroll from '../ui/InfiniteScroll';
import InputText from '../ui/InputText';
import ListItem from '../ui/ListItem';
import Loading from '../ui/Loading';
import Modal from '../ui/Modal';
import Transition from '../ui/Transition';
import GroupChatInfo from './GroupChatInfo';
import PrivateChatInfo from './PrivateChatInfo';
import Transition from '../ui/Transition';
import TopicIcon from './TopicIcon';
import './ChatOrUserPicker.scss';

View File

@ -1,16 +1,12 @@
import type { FC } from '../../lib/teact/teact';
import React, {
memo, useEffect, useMemo, useRef, useState,
} from '../../lib/teact/teact';
import { requestMeasure, requestNextMutation } from '../../lib/fasterdom/fasterdom';
import { getActions, getGlobal, withGlobal } from '../../global';
import type { FC } from '../../lib/teact/teact';
import type {
TabState, MessageListType, GlobalState, ApiDraft, MessageList,
} from '../../global/types';
import type {
ApiAttachMenuPeerType,
ApiAttachment,
ApiAttachMenuPeerType,
ApiAvailableReaction,
ApiBotCommand,
ApiBotInlineMediaResult,
@ -29,7 +25,10 @@ import type {
ApiUser,
ApiVideo,
} from '../../api/types';
import type { InlineBotSettings, ISettings, IAnchorPosition } from '../../types';
import type {
ApiDraft, GlobalState, MessageList, MessageListType, TabState,
} from '../../global/types';
import type { IAnchorPosition, InlineBotSettings, ISettings } from '../../types';
import {
BASE_EMOJI_KEYWORD_LANG,
@ -39,8 +38,14 @@ import {
SCHEDULED_WHEN_ONLINE,
SEND_MESSAGE_ACTION_INTERVAL,
} from '../../config';
import { IS_VOICE_RECORDING_SUPPORTED, IS_IOS } from '../../util/windowEnvironment';
import { MEMO_EMPTY_ARRAY } from '../../util/memo';
import { requestMeasure, requestNextMutation } from '../../lib/fasterdom/fasterdom';
import {
getAllowedAttachmentOptions,
isChatAdmin,
isChatChannel,
isChatSuperGroup,
isUserId,
} from '../../global/helpers';
import {
selectBot,
selectCanPlayAnimatedEmojis,
@ -71,84 +76,79 @@ import {
selectUserFullInfo,
selectUserStory,
} from '../../global/selectors';
import {
getAllowedAttachmentOptions,
isChatAdmin,
isChatChannel,
isChatSuperGroup,
isUserId,
} from '../../global/helpers';
import { selectCurrentLimit } from '../../global/selectors/limits';
import buildClassName from '../../util/buildClassName';
import { processMessageInputForCustomEmoji } from '../../util/customEmojiManager';
import { formatMediaDuration, formatVoiceRecordDuration } from '../../util/dateFormat';
import deleteLastCharacterOutsideSelection from '../../util/deleteLastCharacterOutsideSelection';
import focusEditableElement from '../../util/focusEditableElement';
import { MEMO_EMPTY_ARRAY } from '../../util/memo';
import parseMessageInput from '../../util/parseMessageInput';
import { insertHtmlInSelection } from '../../util/selection';
import deleteLastCharacterOutsideSelection from '../../util/deleteLastCharacterOutsideSelection';
import buildClassName from '../../util/buildClassName';
import windowSize from '../../util/windowSize';
import { getServerTime } from '../../util/serverTime';
import { selectCurrentLimit } from '../../global/selectors/limits';
import { processMessageInputForCustomEmoji } from '../../util/customEmojiManager';
import { isSelectionInsideInput } from '../middle/composer/helpers/selection';
import { getTextWithEntitiesAsHtml } from './helpers/renderTextWithEntities';
import { buildCustomEmojiHtml } from '../middle/composer/helpers/customEmoji';
import buildAttachment, { prepareAttachmentsToSend } from '../middle/composer/helpers/buildAttachment';
import { IS_IOS, IS_VOICE_RECORDING_SUPPORTED } from '../../util/windowEnvironment';
import windowSize from '../../util/windowSize';
import applyIosAutoCapitalizationFix from '../middle/composer/helpers/applyIosAutoCapitalizationFix';
import renderText from './helpers/renderText';
import buildAttachment, { prepareAttachmentsToSend } from '../middle/composer/helpers/buildAttachment';
import { buildCustomEmojiHtml } from '../middle/composer/helpers/customEmoji';
import { isSelectionInsideInput } from '../middle/composer/helpers/selection';
import { REM } from './helpers/mediaDimensions';
import renderText from './helpers/renderText';
import { getTextWithEntitiesAsHtml } from './helpers/renderTextWithEntities';
import useLastCallback from '../../hooks/useLastCallback';
import useSignal from '../../hooks/useSignal';
import useFlag from '../../hooks/useFlag';
import usePrevious from '../../hooks/usePrevious';
import useContextMenuHandlers from '../../hooks/useContextMenuHandlers';
import useLang from '../../hooks/useLang';
import useSendMessageAction from '../../hooks/useSendMessageAction';
import useInterval from '../../hooks/useInterval';
import useSyncEffect from '../../hooks/useSyncEffect';
import useGetSelectionRange from '../../hooks/useGetSelectionRange';
import useDerivedState from '../../hooks/useDerivedState';
import { useStateRef } from '../../hooks/useStateRef';
import useEffectWithPrevDeps from '../../hooks/useEffectWithPrevDeps';
import useTimeout from '../../hooks/useTimeout';
import useFlag from '../../hooks/useFlag';
import useGetSelectionRange from '../../hooks/useGetSelectionRange';
import useInterval from '../../hooks/useInterval';
import useLang from '../../hooks/useLang';
import useLastCallback from '../../hooks/useLastCallback';
import usePrevious from '../../hooks/usePrevious';
import useSchedule from '../../hooks/useSchedule';
import useSendMessageAction from '../../hooks/useSendMessageAction';
import useShowTransition from '../../hooks/useShowTransition';
import useSignal from '../../hooks/useSignal';
import { useStateRef } from '../../hooks/useStateRef';
import useSyncEffect from '../../hooks/useSyncEffect';
import useTimeout from '../../hooks/useTimeout';
import useAttachmentModal from '../middle/composer/hooks/useAttachmentModal';
import useVoiceRecording from '../middle/composer/hooks/useVoiceRecording';
import useEmojiTooltip from '../middle/composer/hooks/useEmojiTooltip';
import useCustomEmojiTooltip from '../middle/composer/hooks/useCustomEmojiTooltip';
import useStickerTooltip from '../middle/composer/hooks/useStickerTooltip';
import useMentionTooltip from '../middle/composer/hooks/useMentionTooltip';
import useInlineBotTooltip from '../middle/composer/hooks/useInlineBotTooltip';
import useBotCommandTooltip from '../middle/composer/hooks/useBotCommandTooltip';
import useClipboardPaste from '../middle/composer/hooks/useClipboardPaste';
import useCustomEmojiTooltip from '../middle/composer/hooks/useCustomEmojiTooltip';
import useDraft from '../middle/composer/hooks/useDraft';
import useEditing from '../middle/composer/hooks/useEditing';
import useClipboardPaste from '../middle/composer/hooks/useClipboardPaste';
import useShowTransition from '../../hooks/useShowTransition';
import useEmojiTooltip from '../middle/composer/hooks/useEmojiTooltip';
import useInlineBotTooltip from '../middle/composer/hooks/useInlineBotTooltip';
import useMentionTooltip from '../middle/composer/hooks/useMentionTooltip';
import useStickerTooltip from '../middle/composer/hooks/useStickerTooltip';
import useVoiceRecording from '../middle/composer/hooks/useVoiceRecording';
import DropArea, { DropAreaState } from '../middle/composer/DropArea.async';
import AttachmentModal from '../middle/composer/AttachmentModal.async';
import PollModal from '../middle/composer/PollModal.async';
import DeleteMessageModal from './DeleteMessageModal.async';
import SendAsMenu from '../middle/composer/SendAsMenu.async';
import MentionTooltip from '../middle/composer/MentionTooltip.async';
import BotCommandTooltip from '../middle/composer/BotCommandTooltip.async';
import InlineBotTooltip from '../middle/composer/InlineBotTooltip.async';
import ComposerEmbeddedMessage from '../middle/composer/ComposerEmbeddedMessage';
import WebPagePreview from '../middle/composer/WebPagePreview';
import BotMenuButton from '../middle/composer/BotMenuButton';
import ResponsiveHoverButton from '../ui/ResponsiveHoverButton';
import Button from '../ui/Button';
import Avatar from './Avatar';
import SymbolMenuButton from '../middle/composer/SymbolMenuButton';
import MessageInput from '../middle/composer/MessageInput';
import Spinner from '../ui/Spinner';
import AttachMenu from '../middle/composer/AttachMenu';
import BotKeyboardMenu from '../middle/composer/BotKeyboardMenu';
import BotCommandMenu from '../middle/composer/BotCommandMenu.async';
import BotCommandTooltip from '../middle/composer/BotCommandTooltip.async';
import BotKeyboardMenu from '../middle/composer/BotKeyboardMenu';
import BotMenuButton from '../middle/composer/BotMenuButton';
import ComposerEmbeddedMessage from '../middle/composer/ComposerEmbeddedMessage';
import CustomEmojiTooltip from '../middle/composer/CustomEmojiTooltip.async';
import StickerTooltip from '../middle/composer/StickerTooltip.async';
import EmojiTooltip from '../middle/composer/EmojiTooltip.async';
import CustomSendMenu from '../middle/composer/CustomSendMenu.async';
import DropArea, { DropAreaState } from '../middle/composer/DropArea.async';
import EmojiTooltip from '../middle/composer/EmojiTooltip.async';
import InlineBotTooltip from '../middle/composer/InlineBotTooltip.async';
import MentionTooltip from '../middle/composer/MentionTooltip.async';
import MessageInput from '../middle/composer/MessageInput';
import PollModal from '../middle/composer/PollModal.async';
import SendAsMenu from '../middle/composer/SendAsMenu.async';
import StickerTooltip from '../middle/composer/StickerTooltip.async';
import SymbolMenuButton from '../middle/composer/SymbolMenuButton';
import WebPagePreview from '../middle/composer/WebPagePreview';
import ReactionSelector from '../middle/message/ReactionSelector';
import Button from '../ui/Button';
import ResponsiveHoverButton from '../ui/ResponsiveHoverButton';
import Spinner from '../ui/Spinner';
import Avatar from './Avatar';
import DeleteMessageModal from './DeleteMessageModal.async';
import ReactionStaticEmoji from './ReactionStaticEmoji';
import './Composer.scss';

Some files were not shown because too many files have changed in this diff Show More