Page MenuHomePhorge

D14624.1768462340.diff
No OneTemporary

Size
10 KB
Referenced Files
None
Subscribers
None

D14624.1768462340.diff

diff --git a/lib/shared/messages/text-message-spec.js b/lib/shared/messages/text-message-spec.js
--- a/lib/shared/messages/text-message-spec.js
+++ b/lib/shared/messages/text-message-spec.js
@@ -10,7 +10,6 @@
type RawMessageInfoFromServerDBRowParams,
} from './message-spec.js';
import { assertSingleMessageInfo, joinResult } from './utils.js';
-import { changeThreadSettingsActionTypes } from '../../actions/thread-actions.js';
import { useChangeThreadSettings } from '../../hooks/thread-hooks.js';
import { messageTypes } from '../../types/message-types-enum.js';
import type {
@@ -26,7 +25,6 @@
} from '../../types/messages/text.js';
import type { ThreadInfo } from '../../types/minimally-encoded-thread-permissions-types.js';
import type { NotifTexts } from '../../types/notif-types.js';
-import { threadTypeIsThick } from '../../types/thread-types-enum.js';
import type { RelativeUserInfo } from '../../types/user-types.js';
import { ET } from '../../utils/entity-text.js';
import { useDispatchActionPromise } from '../../utils/redux-promise-utils.js';
@@ -46,7 +44,7 @@
extractNewMentionedParentMembers,
threadIsGroupChat,
} from '../thread-utils.js';
-import { threadTypeIsSidebar } from '../threads/thread-specs.js';
+import { threadSpecs, threadTypeIsSidebar } from '../threads/thread-specs.js';
/**
* most of the markdown leaves contain `content` field
@@ -317,26 +315,15 @@
}
const newMemberIDs = mentionedNewMembers.map(({ id }) => id);
- if (threadTypeIsThick(threadInfo.type)) {
- await callAddDMThreadMembers(newMemberIDs, threadInfo);
- return;
- }
-
- const changeThreadSettingsInput = {
- threadInfo,
- threadID: threadInfo.id,
- changes: { newMemberIDs },
- };
-
- const addMembersPromise = callChangeThreadSettings(
- changeThreadSettingsInput,
- );
- void dispatchActionPromise(
- changeThreadSettingsActionTypes,
- addMembersPromise,
+ await threadSpecs[threadInfo.type].protocol.addThreadMembers(
+ { newMemberIDs, threadInfo },
+ {
+ dmAddThreadMembers: callAddDMThreadMembers,
+ changeThreadSettings: callChangeThreadSettings,
+ dispatchActionPromise,
+ },
);
- await addMembersPromise;
};
},
diff --git a/lib/shared/threads/protocols/dm-thread-protocol.js b/lib/shared/threads/protocols/dm-thread-protocol.js
--- a/lib/shared/threads/protocols/dm-thread-protocol.js
+++ b/lib/shared/threads/protocols/dm-thread-protocol.js
@@ -43,6 +43,8 @@
SetThreadUnreadStatusUtils,
ProtocolSendReactionInput,
SendReactionUtils,
+ AddThreadMembersUtils,
+ ProtocolAddThreadMembersInput,
} from '../thread-spec.js';
const dmThreadProtocol: ThreadProtocol = Object.freeze({
@@ -471,6 +473,11 @@
await utils.processAndSendDMOperation(opSpecification);
},
+ addThreadMembers: (
+ input: ProtocolAddThreadMembersInput,
+ utils: AddThreadMembersUtils,
+ ) => utils.dmAddThreadMembers(input.newMemberIDs, input.threadInfo),
+
allowsDeletingSidebarSource: false,
presentationDetails: {
diff --git a/lib/shared/threads/protocols/keyserver-thread-protocol.js b/lib/shared/threads/protocols/keyserver-thread-protocol.js
--- a/lib/shared/threads/protocols/keyserver-thread-protocol.js
+++ b/lib/shared/threads/protocols/keyserver-thread-protocol.js
@@ -8,6 +8,7 @@
sendEditMessageActionTypes,
sendReactionMessageActionTypes,
} from '../../../actions/message-actions.js';
+import { changeThreadSettingsActionTypes } from '../../../actions/thread-actions.js';
import {
type MediaMetadataReassignmentAction,
updateMultimediaMessageMediaActionType,
@@ -62,6 +63,8 @@
SetThreadUnreadStatusUtils,
ProtocolSendReactionInput,
SendReactionUtils,
+ AddThreadMembersUtils,
+ ProtocolAddThreadMembersInput,
} from '../thread-spec.js';
const keyserverThreadProtocol: ThreadProtocol = Object.freeze({
@@ -288,6 +291,29 @@
await reactionMessagePromise;
},
+ addThreadMembers: async (
+ input: ProtocolAddThreadMembersInput,
+ utils: AddThreadMembersUtils,
+ ) => {
+ const { threadInfo, newMemberIDs } = input;
+
+ const changeThreadSettingsInput = {
+ threadInfo,
+ threadID: threadInfo.id,
+ changes: { newMemberIDs },
+ };
+
+ const addMembersPromise = utils.changeThreadSettings(
+ changeThreadSettingsInput,
+ );
+
+ void utils.dispatchActionPromise(
+ changeThreadSettingsActionTypes,
+ addMembersPromise,
+ );
+ await addMembersPromise;
+ },
+
allowsDeletingSidebarSource: true,
presentationDetails: {
diff --git a/lib/shared/threads/thread-spec.js b/lib/shared/threads/thread-spec.js
--- a/lib/shared/threads/thread-spec.js
+++ b/lib/shared/threads/thread-spec.js
@@ -163,6 +163,19 @@
+dispatchActionPromise: DispatchActionPromise,
};
+export type ProtocolAddThreadMembersInput = {
+ +threadInfo: ThreadInfo,
+ +newMemberIDs: $ReadOnlyArray<string>,
+};
+export type AddThreadMembersUtils = {
+ +dmAddThreadMembers: (
+ newMemberIDs: $ReadOnlyArray<string>,
+ threadInfo: ThreadInfo,
+ ) => Promise<void>,
+ +changeThreadSettings: UseChangeThreadSettingsInput => Promise<ChangeThreadSettingsPayload>,
+ +dispatchActionPromise: DispatchActionPromise,
+};
+
export type ThreadProtocol = {
+sendTextMessage: (
message: ProtocolSendTextMessageInput,
@@ -205,6 +218,10 @@
input: ProtocolSendReactionInput,
utils: SendReactionUtils,
) => Promise<mixed>,
+ +addThreadMembers: (
+ input: ProtocolAddThreadMembersInput,
+ utils: AddThreadMembersUtils,
+ ) => Promise<void>,
+allowsDeletingSidebarSource: boolean,
+presentationDetails: {
+membershipChangesShownInThreadPreview: boolean,
diff --git a/native/chat/settings/add-users-modal.react.js b/native/chat/settings/add-users-modal.react.js
--- a/native/chat/settings/add-users-modal.react.js
+++ b/native/chat/settings/add-users-modal.react.js
@@ -12,8 +12,8 @@
import { useAddDMThreadMembers } from 'lib/shared/dm-ops/dm-op-utils.js';
import { usePotentialMemberItems } from 'lib/shared/search-utils.js';
import { threadActualMembers } from 'lib/shared/thread-utils.js';
+import { threadSpecs } from 'lib/shared/threads/thread-specs.js';
import type { ThreadInfo } from 'lib/types/minimally-encoded-thread-permissions-types.js';
-import { threadTypeIsThick } from 'lib/types/thread-types-enum.js';
import { type AccountUserInfo } from 'lib/types/user-types.js';
import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
@@ -73,57 +73,44 @@
const userInfoInputIDs = userInfoInputArray.map(userInfo => userInfo.id);
const { route } = props;
const { threadInfo } = route.params;
- const addUsersToThread = React.useCallback(async () => {
- try {
- const result = await callChangeThreadSettings({
- threadID: threadInfo.id,
- changes: { newMemberIDs: userInfoInputIDs },
- threadInfo,
- });
- close();
- return result;
- } catch (e) {
- Alert.alert(
- unknownErrorAlertDetails.title,
- unknownErrorAlertDetails.message,
- [{ text: 'OK', onPress: onUnknownErrorAlertAcknowledged }],
- { cancelable: false },
- );
- throw e;
- }
- }, [
- callChangeThreadSettings,
- threadInfo,
- userInfoInputIDs,
- close,
- onUnknownErrorAlertAcknowledged,
- ]);
const inputLength = userInfoInputArray.length;
const dispatchActionPromise = useDispatchActionPromise();
const userInfoInputArrayEmpty = inputLength === 0;
const addDMThreadMembers = useAddDMThreadMembers();
- const onPressAdd = React.useCallback(() => {
+ const onPressAdd = React.useCallback(async () => {
if (userInfoInputArrayEmpty) {
return;
}
- if (threadTypeIsThick(threadInfo.type)) {
- void addDMThreadMembers(userInfoInputIDs, threadInfo);
- } else {
- void dispatchActionPromise(
- changeThreadSettingsActionTypes,
- addUsersToThread(),
+ try {
+ await threadSpecs[threadInfo.type].protocol.addThreadMembers(
+ { newMemberIDs: userInfoInputIDs, threadInfo },
+ {
+ dmAddThreadMembers: addDMThreadMembers,
+ changeThreadSettings: callChangeThreadSettings,
+ dispatchActionPromise,
+ },
+ );
+ close();
+ } catch (e) {
+ Alert.alert(
+ unknownErrorAlertDetails.title,
+ unknownErrorAlertDetails.message,
+ [{ text: 'OK', onPress: onUnknownErrorAlertAcknowledged }],
+ { cancelable: false },
);
}
}, [
userInfoInputArrayEmpty,
threadInfo,
dispatchActionPromise,
- addUsersToThread,
addDMThreadMembers,
userInfoInputIDs,
+ callChangeThreadSettings,
+ close,
+ onUnknownErrorAlertAcknowledged,
]);
const changeThreadSettingsLoadingStatus = useSelector(
diff --git a/web/modals/threads/members/add-members-modal.react.js b/web/modals/threads/members/add-members-modal.react.js
--- a/web/modals/threads/members/add-members-modal.react.js
+++ b/web/modals/threads/members/add-members-modal.react.js
@@ -2,11 +2,10 @@
import * as React from 'react';
-import { changeThreadSettingsActionTypes } from 'lib/actions/thread-actions.js';
import { useChangeThreadSettings } from 'lib/hooks/thread-hooks.js';
import { threadInfoSelector } from 'lib/selectors/thread-selectors.js';
import { useAddDMThreadMembers } from 'lib/shared/dm-ops/dm-op-utils.js';
-import { threadTypeIsThick } from 'lib/types/thread-types-enum.js';
+import { threadSpecs } from 'lib/shared/threads/thread-specs.js';
import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js';
import { useSelector } from 'lib/utils/redux-utils.js';
@@ -67,18 +66,14 @@
const addUsers = React.useCallback(() => {
const newMemberIDs = Array.from(pendingUsersToAdd.keys());
- if (threadTypeIsThick(threadInfo.type)) {
- void addDMThreadMembers(newMemberIDs, threadInfo);
- } else {
- void dispatchActionPromise(
- changeThreadSettingsActionTypes,
- callChangeThreadSettings({
- threadID,
- threadInfo,
- changes: { newMemberIDs },
- }),
- );
- }
+ void threadSpecs[threadInfo.type].protocol.addThreadMembers(
+ { newMemberIDs, threadInfo },
+ {
+ dmAddThreadMembers: addDMThreadMembers,
+ changeThreadSettings: callChangeThreadSettings,
+ dispatchActionPromise,
+ },
+ );
onClose();
}, [
addDMThreadMembers,
@@ -86,7 +81,6 @@
dispatchActionPromise,
onClose,
pendingUsersToAdd,
- threadID,
threadInfo,
]);

File Metadata

Mime Type
text/plain
Expires
Thu, Jan 15, 7:32 AM (11 h, 19 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5936514
Default Alt Text
D14624.1768462340.diff (10 KB)

Event Timeline