Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3390309
D9371.id32633.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
20 KB
Referenced Files
None
Subscribers
None
D9371.id32633.diff
View Options
diff --git a/lib/actions/thread-actions.js b/lib/actions/thread-actions.js
--- a/lib/actions/thread-actions.js
+++ b/lib/actions/thread-actions.js
@@ -24,6 +24,10 @@
import { useKeyserverCall } from '../utils/keyserver-call.js';
import { values } from '../utils/objects.js';
+export type DeleteThreadInput = {
+ +threadID: string,
+};
+
const deleteThreadActionTypes = Object.freeze({
started: 'DELETE_THREAD_STARTED',
success: 'DELETE_THREAD_SUCCESS',
@@ -32,20 +36,23 @@
const deleteThread =
(
callServerEndpoint: CallServerEndpoint,
- ): ((
- threadID: string,
- currentAccountPassword: ?string,
- ) => Promise<LeaveThreadPayload>) =>
- async (threadID, currentAccountPassword) => {
- const response = await callServerEndpoint('delete_thread', {
- threadID,
- accountPassword: currentAccountPassword,
- });
+ ): ((input: DeleteThreadInput) => Promise<LeaveThreadPayload>) =>
+ async input => {
+ const keyserverID = extractKeyserverIDFromID(input.threadID);
+ const requests = { [keyserverID]: input };
+
+ const responses = await callServerEndpoint('delete_thread', requests);
+ const response = responses[keyserverID];
return {
updatesResult: response.updatesResult,
};
};
+function useDeleteThread(): (
+ input: DeleteThreadInput,
+) => Promise<LeaveThreadPayload> {
+ return useKeyserverCall(deleteThread);
+}
const changeThreadSettingsActionTypes = Object.freeze({
started: 'CHANGE_THREAD_SETTINGS_STARTED',
success: 'CHANGE_THREAD_SETTINGS_SUCCESS',
@@ -53,21 +60,31 @@
});
const changeThreadSettings =
(
- callServerEndpoint: CallServerEndpoint,
- ): ((request: UpdateThreadRequest) => Promise<ChangeThreadSettingsPayload>) =>
- async request => {
+ callKeyserverEndpoint: CallKeyserverEndpoint,
+ ): ((input: UpdateThreadRequest) => Promise<ChangeThreadSettingsPayload>) =>
+ async input => {
invariant(
- Object.keys(request.changes).length > 0,
+ Object.keys(input.changes).length > 0,
'No changes provided to changeThreadSettings!',
);
- const response = await callServerEndpoint('update_thread', request);
+ const keyserverID = extractKeyserverIDFromID(input.threadID);
+ const requests = { [keyserverID]: input };
+
+ const responses = await callKeyserverEndpoint('update_thread', requests);
+ const response = responses[keyserverID];
return {
- threadID: request.threadID,
+ threadID: input.threadID,
updatesResult: response.updatesResult,
newMessageInfos: response.newMessageInfos,
};
};
+function useChangeThreadSettings(): (
+ input: UpdateThreadRequest,
+) => Promise<ChangeThreadSettingsPayload> {
+ return useKeyserverCall(changeThreadSettings);
+}
+
export type RemoveUsersFromThreadInput = {
+threadID: string,
+memberIDs: $ReadOnlyArray<string>,
@@ -320,9 +337,9 @@
export {
deleteThreadActionTypes,
- deleteThread,
+ useDeleteThread,
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
removeUsersFromThreadActionTypes,
useRemoveUsersFromThread,
changeThreadMemberRolesActionTypes,
diff --git a/lib/components/base-edit-thread-avatar-provider.react.js b/lib/components/base-edit-thread-avatar-provider.react.js
--- a/lib/components/base-edit-thread-avatar-provider.react.js
+++ b/lib/components/base-edit-thread-avatar-provider.react.js
@@ -3,17 +3,14 @@
import * as React from 'react';
import {
- changeThreadSettings,
+ useChangeThreadSettings,
changeThreadSettingsActionTypes,
} from '../actions/thread-actions.js';
import { createLoadingStatusSelector } from '../selectors/loading-selectors.js';
import type { UpdateUserAvatarRequest } from '../types/avatar-types.js';
import type { LoadingStatus } from '../types/loading-types.js';
import type { UpdateThreadRequest } from '../types/thread-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from '../utils/action-utils.js';
+import { useDispatchActionPromise } from '../utils/action-utils.js';
import { useSelector } from '../utils/redux-utils.js';
export type EditThreadAvatarContextType = {
@@ -43,7 +40,7 @@
);
const dispatchActionPromise = useDispatchActionPromise();
- const changeThreadSettingsCall = useServerCall(changeThreadSettings);
+ const changeThreadSettingsCall = useChangeThreadSettings();
const [
threadAvatarMediaUploadInProgress,
diff --git a/lib/hooks/promote-sidebar.react.js b/lib/hooks/promote-sidebar.react.js
--- a/lib/hooks/promote-sidebar.react.js
+++ b/lib/hooks/promote-sidebar.react.js
@@ -4,7 +4,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from '../actions/thread-actions.js';
import { createLoadingStatusSelector } from '../selectors/loading-selectors.js';
import { threadInfoSelector } from '../selectors/thread-selectors.js';
@@ -16,10 +16,7 @@
import { threadPermissions } from '../types/thread-permission-types.js';
import { threadTypes } from '../types/thread-types-enum.js';
import { type ThreadInfo } from '../types/thread-types.js';
-import {
- useServerCall,
- useDispatchActionPromise,
-} from '../utils/action-utils.js';
+import { useDispatchActionPromise } from '../utils/action-utils.js';
import { useSelector } from '../utils/redux-utils.js';
function canPromoteSidebar(
@@ -52,7 +49,7 @@
onError?: () => mixed,
): PromoteSidebarType {
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const loadingStatusSelector = createLoadingStatusSelector(
changeThreadSettingsActionTypes,
);
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
@@ -12,7 +12,7 @@
import { assertSingleMessageInfo, joinResult } from './utils.js';
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from '../../actions/thread-actions.js';
import { messageTypes } from '../../types/message-types-enum.js';
import type {
@@ -29,10 +29,7 @@
import { threadTypes } from '../../types/thread-types-enum.js';
import type { ThreadInfo } from '../../types/thread-types.js';
import type { RelativeUserInfo } from '../../types/user-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from '../../utils/action-utils.js';
+import { useDispatchActionPromise } from '../../utils/action-utils.js';
import { ET } from '../../utils/entity-text.js';
import {
type ASTNode,
@@ -285,7 +282,7 @@
useCreationSideEffectsFunc: () => {
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
return async (
messageInfo: RawTextMessageInfo,
threadInfo: ThreadInfo,
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
@@ -242,7 +242,7 @@
export type ThreadDeletionRequest = {
+threadID: string,
- +accountPassword?: ?string,
+ +accountPassword?: empty,
};
export type RemoveMembersRequest = {
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
@@ -5,7 +5,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import { useENSNames } from 'lib/hooks/ens-cache.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
@@ -18,10 +18,7 @@
import { threadActualMembers } from 'lib/shared/thread-utils.js';
import { type ThreadInfo } from 'lib/types/thread-types.js';
import { type AccountUserInfo } from 'lib/types/user-types.js';
-import {
- useServerCall,
- useDispatchActionPromise,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import Button from '../../components/button.react.js';
import Modal from '../../components/modal.react.js';
@@ -71,7 +68,7 @@
goBackOnce();
}, [goBackOnce]);
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const userInfoInputIDs = userInfoInputArray.map(userInfo => userInfo.id);
const { route } = props;
const { threadInfo } = route.params;
diff --git a/native/chat/settings/color-selector-modal.react.js b/native/chat/settings/color-selector-modal.react.js
--- a/native/chat/settings/color-selector-modal.react.js
+++ b/native/chat/settings/color-selector-modal.react.js
@@ -6,7 +6,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import {
type ThreadInfo,
@@ -14,10 +14,7 @@
type UpdateThreadRequest,
} from 'lib/types/thread-types.js';
import type { DispatchActionPromise } from 'lib/utils/action-utils.js';
-import {
- useServerCall,
- useDispatchActionPromise,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import ColorSelector from '../../components/color-selector.react.js';
import Modal from '../../components/modal.react.js';
@@ -176,7 +173,7 @@
const windowWidth = useSelector(state => state.dimensions.width);
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
return (
<ColorSelectorModal
diff --git a/native/chat/settings/delete-thread.react.js b/native/chat/settings/delete-thread.react.js
--- a/native/chat/settings/delete-thread.react.js
+++ b/native/chat/settings/delete-thread.react.js
@@ -12,8 +12,9 @@
import {
deleteThreadActionTypes,
- deleteThread,
+ useDeleteThread,
} from 'lib/actions/thread-actions.js';
+import type { DeleteThreadInput } from 'lib/actions/thread-actions.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
import {
threadInfoSelector,
@@ -30,7 +31,6 @@
LeaveThreadPayload,
} from 'lib/types/thread-types.js';
import {
- useServerCall,
useDispatchActionPromise,
type DispatchActionPromise,
} from 'lib/utils/action-utils.js';
@@ -67,7 +67,7 @@
// Redux dispatch functions
+dispatchActionPromise: DispatchActionPromise,
// async functions that hit server APIs
- +deleteThread: (threadID: string) => Promise<LeaveThreadPayload>,
+ +deleteThread: (input: DeleteThreadInput) => Promise<LeaveThreadPayload>,
// withNavContext
+navDispatch: (action: NavAction) => void,
};
@@ -161,7 +161,7 @@
payload: { threadIDs: [threadInfo.id] },
});
try {
- const result = await this.props.deleteThread(threadInfo.id);
+ const result = await this.props.deleteThread({ threadID: threadInfo.id });
const invalidated = identifyInvalidatedThreads(
result.updatesResult.newUpdates,
);
@@ -272,7 +272,7 @@
const styles = useStyles(unboundStyles);
const dispatchActionPromise = useDispatchActionPromise();
- const callDeleteThread = useServerCall(deleteThread);
+ const callDeleteThread = useDeleteThread();
const navContext = React.useContext(NavContext);
invariant(navContext, 'NavContext should be set in DeleteThread');
diff --git a/native/chat/settings/thread-settings-description.react.js b/native/chat/settings/thread-settings-description.react.js
--- a/native/chat/settings/thread-settings-description.react.js
+++ b/native/chat/settings/thread-settings-description.react.js
@@ -11,7 +11,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
import { threadHasPermission } from 'lib/shared/thread-utils.js';
@@ -24,7 +24,6 @@
} from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
- useServerCall,
useDispatchActionPromise,
} from 'lib/utils/action-utils.js';
@@ -307,7 +306,7 @@
const styles = useStyles(unboundStyles);
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
return (
<ThreadSettingsDescription
{...props}
diff --git a/native/chat/settings/thread-settings-name.react.js b/native/chat/settings/thread-settings-name.react.js
--- a/native/chat/settings/thread-settings-name.react.js
+++ b/native/chat/settings/thread-settings-name.react.js
@@ -11,7 +11,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
import type { LoadingStatus } from 'lib/types/loading-types.js';
@@ -22,7 +22,6 @@
} from 'lib/types/thread-types.js';
import {
type DispatchActionPromise,
- useServerCall,
useDispatchActionPromise,
} from 'lib/utils/action-utils.js';
import { firstLine } from 'lib/utils/string-utils.js';
@@ -230,7 +229,7 @@
);
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
return (
<ThreadSettingsName
diff --git a/native/community-creation/community-creation-members.react.js b/native/community-creation/community-creation-members.react.js
--- a/native/community-creation/community-creation-members.react.js
+++ b/native/community-creation/community-creation-members.react.js
@@ -4,7 +4,7 @@
import { ActivityIndicator } from 'react-native';
import {
- changeThreadSettings,
+ useChangeThreadSettings,
changeThreadSettingsActionTypes,
} from 'lib/actions/thread-actions.js';
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js';
@@ -17,10 +17,7 @@
import type { LoadingStatus } from 'lib/types/loading-types.js';
import { threadTypes } from 'lib/types/thread-types-enum.js';
import type { AccountUserInfo } from 'lib/types/user-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import CommunityCreationContentContainer from './community-creation-content-container.react.js';
import CommunityCreationKeyserverLabel from './community-creation-keyserver-label.react.js';
@@ -59,7 +56,7 @@
const { announcement, threadID } = props.route.params;
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const changeThreadSettingsLoadingStatus: LoadingStatus = useSelector(
changeThreadSettingsLoadingStatusSelector,
);
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
@@ -4,7 +4,7 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import { useENSNames } from 'lib/hooks/ens-cache.js';
import { threadInfoSelector } from 'lib/selectors/thread-selectors.js';
@@ -14,10 +14,7 @@
} from 'lib/selectors/user-selectors.js';
import { getPotentialMemberItems } from 'lib/shared/search-utils.js';
import { threadActualMembers } from 'lib/shared/thread-utils.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import AddMembersListContent from './add-members-list-content.react.js';
import css from './members-modal.css';
@@ -95,7 +92,7 @@
);
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const addUsers = React.useCallback(() => {
dispatchActionPromise(
diff --git a/web/modals/threads/settings/thread-settings-delete-tab.react.js b/web/modals/threads/settings/thread-settings-delete-tab.react.js
--- a/web/modals/threads/settings/thread-settings-delete-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-delete-tab.react.js
@@ -4,17 +4,14 @@
import {
deleteThreadActionTypes,
- deleteThread,
+ useDeleteThread,
} from 'lib/actions/thread-actions.js';
import { useModalContext } from 'lib/components/modal-provider.react.js';
import SWMansionIcon from 'lib/components/SWMansionIcon.react.js';
import { containedThreadInfos } from 'lib/selectors/thread-selectors.js';
import { type SetState } from 'lib/types/hook-types.js';
import { type ThreadInfo } from 'lib/types/thread-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import SubmitSection from './submit-section.react.js';
import ThreadDeleteConfirmationModal from './thread-settings-delete-confirmation-modal.react.js';
@@ -41,7 +38,7 @@
const modalContext = useModalContext();
const dispatchActionPromise = useDispatchActionPromise();
- const callDeleteThread = useServerCall(deleteThread);
+ const callDeleteThread = useDeleteThread();
const containedThreads = useSelector(
state => containedThreadInfos(state)[threadInfo.id],
);
@@ -58,7 +55,7 @@
const deleteThreadAction = React.useCallback(async () => {
try {
setErrorMessage('');
- const response = await callDeleteThread(threadInfo.id);
+ const response = await callDeleteThread({ threadID: threadInfo.id });
popThreadDeleteConfirmationModal();
modalContext.popModal();
return response;
diff --git a/web/modals/threads/settings/thread-settings-general-tab.react.js b/web/modals/threads/settings/thread-settings-general-tab.react.js
--- a/web/modals/threads/settings/thread-settings-general-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-general-tab.react.js
@@ -5,16 +5,13 @@
import {
changeThreadSettingsActionTypes,
- changeThreadSettings,
+ useChangeThreadSettings,
} from 'lib/actions/thread-actions.js';
import { threadHasPermission } from 'lib/shared/thread-utils.js';
import { type SetState } from 'lib/types/hook-types.js';
import { threadPermissions } from 'lib/types/thread-permission-types.js';
import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import { firstLine } from 'lib/utils/string-utils.js';
import { chatNameMaxLength } from 'lib/utils/validation-utils.js';
@@ -48,7 +45,7 @@
} = props;
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const nameInputRef = React.useRef();
diff --git a/web/modals/threads/settings/thread-settings-privacy-tab.react.js b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
--- a/web/modals/threads/settings/thread-settings-privacy-tab.react.js
+++ b/web/modals/threads/settings/thread-settings-privacy-tab.react.js
@@ -3,7 +3,7 @@
import * as React from 'react';
import {
- changeThreadSettings,
+ useChangeThreadSettings,
changeThreadSettingsActionTypes,
} from 'lib/actions/thread-actions.js';
import { useModalContext } from 'lib/components/modal-provider.react.js';
@@ -12,10 +12,7 @@
import { type SetState } from 'lib/types/hook-types.js';
import { threadTypes } from 'lib/types/thread-types-enum.js';
import { type ThreadInfo, type ThreadChanges } from 'lib/types/thread-types.js';
-import {
- useDispatchActionPromise,
- useServerCall,
-} from 'lib/utils/action-utils.js';
+import { useDispatchActionPromise } from 'lib/utils/action-utils.js';
import SubmitSection from './submit-section.react.js';
import css from './thread-settings-privacy-tab.css';
@@ -61,7 +58,7 @@
const modalContext = useModalContext();
const dispatchActionPromise = useDispatchActionPromise();
- const callChangeThreadSettings = useServerCall(changeThreadSettings);
+ const callChangeThreadSettings = useChangeThreadSettings();
const changeQueued: boolean = React.useMemo(
() => Object.values(queuedChanges).some(v => v !== null && v !== undefined),
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 30, 11:15 PM (20 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2602733
Default Alt Text
D9371.id32633.diff (20 KB)
Attached To
Mode
D9371: [lib][web][native] Refactor actions in thread-actions.js pt.2
Attached
Detach File
Event Timeline
Log In to Comment