diff --git a/lib/shared/dm-ops/add-members-spec.js b/lib/shared/dm-ops/add-members-spec.js --- a/lib/shared/dm-ops/add-members-spec.js +++ b/lib/shared/dm-ops/add-members-spec.js @@ -65,10 +65,6 @@ 'thread members but is missing from the store', ); } - invariant( - !parentThreadInfo || parentThreadInfo.thick, - 'Parent thread should be thick', - ); const { membershipPermissions } = createRoleAndPermissionForThickThreads( threadInfo.type, @@ -103,13 +99,6 @@ const rawMessageInfos = [rawMessageInfo]; const currentThreadInfo = threadInfos[threadID]; - if (!currentThreadInfo.thick) { - return { - rawMessageInfos: [], - updateInfos: [], - blobOps: [], - }; - } const { membershipPermissions, roleID } = createPermissionsForNewMembers( currentThreadInfo, diff --git a/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js b/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js --- a/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js +++ b/lib/shared/dm-ops/add-viewer-to-thread-members-spec.js @@ -72,13 +72,6 @@ const threadID = existingThreadDetails.threadID; const currentThreadInfo = threadInfos[threadID]; - if (currentThreadInfo && !currentThreadInfo.thick) { - return { - rawMessageInfos: [], - updateInfos: [], - blobOps: [], - }; - } const memberTimestamps = { ...currentThreadInfo?.timestamps?.members, diff --git a/lib/shared/dm-ops/change-thread-read-status-spec.js b/lib/shared/dm-ops/change-thread-read-status-spec.js --- a/lib/shared/dm-ops/change-thread-read-status-spec.js +++ b/lib/shared/dm-ops/change-thread-read-status-spec.js @@ -1,6 +1,5 @@ // @flow -import invariant from 'invariant'; import uuid from 'uuid'; import type { @@ -31,7 +30,6 @@ const { threadID, unread, time } = dmOperation; const threadInfo = utilities.threadInfos[threadID]; - invariant(threadInfo.thick, 'Thread should be thick'); if (threadInfo.timestamps.currentUser.unread > time) { return { rawMessageInfos: [], diff --git a/lib/shared/dm-ops/change-thread-settings-spec.js b/lib/shared/dm-ops/change-thread-settings-spec.js --- a/lib/shared/dm-ops/change-thread-settings-spec.js +++ b/lib/shared/dm-ops/change-thread-settings-spec.js @@ -1,6 +1,5 @@ // @flow -import invariant from 'invariant'; import uuid from 'uuid'; import type { @@ -151,7 +150,7 @@ const { time } = dmOperation; const threadID = getThreadIDFromChangeThreadSettingsDMOp(dmOperation); - const threadInfo: ?RawThreadInfo = utilities.threadInfos[threadID]; + const threadInfo = utilities.threadInfos[threadID]; const updateInfos: Array = []; const { fieldNameToMessageData, threadInfoUpdate } = @@ -164,7 +163,6 @@ ({ rawMessageInfo }) => rawMessageInfo, ); - invariant(threadInfo?.thick, 'Thread should be thick'); let threadInfoToUpdate: ThickRawThreadInfo = threadInfo; for (const fieldName in threadInfoUpdate) { const timestamp = threadInfoToUpdate.timestamps[fieldName]; diff --git a/lib/shared/dm-ops/change-thread-subscription.js b/lib/shared/dm-ops/change-thread-subscription.js --- a/lib/shared/dm-ops/change-thread-subscription.js +++ b/lib/shared/dm-ops/change-thread-subscription.js @@ -24,7 +24,6 @@ const { viewerID, threadInfos } = utilities; const threadInfo = threadInfos[threadID]; - invariant(threadInfo.thick, 'Thread should be thick'); if (threadInfo.timestamps.members[creatorID].subscription > time) { return { diff --git a/lib/shared/dm-ops/create-thread-spec.js b/lib/shared/dm-ops/create-thread-spec.js --- a/lib/shared/dm-ops/create-thread-spec.js +++ b/lib/shared/dm-ops/create-thread-spec.js @@ -1,6 +1,5 @@ // @flow -import invariant from 'invariant'; import uuid from 'uuid'; import type { @@ -140,10 +139,6 @@ 'thick thread but is missing from the store', ); } - invariant( - !parentThreadInfo || parentThreadInfo.thick, - 'Parent thread should be thick', - ); const { membershipPermissions, role } = createRoleAndPermissionForThickThreads( diff --git a/lib/shared/dm-ops/dm-op-spec.js b/lib/shared/dm-ops/dm-op-spec.js --- a/lib/shared/dm-ops/dm-op-spec.js +++ b/lib/shared/dm-ops/dm-op-spec.js @@ -7,13 +7,13 @@ import type { UserIdentitiesResponse } from '../../types/identity-service-types.js'; import type { RawMessageInfo } from '../../types/message-types.js'; import type { NotificationsCreationData } from '../../types/notif-types.js'; -import type { RawThreadInfos } from '../../types/thread-types.js'; +import type { ThickRawThreadInfos } from '../../types/thread-types.js'; export type ProcessDMOperationUtilities = { +viewerID: string, // Needed to fetch sidebar source messages +fetchMessage: (messageID: string) => Promise, - +threadInfos: RawThreadInfos, + +threadInfos: ThickRawThreadInfos, +entryInfos: RawEntryInfos, +findUserIdentities: ( userIDs: $ReadOnlyArray, diff --git a/lib/shared/dm-ops/dm-op-utils.js b/lib/shared/dm-ops/dm-op-utils.js --- a/lib/shared/dm-ops/dm-op-utils.js +++ b/lib/shared/dm-ops/dm-op-utils.js @@ -17,6 +17,7 @@ import { useGetLatestMessageEdit } from '../../hooks/latest-message-edit.js'; import { useGetAndUpdateDeviceListsForUsers } from '../../hooks/peer-list-hooks.js'; import { mergeUpdatesWithMessageInfos } from '../../reducers/message-reducer.js'; +import { thickRawThreadInfosSelector } from '../../selectors/thread-selectors.js'; import { getAllPeerUserIDAndDeviceIDs } from '../../selectors/user-selectors.js'; import { type P2PMessageRecipient } from '../../tunnelbroker/peer-to-peer-context.js'; import type { @@ -478,7 +479,7 @@ viewerID: ?string, }> { const fetchMessage = useGetLatestMessageEdit(); - const threadInfos = useSelector(state => state.threadStore.threadInfos); + const threadInfos = useSelector(thickRawThreadInfosSelector); const entryInfos = useSelector(state => state.entryStore.entryInfos); const findUserIdentities = useFindUserIdentities(); const loggedInUserInfo = useLoggedInUserInfo(); diff --git a/lib/shared/dm-ops/edit-entry-spec.js b/lib/shared/dm-ops/edit-entry-spec.js --- a/lib/shared/dm-ops/edit-entry-spec.js +++ b/lib/shared/dm-ops/edit-entry-spec.js @@ -63,7 +63,7 @@ createMessageDataWithInfoFromDMOperation(dmOperation); const rawMessageInfos = [rawMessageInfo]; - invariant(rawEntryInfo?.thick, 'Entry thread should be thick'); + invariant(rawEntryInfo?.thick, 'Entry should be thick'); const timestamp = rawEntryInfo.lastUpdatedTime; if (timestamp > time) { diff --git a/lib/shared/dm-ops/join-thread-spec.js b/lib/shared/dm-ops/join-thread-spec.js --- a/lib/shared/dm-ops/join-thread-spec.js +++ b/lib/shared/dm-ops/join-thread-spec.js @@ -58,13 +58,6 @@ const { joinerID, time, existingThreadDetails } = dmOperation; const { viewerID, threadInfos } = utilities; const currentThreadInfo = threadInfos[existingThreadDetails.threadID]; - if (currentThreadInfo && !currentThreadInfo.thick) { - return { - rawMessageInfos: [], - updateInfos: [], - blobOps: [], - }; - } const { rawMessageInfo } = createMessageDataWithInfoFromDMOperation(dmOperation); @@ -149,10 +142,6 @@ 'thick thread but is missing from the store', ); } - invariant( - !parentThreadInfo || parentThreadInfo.thick, - 'Parent thread should be thick', - ); const { membershipPermissions } = createRoleAndPermissionForThickThreads( currentThreadInfo.type, diff --git a/lib/shared/dm-ops/leave-thread-spec.js b/lib/shared/dm-ops/leave-thread-spec.js --- a/lib/shared/dm-ops/leave-thread-spec.js +++ b/lib/shared/dm-ops/leave-thread-spec.js @@ -1,6 +1,5 @@ // @flow -import invariant from 'invariant'; import uuid from 'uuid'; import { createPermissionsInfo } from './create-thread-spec.js'; @@ -16,7 +15,7 @@ import type { ThickRawThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js'; import { minimallyEncodeThreadCurrentUserInfo } from '../../types/minimally-encoded-thread-permissions-types.js'; import { threadTypes } from '../../types/thread-types-enum.js'; -import type { RawThreadInfos } from '../../types/thread-types.js'; +import type { ThickRawThreadInfos } from '../../types/thread-types.js'; import { updateTypes } from '../../types/update-types-enum.js'; import type { ClientUpdateInfo } from '../../types/update-types.js'; import { values } from '../../utils/objects.js'; @@ -39,7 +38,7 @@ function createDeleteSubthreadsUpdates( dmOperation: DMLeaveThreadOperation, threadInfo: ThickRawThreadInfo, - threadInfos: RawThreadInfos, + threadInfos: ThickRawThreadInfos, ): Array { const updates: Array = []; for (const thread of values(threadInfos)) { @@ -61,11 +60,11 @@ function createLeaveSubthreadsUpdates( dmOperation: DMLeaveThreadOperation, threadInfo: ThickRawThreadInfo, - threadInfos: RawThreadInfos, + threadInfos: ThickRawThreadInfos, ): Array { const updates: Array = []; for (const thread of values(threadInfos)) { - if (thread.parentThreadID !== threadInfo.id || !thread.thick) { + if (thread.parentThreadID !== threadInfo.id) { continue; } @@ -123,7 +122,6 @@ const { editorID, time, threadID } = dmOperation; const { viewerID, threadInfos } = utilities; const threadInfo = threadInfos[threadID]; - invariant(threadInfo.thick, 'Thread should be thick'); const { rawMessageInfo } = createMessageDataWithInfoFromDMOperation(dmOperation); @@ -180,10 +178,6 @@ 'leaving a thread but is missing from the store', ); } - invariant( - parentThreadInfo?.thick, - 'Parent thread should be present and thick', - ); const viewerMembershipPermissions = createPermissionsInfo( threadID, threadInfo.type, diff --git a/lib/shared/dm-ops/remove-members-spec.js b/lib/shared/dm-ops/remove-members-spec.js --- a/lib/shared/dm-ops/remove-members-spec.js +++ b/lib/shared/dm-ops/remove-members-spec.js @@ -1,6 +1,5 @@ // @flow -import invariant from 'invariant'; import uuid from 'uuid'; import type { @@ -50,7 +49,6 @@ const { time, threadID, removedUserIDs } = dmOperation; const { viewerID, threadInfos } = utilities; const threadInfo = threadInfos[threadID]; - invariant(threadInfo.thick, 'Thread should be thick'); const { rawMessageInfo } = createMessageDataWithInfoFromDMOperation(dmOperation);