diff --git a/lib/shared/redux/legacy-update-roles-and-permissions.js b/lib/shared/redux/legacy-update-roles-and-permissions.js --- a/lib/shared/redux/legacy-update-roles-and-permissions.js +++ b/lib/shared/redux/legacy-update-roles-and-permissions.js @@ -10,6 +10,7 @@ import type { ThreadPermissionsBlob } from '../../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/lib/shared/redux/update-roles-and-permissions.js b/lib/shared/redux/update-roles-and-permissions.js new file mode 100644 --- /dev/null +++ b/lib/shared/redux/update-roles-and-permissions.js @@ -0,0 +1,47 @@ +// @flow + +import { legacyUpdateRolesAndPermissions } from './legacy-update-roles-and-permissions.js'; +import { + decodeMinimallyEncodedRawThreadInfo, + minimallyEncodeRawThreadInfo, + type RawThreadInfo, +} from '../../types/minimally-encoded-thread-permissions-types.js'; +import type { + RawThreadInfos, + LegacyRawThreadInfo, +} from '../../types/thread-types.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 };