Changeset View
Changeset View
Standalone View
Standalone View
lib/reducers/message-reducer.js
// @flow | // @flow | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import _difference from 'lodash/fp/difference'; | import _difference from 'lodash/fp/difference'; | ||||
import _flow from 'lodash/fp/flow'; | import _flow from 'lodash/fp/flow'; | ||||
import _isEqual from 'lodash/fp/isEqual'; | import _isEqual from 'lodash/fp/isEqual'; | ||||
import _keyBy from 'lodash/fp/keyBy'; | import _keyBy from 'lodash/fp/keyBy'; | ||||
import _map from 'lodash/fp/map'; | import _map from 'lodash/fp/map'; | ||||
import _mapKeys from 'lodash/fp/mapKeys'; | import _mapKeys from 'lodash/fp/mapKeys'; | ||||
import _mapValues from 'lodash/fp/mapValues'; | import _mapValues from 'lodash/fp/mapValues'; | ||||
import _omit from 'lodash/fp/omit'; | import _omit from 'lodash/fp/omit'; | ||||
import _omitBy from 'lodash/fp/omitBy'; | import _omitBy from 'lodash/fp/omitBy'; | ||||
import _pick from 'lodash/fp/pick'; | import _pick from 'lodash/fp/pick'; | ||||
import _pickBy from 'lodash/fp/pickBy'; | import _pickBy from 'lodash/fp/pickBy'; | ||||
import _uniq from 'lodash/fp/uniq'; | import _uniq from 'lodash/fp/uniq'; | ||||
import { setClientDBStoreActionType } from '../actions/client-db-store-actions'; | |||||
import { | import { | ||||
createEntryActionTypes, | createEntryActionTypes, | ||||
saveEntryActionTypes, | saveEntryActionTypes, | ||||
deleteEntryActionTypes, | deleteEntryActionTypes, | ||||
restoreEntryActionTypes, | restoreEntryActionTypes, | ||||
} from '../actions/entry-actions'; | } from '../actions/entry-actions'; | ||||
import { | import { | ||||
fetchMessagesBeforeCursorActionTypes, | fetchMessagesBeforeCursorActionTypes, | ||||
fetchMostRecentMessagesActionTypes, | fetchMostRecentMessagesActionTypes, | ||||
sendTextMessageActionTypes, | sendTextMessageActionTypes, | ||||
sendMultimediaMessageActionTypes, | sendMultimediaMessageActionTypes, | ||||
saveMessagesActionType, | saveMessagesActionType, | ||||
processMessagesActionType, | processMessagesActionType, | ||||
messageStorePruneActionType, | messageStorePruneActionType, | ||||
createLocalMessageActionType, | createLocalMessageActionType, | ||||
fetchSingleMostRecentMessagesFromThreadsActionTypes, | fetchSingleMostRecentMessagesFromThreadsActionTypes, | ||||
setMessageStoreMessages, | |||||
} from '../actions/message-actions'; | } from '../actions/message-actions'; | ||||
import { sendMessageReportActionTypes } from '../actions/message-report-actions'; | import { sendMessageReportActionTypes } from '../actions/message-report-actions'; | ||||
import { | import { | ||||
changeThreadSettingsActionTypes, | changeThreadSettingsActionTypes, | ||||
deleteThreadActionTypes, | deleteThreadActionTypes, | ||||
leaveThreadActionTypes, | leaveThreadActionTypes, | ||||
newThreadActionTypes, | newThreadActionTypes, | ||||
removeUsersFromThreadActionTypes, | removeUsersFromThreadActionTypes, | ||||
▲ Show 20 Lines • Show All 1,240 Lines • ▼ Show 20 Lines | ) { | ||||
return { | return { | ||||
messageStoreOperations, | messageStoreOperations, | ||||
messageStore: { | messageStore: { | ||||
...messageStoreAfterReassignment, | ...messageStoreAfterReassignment, | ||||
messages: processedMessageStore.messages, | messages: processedMessageStore.messages, | ||||
}, | }, | ||||
}; | }; | ||||
} else if (action.type === setMessageStoreMessages) { | } else if (action.type === setClientDBStoreActionType) { | ||||
const { | const { | ||||
messageStoreOperations, | messageStoreOperations, | ||||
messageStore: updatedMessageStore, | messageStore: updatedMessageStore, | ||||
} = updateMessageStoreWithLatestThreadInfos(messageStore, newThreadInfos); | } = updateMessageStoreWithLatestThreadInfos(messageStore, newThreadInfos); | ||||
let threads = { ...updatedMessageStore.threads }; | let threads = { ...updatedMessageStore.threads }; | ||||
let local = { ...updatedMessageStore.local }; | let local = { ...updatedMessageStore.local }; | ||||
// Store message IDs already contained within threads so that we | // Store message IDs already contained within threads so that we | ||||
// do not insert duplicates | // do not insert duplicates | ||||
const existingMessageIDs = new Set(); | const existingMessageIDs = new Set(); | ||||
for (const threadID in threads) { | for (const threadID in threads) { | ||||
threads[threadID].messageIDs.forEach(msgID => { | threads[threadID].messageIDs.forEach(msgID => { | ||||
existingMessageIDs.add(msgID); | existingMessageIDs.add(msgID); | ||||
}); | }); | ||||
} | } | ||||
const threadsNeedMsgIDsResorting = new Set(); | const threadsNeedMsgIDsResorting = new Set(); | ||||
const actionPayloadMessages = translateClientDBMessageInfosToRawMessageInfos( | const actionPayloadMessages = translateClientDBMessageInfosToRawMessageInfos( | ||||
action.payload, | action.payload.messages, | ||||
); | ); | ||||
// When starting the app on native, we filter out any local-only multimedia | // When starting the app on native, we filter out any local-only multimedia | ||||
// messages because the relevant context is no longer available | // messages because the relevant context is no longer available | ||||
const messageIDsToBeRemoved = []; | const messageIDsToBeRemoved = []; | ||||
for (const id in actionPayloadMessages) { | for (const id in actionPayloadMessages) { | ||||
const message = actionPayloadMessages[id]; | const message = actionPayloadMessages[id]; | ||||
const { threadID } = message; | const { threadID } = message; | ||||
▲ Show 20 Lines • Show All 105 Lines • Show Last 20 Lines |