Use ReadonlyArrays in conversation model and redux
This commit is contained in:
parent
ecbf84638d
commit
dec23725e5
55 changed files with 173 additions and 162 deletions
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
} = {}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ type StateType = {
|
|||
maximumGroupSizeModalState: OneTimeModalState;
|
||||
recommendedGroupSizeModalState: OneTimeModalState;
|
||||
searchTerm: string;
|
||||
selectedConversationIds: Array<string>;
|
||||
selectedConversationIds: ReadonlyArray<string>;
|
||||
stage: Stage;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -19,7 +19,7 @@ export type Props = {
|
|||
showAllMedia: () => void;
|
||||
showLightboxWithMedia: (
|
||||
selectedAttachmentPath: string | undefined,
|
||||
media: Array<MediaItemType>
|
||||
media: ReadonlyArray<MediaItemType>
|
||||
) => void;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -41,7 +41,7 @@ type PropsType = {
|
|||
deleteAvatarFromDisk: DeleteAvatarFromDiskActionType;
|
||||
replaceAvatar: ReplaceAvatarActionType;
|
||||
saveAvatarToDisk: SaveAvatarToDiskActionType;
|
||||
userAvatarData: Array<AvatarDataType>;
|
||||
userAvatarData: ReadonlyArray<AvatarDataType>;
|
||||
};
|
||||
|
||||
export function EditConversationAttributesModal({
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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';
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue