Changeset View
Changeset View
Standalone View
Standalone View
native/redux/redux-utils.js
// @flow | // @flow | ||||
import { useSelector as reactReduxUseSelector } from 'react-redux'; | import { useSelector as reactReduxUseSelector } from 'react-redux'; | ||||
import { convertReportStoreOperationToClientDBReportStoreOperation } from 'lib/ops/report-store-ops.js'; | |||||
import type { StoreOperations } from 'lib/types/store-ops-types.js'; | import type { StoreOperations } from 'lib/types/store-ops-types.js'; | ||||
import { convertMessageStoreOperationsToClientDBOperations } from 'lib/utils/message-ops-utils.js'; | import { convertMessageStoreOperationsToClientDBOperations } from 'lib/utils/message-ops-utils.js'; | ||||
import { convertThreadStoreOperationsToClientDBOperations } from 'lib/utils/thread-ops-utils.js'; | import { convertThreadStoreOperationsToClientDBOperations } from 'lib/utils/thread-ops-utils.js'; | ||||
import type { AppState } from './state-types.js'; | import type { AppState } from './state-types.js'; | ||||
import { commCoreModule } from '../native-modules.js'; | import { commCoreModule } from '../native-modules.js'; | ||||
import { isTaskCancelledError } from '../utils/error-handling.js'; | import { isTaskCancelledError } from '../utils/error-handling.js'; | ||||
function useSelector<SS>( | function useSelector<SS>( | ||||
selector: (state: AppState) => SS, | selector: (state: AppState) => SS, | ||||
equalityFn?: (a: SS, b: SS) => boolean, | equalityFn?: (a: SS, b: SS) => boolean, | ||||
): SS { | ): SS { | ||||
return reactReduxUseSelector(selector, equalityFn); | return reactReduxUseSelector(selector, equalityFn); | ||||
} | } | ||||
async function processDBStoreOperations( | async function processDBStoreOperations( | ||||
storeOperations: StoreOperations, | storeOperations: StoreOperations, | ||||
): Promise<void> { | ): Promise<void> { | ||||
const { | const { | ||||
draftStoreOperations, | draftStoreOperations, | ||||
threadStoreOperations, | threadStoreOperations, | ||||
messageStoreOperations, | messageStoreOperations, | ||||
reportStoreOperations, | |||||
} = storeOperations; | } = storeOperations; | ||||
const convertedThreadStoreOperations = | const convertedThreadStoreOperations = | ||||
convertThreadStoreOperationsToClientDBOperations(threadStoreOperations); | convertThreadStoreOperationsToClientDBOperations(threadStoreOperations); | ||||
const convertedMessageStoreOperations = | const convertedMessageStoreOperations = | ||||
convertMessageStoreOperationsToClientDBOperations(messageStoreOperations); | convertMessageStoreOperationsToClientDBOperations(messageStoreOperations); | ||||
const convertedReportStoreOperations = | |||||
convertReportStoreOperationToClientDBReportStoreOperation( | |||||
reportStoreOperations, | |||||
); | |||||
try { | try { | ||||
const promises = []; | const promises = []; | ||||
if (convertedThreadStoreOperations.length > 0) { | if (convertedThreadStoreOperations.length > 0) { | ||||
promises.push( | promises.push( | ||||
commCoreModule.processThreadStoreOperations( | commCoreModule.processThreadStoreOperations( | ||||
convertedThreadStoreOperations, | convertedThreadStoreOperations, | ||||
), | ), | ||||
); | ); | ||||
} | } | ||||
if (convertedMessageStoreOperations.length > 0) { | if (convertedMessageStoreOperations.length > 0) { | ||||
promises.push( | promises.push( | ||||
commCoreModule.processMessageStoreOperations( | commCoreModule.processMessageStoreOperations( | ||||
convertedMessageStoreOperations, | convertedMessageStoreOperations, | ||||
), | ), | ||||
); | ); | ||||
} | } | ||||
if (draftStoreOperations.length > 0) { | if (draftStoreOperations.length > 0) { | ||||
promises.push( | promises.push( | ||||
commCoreModule.processDraftStoreOperations(draftStoreOperations), | commCoreModule.processDraftStoreOperations(draftStoreOperations), | ||||
); | ); | ||||
} | } | ||||
if (convertedReportStoreOperations.length > 0) { | |||||
promises.push( | |||||
commCoreModule.processReportStoreOperations( | |||||
convertedReportStoreOperations, | |||||
), | |||||
); | |||||
} | |||||
await Promise.all(promises); | await Promise.all(promises); | ||||
} catch (e) { | } catch (e) { | ||||
if (isTaskCancelledError(e)) { | if (isTaskCancelledError(e)) { | ||||
return; | return; | ||||
} | } | ||||
// this code will make an entry in SecureStore and cause re-creating | // this code will make an entry in SecureStore and cause re-creating | ||||
// database when user will open app again | // database when user will open app again | ||||
commCoreModule.reportDBOperationsFailure(); | commCoreModule.reportDBOperationsFailure(); | ||||
commCoreModule.terminate(); | commCoreModule.terminate(); | ||||
} | } | ||||
} | } | ||||
export { useSelector, processDBStoreOperations }; | export { useSelector, processDBStoreOperations }; |