diff --git a/lib/reducers/dm-operations-queue-reducer.js b/lib/reducers/dm-operations-queue-reducer.js --- a/lib/reducers/dm-operations-queue-reducer.js +++ b/lib/reducers/dm-operations-queue-reducer.js @@ -4,10 +4,7 @@ import type { DMOperationStoreOperation } from '../ops/dm-operations-store-ops.js'; import { - clearQueuedEntryDMOpsActionType, - clearQueuedMembershipDMOpsActionType, - clearQueuedMessageDMOpsActionType, - clearQueuedThreadDMOpsActionType, + clearQueuedDMOpsActionType, type OperationsQueue, pruneDMOpsQueueActionType, queuedDMOperationConditionType, @@ -117,45 +114,52 @@ }, operations: [], }; - } else if (action.type === clearQueuedThreadDMOpsActionType) { - const { [action.payload.threadID]: removed, ...threadQueue } = - store.threadQueue; - return { - store: { - ...store, - threadQueue, - }, - operations: [], - }; - } else if (action.type === clearQueuedMessageDMOpsActionType) { - const { [action.payload.messageID]: removed, ...messageQueue } = - store.messageQueue; - return { - store: { - ...store, - messageQueue, - }, - operations: [], - }; - } else if (action.type === clearQueuedEntryDMOpsActionType) { - const { [action.payload.entryID]: removed, ...entryQueue } = - store.entryQueue; - return { - store: { - ...store, - entryQueue, - }, - operations: [], - }; - } else if (action.type === clearQueuedMembershipDMOpsActionType) { - const threadQueue = store.membershipQueue[action.payload.threadID]; + } else if (action.type === clearQueuedDMOpsActionType) { + const condition = action.payload; + + if (condition.type === queuedDMOperationConditionType.THREAD) { + const { [condition.threadID]: removed, ...threadQueue } = + store.threadQueue; + return { + store: { + ...store, + threadQueue, + }, + operations: [], + }; + } + + if (condition.type === queuedDMOperationConditionType.ENTRY) { + const { [condition.entryID]: removed, ...entryQueue } = store.entryQueue; + return { + store: { + ...store, + entryQueue, + }, + operations: [], + }; + } + + if (condition.type === queuedDMOperationConditionType.MESSAGE) { + const { [condition.messageID]: removed, ...messageQueue } = + store.messageQueue; + return { + store: { + ...store, + messageQueue, + }, + operations: [], + }; + } + + const threadQueue = store.membershipQueue[condition.threadID]; if (!threadQueue) { return { store, operations: [] }; } - const { [action.payload.userID]: removed, ...queue } = threadQueue; + const { [condition.userID]: removed, ...queue } = threadQueue; if (Object.keys(queue).length === 0) { - const { [action.payload.threadID]: removedThread, ...membershipQueue } = + const { [condition.threadID]: removedThread, ...membershipQueue } = store.membershipQueue; return { store: { @@ -171,7 +175,7 @@ ...store, membershipQueue: { ...store.membershipQueue, - [action.payload.threadID]: queue, + [condition.threadID]: queue, }, }, operations: [], diff --git a/lib/reducers/dm-operations-queue-reducer.test.js b/lib/reducers/dm-operations-queue-reducer.test.js --- a/lib/reducers/dm-operations-queue-reducer.test.js +++ b/lib/reducers/dm-operations-queue-reducer.test.js @@ -2,10 +2,6 @@ import { reduceDMOperationsQueue } from './dm-operations-queue-reducer.js'; import { - clearQueuedEntryDMOpsActionType, - clearQueuedMembershipDMOpsActionType, - clearQueuedMessageDMOpsActionType, - clearQueuedThreadDMOpsActionType, type DMAddMembersOperation, type DMSendTextMessageOperation, type DMCreateEntryOperation, @@ -13,6 +9,8 @@ type QueuedDMOperations, queueDMOpsActionType, type DMLeaveThreadOperation, + clearQueuedDMOpsActionType, + queuedDMOperationConditionType, reportUnshimmingOperationCompletedActionType, } from '../types/dm-ops.js'; import type { BaseAction } from '../types/redux-types.js'; @@ -398,8 +396,9 @@ }; const action: BaseAction = { - type: clearQueuedThreadDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.THREAD, threadID: 'thread1', }, }; @@ -424,8 +423,9 @@ }; const action: BaseAction = { - type: clearQueuedMessageDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MESSAGE, messageID: 'msg1', }, }; @@ -450,8 +450,9 @@ }; const action: BaseAction = { - type: clearQueuedEntryDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.ENTRY, entryID: 'entry1', }, }; @@ -482,8 +483,9 @@ }; const action: BaseAction = { - type: clearQueuedMembershipDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MEMBERSHIP, threadID: 'thread1', userID: 'user1', }, @@ -521,8 +523,9 @@ }; const action: BaseAction = { - type: clearQueuedMembershipDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MEMBERSHIP, threadID: 'thread1', userID: 'user1', }, @@ -549,8 +552,9 @@ }; const action: BaseAction = { - type: clearQueuedMembershipDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MEMBERSHIP, threadID: 'nonexistent', userID: 'user1', }, diff --git a/lib/shared/dm-ops/dm-ops-queue-handler.react.js b/lib/shared/dm-ops/dm-ops-queue-handler.react.js --- a/lib/shared/dm-ops/dm-ops-queue-handler.react.js +++ b/lib/shared/dm-ops/dm-ops-queue-handler.react.js @@ -11,11 +11,9 @@ threadInfoSelector, } from '../../selectors/thread-selectors.js'; import { - clearQueuedEntryDMOpsActionType, - clearQueuedMembershipDMOpsActionType, - clearQueuedMessageDMOpsActionType, - clearQueuedThreadDMOpsActionType, + clearQueuedDMOpsActionType, pruneDMOpsQueueActionType, + queuedDMOperationConditionType, reportUnshimmingOperationCompletedActionType, } from '../../types/dm-ops.js'; import type { DMOperation } from '../../types/dm-ops.js'; @@ -117,8 +115,9 @@ { type: 'action', action: { - type: clearQueuedThreadDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.THREAD, threadID, }, }, @@ -159,8 +158,9 @@ { type: 'action', action: { - type: clearQueuedMessageDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MESSAGE, messageID, }, }, @@ -202,8 +202,9 @@ { type: 'action', action: { - type: clearQueuedEntryDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.ENTRY, entryID, }, }, @@ -253,8 +254,9 @@ { type: 'action', action: { - type: clearQueuedMembershipDMOpsActionType, + type: clearQueuedDMOpsActionType, payload: { + type: queuedDMOperationConditionType.MEMBERSHIP, threadID, userID: member.id, }, diff --git a/lib/types/dm-ops.js b/lib/types/dm-ops.js --- a/lib/types/dm-ops.js +++ b/lib/types/dm-ops.js @@ -610,27 +610,7 @@ +pruneMaxTimestamp: number, }; -export const clearQueuedThreadDMOpsActionType = 'CLEAR_QUEUED_THREAD_DM_OPS'; -export type ClearQueuedThreadDMOpsPayload = { - +threadID: string, -}; - -export const clearQueuedMessageDMOpsActionType = 'CLEAR_QUEUED_MESSAGE_DM_OPS'; -export type ClearQueuedMessageDMOpsPayload = { - +messageID: string, -}; - -export const clearQueuedEntryDMOpsActionType = 'CLEAR_QUEUED_ENTRY_DM_OPS'; -export type ClearQueuedEntryDMOpsPayload = { - +entryID: string, -}; - -export const clearQueuedMembershipDMOpsActionType = - 'CLEAR_QUEUED_MEMBERSHIP_DM_OPS'; -export type ClearQueuedMembershipDMOpsPayload = { - +threadID: string, - +userID: string, -}; +export const clearQueuedDMOpsActionType = 'CLEAR_QUEUED_DM_OPS'; export const saveUnsupportedOperationActionType = 'SAVE_UNSUPPORTED_DM_OPERATION'; diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js --- a/lib/types/redux-types.js +++ b/lib/types/redux-types.js @@ -52,12 +52,9 @@ QueuedDMOperations, QueueDMOpsPayload, PruneDMOpsQueuePayload, - ClearQueuedThreadDMOpsPayload, - ClearQueuedMessageDMOpsPayload, - ClearQueuedEntryDMOpsPayload, - ClearQueuedMembershipDMOpsPayload, SaveUnsupportedOperationPayload, ReportUnshimmingOperationCompletedPayload, + QueueDMOpsCondition, } from './dm-ops.js'; import type { DraftStore } from './draft-types.js'; import type { EnabledApps, SupportedApps } from './enabled-apps.js'; @@ -1575,22 +1572,7 @@ } | { +type: 'QUEUE_DM_OPS', +payload: QueueDMOpsPayload } | { +type: 'PRUNE_DM_OPS_QUEUE', +payload: PruneDMOpsQueuePayload } - | { - +type: 'CLEAR_QUEUED_THREAD_DM_OPS', - +payload: ClearQueuedThreadDMOpsPayload, - } - | { - +type: 'CLEAR_QUEUED_MESSAGE_DM_OPS', - +payload: ClearQueuedMessageDMOpsPayload, - } - | { - +type: 'CLEAR_QUEUED_ENTRY_DM_OPS', - +payload: ClearQueuedEntryDMOpsPayload, - } - | { - +type: 'CLEAR_QUEUED_MEMBERSHIP_DM_OPS', - +payload: ClearQueuedMembershipDMOpsPayload, - } + | { +type: 'CLEAR_QUEUED_DM_OPS', +payload: QueueDMOpsCondition } | { +type: 'STORE_ESTABLISHED_HOLDER', +payload: BlobHashAndHolder,