Global: Split types into separate files (#5341)
This commit is contained in:
parent
a3f57d2982
commit
6563d37e8a
@ -2,8 +2,7 @@
|
|||||||
import BigInt from 'big-integer';
|
import BigInt from 'big-integer';
|
||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiLimitType, ApiPremiumSection } from '../../../global/types';
|
import type { ApiAppConfig, ApiLimitType, ApiPremiumSection } from '../../types';
|
||||||
import type { ApiAppConfig } from '../../types';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
DEFAULT_LIMITS,
|
DEFAULT_LIMITS,
|
||||||
|
|||||||
@ -1,16 +1,18 @@
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
import { strippedPhotoToJpg } from '../../../lib/gramjs/Utils';
|
import { strippedPhotoToJpg } from '../../../lib/gramjs/Utils';
|
||||||
|
|
||||||
import type { ApiPrivacySettings, BotsPrivacyType, PrivacyVisibility } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiFormattedText,
|
ApiFormattedText,
|
||||||
ApiMessageEntity,
|
ApiMessageEntity,
|
||||||
ApiMessageEntityDefault,
|
ApiMessageEntityDefault,
|
||||||
ApiPhoto,
|
ApiPhoto,
|
||||||
ApiPhotoSize,
|
ApiPhotoSize,
|
||||||
|
ApiPrivacySettings,
|
||||||
ApiThumbnail,
|
ApiThumbnail,
|
||||||
ApiUsername,
|
ApiUsername,
|
||||||
ApiVideoSize,
|
ApiVideoSize,
|
||||||
|
BotsPrivacyType,
|
||||||
|
PrivacyVisibility,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import {
|
import {
|
||||||
ApiMessageEntityTypes,
|
ApiMessageEntityTypes,
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiDraft } from '../../../global/types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiAction,
|
ApiAction,
|
||||||
ApiAttachment,
|
ApiAttachment,
|
||||||
ApiChat,
|
ApiChat,
|
||||||
ApiContact,
|
ApiContact,
|
||||||
|
ApiDraft,
|
||||||
ApiFactCheck,
|
ApiFactCheck,
|
||||||
ApiFormattedText,
|
ApiFormattedText,
|
||||||
ApiGroupCall,
|
ApiGroupCall,
|
||||||
|
|||||||
@ -1,12 +1,19 @@
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiPrivacyKey } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiChatLink,
|
ApiChatLink,
|
||||||
ApiCollectionInfo,
|
ApiCollectibleInfo,
|
||||||
ApiConfig, ApiCountry, ApiLanguage, ApiOldLangString,
|
ApiConfig,
|
||||||
|
ApiCountry,
|
||||||
|
ApiLanguage,
|
||||||
|
ApiOldLangString,
|
||||||
ApiPeerColors,
|
ApiPeerColors,
|
||||||
ApiSession, ApiTimezone, ApiUrlAuthResult, ApiWallpaper, ApiWebSession,
|
ApiPrivacyKey,
|
||||||
|
ApiSession,
|
||||||
|
ApiTimezone,
|
||||||
|
ApiUrlAuthResult,
|
||||||
|
ApiWallpaper,
|
||||||
|
ApiWebSession,
|
||||||
LangPackStringValue,
|
LangPackStringValue,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
|
|
||||||
@ -332,7 +339,7 @@ export function buildApiChatLink(data: GramJs.account.ResolvedBusinessChatLinks)
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function buildApiCollectibleInfo(info: GramJs.fragment.TypeCollectibleInfo): ApiCollectionInfo {
|
export function buildApiCollectibleInfo(info: GramJs.fragment.TypeCollectibleInfo): ApiCollectibleInfo {
|
||||||
const {
|
const {
|
||||||
amount,
|
amount,
|
||||||
currency,
|
currency,
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import bigInt from 'big-integer';
|
import bigInt from 'big-integer';
|
||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiPremiumSection } from '../../../global/types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiBoost,
|
ApiBoost,
|
||||||
ApiBoostsStatus,
|
ApiBoostsStatus,
|
||||||
@ -15,6 +14,7 @@ import type {
|
|||||||
ApiPaymentSavedInfo,
|
ApiPaymentSavedInfo,
|
||||||
ApiPremiumGiftCodeOption,
|
ApiPremiumGiftCodeOption,
|
||||||
ApiPremiumPromo,
|
ApiPremiumPromo,
|
||||||
|
ApiPremiumSection,
|
||||||
ApiPremiumSubscriptionOption,
|
ApiPremiumSubscriptionOption,
|
||||||
ApiPrepaidGiveaway,
|
ApiPrepaidGiveaway,
|
||||||
ApiPrepaidStarsGiveaway,
|
ApiPrepaidStarsGiveaway,
|
||||||
|
|||||||
@ -2,7 +2,6 @@ import BigInt from 'big-integer';
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
import { generateRandomBytes, readBigIntFromBuffer } from '../../../lib/gramjs/Helpers';
|
import { generateRandomBytes, readBigIntFromBuffer } from '../../../lib/gramjs/Helpers';
|
||||||
|
|
||||||
import type { ApiInputPrivacyRules, ApiPrivacyKey } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiBotApp,
|
ApiBotApp,
|
||||||
ApiChatAdminRights,
|
ApiChatAdminRights,
|
||||||
@ -11,6 +10,7 @@ import type {
|
|||||||
ApiChatReactions,
|
ApiChatReactions,
|
||||||
ApiFormattedText,
|
ApiFormattedText,
|
||||||
ApiGroupCall,
|
ApiGroupCall,
|
||||||
|
ApiInputPrivacyRules,
|
||||||
ApiInputReplyInfo,
|
ApiInputReplyInfo,
|
||||||
ApiInputStorePaymentPurpose,
|
ApiInputStorePaymentPurpose,
|
||||||
ApiMessageEntity,
|
ApiMessageEntity,
|
||||||
@ -19,6 +19,7 @@ import type {
|
|||||||
ApiPhoto,
|
ApiPhoto,
|
||||||
ApiPoll,
|
ApiPoll,
|
||||||
ApiPremiumGiftCodeOption,
|
ApiPremiumGiftCodeOption,
|
||||||
|
ApiPrivacyKey,
|
||||||
ApiReactionWithPaid,
|
ApiReactionWithPaid,
|
||||||
ApiReportReason,
|
ApiReportReason,
|
||||||
ApiRequestInputInvoice,
|
ApiRequestInputInvoice,
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import BigInt from 'big-integer';
|
import BigInt from 'big-integer';
|
||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiDraft } from '../../../global/types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiChat,
|
ApiChat,
|
||||||
ApiChatAdminRights,
|
ApiChatAdminRights,
|
||||||
@ -9,6 +8,7 @@ import type {
|
|||||||
ApiChatFolder,
|
ApiChatFolder,
|
||||||
ApiChatFullInfo,
|
ApiChatFullInfo,
|
||||||
ApiChatReactions,
|
ApiChatReactions,
|
||||||
|
ApiDraft,
|
||||||
ApiGroupCall,
|
ApiGroupCall,
|
||||||
ApiMessage,
|
ApiMessage,
|
||||||
ApiMissingInvitedUser,
|
ApiMissingInvitedUser,
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
import BigInt from 'big-integer';
|
import BigInt from 'big-integer';
|
||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { WebPageMediaSize } from '../../../global/types';
|
import type { ThreadId, WebPageMediaSize } from '../../../types';
|
||||||
import type { ThreadId } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiAttachment,
|
ApiAttachment,
|
||||||
ApiChat,
|
ApiChat,
|
||||||
|
|||||||
@ -2,14 +2,15 @@ import BigInt from 'big-integer';
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { LANG_PACKS } from '../../../config';
|
import type { LANG_PACKS } from '../../../config';
|
||||||
import type { ApiInputPrivacyRules, ApiPrivacyKey } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiAppConfig,
|
ApiAppConfig,
|
||||||
ApiConfig,
|
ApiConfig,
|
||||||
ApiError,
|
ApiError,
|
||||||
|
ApiInputPrivacyRules,
|
||||||
ApiLanguage,
|
ApiLanguage,
|
||||||
ApiNotifyException,
|
ApiNotifyException,
|
||||||
ApiPhoto,
|
ApiPhoto,
|
||||||
|
ApiPrivacyKey,
|
||||||
ApiUser,
|
ApiUser,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { Api as GramJs } from '../../../lib/gramjs';
|
import { Api as GramJs } from '../../../lib/gramjs';
|
||||||
|
|
||||||
import type { ApiInputPrivacyRules } from '../../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiError,
|
ApiError,
|
||||||
|
ApiInputPrivacyRules,
|
||||||
ApiPeer,
|
ApiPeer,
|
||||||
ApiPeerStories,
|
ApiPeerStories,
|
||||||
ApiReaction,
|
ApiReaction,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import type { ApiBotCommand } from './bots';
|
import type { ApiBotCommand } from './bots';
|
||||||
import type {
|
import type {
|
||||||
ApiChatReactions, ApiFormattedText, ApiPhoto, ApiStickerSet,
|
ApiChatReactions, ApiFormattedText, ApiInputMessageReplyInfo, ApiPhoto, ApiStickerSet,
|
||||||
} from './messages';
|
} from './messages';
|
||||||
import type { ApiChatInviteImporter } from './misc';
|
import type { ApiChatInviteImporter } from './misc';
|
||||||
import type {
|
import type {
|
||||||
@ -296,3 +296,11 @@ export interface ApiChatLink {
|
|||||||
chatId: string;
|
chatId: string;
|
||||||
text: ApiFormattedText;
|
text: ApiFormattedText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ApiDraft = {
|
||||||
|
text?: ApiFormattedText;
|
||||||
|
replyInfo?: ApiInputMessageReplyInfo;
|
||||||
|
date?: number;
|
||||||
|
effectId?: string;
|
||||||
|
isLocal?: boolean;
|
||||||
|
};
|
||||||
|
|||||||
@ -1,5 +1,4 @@
|
|||||||
import type { WebPageMediaSize } from '../../global/types';
|
import type { ThreadId, WebPageMediaSize } from '../../types';
|
||||||
import type { ThreadId } from '../../types';
|
|
||||||
import type { ApiWebDocument } from './bots';
|
import type { ApiWebDocument } from './bots';
|
||||||
import type { ApiGroupCall, PhoneCallAction } from './calls';
|
import type { ApiGroupCall, PhoneCallAction } from './calls';
|
||||||
import type { ApiChat, ApiPeerColor } from './chats';
|
import type { ApiChat, ApiPeerColor } from './chats';
|
||||||
|
|||||||
@ -1,9 +1,10 @@
|
|||||||
import type { TeactNode } from '../../lib/teact/teact';
|
import type { TeactNode } from '../../lib/teact/teact';
|
||||||
|
|
||||||
import type { ApiLimitType, ApiPremiumSection, CallbackAction } from '../../global/types';
|
import type { CallbackAction } from '../../global/types';
|
||||||
import type { IconName } from '../../types/icons';
|
import type { IconName } from '../../types/icons';
|
||||||
import type { LangFnParameters } from '../../util/localization';
|
import type { LangFnParameters } from '../../util/localization';
|
||||||
import type { ApiDocument, ApiPhoto, ApiReaction } from './messages';
|
import type { ApiDocument, ApiPhoto, ApiReaction } from './messages';
|
||||||
|
import type { ApiPremiumSection, ApiStarsSubscriptionPricing } from './payments';
|
||||||
import type { ApiUser } from './users';
|
import type { ApiUser } from './users';
|
||||||
|
|
||||||
export interface ApiInitialArgs {
|
export interface ApiInitialArgs {
|
||||||
@ -176,11 +177,6 @@ export type ApiChatInviteInfo = {
|
|||||||
subscriptionPricing?: ApiStarsSubscriptionPricing;
|
subscriptionPricing?: ApiStarsSubscriptionPricing;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type ApiStarsSubscriptionPricing = {
|
|
||||||
period: number;
|
|
||||||
amount: number;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type ApiChatInviteImporter = {
|
export type ApiChatInviteImporter = {
|
||||||
userId: string;
|
userId: string;
|
||||||
date: number;
|
date: number;
|
||||||
@ -304,7 +300,7 @@ type ApiUrlAuthResultDefault = {
|
|||||||
|
|
||||||
export type ApiUrlAuthResult = ApiUrlAuthResultRequest | ApiUrlAuthResultAccepted | ApiUrlAuthResultDefault;
|
export type ApiUrlAuthResult = ApiUrlAuthResultRequest | ApiUrlAuthResultAccepted | ApiUrlAuthResultDefault;
|
||||||
|
|
||||||
export interface ApiCollectionInfo {
|
export interface ApiCollectibleInfo {
|
||||||
amount: number;
|
amount: number;
|
||||||
currency: string;
|
currency: string;
|
||||||
cryptoAmount: number;
|
cryptoAmount: number;
|
||||||
@ -321,3 +317,27 @@ export interface ApiPeerPhotos {
|
|||||||
nextOffset?: number;
|
nextOffset?: number;
|
||||||
isLoading?: boolean;
|
isLoading?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ApiLimitType =
|
||||||
|
| 'uploadMaxFileparts'
|
||||||
|
| 'stickersFaved'
|
||||||
|
| 'savedGifs'
|
||||||
|
| 'dialogFiltersChats'
|
||||||
|
| 'dialogFilters'
|
||||||
|
| 'dialogFolderPinned'
|
||||||
|
| 'captionLength'
|
||||||
|
| 'channels'
|
||||||
|
| 'channelsPublic'
|
||||||
|
| 'aboutLength'
|
||||||
|
| 'chatlistInvites'
|
||||||
|
| 'chatlistJoined'
|
||||||
|
| 'recommendedChannels'
|
||||||
|
| 'savedDialogsPinned';
|
||||||
|
|
||||||
|
export type ApiLimitTypeWithModal = Exclude<ApiLimitType, (
|
||||||
|
'captionLength' | 'aboutLength' | 'stickersFaved' | 'savedGifs' | 'recommendedChannels'
|
||||||
|
)>;
|
||||||
|
|
||||||
|
export type ApiLimitTypeForPromo = Exclude<ApiLimitType,
|
||||||
|
'uploadMaxFileparts' | 'chatlistInvites' | 'chatlistJoined' | 'savedDialogsPinned'
|
||||||
|
>;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { ApiPremiumSection } from '../../global/types';
|
import type { PREMIUM_FEATURE_SECTIONS } from '../../config';
|
||||||
import type { ApiWebDocument } from './bots';
|
import type { ApiWebDocument } from './bots';
|
||||||
import type { ApiChat } from './chats';
|
import type { ApiChat } from './chats';
|
||||||
import type {
|
import type {
|
||||||
@ -9,7 +9,6 @@ import type {
|
|||||||
ApiPaymentCredentials,
|
ApiPaymentCredentials,
|
||||||
BoughtPaidMedia,
|
BoughtPaidMedia,
|
||||||
} from './messages';
|
} from './messages';
|
||||||
import type { ApiStarsSubscriptionPricing } from './misc';
|
|
||||||
import type { StatisticsOverviewPercentage } from './statistics';
|
import type { StatisticsOverviewPercentage } from './statistics';
|
||||||
import type { ApiUser } from './users';
|
import type { ApiUser } from './users';
|
||||||
|
|
||||||
@ -116,6 +115,8 @@ export interface ApiReceiptRegular {
|
|||||||
|
|
||||||
export type ApiReceipt = ApiReceiptRegular | ApiReceiptStars;
|
export type ApiReceipt = ApiReceiptRegular | ApiReceiptStars;
|
||||||
|
|
||||||
|
export type ApiPremiumSection = typeof PREMIUM_FEATURE_SECTIONS[number];
|
||||||
|
|
||||||
export interface ApiPremiumPromo {
|
export interface ApiPremiumPromo {
|
||||||
videoSections: ApiPremiumSection[];
|
videoSections: ApiPremiumSection[];
|
||||||
videos: ApiDocument[];
|
videos: ApiDocument[];
|
||||||
@ -387,6 +388,11 @@ export interface ApiStarsSubscription {
|
|||||||
invoiceSlug?: string;
|
invoiceSlug?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ApiStarsSubscriptionPricing = {
|
||||||
|
period: number;
|
||||||
|
amount: number;
|
||||||
|
};
|
||||||
|
|
||||||
export interface ApiStarTopupOption {
|
export interface ApiStarTopupOption {
|
||||||
isExtended?: true;
|
isExtended?: true;
|
||||||
stars: number;
|
stars: number;
|
||||||
@ -409,3 +415,5 @@ export interface ApiStarGiveawayOption {
|
|||||||
amount: number;
|
amount: number;
|
||||||
winners: ApiStarsGiveawayWinnerOption[];
|
winners: ApiStarsGiveawayWinnerOption[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ApiPaymentStatus = 'paid' | 'failed' | 'pending' | 'cancelled';
|
||||||
|
|||||||
@ -1,3 +1,33 @@
|
|||||||
|
import type { ApiChat } from './chats';
|
||||||
|
import type { ApiUser } from './users';
|
||||||
|
|
||||||
|
export type ApiPrivacyKey = 'phoneNumber' | 'addByPhone' | 'lastSeen' | 'profilePhoto' | 'voiceMessages' |
|
||||||
|
'forwards' | 'chatInvite' | 'phoneCall' | 'phoneP2P' | 'bio' | 'birthday' | 'gifts';
|
||||||
|
export type PrivacyVisibility = 'everybody' | 'contacts' | 'closeFriends' | 'nonContacts' | 'nobody';
|
||||||
|
export type BotsPrivacyType = 'allow' | 'disallow' | 'none';
|
||||||
|
|
||||||
|
export interface ApiPrivacySettings {
|
||||||
|
visibility: PrivacyVisibility;
|
||||||
|
isUnspecified?: boolean;
|
||||||
|
allowUserIds: string[];
|
||||||
|
allowChatIds: string[];
|
||||||
|
blockUserIds: string[];
|
||||||
|
blockChatIds: string[];
|
||||||
|
shouldAllowPremium?: true;
|
||||||
|
botsPrivacy: BotsPrivacyType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ApiInputPrivacyRules {
|
||||||
|
visibility: PrivacyVisibility;
|
||||||
|
isUnspecified?: boolean;
|
||||||
|
allowedUsers?: ApiUser[];
|
||||||
|
allowedChats?: ApiChat[];
|
||||||
|
blockedUsers?: ApiUser[];
|
||||||
|
blockedChats?: ApiChat[];
|
||||||
|
shouldAllowPremium?: true;
|
||||||
|
botsPrivacy: BotsPrivacyType;
|
||||||
|
}
|
||||||
|
|
||||||
export interface ApiLanguage {
|
export interface ApiLanguage {
|
||||||
isOfficial?: true;
|
isOfficial?: true;
|
||||||
isRtl?: true;
|
isRtl?: true;
|
||||||
|
|||||||
@ -1,4 +1,3 @@
|
|||||||
import type { ApiPrivacySettings } from '../../types';
|
|
||||||
import type {
|
import type {
|
||||||
ApiGeoPoint,
|
ApiGeoPoint,
|
||||||
ApiMessage,
|
ApiMessage,
|
||||||
@ -8,6 +7,7 @@ import type {
|
|||||||
ApiStoryForwardInfo,
|
ApiStoryForwardInfo,
|
||||||
MediaContent,
|
MediaContent,
|
||||||
} from './messages';
|
} from './messages';
|
||||||
|
import type { ApiPrivacySettings } from './settings';
|
||||||
|
|
||||||
export interface ApiStory {
|
export interface ApiStory {
|
||||||
'@type'?: 'story';
|
'@type'?: 'story';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { ApiDraft, TabState } from '../../global/types';
|
import type { TabState } from '../../global/types';
|
||||||
import type {
|
import type {
|
||||||
GroupCallConnectionData,
|
GroupCallConnectionData,
|
||||||
GroupCallConnectionState,
|
GroupCallConnectionState,
|
||||||
@ -6,7 +6,7 @@ import type {
|
|||||||
VideoRotation,
|
VideoRotation,
|
||||||
VideoState,
|
VideoState,
|
||||||
} from '../../lib/secret-sauce';
|
} from '../../lib/secret-sauce';
|
||||||
import type { ApiPrivacyKey, PrivacyVisibility, ThreadId } from '../../types';
|
import type { ThreadId } from '../../types';
|
||||||
import type { ApiBotMenuButton } from './bots';
|
import type { ApiBotMenuButton } from './bots';
|
||||||
import type {
|
import type {
|
||||||
ApiGroupCall, ApiPhoneCall,
|
ApiGroupCall, ApiPhoneCall,
|
||||||
@ -16,6 +16,7 @@ import type {
|
|||||||
ApiChatFolder,
|
ApiChatFolder,
|
||||||
ApiChatFullInfo,
|
ApiChatFullInfo,
|
||||||
ApiChatMember,
|
ApiChatMember,
|
||||||
|
ApiDraft,
|
||||||
ApiTypingStatus,
|
ApiTypingStatus,
|
||||||
} from './chats';
|
} from './chats';
|
||||||
import type {
|
import type {
|
||||||
@ -35,7 +36,7 @@ import type {
|
|||||||
ApiEmojiInteraction, ApiError, ApiNotifyException, ApiSessionData,
|
ApiEmojiInteraction, ApiError, ApiNotifyException, ApiSessionData,
|
||||||
} from './misc';
|
} from './misc';
|
||||||
import type { ApiStarsAmount } from './payments';
|
import type { ApiStarsAmount } from './payments';
|
||||||
import type { LangPackStringValue } from './settings';
|
import type { ApiPrivacyKey, LangPackStringValue, PrivacyVisibility } from './settings';
|
||||||
import type { ApiStealthMode, ApiStory, ApiStorySkipped } from './stories';
|
import type { ApiStealthMode, ApiStory, ApiStorySkipped } from './stories';
|
||||||
import type {
|
import type {
|
||||||
ApiEmojiStatus, ApiUser, ApiUserFullInfo, ApiUserStatus,
|
ApiEmojiStatus, ApiUser, ApiUserFullInfo, ApiUserStatus,
|
||||||
|
|||||||
@ -15,6 +15,7 @@ import type {
|
|||||||
ApiBotMenuButton,
|
ApiBotMenuButton,
|
||||||
ApiChat,
|
ApiChat,
|
||||||
ApiChatFullInfo,
|
ApiChatFullInfo,
|
||||||
|
ApiDraft,
|
||||||
ApiFormattedText,
|
ApiFormattedText,
|
||||||
ApiMessage,
|
ApiMessage,
|
||||||
ApiMessageEntity,
|
ApiMessageEntity,
|
||||||
@ -29,10 +30,15 @@ import type {
|
|||||||
ApiWebPage,
|
ApiWebPage,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type {
|
import type {
|
||||||
ApiDraft, GlobalState, MessageList, MessageListType, TabState,
|
GlobalState, TabState,
|
||||||
} from '../../global/types';
|
} from '../../global/types';
|
||||||
import type {
|
import type {
|
||||||
IAnchorPosition, InlineBotSettings, ISettings, ThreadId,
|
IAnchorPosition,
|
||||||
|
InlineBotSettings,
|
||||||
|
ISettings,
|
||||||
|
MessageList,
|
||||||
|
MessageListType,
|
||||||
|
ThreadId,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React, {
|
|||||||
useMemo,
|
useMemo,
|
||||||
useRef,
|
useRef,
|
||||||
} from '../../lib/teact/teact';
|
} from '../../lib/teact/teact';
|
||||||
import { getGlobal } from '../../lib/teact/teactn';
|
import { getActions, getGlobal, withGlobal } from '../../global';
|
||||||
import { getActions, withGlobal } from '../../global';
|
|
||||||
|
|
||||||
import type { ApiSticker } from '../../api/types';
|
import type { ApiSticker } from '../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import React, {
|
|||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ApiSticker, ApiStickerSet } from '../../api/types';
|
import type { ApiSticker, ApiStickerSet } from '../../api/types';
|
||||||
import type { MessageList } from '../../global/types';
|
import type { MessageList } from '../../types';
|
||||||
|
|
||||||
import { EMOJI_SIZE_MODAL, STICKER_SIZE_MODAL, TME_LINK_PREFIX } from '../../config';
|
import { EMOJI_SIZE_MODAL, STICKER_SIZE_MODAL, TME_LINK_PREFIX } from '../../config';
|
||||||
import { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';
|
import { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';
|
||||||
|
|||||||
@ -5,8 +5,8 @@ import type {
|
|||||||
ApiChat,
|
ApiChat,
|
||||||
ApiMessage, ApiPeer, ApiReplyInfo, MediaContainer,
|
ApiMessage, ApiPeer, ApiReplyInfo, MediaContainer,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ChatTranslatedMessages } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
|
import type { ChatTranslatedMessages } from '../../../types';
|
||||||
import type { IconName } from '../../../types/icons';
|
import type { IconName } from '../../../types/icons';
|
||||||
|
|
||||||
import { CONTENT_NOT_SUPPORTED } from '../../../config';
|
import { CONTENT_NOT_SUPPORTED } from '../../../config';
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { useEffect, useRef } from '../../../lib/teact/teact';
|
import { useEffect, useRef } from '../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../global';
|
import { getActions } from '../../../global';
|
||||||
|
|
||||||
import type { ActiveEmojiInteraction } from '../../../global/types';
|
import type { ActiveEmojiInteraction } from '../../../types';
|
||||||
|
|
||||||
import buildStyle from '../../../util/buildStyle';
|
import buildStyle from '../../../util/buildStyle';
|
||||||
import safePlay from '../../../util/safePlay';
|
import safePlay from '../../../util/safePlay';
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { getActions, withGlobal } from '../../../global';
|
|||||||
|
|
||||||
import type {
|
import type {
|
||||||
ApiChat,
|
ApiChat,
|
||||||
|
ApiDraft,
|
||||||
ApiMessage,
|
ApiMessage,
|
||||||
ApiMessageOutgoingStatus,
|
ApiMessageOutgoingStatus,
|
||||||
ApiPeer,
|
ApiPeer,
|
||||||
@ -13,7 +14,6 @@ import type {
|
|||||||
ApiUser,
|
ApiUser,
|
||||||
ApiUserStatus,
|
ApiUserStatus,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ApiDraft } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
import type { ChatAnimationTypes } from './hooks';
|
import type { ChatAnimationTypes } from './hooks';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import React, {
|
|||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiChat } from '../../../api/types';
|
import type { ApiChat } from '../../../api/types';
|
||||||
import type { TopicsInfo } from '../../../global/types';
|
import type { TopicsInfo } from '../../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -3,10 +3,9 @@ import React, { memo } from '../../../lib/teact/teact';
|
|||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
ApiChat, ApiMessage, ApiMessageOutgoingStatus,
|
ApiChat, ApiDraft, ApiMessage, ApiMessageOutgoingStatus,
|
||||||
ApiPeer, ApiTopic, ApiTypeStory, ApiTypingStatus,
|
ApiPeer, ApiTopic, ApiTypeStory, ApiTypingStatus,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ApiDraft } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
import type { ChatAnimationTypes } from './hooks';
|
import type { ChatAnimationTypes } from './hooks';
|
||||||
|
|
||||||
|
|||||||
@ -4,10 +4,9 @@ import React, {
|
|||||||
import { getGlobal } from '../../../../global';
|
import { getGlobal } from '../../../../global';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
ApiChat, ApiMessage, ApiPeer, ApiTopic, ApiTypingStatus, ApiUser,
|
ApiChat, ApiDraft, ApiMessage, ApiPeer, ApiTopic, ApiTypingStatus, ApiUser,
|
||||||
StatefulMediaContent,
|
StatefulMediaContent,
|
||||||
} from '../../../../api/types';
|
} from '../../../../api/types';
|
||||||
import type { ApiDraft } from '../../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../../hooks/useIntersectionObserver';
|
||||||
|
|
||||||
import { ANIMATION_END_DELAY, CHAT_HEIGHT_PX } from '../../../../config';
|
import { ANIMATION_END_DELAY, CHAT_HEIGHT_PX } from '../../../../config';
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import React, { memo } from '../../../lib/teact/teact';
|
import React, { memo } from '../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../global';
|
import { getActions } from '../../../global';
|
||||||
|
|
||||||
import type { ApiPremiumSection } from '../../../global/types';
|
import type { ApiPremiumSection } from '../../../api/types';
|
||||||
|
|
||||||
import useLastCallback from '../../../hooks/useLastCallback';
|
import useLastCallback from '../../../hooks/useLastCallback';
|
||||||
import useOldLang from '../../../hooks/useOldLang';
|
import useOldLang from '../../../hooks/useOldLang';
|
||||||
|
|||||||
@ -2,8 +2,8 @@ import type { FC } from '../../../lib/teact/teact';
|
|||||||
import React, { memo, useCallback, useEffect } from '../../../lib/teact/teact';
|
import React, { memo, useCallback, useEffect } from '../../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
|
import type { ApiPrivacySettings } from '../../../api/types';
|
||||||
import type { GlobalState } from '../../../global/types';
|
import type { GlobalState } from '../../../global/types';
|
||||||
import type { ApiPrivacySettings } from '../../../types';
|
|
||||||
import { SettingsScreens } from '../../../types';
|
import { SettingsScreens } from '../../../types';
|
||||||
|
|
||||||
import { selectCanSetPasscode, selectIsCurrentUserPremium } from '../../../global/selectors';
|
import { selectCanSetPasscode, selectIsCurrentUserPremium } from '../../../global/selectors';
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import React, { memo } from '../../../lib/teact/teact';
|
import React, { memo } from '../../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { PrivacyVisibility } from '../../../types';
|
import type { PrivacyVisibility } from '../../../api/types';
|
||||||
|
|
||||||
import { selectIsCurrentUserPremium, selectShouldHideReadMarks } from '../../../global/selectors';
|
import { selectIsCurrentUserPremium, selectShouldHideReadMarks } from '../../../global/selectors';
|
||||||
import renderText from '../../common/helpers/renderText';
|
import renderText from '../../common/helpers/renderText';
|
||||||
|
|||||||
@ -2,8 +2,7 @@ import type { FC } from '../../../lib/teact/teact';
|
|||||||
import React, { memo, useCallback, useMemo } from '../../../lib/teact/teact';
|
import React, { memo, useCallback, useMemo } from '../../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiPhoto } from '../../../api/types';
|
import type { ApiPhoto, ApiPrivacySettings, BotsPrivacyType } from '../../../api/types';
|
||||||
import type { ApiPrivacySettings, BotsPrivacyType } from '../../../types';
|
|
||||||
import { SettingsScreens } from '../../../types';
|
import { SettingsScreens } from '../../../types';
|
||||||
|
|
||||||
import { selectIsCurrentUserPremium, selectUserFullInfo } from '../../../global/selectors';
|
import { selectIsCurrentUserPremium, selectUserFullInfo } from '../../../global/selectors';
|
||||||
|
|||||||
@ -4,8 +4,9 @@ import React, {
|
|||||||
} from '../../../lib/teact/teact';
|
} from '../../../lib/teact/teact';
|
||||||
import { getActions, getGlobal, withGlobal } from '../../../global';
|
import { getActions, getGlobal, withGlobal } from '../../../global';
|
||||||
|
|
||||||
|
import type { ApiPrivacySettings } from '../../../api/types';
|
||||||
import type { GlobalState } from '../../../global/types';
|
import type { GlobalState } from '../../../global/types';
|
||||||
import type { ApiPrivacySettings, CustomPeerType, UniqueCustomPeer } from '../../../types';
|
import type { CustomPeerType, UniqueCustomPeer } from '../../../types';
|
||||||
import { SettingsScreens } from '../../../types';
|
import { SettingsScreens } from '../../../types';
|
||||||
|
|
||||||
import { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
import { ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { ApiPrivacyKey } from '../../../../types';
|
import type { ApiPrivacyKey } from '../../../../api/types';
|
||||||
import { SettingsScreens } from '../../../../types';
|
import { SettingsScreens } from '../../../../types';
|
||||||
|
|
||||||
export function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {
|
export function getPrivacyKey(screen: SettingsScreens): ApiPrivacyKey | undefined {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { getActions, withGlobal } from '../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiContact, ApiError,
|
ApiContact, ApiError,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { MessageList } from '../../global/types';
|
import type { MessageList } from '../../types';
|
||||||
|
|
||||||
import { selectCurrentMessageList, selectTabState } from '../../global/selectors';
|
import { selectCurrentMessageList, selectTabState } from '../../global/selectors';
|
||||||
import getReadableErrorText from '../../util/getReadableErrorText';
|
import getReadableErrorText from '../../util/getReadableErrorText';
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
import type { FC } from '../../lib/teact/teact';
|
import type { FC } from '../../lib/teact/teact';
|
||||||
import React, { memo, useCallback, useEffect } from '../../lib/teact/teact';
|
import React, { memo, useCallback, useEffect } from '../../lib/teact/teact';
|
||||||
import { getActions } from '../../lib/teact/teactn';
|
import { getActions, withGlobal } from '../../global';
|
||||||
import { withGlobal } from '../../global';
|
|
||||||
|
|
||||||
import type { TabState } from '../../global/types';
|
import type { TabState } from '../../global/types';
|
||||||
|
|
||||||
@ -41,6 +40,7 @@ const GameModal: FC<OwnProps & StateProps> = ({ openedGame, gameTitle, canPost }
|
|||||||
}, isOpen && canPost ? PLAY_GAME_ACTION_INTERVAL : undefined);
|
}, isOpen && canPost ? PLAY_GAME_ACTION_INTERVAL : undefined);
|
||||||
|
|
||||||
const handleMessage = useCallback((event: MessageEvent<string>) => {
|
const handleMessage = useCallback((event: MessageEvent<string>) => {
|
||||||
|
if (!chatId || !messageId) return;
|
||||||
try {
|
try {
|
||||||
const data = JSON.parse(event.data) as GameEvents;
|
const data = JSON.parse(event.data) as GameEvents;
|
||||||
if (data.eventType === 'share_score') {
|
if (data.eventType === 'share_score') {
|
||||||
|
|||||||
@ -8,8 +8,8 @@ import React, {
|
|||||||
import { addExtraClass } from '../../lib/teact/teact-dom';
|
import { addExtraClass } from '../../lib/teact/teact-dom';
|
||||||
import { getActions, getGlobal, withGlobal } from '../../global';
|
import { getActions, getGlobal, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ApiChatFolder, ApiUser } from '../../api/types';
|
import type { ApiChatFolder, ApiLimitTypeWithModal, ApiUser } from '../../api/types';
|
||||||
import type { ApiLimitTypeWithModal, TabState } from '../../global/types';
|
import type { TabState } from '../../global/types';
|
||||||
import { ElectronEvent } from '../../types/electron';
|
import { ElectronEvent } from '../../types/electron';
|
||||||
|
|
||||||
import { BASE_EMOJI_KEYWORD_LANG, DEBUG, INACTIVE_MARKER } from '../../config';
|
import { BASE_EMOJI_KEYWORD_LANG, DEBUG, INACTIVE_MARKER } from '../../config';
|
||||||
|
|||||||
@ -4,8 +4,13 @@ import React, {
|
|||||||
} from '../../../lib/teact/teact';
|
} from '../../../lib/teact/teact';
|
||||||
import { toggleExtraClass } from '../../../lib/teact/teact-dom';
|
import { toggleExtraClass } from '../../../lib/teact/teact-dom';
|
||||||
|
|
||||||
import type { ApiPremiumPromo, ApiPremiumSubscriptionOption } from '../../../api/types';
|
import type {
|
||||||
import type { ApiLimitTypeForPromo, ApiPremiumSection, GlobalState } from '../../../global/types';
|
ApiLimitTypeForPromo,
|
||||||
|
ApiPremiumPromo,
|
||||||
|
ApiPremiumSection,
|
||||||
|
ApiPremiumSubscriptionOption,
|
||||||
|
} from '../../../api/types';
|
||||||
|
import type { GlobalState } from '../../../global/types';
|
||||||
|
|
||||||
import { PREMIUM_BOTTOM_VIDEOS, PREMIUM_FEATURE_SECTIONS, PREMIUM_LIMITS_ORDER } from '../../../config';
|
import { PREMIUM_BOTTOM_VIDEOS, PREMIUM_FEATURE_SECTIONS, PREMIUM_LIMITS_ORDER } from '../../../config';
|
||||||
import { requestMutation } from '../../../lib/fasterdom/fasterdom';
|
import { requestMutation } from '../../../lib/fasterdom/fasterdom';
|
||||||
|
|||||||
@ -5,9 +5,9 @@ import React, {
|
|||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type {
|
import type {
|
||||||
ApiPremiumPromo, ApiPremiumSubscriptionOption, ApiSticker, ApiStickerSet, ApiUser,
|
ApiPremiumPromo, ApiPremiumSection, ApiPremiumSubscriptionOption, ApiSticker, ApiStickerSet, ApiUser,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ApiPremiumSection, GlobalState } from '../../../global/types';
|
import type { GlobalState } from '../../../global/types';
|
||||||
|
|
||||||
import { PREMIUM_FEATURE_SECTIONS, TME_LINK_PREFIX } from '../../../config';
|
import { PREMIUM_FEATURE_SECTIONS, TME_LINK_PREFIX } from '../../../config';
|
||||||
import { getUserFullName } from '../../../global/helpers';
|
import { getUserFullName } from '../../../global/helpers';
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import type { FC } from '../../../../lib/teact/teact';
|
|||||||
import React, { memo, useCallback, useEffect } from '../../../../lib/teact/teact';
|
import React, { memo, useCallback, useEffect } from '../../../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../../../global';
|
import { getActions, withGlobal } from '../../../../global';
|
||||||
|
|
||||||
import type { ApiLimitTypeWithModal } from '../../../../global/types';
|
import type { ApiLimitTypeWithModal } from '../../../../api/types';
|
||||||
import type { OldLangFn } from '../../../../hooks/useOldLang';
|
import type { OldLangFn } from '../../../../hooks/useOldLang';
|
||||||
import type { IconName } from '../../../../types/icons';
|
import type { IconName } from '../../../../types/icons';
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import React, { memo, useRef } from '../../../lib/teact/teact';
|
import React, { memo, useRef } from '../../../lib/teact/teact';
|
||||||
import { withGlobal } from '../../../global';
|
import { withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ConfettiStyle, TabState } from '../../../global/types';
|
import type { TabState } from '../../../global/types';
|
||||||
|
import type { ConfettiStyle } from '../../../types';
|
||||||
|
|
||||||
import { requestMeasure } from '../../../lib/fasterdom/fasterdom';
|
import { requestMeasure } from '../../../lib/fasterdom/fasterdom';
|
||||||
import { selectTabState } from '../../../global/selectors';
|
import { selectTabState } from '../../../global/selectors';
|
||||||
|
|||||||
@ -2,8 +2,7 @@ import type { FC } from '../../lib/teact/teact';
|
|||||||
import React, { memo, useMemo } from '../../lib/teact/teact';
|
import React, { memo, useMemo } from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ActiveDownloads, MessageListType } from '../../global/types';
|
import type { ActiveDownloads, MediaViewerOrigin, MessageListType } from '../../types';
|
||||||
import type { MediaViewerOrigin } from '../../types';
|
|
||||||
import type { MenuItemProps } from '../ui/MenuItem';
|
import type { MenuItemProps } from '../ui/MenuItem';
|
||||||
import type { MediaViewerItem } from './helpers/getViewableMedia';
|
import type { MediaViewerItem } from './helpers/getViewableMedia';
|
||||||
|
|
||||||
|
|||||||
@ -7,9 +7,8 @@ import { getActions, getGlobal, withGlobal } from '../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiChat, ApiMessage, ApiSticker, ApiTopic, ApiUser,
|
ApiChat, ApiMessage, ApiSticker, ApiTopic, ApiUser,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { MessageListType } from '../../global/types';
|
|
||||||
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../hooks/useIntersectionObserver';
|
||||||
import type { FocusDirection, ThreadId } from '../../types';
|
import type { FocusDirection, MessageListType, ThreadId } from '../../types';
|
||||||
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
||||||
|
|
||||||
import { getChatTitle, getMessageHtmlId, isJoinedChannelMessage } from '../../global/helpers';
|
import { getChatTitle, getMessageHtmlId, isJoinedChannelMessage } from '../../global/helpers';
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { getActions, withGlobal } from '../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiBusinessIntro, ApiSticker, ApiUpdateConnectionStateType, ApiUser,
|
ApiBusinessIntro, ApiSticker, ApiUpdateConnectionStateType, ApiUser,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { MessageList } from '../../global/types';
|
import type { MessageList } from '../../types';
|
||||||
|
|
||||||
import { getUserFullName } from '../../global/helpers';
|
import { getUserFullName } from '../../global/helpers';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import React, {
|
|||||||
} from '../../lib/teact/teact';
|
} from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ActiveEmojiInteraction } from '../../global/types';
|
import type { ActiveEmojiInteraction } from '../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
selectAnimatedEmojiEffect,
|
selectAnimatedEmojiEffect,
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import type { FC } from '../../lib/teact/teact';
|
|||||||
import React, { memo, useEffect, useRef } from '../../lib/teact/teact';
|
import React, { memo, useEffect, useRef } from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../global/types';
|
import type { MessageListType } from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
import { selectChat, selectCurrentMessageList, selectCurrentMiddleSearch } from '../../global/selectors';
|
import { selectChat, selectCurrentMessageList, selectCurrentMiddleSearch } from '../../global/selectors';
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React, {
|
|||||||
} from '../../lib/teact/teact';
|
} from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../global/types';
|
import type { IAnchorPosition, MessageListType, ThreadId } from '../../types';
|
||||||
import type { IAnchorPosition, ThreadId } from '../../types';
|
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
import { ManagementScreens } from '../../types';
|
import { ManagementScreens } from '../../types';
|
||||||
|
|
||||||
|
|||||||
@ -8,10 +8,9 @@ import { getActions, getGlobal, withGlobal } from '../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiChatFullInfo, ApiMessage, ApiRestrictionReason, ApiTopic,
|
ApiChatFullInfo, ApiMessage, ApiRestrictionReason, ApiTopic,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { MessageListType } from '../../global/types';
|
|
||||||
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
import { LoadMoreDirection, type ThreadId } from '../../types';
|
import { LoadMoreDirection, type MessageListType, type ThreadId } from '../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ANIMATION_END_DELAY,
|
ANIMATION_END_DELAY,
|
||||||
|
|||||||
@ -3,8 +3,7 @@ import type { FC } from '../../lib/teact/teact';
|
|||||||
import React, { getIsHeavyAnimating, memo } from '../../lib/teact/teact';
|
import React, { getIsHeavyAnimating, memo } from '../../lib/teact/teact';
|
||||||
import { getActions } from '../../global';
|
import { getActions } from '../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../global/types';
|
import type { MessageListType, ThreadId } from '../../types';
|
||||||
import type { ThreadId } from '../../types';
|
|
||||||
import type { Signal } from '../../util/signals';
|
import type { Signal } from '../../util/signals';
|
||||||
import type { MessageDateGroup } from './helpers/groupMessages';
|
import type { MessageDateGroup } from './helpers/groupMessages';
|
||||||
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
import type { OnIntersectPinnedMessage } from './hooks/usePinnedMessage';
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import type { FC } from '../../lib/teact/teact';
|
|||||||
import React, { memo } from '../../lib/teact/teact';
|
import React, { memo } from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { MessageList as GlobalMessageList } from '../../global/types';
|
import type { MessageList as GlobalMessageList } from '../../types';
|
||||||
|
|
||||||
import { selectTabState } from '../../global/selectors';
|
import { selectTabState } from '../../global/selectors';
|
||||||
import { createLocationHash } from '../../util/routing';
|
import { createLocationHash } from '../../util/routing';
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import React, { memo, useEffect } from '../../lib/teact/teact';
|
|||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ApiChat } from '../../api/types';
|
import type { ApiChat } from '../../api/types';
|
||||||
import type { MessageListType } from '../../global/types';
|
import type { MessageListType } from '../../types';
|
||||||
import type { IconName } from '../../types/icons';
|
import type { IconName } from '../../types/icons';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -10,8 +10,9 @@ import type {
|
|||||||
import type {
|
import type {
|
||||||
ActiveEmojiInteraction,
|
ActiveEmojiInteraction,
|
||||||
MessageListType,
|
MessageListType,
|
||||||
} from '../../global/types';
|
ThemeKey,
|
||||||
import type { ThemeKey, ThreadId } from '../../types';
|
ThreadId,
|
||||||
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -7,10 +7,10 @@ import { getActions, withGlobal } from '../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiChat, ApiMessage, ApiSticker, ApiTypingStatus,
|
ApiChat, ApiMessage, ApiSticker, ApiTypingStatus,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { GlobalState, MessageListType } from '../../global/types';
|
import type { GlobalState } from '../../global/types';
|
||||||
import type { Signal } from '../../util/signals';
|
import type { Signal } from '../../util/signals';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
import { StoryViewerOrigin, type ThreadId } from '../../types';
|
import { type MessageListType, StoryViewerOrigin, type ThreadId } from '../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
EDITABLE_INPUT_CSS_SELECTOR,
|
EDITABLE_INPUT_CSS_SELECTOR,
|
||||||
|
|||||||
@ -4,8 +4,7 @@ import React, {
|
|||||||
import { setExtraStyles } from '../../lib/teact/teact-dom';
|
import { setExtraStyles } from '../../lib/teact/teact-dom';
|
||||||
import { withGlobal } from '../../global';
|
import { withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../global/types';
|
import type { MessageListType, ThreadId } from '../../types';
|
||||||
import type { ThreadId } from '../../types';
|
|
||||||
import type { Signal } from '../../util/signals';
|
import type { Signal } from '../../util/signals';
|
||||||
import { type ApiChat, MAIN_THREAD_ID } from '../../api/types';
|
import { type ApiChat, MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -2,8 +2,8 @@ import type { FC } from '../../lib/teact/teact';
|
|||||||
import React, { memo } from '../../lib/teact/teact';
|
import React, { memo } from '../../lib/teact/teact';
|
||||||
|
|
||||||
import type { ApiTopic } from '../../api/types';
|
import type { ApiTopic } from '../../api/types';
|
||||||
import type { MessageListType } from '../../global/types';
|
|
||||||
import type { OldLangFn } from '../../hooks/useOldLang';
|
import type { OldLangFn } from '../../hooks/useOldLang';
|
||||||
|
import type { MessageListType } from '../../types';
|
||||||
|
|
||||||
import { REM } from '../common/helpers/mediaDimensions';
|
import { REM } from '../common/helpers/mediaDimensions';
|
||||||
import renderText from '../common/helpers/renderText';
|
import renderText from '../common/helpers/renderText';
|
||||||
|
|||||||
@ -7,8 +7,8 @@ import { getActions, withGlobal } from '../../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiAttachment, ApiChatMember, ApiMessage, ApiSticker,
|
ApiAttachment, ApiChatMember, ApiMessage, ApiSticker,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { GlobalState, MessageListType } from '../../../global/types';
|
import type { GlobalState } from '../../../global/types';
|
||||||
import type { ThreadId } from '../../../types';
|
import type { MessageListType, ThreadId } from '../../../types';
|
||||||
import type { Signal } from '../../../util/signals';
|
import type { Signal } from '../../../util/signals';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -7,8 +7,7 @@ import { getActions, withGlobal } from '../../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiChat, ApiInputMessageReplyInfo, ApiMessage, ApiPeer,
|
ApiChat, ApiInputMessageReplyInfo, ApiMessage, ApiPeer,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { MessageListType } from '../../../global/types';
|
import type { MessageListType, ThreadId } from '../../../types/index';
|
||||||
import type { ThreadId } from '../../../types/index';
|
|
||||||
|
|
||||||
import { isChatChannel, stripCustomEmoji } from '../../../global/helpers';
|
import { isChatChannel, stripCustomEmoji } from '../../../global/helpers';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -5,8 +5,8 @@ import { getActions, withGlobal } from '../../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiFormattedText, ApiMessage, ApiMessageEntityTextUrl, ApiWebPage,
|
ApiFormattedText, ApiMessage, ApiMessageEntityTextUrl, ApiWebPage,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { GlobalState, WebPageMediaSize } from '../../../global/types';
|
import type { GlobalState } from '../../../global/types';
|
||||||
import type { ISettings, ThreadId } from '../../../types';
|
import type { ISettings, ThreadId, WebPageMediaSize } from '../../../types';
|
||||||
import type { Signal } from '../../../util/signals';
|
import type { Signal } from '../../../util/signals';
|
||||||
import { ApiMessageEntityTypes } from '../../../api/types';
|
import { ApiMessageEntityTypes } from '../../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
import { useEffect, useLayoutEffect, useRef } from '../../../../lib/teact/teact';
|
import { useEffect, useLayoutEffect, useRef } from '../../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../../global';
|
import { getActions } from '../../../../global';
|
||||||
|
|
||||||
import type { ApiMessage } from '../../../../api/types';
|
import type { ApiDraft, ApiMessage } from '../../../../api/types';
|
||||||
import type { ApiDraft } from '../../../../global/types';
|
|
||||||
import type { ThreadId } from '../../../../types';
|
import type { ThreadId } from '../../../../types';
|
||||||
import type { Signal } from '../../../../util/signals';
|
import type { Signal } from '../../../../util/signals';
|
||||||
import { ApiMessageEntityTypes } from '../../../../api/types';
|
import { ApiMessageEntityTypes } from '../../../../api/types';
|
||||||
|
|||||||
@ -1,9 +1,8 @@
|
|||||||
import { useEffect, useState } from '../../../../lib/teact/teact';
|
import { useEffect, useState } from '../../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../../global';
|
import { getActions } from '../../../../global';
|
||||||
|
|
||||||
import type { ApiFormattedText, ApiMessage } from '../../../../api/types';
|
import type { ApiDraft, ApiFormattedText, ApiMessage } from '../../../../api/types';
|
||||||
import type { ApiDraft, MessageListType } from '../../../../global/types';
|
import type { MessageListType, ThreadId } from '../../../../types';
|
||||||
import type { ThreadId } from '../../../../types';
|
|
||||||
import type { Signal } from '../../../../util/signals';
|
import type { Signal } from '../../../../util/signals';
|
||||||
import { ApiMessageEntityTypes } from '../../../../api/types';
|
import { ApiMessageEntityTypes } from '../../../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import type { RefObject } from 'react';
|
import type { RefObject } from 'react';
|
||||||
import { getActions } from '../../../global';
|
import { getActions } from '../../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../../global/types';
|
import type { MessageListType } from '../../../types';
|
||||||
import type { OnIntersectPinnedMessage } from './usePinnedMessage';
|
import type { OnIntersectPinnedMessage } from './usePinnedMessage';
|
||||||
|
|
||||||
import { IS_ANDROID } from '../../../util/windowEnvironment';
|
import { IS_ANDROID } from '../../../util/windowEnvironment';
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import type { RefObject } from 'react';
|
|||||||
import { useEffect, useMemo, useRef } from '../../../lib/teact/teact';
|
import { useEffect, useMemo, useRef } from '../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../global';
|
import { getActions } from '../../../global';
|
||||||
|
|
||||||
import type { MessageListType } from '../../../global/types';
|
import type { MessageListType } from '../../../types';
|
||||||
import type { Signal } from '../../../util/signals';
|
import type { Signal } from '../../../util/signals';
|
||||||
import { LoadMoreDirection } from '../../../types';
|
import { LoadMoreDirection } from '../../../types';
|
||||||
|
|
||||||
|
|||||||
@ -3,8 +3,8 @@ import React, { memo } from '../../../lib/teact/teact';
|
|||||||
import { withGlobal } from '../../../global';
|
import { withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiSticker } from '../../../api/types';
|
import type { ApiSticker } from '../../../api/types';
|
||||||
import type { ActiveEmojiInteraction } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
|
import type { ActiveEmojiInteraction } from '../../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
selectAnimatedEmojiEffect,
|
selectAnimatedEmojiEffect,
|
||||||
|
|||||||
@ -3,8 +3,8 @@ import React, { memo } from '../../../lib/teact/teact';
|
|||||||
import { withGlobal } from '../../../global';
|
import { withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiSticker } from '../../../api/types';
|
import type { ApiSticker } from '../../../api/types';
|
||||||
import type { ActiveEmojiInteraction } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
|
import type { ActiveEmojiInteraction } from '../../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
selectAnimatedEmoji,
|
selectAnimatedEmoji,
|
||||||
|
|||||||
@ -16,8 +16,13 @@ import type {
|
|||||||
ApiThreadInfo,
|
ApiThreadInfo,
|
||||||
ApiTypeStory,
|
ApiTypeStory,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ActiveDownloads, MessageListType } from '../../../global/types';
|
import type {
|
||||||
import type { IAlbum, IAnchorPosition, ThreadId } from '../../../types';
|
ActiveDownloads,
|
||||||
|
IAlbum,
|
||||||
|
IAnchorPosition,
|
||||||
|
MessageListType,
|
||||||
|
ThreadId,
|
||||||
|
} from '../../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|
||||||
import { PREVIEW_AVATAR_COUNT, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
import { PREVIEW_AVATAR_COUNT, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
||||||
|
|||||||
@ -28,10 +28,16 @@ import type {
|
|||||||
ApiTypeStory,
|
ApiTypeStory,
|
||||||
ApiUser,
|
ApiUser,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ActiveEmojiInteraction, ChatTranslatedMessages, MessageListType } from '../../../global/types';
|
|
||||||
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
import type { ObserveFn } from '../../../hooks/useIntersectionObserver';
|
||||||
import type {
|
import type {
|
||||||
FocusDirection, IAlbum, ISettings, ScrollTargetPosition, ThreadId,
|
ActiveEmojiInteraction,
|
||||||
|
ChatTranslatedMessages,
|
||||||
|
FocusDirection,
|
||||||
|
IAlbum,
|
||||||
|
ISettings,
|
||||||
|
MessageListType,
|
||||||
|
ScrollTargetPosition,
|
||||||
|
ThreadId,
|
||||||
} from '../../../types';
|
} from '../../../types';
|
||||||
import type { Signal } from '../../../util/signals';
|
import type { Signal } from '../../../util/signals';
|
||||||
import type { OnIntersectPinnedMessage } from '../hooks/usePinnedMessage';
|
import type { OnIntersectPinnedMessage } from '../hooks/usePinnedMessage';
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import React, { memo } from '../../../lib/teact/teact';
|
import React, { memo } from '../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../lib/teact/teactn';
|
import { getActions } from '../../../global';
|
||||||
|
|
||||||
import type { ApiMessage } from '../../../api/types';
|
import type { ApiMessage } from '../../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { useEffect } from '../../../../lib/teact/teact';
|
import { useEffect } from '../../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../../global';
|
import { getActions } from '../../../../global';
|
||||||
|
|
||||||
import type { ChatTranslatedMessages } from '../../../../global/types';
|
import type { ChatTranslatedMessages } from '../../../../types';
|
||||||
|
|
||||||
import { throttle } from '../../../../util/schedulers';
|
import { throttle } from '../../../../util/schedulers';
|
||||||
|
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import React, { memo, useEffect } from '../../../lib/teact/teact';
|
|||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiSponsoredMessage } from '../../../api/types';
|
import type { ApiSponsoredMessage } from '../../../api/types';
|
||||||
import type { MessageListType } from '../../../global/types';
|
import type { MessageListType } from '../../../types';
|
||||||
|
|
||||||
import { selectBot, selectSponsoredMessage } from '../../../global/selectors';
|
import { selectBot, selectSponsoredMessage } from '../../../global/selectors';
|
||||||
import buildClassName from '../../../util/buildClassName';
|
import buildClassName from '../../../util/buildClassName';
|
||||||
|
|||||||
@ -2,8 +2,7 @@ import React, { memo, useEffect } from '../../../lib/teact/teact';
|
|||||||
import { getActions, withGlobal } from '../../../global';
|
import { getActions, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiChat, ApiMessage, ApiPeer } from '../../../api/types';
|
import type { ApiChat, ApiMessage, ApiPeer } from '../../../api/types';
|
||||||
import type { MessageListType } from '../../../global/types';
|
import type { MessageListType, ThreadId } from '../../../types';
|
||||||
import type { ThreadId } from '../../../types';
|
|
||||||
import type { Signal } from '../../../util/signals';
|
import type { Signal } from '../../../util/signals';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,8 @@ import type {
|
|||||||
ApiStarsAmount,
|
ApiStarsAmount,
|
||||||
ApiUser,
|
ApiUser,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { StarGiftCategory, TabState } from '../../../global/types';
|
import type { TabState } from '../../../global/types';
|
||||||
|
import type { StarGiftCategory } from '../../../types';
|
||||||
|
|
||||||
import { getUserFullName } from '../../../global/helpers';
|
import { getUserFullName } from '../../../global/helpers';
|
||||||
import { selectUser } from '../../../global/selectors';
|
import { selectUser } from '../../../global/selectors';
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import React, {
|
|||||||
} from '../../../lib/teact/teact';
|
} from '../../../lib/teact/teact';
|
||||||
import { withGlobal } from '../../../global';
|
import { withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { StarGiftCategory } from '../../../global/types';
|
import type { StarGiftCategory } from '../../../types';
|
||||||
|
|
||||||
import buildClassName from '../../../util/buildClassName';
|
import buildClassName from '../../../util/buildClassName';
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import React, {
|
|||||||
import { getActions, getGlobal, withGlobal } from '../../../global';
|
import { getActions, getGlobal, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiUser } from '../../../api/types';
|
import type { ApiUser } from '../../../api/types';
|
||||||
import type { WebApp } from '../../../global/types';
|
import type { WebApp } from '../../../types/webapp';
|
||||||
|
|
||||||
import { selectActiveWebApp, selectTabState, selectUser } from '../../../global/selectors';
|
import { selectActiveWebApp, selectTabState, selectUser } from '../../../global/selectors';
|
||||||
import buildClassName from '../../../util/buildClassName';
|
import buildClassName from '../../../util/buildClassName';
|
||||||
|
|||||||
@ -8,9 +8,9 @@ import React, {
|
|||||||
import { getActions, getGlobal, withGlobal } from '../../../global';
|
import { getActions, getGlobal, withGlobal } from '../../../global';
|
||||||
|
|
||||||
import type { ApiAttachBot, ApiChat, ApiUser } from '../../../api/types';
|
import type { ApiAttachBot, ApiChat, ApiUser } from '../../../api/types';
|
||||||
import type { TabState, WebApp } from '../../../global/types';
|
import type { TabState } from '../../../global/types';
|
||||||
import type { ThemeKey } from '../../../types';
|
import type { ThemeKey } from '../../../types';
|
||||||
import type { WebAppOutboundEvent } from '../../../types/webapp';
|
import type { WebApp, WebAppOutboundEvent } from '../../../types/webapp';
|
||||||
|
|
||||||
import { RESIZE_HANDLE_CLASS_NAME } from '../../../config';
|
import { RESIZE_HANDLE_CLASS_NAME } from '../../../config';
|
||||||
import { getWebAppKey } from '../../../global/helpers/bots';
|
import { getWebAppKey } from '../../../global/helpers/bots';
|
||||||
|
|||||||
@ -9,9 +9,11 @@ import { getActions, withGlobal } from '../../../global';
|
|||||||
import type {
|
import type {
|
||||||
ApiAttachBot, ApiBotAppSettings, ApiChat, ApiUser,
|
ApiAttachBot, ApiBotAppSettings, ApiChat, ApiUser,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { TabState, WebApp, WebAppModalStateType } from '../../../global/types';
|
import type { TabState } from '../../../global/types';
|
||||||
import type { ThemeKey } from '../../../types';
|
import type { ThemeKey } from '../../../types';
|
||||||
import type { PopupOptions, WebAppInboundEvent, WebAppOutboundEvent } from '../../../types/webapp';
|
import type {
|
||||||
|
PopupOptions, WebApp, WebAppInboundEvent, WebAppModalStateType, WebAppOutboundEvent,
|
||||||
|
} from '../../../types/webapp';
|
||||||
|
|
||||||
import { TME_LINK_PREFIX } from '../../../config';
|
import { TME_LINK_PREFIX } from '../../../config';
|
||||||
import { convertToApiChatType } from '../../../global/helpers';
|
import { convertToApiChatType } from '../../../global/helpers';
|
||||||
|
|||||||
@ -2,8 +2,7 @@
|
|||||||
import { useCallback, useEffect, useRef } from '../../../../lib/teact/teact';
|
import { useCallback, useEffect, useRef } from '../../../../lib/teact/teact';
|
||||||
import { getActions } from '../../../../global';
|
import { getActions } from '../../../../global';
|
||||||
|
|
||||||
import type { WebApp } from '../../../../global/types';
|
import type { WebApp, WebAppInboundEvent, WebAppOutboundEvent } from '../../../../types/webapp';
|
||||||
import type { WebAppInboundEvent, WebAppOutboundEvent } from '../../../../types/webapp';
|
|
||||||
|
|
||||||
import { getWebAppKey } from '../../../../global/helpers';
|
import { getWebAppKey } from '../../../../global/helpers';
|
||||||
import { extractCurrentThemeParams } from '../../../../util/themeStyle';
|
import { extractCurrentThemeParams } from '../../../../util/themeStyle';
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import React, { memo, useCallback, useRef } from '../../lib/teact/teact';
|
|||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ApiChat, ApiChatFullInfo, ApiVideo } from '../../api/types';
|
import type { ApiChat, ApiChatFullInfo, ApiVideo } from '../../api/types';
|
||||||
import type { MessageList } from '../../global/types';
|
import type { MessageList } from '../../types';
|
||||||
|
|
||||||
import { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';
|
import { getAllowedAttachmentOptions, getCanPostInChat } from '../../global/helpers';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import type {
|
|||||||
ApiMediaAreaChannelPost,
|
ApiMediaAreaChannelPost,
|
||||||
ApiPeer, ApiStealthMode, ApiStory, ApiTypeStory,
|
ApiPeer, ApiStealthMode, ApiStory, ApiTypeStory,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { IDimensions } from '../../global/types';
|
import type { IDimensions } from '../../types';
|
||||||
import type { Signal } from '../../util/signals';
|
import type { Signal } from '../../util/signals';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -3,8 +3,9 @@ import React, {
|
|||||||
} from '../../lib/teact/teact';
|
} from '../../lib/teact/teact';
|
||||||
import { getActions, withGlobal } from '../../global';
|
import { getActions, withGlobal } from '../../global';
|
||||||
|
|
||||||
import type { ApiStory, ApiUser } from '../../api/types';
|
import type {
|
||||||
import type { ApiPrivacySettings, PrivacyVisibility } from '../../types';
|
ApiPrivacySettings, ApiStory, ApiUser, PrivacyVisibility,
|
||||||
|
} from '../../api/types';
|
||||||
import type { IconName } from '../../types/icons';
|
import type { IconName } from '../../types/icons';
|
||||||
|
|
||||||
import { getSenderTitle, getUserFullName } from '../../global/helpers';
|
import { getSenderTitle, getUserFullName } from '../../global/helpers';
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { IDimensions } from '../../../global/types';
|
import type { IDimensions } from '../../../types';
|
||||||
|
|
||||||
import { roundToNearestEven } from '../../../util/math';
|
import { roundToNearestEven } from '../../../util/math';
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { IDimensions } from '../../../global/types';
|
import type { IDimensions } from '../../../types';
|
||||||
import { StoryViewerOrigin } from '../../../types';
|
import { StoryViewerOrigin } from '../../../types';
|
||||||
|
|
||||||
import { ANIMATION_END_DELAY } from '../../../config';
|
import { ANIMATION_END_DELAY } from '../../../config';
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import type { ApiReactionEmoji } from './api/types';
|
import type {
|
||||||
import type { ApiLimitType, ApiLimitTypeForPromo, ApiPremiumSection } from './global/types';
|
ApiLimitType, ApiLimitTypeForPromo, ApiPremiumSection, ApiReactionEmoji,
|
||||||
|
} from './api/types';
|
||||||
|
|
||||||
export const APP_CODE_NAME = 'A';
|
export const APP_CODE_NAME = 'A';
|
||||||
export const APP_NAME = process.env.APP_NAME || `Telegram Web ${APP_CODE_NAME}`;
|
export const APP_NAME = process.env.APP_NAME || `Telegram Web ${APP_CODE_NAME}`;
|
||||||
|
|||||||
@ -1,10 +1,15 @@
|
|||||||
import type { InlineBotSettings } from '../../../types';
|
import type { InlineBotSettings } from '../../../types';
|
||||||
|
import type { WebApp } from '../../../types/webapp';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType, GlobalState, TabArgs, WebApp,
|
ActionReturnType, GlobalState, TabArgs,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import {
|
import {
|
||||||
type ApiChat, type ApiContact, type ApiInputMessageReplyInfo, type ApiPeer, type ApiUrlAuthResult,
|
type ApiChat,
|
||||||
|
type ApiContact,
|
||||||
|
type ApiInputMessageReplyInfo,
|
||||||
|
type ApiPeer,
|
||||||
|
type ApiUrlAuthResult,
|
||||||
MAIN_THREAD_ID,
|
MAIN_THREAD_ID,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import { ManagementProgress } from '../../../types';
|
import { ManagementProgress } from '../../../types';
|
||||||
|
|||||||
@ -4,12 +4,12 @@ import type {
|
|||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType,
|
ActionReturnType, GlobalState, TabArgs,
|
||||||
ChatListType, GlobalState, TabArgs,
|
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
import {
|
import {
|
||||||
ChatCreationProgress,
|
ChatCreationProgress,
|
||||||
|
type ChatListType,
|
||||||
ManagementProgress,
|
ManagementProgress,
|
||||||
NewChatMembersProgress,
|
NewChatMembersProgress,
|
||||||
SettingsScreens,
|
SettingsScreens,
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import type {
|
import type {
|
||||||
ApiAttachment,
|
ApiAttachment,
|
||||||
ApiChat,
|
ApiChat,
|
||||||
|
ApiDraft,
|
||||||
ApiError,
|
ApiError,
|
||||||
ApiInputMessageReplyInfo,
|
ApiInputMessageReplyInfo,
|
||||||
ApiInputReplyInfo,
|
ApiInputReplyInfo,
|
||||||
@ -19,10 +20,10 @@ import type {
|
|||||||
import type { MessageKey } from '../../../util/keys/messageKey';
|
import type { MessageKey } from '../../../util/keys/messageKey';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType, ApiDraft, GlobalState, TabArgs, WebPageMediaSize,
|
ActionReturnType, GlobalState, TabArgs,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID, MESSAGE_DELETED } from '../../../api/types';
|
import { MAIN_THREAD_ID, MESSAGE_DELETED } from '../../../api/types';
|
||||||
import { LoadMoreDirection, type ThreadId } from '../../../types';
|
import { LoadMoreDirection, type ThreadId, type WebPageMediaSize } from '../../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
GIF_MIME_TYPE,
|
GIF_MIME_TYPE,
|
||||||
|
|||||||
@ -1,7 +1,4 @@
|
|||||||
import type { ApiUsername } from '../../../api/types';
|
import type { ApiPrivacySettings, ApiUsername } from '../../../api/types';
|
||||||
import type {
|
|
||||||
ApiPrivacySettings,
|
|
||||||
} from '../../../types';
|
|
||||||
import type { ActionReturnType } from '../../types';
|
import type { ActionReturnType } from '../../types';
|
||||||
import {
|
import {
|
||||||
ProfileEditProgress,
|
ProfileEditProgress,
|
||||||
|
|||||||
@ -1,6 +1,4 @@
|
|||||||
import type {
|
import type { StarGiftCategory } from '../../../types';
|
||||||
StarGiftCategory,
|
|
||||||
} from '../../types';
|
|
||||||
|
|
||||||
import { getCurrentTabId } from '../../../util/establishMultitabRole';
|
import { getCurrentTabId } from '../../../util/establishMultitabRole';
|
||||||
import { buildCollectionByKey } from '../../../util/iteratees';
|
import { buildCollectionByKey } from '../../../util/iteratees';
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { addCallback } from '../../../lib/teact/teactn';
|
import { addCallback } from '../../../lib/teact/teactn';
|
||||||
|
|
||||||
import type { ThreadId } from '../../../types';
|
import type { Thread, ThreadId } from '../../../types';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type { ActionReturnType, GlobalState, Thread } from '../../types';
|
import type { ActionReturnType, GlobalState } from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|
||||||
import { DEBUG, MESSAGE_LIST_SLICE, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
import { DEBUG, MESSAGE_LIST_SLICE, SERVICE_NOTIFICATIONS_USER_ID } from '../../../config';
|
||||||
|
|||||||
@ -2,10 +2,10 @@ import type {
|
|||||||
ApiChat, ApiMediaExtendedPreview, ApiMessage, ApiReactions,
|
ApiChat, ApiMediaExtendedPreview, ApiMessage, ApiReactions,
|
||||||
MediaContent,
|
MediaContent,
|
||||||
} from '../../../api/types';
|
} from '../../../api/types';
|
||||||
import type { ThreadId } from '../../../types';
|
import type { ActiveEmojiInteraction, ThreadId } from '../../../types';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType, ActiveEmojiInteraction, GlobalState, RequiredGlobalState,
|
ActionReturnType, GlobalState, RequiredGlobalState,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import type { ApiGroupCall } from '../../../api/types';
|
import type { ApiGroupCall } from '../../../api/types';
|
||||||
|
import type { CallSound } from '../../../types';
|
||||||
import type { RequiredGlobalActions } from '../../index';
|
import type { RequiredGlobalActions } from '../../index';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType, CallSound, GlobalState, TabArgs,
|
ActionReturnType, GlobalState, TabArgs,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
|
|
||||||
import { requestNextMutation } from '../../../lib/fasterdom/fasterdom';
|
import { requestNextMutation } from '../../../lib/fasterdom/fasterdom';
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
import type { ApiMessage } from '../../../api/types';
|
import type { ApiMessage } from '../../../api/types';
|
||||||
import type {
|
import type {
|
||||||
ActionReturnType,
|
ActionReturnType,
|
||||||
ActiveDownloads,
|
|
||||||
GlobalState,
|
GlobalState,
|
||||||
} from '../../types';
|
} from '../../types';
|
||||||
import { MAIN_THREAD_ID } from '../../../api/types';
|
import { MAIN_THREAD_ID } from '../../../api/types';
|
||||||
import { FocusDirection } from '../../../types';
|
import { type ActiveDownloads, FocusDirection } from '../../../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ANIMATION_END_DELAY,
|
ANIMATION_END_DELAY,
|
||||||
|
|||||||
@ -3,8 +3,8 @@ import { getIsHeavyAnimating, onFullyIdle } from '../lib/teact/teact';
|
|||||||
import { addCallback, removeCallback } from '../lib/teact/teactn';
|
import { addCallback, removeCallback } from '../lib/teact/teactn';
|
||||||
|
|
||||||
import type { ApiAvailableReaction, ApiMessage } from '../api/types';
|
import type { ApiAvailableReaction, ApiMessage } from '../api/types';
|
||||||
import type { ThreadId } from '../types';
|
import type { MessageList, ThreadId } from '../types';
|
||||||
import type { ActionReturnType, GlobalState, MessageList } from './types';
|
import type { ActionReturnType, GlobalState } from './types';
|
||||||
import { MAIN_THREAD_ID } from '../api/types';
|
import { MAIN_THREAD_ID } from '../api/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
import type { ApiChatType, ApiPhoto } from '../../api/types';
|
import type { ApiChatType, ApiPhoto } from '../../api/types';
|
||||||
import type {
|
import type { WebApp } from '../../types/webapp';
|
||||||
WebApp,
|
|
||||||
} from '../types';
|
|
||||||
|
|
||||||
import { REPLIES_USER_ID, VERIFICATION_CODES_USER_ID } from '../../config';
|
import { REPLIES_USER_ID, VERIFICATION_CODES_USER_ID } from '../../config';
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import type {
|
|||||||
ApiWebDocument,
|
ApiWebDocument,
|
||||||
MediaContainer,
|
MediaContainer,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { ActiveDownloads } from '../types';
|
import type { ActiveDownloads } from '../../types';
|
||||||
import { ApiMediaFormat } from '../../api/types';
|
import { ApiMediaFormat } from '../../api/types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import type { ApiInputPrivacyRules, BotsPrivacyType, PrivacyVisibility } from '../../types';
|
import type { ApiInputPrivacyRules, BotsPrivacyType, PrivacyVisibility } from '../../api/types';
|
||||||
import type { GlobalState } from '../types';
|
import type { GlobalState } from '../types';
|
||||||
|
|
||||||
import { partition } from '../../util/iteratees';
|
import { partition } from '../../util/iteratees';
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import type { InlineBotSettings } from '../../types';
|
import type { InlineBotSettings } from '../../types';
|
||||||
|
import type { WebApp, WebAppModalStateType } from '../../types/webapp';
|
||||||
import type {
|
import type {
|
||||||
GlobalState, TabArgs, WebApp, WebAppModalStateType,
|
GlobalState, TabArgs,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
|
|
||||||
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import type {
|
import type {
|
||||||
ApiChat, ApiChatFullInfo, ApiChatMember,
|
ApiChat, ApiChatFullInfo, ApiChatMember,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { ChatListType, GlobalState } from '../types';
|
import type { ChatListType } from '../../types';
|
||||||
|
import type { GlobalState } from '../types';
|
||||||
|
|
||||||
import { ARCHIVED_FOLDER_ID } from '../../config';
|
import { ARCHIVED_FOLDER_ID } from '../../config';
|
||||||
import { areDeepEqual } from '../../util/areDeepEqual';
|
import { areDeepEqual } from '../../util/areDeepEqual';
|
||||||
|
|||||||
@ -1,9 +1,17 @@
|
|||||||
import type {
|
import type {
|
||||||
ApiMessage, ApiPoll, ApiPollResult, ApiQuickReply, ApiSponsoredMessage, ApiThreadInfo,
|
ApiMessage, ApiPoll, ApiPollResult, ApiQuickReply, ApiSponsoredMessage, ApiThreadInfo,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { FocusDirection, ScrollTargetPosition, ThreadId } from '../../types';
|
|
||||||
import type {
|
import type {
|
||||||
GlobalState, MessageList, MessageListType, TabArgs, TabState, TabThread, Thread,
|
FocusDirection,
|
||||||
|
MessageList,
|
||||||
|
MessageListType,
|
||||||
|
ScrollTargetPosition,
|
||||||
|
TabThread,
|
||||||
|
Thread,
|
||||||
|
ThreadId,
|
||||||
|
} from '../../types';
|
||||||
|
import type {
|
||||||
|
GlobalState, TabArgs, TabState,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { MAIN_THREAD_ID } from '../../api/types';
|
import { MAIN_THREAD_ID } from '../../api/types';
|
||||||
|
|
||||||
|
|||||||
@ -5,9 +5,14 @@ import type {
|
|||||||
ApiStarsSubscription,
|
ApiStarsSubscription,
|
||||||
ApiStarsTransaction,
|
ApiStarsTransaction,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { PaymentStep, ShippingOption } from '../../types';
|
|
||||||
import type {
|
import type {
|
||||||
GlobalState, StarsSubscriptions, StarsTransactionType, TabArgs, TabState,
|
PaymentStep,
|
||||||
|
ShippingOption,
|
||||||
|
StarsSubscriptions,
|
||||||
|
StarsTransactionType,
|
||||||
|
} from '../../types';
|
||||||
|
import type {
|
||||||
|
GlobalState, TabArgs, TabState,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
|
|
||||||
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import type { ApiTopic } from '../../api/types';
|
import type { ApiTopic } from '../../api/types';
|
||||||
import type { GlobalState, TopicsInfo } from '../types';
|
import type { TopicsInfo } from '../../types';
|
||||||
|
import type { GlobalState } from '../types';
|
||||||
|
|
||||||
import { buildCollectionByKey, omit, unique } from '../../util/iteratees';
|
import { buildCollectionByKey, omit, unique } from '../../util/iteratees';
|
||||||
import {
|
import {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import type { ApiFormattedText } from '../../api/types';
|
import type { ApiFormattedText } from '../../api/types';
|
||||||
import type { GlobalState, TabArgs, TranslatedMessage } from '../types';
|
import type { TranslatedMessage } from '../../types';
|
||||||
|
import type { GlobalState, TabArgs } from '../types';
|
||||||
|
|
||||||
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
import { getCurrentTabId } from '../../util/establishMultitabRole';
|
||||||
import { omit } from '../../util/iteratees';
|
import { omit } from '../../util/iteratees';
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
import type {
|
import type {
|
||||||
ApiChat, ApiChatFullInfo, ApiChatType,
|
ApiChat, ApiChatFullInfo, ApiChatType,
|
||||||
} from '../../api/types';
|
} from '../../api/types';
|
||||||
import type { ChatListType, GlobalState, TabArgs } from '../types';
|
import type { ChatListType } from '../../types';
|
||||||
|
import type { GlobalState, TabArgs } from '../types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SAVED_FOLDER_ID, SERVICE_NOTIFICATIONS_USER_ID,
|
ALL_FOLDER_ID, ARCHIVED_FOLDER_ID, MEMBERS_LOAD_SLICE, SAVED_FOLDER_ID, SERVICE_NOTIFICATIONS_USER_ID,
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user