Use ReadonlyArrays in conversation model and redux

This commit is contained in:
Fedor Indutny 2022-12-21 16:07:02 -08:00 committed by GitHub
parent ecbf84638d
commit dec23725e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
55 changed files with 173 additions and 162 deletions

View file

@ -29,7 +29,7 @@ export type Props = {
membersCount?: number;
name?: string;
phoneNumber?: string;
sharedGroupNames?: Array<string>;
sharedGroupNames?: ReadonlyArray<string>;
unblurAvatar: (conversationId: string) => void;
unblurredAvatarPath?: string;
updateSharedGroups: (conversationId: string) => unknown;

View file

@ -43,11 +43,11 @@ const renderChange = (
groupName,
areWeAdmin = true,
}: {
groupMemberships?: Array<{
groupMemberships?: ReadonlyArray<{
uuid: UUIDStringType;
isAdmin: boolean;
}>;
groupBannedMemberships?: Array<UUIDStringType>;
groupBannedMemberships?: ReadonlyArray<UUIDStringType>;
groupName?: string;
areWeAdmin?: boolean;
} = {}

View file

@ -25,11 +25,11 @@ import { ConfirmationDialog } from '../ConfirmationDialog';
export type PropsDataType = {
areWeAdmin: boolean;
conversationId: string;
groupMemberships?: Array<{
groupMemberships?: ReadonlyArray<{
uuid: UUIDStringType;
isAdmin: boolean;
}>;
groupBannedMemberships?: Array<UUIDStringType>;
groupBannedMemberships?: ReadonlyArray<UUIDStringType>;
groupName?: string;
ourACI?: UUIDStringType;
ourPNI?: UUIDStringType;
@ -155,11 +155,11 @@ function GroupV2Detail({
conversationId: string;
detail: GroupV2ChangeDetailType;
isLastText: boolean;
groupMemberships?: Array<{
groupMemberships?: ReadonlyArray<{
uuid: UUIDStringType;
isAdmin: boolean;
}>;
groupBannedMemberships?: Array<UUIDStringType>;
groupBannedMemberships?: ReadonlyArray<UUIDStringType>;
groupName?: string;
i18n: LocalizerType;
fromId?: UUIDStringType;

View file

@ -21,7 +21,7 @@ import type { LocalizerType, ThemeType } from '../../types/Util';
export type DirectionType = 'incoming' | 'outgoing';
export type Props = {
attachments: Array<AttachmentType>;
attachments: ReadonlyArray<AttachmentType>;
bottomOverlay?: boolean;
direction: DirectionType;
isSticker?: boolean;

View file

@ -223,7 +223,7 @@ export type PropsData = {
>;
reducedMotion?: boolean;
conversationType: ConversationTypeType;
attachments?: Array<AttachmentType>;
attachments?: ReadonlyArray<AttachmentType>;
giftBadge?: GiftBadgeType;
payment?: AnyPaymentEvent;
quote?: {
@ -255,7 +255,7 @@ export type PropsData = {
storyId?: string;
text: string;
};
previews: Array<LinkPreviewType>;
previews: ReadonlyArray<LinkPreviewType>;
isTapToView?: boolean;
isTapToViewExpired?: boolean;

View file

@ -28,7 +28,7 @@ export type OwnProps = {
onPick: (emoji: string) => unknown;
onSetSkinTone: (tone: number) => unknown;
openCustomizePreferredReactionsModal?: () => unknown;
preferredReactionEmoji: Array<string>;
preferredReactionEmoji: ReadonlyArray<string>;
renderEmojiPicker: (props: RenderEmojiPickerProps) => React.ReactElement;
};

View file

@ -48,7 +48,7 @@ type StateType = {
maximumGroupSizeModalState: OneTimeModalState;
recommendedGroupSizeModalState: OneTimeModalState;
searchTerm: string;
selectedConversationIds: Array<string>;
selectedConversationIds: ReadonlyArray<string>;
stage: Stage;
};

View file

@ -74,14 +74,14 @@ export type StateProps = {
i18n: LocalizerType;
isAdmin: boolean;
isGroup: boolean;
groupsInCommon: Array<ConversationType>;
groupsInCommon: ReadonlyArray<ConversationType>;
maxGroupSize: number;
maxRecommendedGroupSize: number;
memberships: Array<GroupV2Membership>;
memberships: ReadonlyArray<GroupV2Membership>;
pendingApprovalMemberships: ReadonlyArray<GroupV2RequestingMembership>;
pendingMemberships: ReadonlyArray<GroupV2PendingMembership>;
theme: ThemeType;
userAvatarData: Array<AvatarDataType>;
userAvatarData: ReadonlyArray<AvatarDataType>;
renderChooseGroupMembersModal: (
props: SmartChooseGroupMembersModalPropsType
) => JSX.Element;

View file

@ -15,7 +15,7 @@ import { PanelSection } from './PanelSection';
type Props = {
contactId: string;
i18n: LocalizerType;
groupsInCommon: Array<ConversationType>;
groupsInCommon: ReadonlyArray<ConversationType>;
toggleAddUserToAnotherGroupModal: (contactId?: string) => void;
showConversation: ShowConversationType;
};

View file

@ -24,7 +24,7 @@ export type Props = {
i18n: LocalizerType;
isGroup: boolean;
isMe: boolean;
memberships: Array<GroupV2Membership>;
memberships: ReadonlyArray<GroupV2Membership>;
startEditing: (isGroupTitle: boolean) => void;
theme: ThemeType;
};

View file

@ -19,7 +19,7 @@ export type Props = {
showAllMedia: () => void;
showLightboxWithMedia: (
selectedAttachmentPath: string | undefined,
media: Array<MediaItemType>
media: ReadonlyArray<MediaItemType>
) => void;
};

View file

@ -25,7 +25,7 @@ export type Props = {
getPreferredBadge: PreferredBadgeSelectorType;
i18n: LocalizerType;
maxShownMemberCount?: number;
memberships: Array<GroupV2Membership>;
memberships: ReadonlyArray<GroupV2Membership>;
showContactModal: (contactId: string, conversationId?: string) => void;
startAddingNewMembers?: () => void;
theme: ThemeType;

View file

@ -41,7 +41,7 @@ type PropsType = {
deleteAvatarFromDisk: DeleteAvatarFromDiskActionType;
replaceAvatar: ReplaceAvatarActionType;
saveAvatarToDisk: SaveAvatarToDiskActionType;
userAvatarData: Array<AvatarDataType>;
userAvatarData: ReadonlyArray<AvatarDataType>;
};
export function EditConversationAttributesModal({

View file

@ -34,7 +34,7 @@ type PropsActionType = {
) => void;
readonly revokePendingMembershipsFromGroupV2: (
conversationId: string,
memberIds: Array<string>
memberIds: ReadonlyArray<string>
) => void;
};
@ -193,14 +193,14 @@ function MembershipActionConfirmation({
) => void;
conversation: ConversationType;
i18n: LocalizerType;
members: Array<ConversationType>;
members: ReadonlyArray<ConversationType>;
onClose: () => void;
ourUuid: string;
revokePendingMembershipsFromGroupV2: (
conversationId: string,
memberIds: Array<string>
memberIds: ReadonlyArray<string>
) => void;
stagedMemberships: Array<StagedMembershipType>;
stagedMemberships: ReadonlyArray<StagedMembershipType>;
}) {
const revokeStagedMemberships = () => {
if (!stagedMemberships) {
@ -424,7 +424,7 @@ function MembersPendingProfileKey({
conversation: ConversationType;
getPreferredBadge: PreferredBadgeSelectorType;
i18n: LocalizerType;
members: Array<ConversationType>;
members: ReadonlyArray<ConversationType>;
memberships: ReadonlyArray<GroupV2PendingMembership>;
ourUuid: string;
setStagedMemberships: (stagedMembership: Array<StagedMembershipType>) => void;

View file

@ -14,7 +14,7 @@ import { missingCaseError } from '../../../util/missingCaseError';
export type Props = {
header?: string;
i18n: LocalizerType;
mediaItems: Array<MediaItemType>;
mediaItems: ReadonlyArray<MediaItemType>;
onItemClick: (event: ItemClickEvent) => unknown;
type: 'media' | 'documents';
};

View file

@ -15,7 +15,7 @@ type YearMonthSectionType = 'yearMonth';
type GenericSection<T> = {
type: T;
mediaItems: Array<MediaItemType>;
mediaItems: ReadonlyArray<MediaItemType>;
};
type StaticSection = GenericSection<StaticSectionType>;
type YearMonthSection = GenericSection<YearMonthSectionType> & {
@ -25,7 +25,7 @@ type YearMonthSection = GenericSection<YearMonthSectionType> & {
export type Section = StaticSection | YearMonthSection;
export const groupMediaItemsByDate = (
timestamp: number,
mediaItems: Array<MediaItemType>
mediaItems: ReadonlyArray<MediaItemType>
): Array<Section> => {
const referenceDateTime = moment.utc(timestamp);