Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3753244
D10625.id35594.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
43 KB
Referenced Files
None
Subscribers
None
D10625.id35594.diff
View Options
diff --git a/keyserver/src/fetchers/thread-fetchers.js b/keyserver/src/fetchers/thread-fetchers.js
--- a/keyserver/src/fetchers/thread-fetchers.js
+++ b/keyserver/src/fetchers/thread-fetchers.js
@@ -12,11 +12,12 @@
import { hasMinCodeVersion } from 'lib/shared/version-utils.js';
import type { AvatarDBContent, ClientAvatar } from 'lib/types/avatar-types.js';
import type { RawMessageInfo, MessageInfo } from 'lib/types/message-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import { threadTypes, type ThreadType } from 'lib/types/thread-types-enum.js';
import {
type ServerThreadInfo,
type RawThreadInfos,
- type RawThreadInfo,
+ type LegacyRawThreadInfo,
} from 'lib/types/thread-types.js';
import { ServerError } from 'lib/utils/errors.js';
@@ -282,7 +283,9 @@
{ native: 301, web: 56 },
);
- const threadInfos: { [string]: RawThreadInfo } = {};
+ const threadInfos: {
+ [string]: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ } = {};
for (const threadID in serverResult.threadInfos) {
const serverThreadInfo = serverResult.threadInfos[threadID];
const threadInfo = rawThreadInfoFromServerThreadInfo(
diff --git a/keyserver/src/shared/state-sync/threads-state-sync-spec.js b/keyserver/src/shared/state-sync/threads-state-sync-spec.js
--- a/keyserver/src/shared/state-sync/threads-state-sync-spec.js
+++ b/keyserver/src/shared/state-sync/threads-state-sync-spec.js
@@ -2,10 +2,12 @@
import { rawThreadInfoValidator } from 'lib/permissions/minimally-encoded-thread-permissions-validators.js';
import { threadsStateSyncSpec as libSpec } from 'lib/shared/state-sync/threads-state-sync-spec.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import type { ClientThreadInconsistencyReportCreationRequest } from 'lib/types/report-types.js';
import {
type RawThreadInfo,
type RawThreadInfos,
+ type LegacyRawThreadInfo,
} from 'lib/types/thread-types.js';
import { hash, combineUnorderedHashes, values } from 'lib/utils/objects.js';
@@ -17,7 +19,7 @@
export const threadsStateSyncSpec: ServerStateSyncSpec<
RawThreadInfos,
RawThreadInfos,
- RawThreadInfo,
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
$ReadOnlyArray<ClientThreadInconsistencyReportCreationRequest>,
> = Object.freeze({
fetch,
diff --git a/lib/hooks/child-threads.js b/lib/hooks/child-threads.js
--- a/lib/hooks/child-threads.js
+++ b/lib/hooks/child-threads.js
@@ -14,7 +14,8 @@
import { childThreadInfos } from '../selectors/thread-selectors.js';
import { threadInChatList } from '../shared/thread-utils.js';
import threadWatcher from '../shared/thread-watcher.js';
-import type { RawThreadInfo, ThreadInfo } from '../types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
+import type { LegacyRawThreadInfo, ThreadInfo } from '../types/thread-types.js';
import { useDispatchActionPromise } from '../utils/redux-promise-utils.js';
import { useSelector } from '../utils/redux-utils.js';
@@ -40,7 +41,13 @@
}, [childThreads, predicate]);
const filterSubchannels = React.useCallback(
- (thread: ?(RawThreadInfo | ThreadInfo)) => {
+ (
+ thread: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+ ) => {
const candidateThreadID = thread?.id;
if (!candidateThreadID) {
return false;
diff --git a/lib/hooks/search-threads.js b/lib/hooks/search-threads.js
--- a/lib/hooks/search-threads.js
+++ b/lib/hooks/search-threads.js
@@ -10,10 +10,11 @@
import { sidebarInfoSelector } from '../selectors/thread-selectors.js';
import { threadIsChannel } from '../shared/thread-utils.js';
import type { SetState } from '../types/hook-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type {
SidebarInfo,
- RawThreadInfo,
ThreadInfo,
+ LegacyRawThreadInfo,
} from '../types/thread-types.js';
import { useSelector } from '../utils/redux-utils.js';
@@ -103,8 +104,13 @@
threadInfo: ThreadInfo,
): SearchThreadsResult<ChatThreadItem> {
const filterFunc = React.useCallback(
- (thread: ?(ThreadInfo | RawThreadInfo)) =>
- threadIsChannel(thread) && thread?.parentThreadID === threadInfo.id,
+ (
+ thread: ?(
+ | ThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ ),
+ ) => threadIsChannel(thread) && thread?.parentThreadID === threadInfo.id,
[threadInfo.id],
);
const childThreadInfos = useFilteredChatListData(filterFunc);
diff --git a/lib/permissions/minimally-encoded-thread-permissions-validators.js b/lib/permissions/minimally-encoded-thread-permissions-validators.js
--- a/lib/permissions/minimally-encoded-thread-permissions-validators.js
+++ b/lib/permissions/minimally-encoded-thread-permissions-validators.js
@@ -22,7 +22,7 @@
threadCurrentUserInfoValidator,
legacyThreadInfoValidator,
} from '../types/thread-types.js';
-import type { RawThreadInfo } from '../types/thread-types.js';
+import type { LegacyRawThreadInfo } from '../types/thread-types.js';
import { tBool, tID, tShape } from '../utils/validation-utils.js';
const minimallyEncodedRoleInfoValidator: TInterface<MinimallyEncodedRoleInfo> =
@@ -77,7 +77,9 @@
currentUser: minimallyEncodedThreadCurrentUserInfoValidator,
});
-export const rawThreadInfoValidator: TUnion<RawThreadInfo> = t.union([
+export const rawThreadInfoValidator: TUnion<
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+> = t.union([
legacyRawThreadInfoValidator,
minimallyEncodedRawThreadInfoValidator,
]);
diff --git a/lib/reducers/integrity-reducer.js b/lib/reducers/integrity-reducer.js
--- a/lib/reducers/integrity-reducer.js
+++ b/lib/reducers/integrity-reducer.js
@@ -10,15 +10,18 @@
} from '../actions/user-actions.js';
import type { ThreadStoreOperation } from '../ops/thread-store-ops';
import type { IntegrityStore } from '../types/integrity-types';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type { BaseAction } from '../types/redux-types.js';
import { fullStateSyncActionType } from '../types/socket-types.js';
-import type { RawThreadInfo } from '../types/thread-types.js';
+import type { LegacyRawThreadInfo } from '../types/thread-types.js';
import { hash } from '../utils/objects.js';
function reduceIntegrityStore(
state: IntegrityStore,
action: BaseAction,
- threadInfos: { +[string]: RawThreadInfo },
+ threadInfos: {
+ +[string]: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ },
threadStoreOperations: $ReadOnlyArray<ThreadStoreOperation>,
): IntegrityStore {
if (
diff --git a/lib/reducers/message-reducer.js b/lib/reducers/message-reducer.js
--- a/lib/reducers/message-reducer.js
+++ b/lib/reducers/message-reducer.js
@@ -88,6 +88,7 @@
} from '../types/message-types.js';
import type { RawImagesMessageInfo } from '../types/messages/images.js';
import type { RawMediaMessageInfo } from '../types/messages/media.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import { type BaseAction } from '../types/redux-types.js';
import { processServerRequestsActionType } from '../types/request-types.js';
import {
@@ -95,7 +96,10 @@
incrementalStateSyncActionType,
} from '../types/socket-types.js';
import { threadPermissions } from '../types/thread-permission-types.js';
-import type { RawThreadInfo, RawThreadInfos } from '../types/thread-types.js';
+import type {
+ LegacyRawThreadInfo,
+ RawThreadInfos,
+} from '../types/thread-types.js';
import {
type ClientUpdateInfo,
processUpdatesActionType,
@@ -122,7 +126,7 @@
function isThreadWatched(
threadID: string,
- threadInfo: ?RawThreadInfo,
+ threadInfo: ?LegacyRawThreadInfo | ?MinimallyEncodedRawThreadInfo,
watchedIDs: $ReadOnlyArray<string>,
) {
return (
diff --git a/lib/selectors/chat-selectors.js b/lib/selectors/chat-selectors.js
--- a/lib/selectors/chat-selectors.js
+++ b/lib/selectors/chat-selectors.js
@@ -35,14 +35,15 @@
type LocalMessageInfo,
isComposableMessageType,
} from '../types/message-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type { BaseAppState } from '../types/redux-types.js';
import { threadTypes } from '../types/thread-types-enum.js';
import {
- type RawThreadInfo,
type SidebarInfo,
type ThreadInfo,
maxReadSidebars,
maxUnreadSidebars,
+ type LegacyRawThreadInfo,
} from '../types/thread-types.js';
import type {
UserInfo,
@@ -227,7 +228,13 @@
}
function useFilteredChatListData(
- filterFunction: (threadInfo: ?(ThreadInfo | RawThreadInfo)) => boolean,
+ filterFunction: (
+ threadInfo: ?(
+ | ThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ ),
+ ) => boolean,
): $ReadOnlyArray<ChatThreadItem> {
const threadInfos = useSelector(threadInfoSelector);
const messageInfos = useSelector(messageInfoSelector);
@@ -252,7 +259,13 @@
messageStore: MessageStore,
messageInfos: { +[id: string]: ?MessageInfo },
sidebarInfos: { +[id: string]: $ReadOnlyArray<SidebarInfo> },
- filterFunction: (threadInfo: ?(ThreadInfo | RawThreadInfo)) => boolean,
+ filterFunction: (
+ threadInfo: ?(
+ | ThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ ),
+ ) => boolean,
): $ReadOnlyArray<ChatThreadItem> {
return _flow(
_filter(filterFunction),
diff --git a/lib/selectors/nav-selectors.js b/lib/selectors/nav-selectors.js
--- a/lib/selectors/nav-selectors.js
+++ b/lib/selectors/nav-selectors.js
@@ -12,12 +12,13 @@
defaultCalendarQuery,
} from '../types/entry-types.js';
import type { CalendarFilter } from '../types/filter-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type { BaseNavInfo } from '../types/nav-types.js';
import type { BaseAppState } from '../types/redux-types.js';
import type {
RelativeMemberInfo,
- RawThreadInfo,
ThreadInfo,
+ LegacyRawThreadInfo,
} from '../types/thread-types';
import type { UserInfo } from '../types/user-types.js';
import { getConfig } from '../utils/config.js';
@@ -120,7 +121,9 @@
}
function useThreadSearchIndex(
- threadInfos: $ReadOnlyArray<RawThreadInfo | ThreadInfo>,
+ threadInfos: $ReadOnlyArray<
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+ >,
): SearchIndex {
const userInfos = useSelector(state => state.userStore.userInfos);
const viewerID = useSelector(
diff --git a/lib/selectors/thread-selectors.js b/lib/selectors/thread-selectors.js
--- a/lib/selectors/thread-selectors.js
+++ b/lib/selectors/thread-selectors.js
@@ -39,6 +39,7 @@
import type { ClientAvatar, ClientEmojiAvatar } from '../types/avatar-types';
import type { EntryInfo } from '../types/entry-types.js';
import type { MessageStore, RawMessageInfo } from '../types/message-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type { BaseAppState } from '../types/redux-types.js';
import { threadPermissions } from '../types/thread-permission-types.js';
import {
@@ -50,8 +51,8 @@
SidebarInfo,
RelativeMemberInfo,
ThreadInfo,
- RawThreadInfo,
RawThreadInfos,
+ LegacyRawThreadInfo,
} from '../types/thread-types.js';
import { dateString, dateFromString } from '../utils/date-utils.js';
import { values } from '../utils/objects.js';
@@ -343,7 +344,7 @@
(state: BaseAppState<>) => state.threadStore.threadInfos[threadID],
relativeMemberInfoSelectorForMembersOfThread(threadID),
(
- threadInfo: ?RawThreadInfo,
+ threadInfo: ?LegacyRawThreadInfo | ?MinimallyEncodedRawThreadInfo,
members: $ReadOnlyArray<RelativeMemberInfo>,
): boolean => {
if (!threadInfo) {
diff --git a/lib/shared/avatar-utils.js b/lib/shared/avatar-utils.js
--- a/lib/shared/avatar-utils.js
+++ b/lib/shared/avatar-utils.js
@@ -16,8 +16,9 @@
ResolvedClientAvatar,
GenericUserInfoWithAvatar,
} from '../types/avatar-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import { threadTypes } from '../types/thread-types-enum.js';
-import type { RawThreadInfo, ThreadInfo } from '../types/thread-types.js';
+import type { LegacyRawThreadInfo, ThreadInfo } from '../types/thread-types.js';
import type { UserInfos } from '../types/user-types.js';
import { useSelector } from '../utils/redux-utils.js';
import { ashoatKeyserverID } from '../utils/validation-utils.js';
@@ -270,7 +271,7 @@
}
function getUserAvatarForThread(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
viewerID: ?string,
userInfos: UserInfos,
): ClientAvatar {
@@ -296,7 +297,7 @@
}
function getAvatarForThread(
- thread: RawThreadInfo | ThreadInfo,
+ thread: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
containingThreadInfo: ?ThreadInfo,
): ClientAvatar {
if (thread.avatar) {
@@ -312,7 +313,9 @@
return getDefaultAvatar(thread.id, thread.color);
}
-function useAvatarForThread(thread: RawThreadInfo | ThreadInfo): ClientAvatar {
+function useAvatarForThread(
+ thread: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+): ClientAvatar {
const containingThreadID = thread.containingThreadID;
const containingThreadInfo = useSelector(state =>
containingThreadID ? threadInfoSelector(state)[containingThreadID] : null,
diff --git a/lib/shared/message-utils.js b/lib/shared/message-utils.js
--- a/lib/shared/message-utils.js
+++ b/lib/shared/message-utils.js
@@ -42,7 +42,8 @@
RawReactionMessageInfo,
ReactionMessageInfo,
} from '../types/messages/reaction.js';
-import type { RawThreadInfo, ThreadInfo } from '../types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
+import type { LegacyRawThreadInfo, ThreadInfo } from '../types/thread-types.js';
import type { UserInfos } from '../types/user-types.js';
import {
type EntityText,
@@ -680,7 +681,7 @@
function isInvalidPinSourceForThread(
messageInfo: RawMessageInfo | MessageInfo,
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
): boolean {
const isValidPinSource = !isInvalidPinSource(messageInfo);
const isFirstMessageInSidebar = threadInfo.sourceMessageID === messageInfo.id;
diff --git a/lib/shared/state-sync/threads-state-sync-spec.js b/lib/shared/state-sync/threads-state-sync-spec.js
--- a/lib/shared/state-sync/threads-state-sync-spec.js
+++ b/lib/shared/state-sync/threads-state-sync-spec.js
@@ -4,6 +4,7 @@
import { createSelector } from 'reselect';
import type { StateSyncSpec, BoundStateSyncSpec } from './state-sync-spec.js';
+import type { MinimallyEncodedRawThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js';
import type { AppState } from '../../types/redux-types.js';
import {
reportTypes,
@@ -13,6 +14,7 @@
import {
type RawThreadInfo,
type RawThreadInfos,
+ type LegacyRawThreadInfo,
} from '../../types/thread-types.js';
import { actionLogger } from '../../utils/action-logger.js';
import { getConfig } from '../../utils/config.js';
@@ -44,7 +46,7 @@
export const threadsStateSyncSpec: StateSyncSpec<
RawThreadInfos,
- RawThreadInfo,
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
$ReadOnlyArray<ClientThreadInconsistencyReportCreationRequest>,
> = Object.freeze({
hashKey: 'threadInfos',
diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js
--- a/lib/shared/thread-utils.js
+++ b/lib/shared/thread-utils.js
@@ -96,7 +96,6 @@
ChangeThreadSettingsPayload,
UserProfileThreadInfo,
RelativeMemberInfo,
- RawThreadInfo,
ThreadInfo,
RawThreadInfos,
} from '../types/thread-types.js';
@@ -128,7 +127,11 @@
import { pendingThreadIDRegex } from '../utils/validation-utils.js';
function threadHasPermission(
- threadInfo: ?(ThreadInfo | RawThreadInfo),
+ threadInfo: ?(
+ | ThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ ),
permission: ThreadPermission,
): boolean {
if (!threadInfo) {
@@ -145,7 +148,13 @@
return permissionLookup(threadInfo.currentUser.permissions, permission);
}
-function viewerIsMember(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function viewerIsMember(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return !!(
threadInfo &&
threadInfo.currentUser.role !== null &&
@@ -153,38 +162,76 @@
);
}
-function threadIsInHome(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function threadIsInHome(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return !!(threadInfo && threadInfo.currentUser.subscription.home);
}
// Can have messages
-function threadInChatList(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function threadInChatList(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return (
viewerIsMember(threadInfo) &&
threadHasPermission(threadInfo, threadPermissions.VISIBLE)
);
}
-function threadIsTopLevel(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function threadIsTopLevel(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return threadInChatList(threadInfo) && threadIsChannel(threadInfo);
}
-function threadIsChannel(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function threadIsChannel(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return !!(threadInfo && threadInfo.type !== threadTypes.SIDEBAR);
}
-function threadIsSidebar(threadInfo: ?(RawThreadInfo | ThreadInfo)): boolean {
+function threadIsSidebar(
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
+): boolean {
return threadInfo?.type === threadTypes.SIDEBAR;
}
function threadInBackgroundChatList(
- threadInfo: ?(RawThreadInfo | ThreadInfo),
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
): boolean {
return threadInChatList(threadInfo) && !threadIsInHome(threadInfo);
}
function threadInHomeChatList(
- threadInfo: ?(RawThreadInfo | ThreadInfo),
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
): boolean {
return threadInChatList(threadInfo) && threadIsInHome(threadInfo);
}
@@ -192,7 +239,11 @@
// Can have Calendar entries,
// does appear as a top-level entity in the thread list
function threadInFilterList(
- threadInfo: ?(RawThreadInfo | ThreadInfo),
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
): boolean {
return (
threadInChatList(threadInfo) &&
@@ -202,7 +253,11 @@
}
function userIsMember(
- threadInfo: ?(RawThreadInfo | ThreadInfo),
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ ),
userID: string,
): boolean {
if (!threadInfo) {
@@ -231,9 +286,9 @@
);
}
-function threadMembersWithoutAddedAshoat<T: RawThreadInfo | ThreadInfo>(
- threadInfo: T,
-): $PropertyType<T, 'members'> {
+function threadMembersWithoutAddedAshoat<
+ T: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+>(threadInfo: T): $PropertyType<T, 'members'> {
if (threadInfo.community !== genesis.id) {
return threadInfo.members;
}
@@ -247,7 +302,7 @@
}
function threadOrParentThreadIsGroupChat(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
) {
return threadMembersWithoutAddedAshoat(threadInfo).length > 2;
}
@@ -261,7 +316,7 @@
}
function getSingleOtherUser(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
viewerID: ?string,
): ?string {
if (!viewerID) {
@@ -742,7 +797,7 @@
serverThreadInfo: ServerThreadInfo,
viewerID: string,
options?: RawThreadInfoOptions,
-): ?RawThreadInfo {
+): ?LegacyRawThreadInfo | ?MinimallyEncodedRawThreadInfo {
const filterThreadEditAvatarPermission =
options?.filterThreadEditAvatarPermission;
const excludePinInfo = options?.excludePinInfo;
@@ -895,7 +950,7 @@
}
function threadInfoFromRawThreadInfo(
- rawThreadInfo: RawThreadInfo,
+ rawThreadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
viewerID: ?string,
userInfos: UserInfos,
): MinimallyEncodedThreadInfo {
@@ -1010,7 +1065,7 @@
}
function threadIsWithBlockedUserOnly(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
viewerID: ?string,
userInfos: UserInfos,
checkOnlyViewerBlock?: boolean,
@@ -1042,7 +1097,7 @@
}
function threadFrozenDueToBlock(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
viewerID: ?string,
userInfos: UserInfos,
): boolean {
@@ -1050,7 +1105,7 @@
}
function threadFrozenDueToViewerBlock(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
viewerID: ?string,
userInfos: UserInfos,
): boolean {
@@ -1066,7 +1121,7 @@
function memberIsAdmin(
memberInfo: RelativeMemberInfo | MemberInfo,
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
): boolean {
return !!(
memberInfo.role && roleIsAdminRole(threadInfo.roles[memberInfo.role])
@@ -1089,7 +1144,12 @@
}
function threadHasAdminRole(
- threadInfo: ?(RawThreadInfo | ThreadInfo | ServerThreadInfo),
+ threadInfo: ?(
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ | ServerThreadInfo
+ ),
): boolean {
if (!threadInfo) {
return false;
@@ -1098,7 +1158,7 @@
}
function threadOrParentThreadHasAdminRole(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
) {
return (
threadMembersWithoutAddedAshoat(threadInfo).filter(member =>
@@ -1346,7 +1406,11 @@
}
function threadMemberHasPermission(
- threadInfo: ServerThreadInfo | RawThreadInfo | ThreadInfo,
+ threadInfo:
+ | ServerThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
memberID: string,
permission: ThreadPermission,
): boolean {
@@ -1425,7 +1489,11 @@
}
function getContainingThreadID(
- parentThreadInfo: ?ServerThreadInfo | RawThreadInfo | ThreadInfo,
+ parentThreadInfo:
+ | ?ServerThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
threadType: ThreadType,
): ?string {
if (!parentThreadInfo) {
@@ -1441,7 +1509,11 @@
}
function getCommunity(
- parentThreadInfo: ?ServerThreadInfo | RawThreadInfo | ThreadInfo,
+ parentThreadInfo:
+ | ?ServerThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
): ?string {
if (!parentThreadInfo) {
return null;
@@ -1633,7 +1705,7 @@
}
function threadInfoInsideCommunity(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
communityID: string,
): boolean {
return threadInfo.community === communityID || threadInfo.id === communityID;
@@ -1715,14 +1787,16 @@
}, [threadInfo]);
}
-function communityOrThreadNoun(threadInfo: RawThreadInfo | ThreadInfo): string {
+function communityOrThreadNoun(
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+): string {
return threadTypeIsCommunityRoot(threadInfo.type)
? 'community'
: threadNoun(threadInfo.type, threadInfo.parentThreadID);
}
function getThreadsToDeleteText(
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
): string {
return `${
threadTypeIsCommunityRoot(threadInfo.type)
diff --git a/lib/shared/user-utils.js b/lib/shared/user-utils.js
--- a/lib/shared/user-utils.js
+++ b/lib/shared/user-utils.js
@@ -2,8 +2,9 @@
import { memberHasAdminPowers } from './thread-utils.js';
import { useENSNames } from '../hooks/ens-cache.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import type {
- RawThreadInfo,
+ LegacyRawThreadInfo,
ServerThreadInfo,
ThreadInfo,
} from '../types/thread-types.js';
@@ -33,7 +34,11 @@
}
function useKeyserverAdmin(
- community: ThreadInfo | RawThreadInfo | ServerThreadInfo,
+ community:
+ | ThreadInfo
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ServerThreadInfo,
): ?UserInfo {
const userInfos = useSelector(state => state.userStore.userInfos);
// This hack only works as long as there is only one admin
diff --git a/lib/types/request-types.js b/lib/types/request-types.js
--- a/lib/types/request-types.js
+++ b/lib/types/request-types.js
@@ -19,7 +19,7 @@
ClientThreadInconsistencyReportShape,
ClientEntryInconsistencyReportShape,
} from './report-types.js';
-import { type RawThreadInfo } from './thread-types.js';
+import type { LegacyRawThreadInfo } from './thread-types.js';
import {
type CurrentUserInfo,
currentUserInfoValidator,
@@ -104,7 +104,7 @@
}>;
type StateChanges = Partial<{
- +rawThreadInfos: RawThreadInfo[],
+ +rawThreadInfos: LegacyRawThreadInfo[] | MinimallyEncodedRawThreadInfo[],
+rawEntryInfos: RawEntryInfo[],
+currentUserInfo: CurrentUserInfo,
+userInfos: AccountUserInfo[],
diff --git a/lib/types/thread-types.js b/lib/types/thread-types.js
--- a/lib/types/thread-types.js
+++ b/lib/types/thread-types.js
@@ -451,14 +451,14 @@
export type RoleModificationRequest = CreateRoleAction | EditRoleAction;
export type RoleModificationResult = {
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+updatesResult: {
+newUpdates: $ReadOnlyArray<ServerUpdateInfo>,
},
};
export type RoleModificationPayload = {
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+updatesResult: {
+newUpdates: $ReadOnlyArray<ClientUpdateInfo>,
},
@@ -470,14 +470,14 @@
};
export type RoleDeletionResult = {
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+updatesResult: {
+newUpdates: $ReadOnlyArray<ServerUpdateInfo>,
},
};
export type RoleDeletionPayload = {
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+updatesResult: {
+newUpdates: $ReadOnlyArray<ClientUpdateInfo>,
},
diff --git a/lib/types/update-types.js b/lib/types/update-types.js
--- a/lib/types/update-types.js
+++ b/lib/types/update-types.js
@@ -7,7 +7,8 @@
type RawMessageInfo,
type MessageTruncationStatus,
} from './message-types.js';
-import type { RawThreadInfo } from './thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from './minimally-encoded-thread-permissions-types.js';
+import type { LegacyRawThreadInfo } from './thread-types.js';
import {
type UserInfo,
userInfoValidator,
@@ -183,7 +184,7 @@
+type: 1,
+id: string,
+time: number,
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
};
export type ThreadReadStatusUpdateInfo = {
@@ -205,7 +206,7 @@
+type: 4,
+id: string,
+time: number,
- +threadInfo: RawThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+rawMessageInfos: $ReadOnlyArray<RawMessageInfo>,
+truncationStatus: MessageTruncationStatus,
+rawEntryInfos: $ReadOnlyArray<RawEntryInfo>,
diff --git a/lib/utils/drawer-utils.react.js b/lib/utils/drawer-utils.react.js
--- a/lib/utils/drawer-utils.react.js
+++ b/lib/utils/drawer-utils.react.js
@@ -4,9 +4,10 @@
import { values } from './objects.js';
import { threadInFilterList, threadIsChannel } from '../shared/thread-utils.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import { communitySubthreads } from '../types/thread-types-enum.js';
import type {
- RawThreadInfo,
+ LegacyRawThreadInfo,
ResolvedThreadInfo,
ThreadInfo,
} from '../types/thread-types.js';
@@ -104,7 +105,10 @@
function filterThreadIDsBelongingToCommunity(
communityID: string,
threadInfosObj: {
- +[id: string]: RawThreadInfo | ThreadInfo,
+ +[id: string]:
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
},
): $ReadOnlySet<string> {
const threadInfos = values(threadInfosObj);
diff --git a/lib/utils/entity-text.js b/lib/utils/entity-text.js
--- a/lib/utils/entity-text.js
+++ b/lib/utils/entity-text.js
@@ -9,12 +9,13 @@
import { useENSNames, type UseENSNamesOptions } from '../hooks/ens-cache.js';
import { threadNoun } from '../shared/thread-utils.js';
import { stringForUser } from '../shared/user-utils.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import {
type ThreadType,
threadTypes,
threadTypeValidator,
} from '../types/thread-types-enum.js';
-import type { RawThreadInfo, ThreadInfo } from '../types/thread-types.js';
+import type { LegacyRawThreadInfo, ThreadInfo } from '../types/thread-types.js';
import { basePluralize } from '../utils/text-utils.js';
export type UserEntity = {
@@ -138,13 +139,19 @@
}
| {
+display?: 'shortName',
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo:
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
+subchannel?: ?boolean,
+possessive?: ?boolean,
}
| {
+display: 'alwaysDisplayShortName',
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo:
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo,
+possessive?: ?boolean,
}
| {
diff --git a/lib/utils/message-pinning-utils.js b/lib/utils/message-pinning-utils.js
--- a/lib/utils/message-pinning-utils.js
+++ b/lib/utils/message-pinning-utils.js
@@ -3,12 +3,13 @@
import { isInvalidPinSourceForThread } from '../shared/message-utils.js';
import { threadHasPermission } from '../shared/thread-utils.js';
import type { RawMessageInfo, MessageInfo } from '../types/message-types.js';
+import type { MinimallyEncodedRawThreadInfo } from '../types/minimally-encoded-thread-permissions-types.js';
import { threadPermissions } from '../types/thread-permission-types.js';
-import type { RawThreadInfo, ThreadInfo } from '../types/thread-types.js';
+import type { LegacyRawThreadInfo, ThreadInfo } from '../types/thread-types.js';
function canToggleMessagePin(
messageInfo: RawMessageInfo | MessageInfo,
- threadInfo: RawThreadInfo | ThreadInfo,
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
): boolean {
const isValidMessage = !isInvalidPinSourceForThread(messageInfo, threadInfo);
const hasManagePinsPermission = threadHasPermission(
diff --git a/lib/utils/thread-ops-utils.js b/lib/utils/thread-ops-utils.js
--- a/lib/utils/thread-ops-utils.js
+++ b/lib/utils/thread-ops-utils.js
@@ -24,12 +24,11 @@
legacyMemberInfoValidator,
type LegacyRawThreadInfo,
legacyRoleInfoValidator,
- type RawThreadInfo,
threadCurrentUserInfoValidator,
} from '../types/thread-types.js';
function convertRawThreadInfoToClientDBThreadInfo(
- rawThreadInfo: RawThreadInfo,
+ rawThreadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
): ClientDBThreadInfo {
const { minimallyEncoded, ...rest } = rawThreadInfo;
return {
diff --git a/native/avatars/edit-thread-avatar.react.js b/native/avatars/edit-thread-avatar.react.js
--- a/native/avatars/edit-thread-avatar.react.js
+++ b/native/avatars/edit-thread-avatar.react.js
@@ -6,7 +6,11 @@
import { ActivityIndicator, TouchableOpacity, View } from 'react-native';
import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import {
useNativeSetThreadAvatar,
@@ -22,7 +26,7 @@
import { useStyles } from '../themes/colors.js';
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+disabled?: boolean,
};
function EditThreadAvatar(props: Props): React.Node {
diff --git a/native/avatars/thread-avatar.react.js b/native/avatars/thread-avatar.react.js
--- a/native/avatars/thread-avatar.react.js
+++ b/native/avatars/thread-avatar.react.js
@@ -8,9 +8,10 @@
} from 'lib/shared/avatar-utils.js';
import { getSingleOtherUser } from 'lib/shared/thread-utils.js';
import type { AvatarSize } from 'lib/types/avatar-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import { threadTypes } from 'lib/types/thread-types-enum.js';
import type {
- RawThreadInfo,
+ LegacyRawThreadInfo,
ResolvedThreadInfo,
ThreadInfo,
} from 'lib/types/thread-types.js';
@@ -19,7 +20,11 @@
import { useSelector } from '../redux/redux-utils.js';
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo | ResolvedThreadInfo,
+ +threadInfo:
+ | LegacyRawThreadInfo
+ | MinimallyEncodedRawThreadInfo
+ | ThreadInfo
+ | ResolvedThreadInfo,
+size: AvatarSize,
};
diff --git a/native/chat/settings/emoji-thread-avatar-creation.react.js b/native/chat/settings/emoji-thread-avatar-creation.react.js
--- a/native/chat/settings/emoji-thread-avatar-creation.react.js
+++ b/native/chat/settings/emoji-thread-avatar-creation.react.js
@@ -6,7 +6,11 @@
import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
import { savedEmojiAvatarSelectorForThread } from 'lib/selectors/thread-selectors.js';
import type { UpdateUserAvatarRequest } from 'lib/types/avatar-types.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import { useNativeSetThreadAvatar } from '../../avatars/avatar-hooks.js';
import EmojiAvatarCreation from '../../avatars/emoji-avatar-creation.react.js';
@@ -16,7 +20,7 @@
import { useSelector } from '../../redux/redux-utils.js';
export type EmojiThreadAvatarCreationParams = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
};
type Props = {
diff --git a/native/redux/client-db-utils.js b/native/redux/client-db-utils.js
--- a/native/redux/client-db-utils.js
+++ b/native/redux/client-db-utils.js
@@ -7,9 +7,10 @@
ClientDBMessageInfo,
ClientDBThreadMessageInfo,
} from 'lib/types/message-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import type {
ClientDBThreadInfo,
- RawThreadInfo,
+ LegacyRawThreadInfo,
RawThreadInfos,
} from 'lib/types/thread-types.js';
import {
@@ -71,7 +72,10 @@
// Convert `rawThreadInfo`s to a map of `threadID` => `threadInfo`.
const threadIDToThreadInfo = rawThreadInfos.reduce(
- (acc: { [string]: RawThreadInfo }, threadInfo: RawThreadInfo) => {
+ (
+ acc: { [string]: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo },
+ threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ ) => {
acc[threadInfo.id] = threadInfo;
return acc;
},
@@ -82,9 +86,9 @@
const updatedThreadIDToThreadInfo = migrationFunc(threadIDToThreadInfo);
// Convert the updated `threadInfo`s back into an array.
- const updatedRawThreadInfos: $ReadOnlyArray<RawThreadInfo> = values(
- updatedThreadIDToThreadInfo,
- );
+ const updatedRawThreadInfos: $ReadOnlyArray<
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ > = values(updatedThreadIDToThreadInfo);
// Translate `RawThreadInfo`s to `ClientDBThreadInfo`s.
const convertedClientDBThreadInfos: $ReadOnlyArray<ClientDBThreadInfo> =
diff --git a/native/redux/persist.js b/native/redux/persist.js
--- a/native/redux/persist.js
+++ b/native/redux/persist.js
@@ -63,6 +63,7 @@
type RawMessageInfo,
} from 'lib/types/message-types.js';
import { minimallyEncodeRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import type {
ReportStore,
ClientReportCreationRequest,
@@ -75,7 +76,6 @@
import type {
ClientDBThreadInfo,
LegacyRawThreadInfo,
- RawThreadInfo,
RawThreadInfos,
} from 'lib/types/thread-types.js';
import {
@@ -383,7 +383,9 @@
return state;
}
- const threadInfos: { [string]: RawThreadInfo } = {};
+ const threadInfos: {
+ [string]: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ } = {};
const stack = [...rootIDs];
while (stack.length > 0) {
const threadID = stack.shift();
@@ -995,7 +997,12 @@
threadStoreInfos: RawThreadInfos,
): RawThreadInfos =>
Object.keys(threadStoreInfos).reduce(
- (acc: { [string]: RawThreadInfo }, key: string) => {
+ (
+ acc: {
+ [string]: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ },
+ key: string,
+ ) => {
const threadInfo = threadStoreInfos[key];
acc[threadInfo.id] = threadInfo.minimallyEncoded
? threadInfo
diff --git a/web/avatars/edit-thread-avatar-menu.react.js b/web/avatars/edit-thread-avatar-menu.react.js
--- a/web/avatars/edit-thread-avatar-menu.react.js
+++ b/web/avatars/edit-thread-avatar-menu.react.js
@@ -6,7 +6,11 @@
import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
import { useModalContext } from 'lib/components/modal-provider.react.js';
import SWMansionIcon from 'lib/components/SWMansionIcon.react.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import { useUploadAvatarMedia } from './avatar-hooks.react.js';
import css from './edit-avatar-menu.css';
@@ -22,7 +26,7 @@
);
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
};
function EditThreadAvatarMenu(props: Props): React.Node {
const { threadInfo } = props;
diff --git a/web/avatars/edit-thread-avatar.react.js b/web/avatars/edit-thread-avatar.react.js
--- a/web/avatars/edit-thread-avatar.react.js
+++ b/web/avatars/edit-thread-avatar.react.js
@@ -5,15 +5,19 @@
import { EditThreadAvatarContext } from 'lib/components/base-edit-thread-avatar-provider.react.js';
import { threadHasPermission } from 'lib/shared/thread-utils.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import { threadPermissions } from 'lib/types/thread-permission-types.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import EditThreadAvatarMenu from './edit-thread-avatar-menu.react.js';
import css from './edit-thread-avatar.css';
import ThreadAvatar from './thread-avatar.react.js';
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+disabled?: boolean,
};
function EditThreadAvatar(props: Props): React.Node {
diff --git a/web/avatars/thread-avatar.react.js b/web/avatars/thread-avatar.react.js
--- a/web/avatars/thread-avatar.react.js
+++ b/web/avatars/thread-avatar.react.js
@@ -8,14 +8,18 @@
} from 'lib/shared/avatar-utils.js';
import { getSingleOtherUser } from 'lib/shared/thread-utils.js';
import type { AvatarSize } from 'lib/types/avatar-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
import { threadTypes } from 'lib/types/thread-types-enum.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import Avatar from './avatar.react.js';
import { useSelector } from '../redux/redux-utils.js';
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
+size: AvatarSize,
+showSpinner?: boolean,
};
diff --git a/web/avatars/thread-emoji-avatar-selection-modal.react.js b/web/avatars/thread-emoji-avatar-selection-modal.react.js
--- a/web/avatars/thread-emoji-avatar-selection-modal.react.js
+++ b/web/avatars/thread-emoji-avatar-selection-modal.react.js
@@ -12,12 +12,16 @@
ClientAvatar,
ClientEmojiAvatar,
} from 'lib/types/avatar-types.js';
-import type { RawThreadInfo, ThreadInfo } from 'lib/types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type {
+ LegacyRawThreadInfo,
+ ThreadInfo,
+} from 'lib/types/thread-types.js';
import EmojiAvatarSelectionModal from './emoji-avatar-selection-modal.react.js';
type Props = {
- +threadInfo: RawThreadInfo | ThreadInfo,
+ +threadInfo: LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo | ThreadInfo,
};
function ThreadEmojiAvatarSelectionModal(props: Props): React.Node {
diff --git a/web/redux/initial-state-gate.js b/web/redux/initial-state-gate.js
--- a/web/redux/initial-state-gate.js
+++ b/web/redux/initial-state-gate.js
@@ -8,7 +8,8 @@
import type { ThreadStoreOperation } from 'lib/ops/thread-store-ops.js';
import { allUpdatesCurrentAsOfSelector } from 'lib/selectors/keyserver-selectors.js';
import { canUseDatabaseOnWeb } from 'lib/shared/web-database.js';
-import type { RawThreadInfo } from 'lib/types/thread-types.js';
+import type { MinimallyEncodedRawThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
+import type { LegacyRawThreadInfo } from 'lib/types/thread-types.js';
import { convertIDToNewSchema } from 'lib/utils/migration-utils.js';
import { entries } from 'lib/utils/objects.js';
import { useDispatch } from 'lib/utils/redux-utils.js';
@@ -97,13 +98,18 @@
const threadStoreOperations: ThreadStoreOperation[] = entries(
threadInfos,
- ).map(([id, threadInfo]: [string, RawThreadInfo]) => ({
- type: 'replace',
- payload: {
- id,
- threadInfo,
- },
- }));
+ ).map(
+ ([id, threadInfo]: [
+ string,
+ LegacyRawThreadInfo | MinimallyEncodedRawThreadInfo,
+ ]) => ({
+ type: 'replace',
+ payload: {
+ id,
+ threadInfo,
+ },
+ }),
+ );
await processDBStoreOperations(
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Jan 11, 1:24 AM (19 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2858164
Default Alt Text
D10625.id35594.diff (43 KB)
Attached To
Mode
D10625: Expand instances of `RawThreadInfo` to `LegacyRawThreadInfo|MinimallyEncodedRawTheadInfo`
Attached
Detach File
Event Timeline
Log In to Comment