Page MenuHomePhabricator

D12806.id42553.diff
No OneTemporary

D12806.id42553.diff

diff --git a/lib/shared/dm-ops/reaction-message-spec.js b/lib/shared/dm-ops/reaction-message-spec.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/dm-ops/reaction-message-spec.js
@@ -0,0 +1,54 @@
+// @flow
+
+import uuid from 'uuid';
+
+import type { DMOperationSpec } from './dm-op-spec.js';
+import type { DMSendReactionMessageOperation } from '../../types/dm-ops.js';
+import { messageTypes } from '../../types/message-types-enum.js';
+import { updateTypes } from '../../types/update-types-enum.js';
+import type { ClientUpdateInfo } from '../../types/update-types.js';
+
+const sendReactionMessageSpec: DMOperationSpec<DMSendReactionMessageOperation> =
+ Object.freeze({
+ processDMOperation: async (
+ dmOperation: DMSendReactionMessageOperation,
+ viewerID: string,
+ ) => {
+ const {
+ threadID,
+ creatorID,
+ time,
+ messageID,
+ targetMessageID,
+ reaction,
+ action,
+ } = dmOperation;
+ const reactionMessage = {
+ type: messageTypes.REACTION,
+ id: messageID,
+ threadID,
+ creatorID,
+ time,
+ targetMessageID,
+ reaction,
+ action,
+ };
+
+ const updateInfos: Array<ClientUpdateInfo> = [];
+ if (creatorID !== viewerID) {
+ updateInfos.push({
+ type: updateTypes.UPDATE_THREAD_READ_STATUS,
+ id: uuid.v4(),
+ time,
+ threadID,
+ unread: true,
+ });
+ }
+ return {
+ rawMessageInfos: [reactionMessage],
+ updateInfos,
+ };
+ },
+ });
+
+export { sendReactionMessageSpec };
diff --git a/lib/types/dm-ops.js b/lib/types/dm-ops.js
--- a/lib/types/dm-ops.js
+++ b/lib/types/dm-ops.js
@@ -16,6 +16,7 @@
CREATE_THREAD: 'create_thread',
CREATE_SIDEBAR: 'create_sidebar',
SEND_TEXT_MESSAGE: 'send_text_message',
+ SEND_REACTION_MESSAGE: 'send_reaction_message',
});
export type DMOperationType = $Values<typeof dmOperationTypes>;
@@ -85,10 +86,33 @@
text: t.String,
});
+export type DMSendReactionMessageOperation = {
+ +type: 'send_reaction_message',
+ +threadID: string,
+ +creatorID: string,
+ +time: number,
+ +messageID: string,
+ +targetMessageID: string,
+ +reaction: string,
+ +action: 'add_reaction' | 'remove_reaction',
+};
+export const dmSendReactionMessageOperation: TInterface<DMSendReactionMessageOperation> =
+ tShape<DMSendReactionMessageOperation>({
+ type: tString(dmOperationTypes.SEND_REACTION_MESSAGE),
+ threadID: t.String,
+ creatorID: tUserID,
+ time: t.Number,
+ messageID: t.String,
+ targetMessageID: t.String,
+ reaction: t.String,
+ action: t.enums.of(['add_reaction', 'remove_reaction']),
+ });
+
export type DMOperation =
| DMCreateThreadOperation
| DMCreateSidebarOperation
- | DMSendTextMessageOperation;
+ | DMSendTextMessageOperation
+ | DMSendReactionMessageOperation;
export type DMOperationResult = {
rawMessageInfos: Array<RawMessageInfo>,

File Metadata

Mime Type
text/plain
Expires
Sat, Nov 30, 7:00 AM (20 h, 9 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2600040
Default Alt Text
D12806.id42553.diff (2 KB)

Event Timeline