diff --git a/native/redux/legacy-update-roles-and-permissions.js b/native/redux/legacy-update-roles-and-permissions.js --- a/native/redux/legacy-update-roles-and-permissions.js +++ b/native/redux/legacy-update-roles-and-permissions.js @@ -10,6 +10,7 @@ import type { ThreadPermissionsBlob } from 'lib/types/thread-permission-types.js'; import type { LegacyRawThreadInfo, + LegacyRawThreadInfos, ThreadStoreThreadInfos, LegacyMemberInfo, MixedRawThreadInfos, @@ -53,7 +54,7 @@ // This migration utility can only be used with LegacyRawThreadInfos function legacyUpdateRolesAndPermissions( threadStoreInfos: MixedRawThreadInfos, -): MixedRawThreadInfos { +): LegacyRawThreadInfos { const updatedThreadStoreInfos = assertAllThreadInfosAreLegacy({ ...threadStoreInfos, }); diff --git a/native/redux/update-roles-and-permissions.js b/native/redux/update-roles-and-permissions.js new file mode 100644 --- /dev/null +++ b/native/redux/update-roles-and-permissions.js @@ -0,0 +1,48 @@ +// @flow + +import { + decodeMinimallyEncodedRawThreadInfo, + minimallyEncodeRawThreadInfo, + type RawThreadInfo, +} from 'lib/types/minimally-encoded-thread-permissions-types.js'; +import type { + RawThreadInfos, + LegacyRawThreadInfo, +} from 'lib/types/thread-types.js'; + +import { legacyUpdateRolesAndPermissions } from './legacy-update-roles-and-permissions.js'; + +function updateRolesAndPermissions( + threadStoreInfos: RawThreadInfos, +): RawThreadInfos { + const decodedThreadStoreInfos: { [id: string]: LegacyRawThreadInfo } = {}; + + for (const threadID in threadStoreInfos) { + const rawThreadInfo = threadStoreInfos[threadID]; + + const decodedThreadInfo = + decodeMinimallyEncodedRawThreadInfo(rawThreadInfo); + + decodedThreadStoreInfos[threadID] = decodedThreadInfo; + } + + const updatedDecodedThreadStoreInfos = legacyUpdateRolesAndPermissions( + decodedThreadStoreInfos, + ); + + const updatedThreadStoreInfos: { [id: string]: RawThreadInfo } = {}; + + for (const threadID in updatedDecodedThreadStoreInfos) { + const updatedThreadInfo: LegacyRawThreadInfo = + updatedDecodedThreadStoreInfos[threadID]; + + const encodedUpdatedThreadInfo = + minimallyEncodeRawThreadInfo(updatedThreadInfo); + + updatedThreadStoreInfos[threadID] = encodedUpdatedThreadInfo; + } + + return updatedThreadStoreInfos; +} + +export { updateRolesAndPermissions };