Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F33090845
D14624.1768462340.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
10 KB
Referenced Files
None
Subscribers
None
D14624.1768462340.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D14624: [lib] Move adding thread members to a spec
Attached
Detach File
Event Timeline
Log In to Comment