diff --git a/src/actionTypes.js b/src/actionTypes.js index 42e24253faa..8627b357de7 100644 --- a/src/actionTypes.js +++ b/src/actionTypes.js @@ -341,35 +341,42 @@ type EventMessageDeleteAction = {| type: typeof EVENT_MESSAGE_DELETE, messageIds: number[], |}; + +// This is current to feature level 109: +// https://zulip.com/api/get-events#update_message type EventUpdateMessageAction = {| ...ServerEvent, type: typeof EVENT_UPDATE_MESSAGE, - edit_timestamp: number, + user_id: UserId, + + // Any content changes apply to just message_id. message_id: number, - // TODO is it really right that just one of the orig_* is optional? - orig_content: string, - // TODO: The doc for this field isn't yet correct; it turns out that - // the question of whether `orig_subject` is present or not is - // complicated; see discussion at - // https://chat.zulip.org/#narrow/stream/206-zulip-terminal/topic/subject.20always.20present.20in.20event/near/1098954. - // - // We can be pretty sure of a few things, though: - // - it will not be present if the message doesn't have a topic - // (i.e., if it's a private message) - // - it's guaranteed to be present if the topic did indeed change - // - it will never be an empty string, because the server doesn't - // accept the empty string for a message's topic; it requires - // clients to specify something like `(no topic)` if no topic is - // desired. + // Any stream/topic changes apply to all of message_ids, which is + // guaranteed to include message_id. + message_ids: $ReadOnlyArray, + + edit_timestamp: number, + stream_name?: string, + stream_id?: number, + new_stream_id?: number, + propagate_mode: 'change_one' | 'change_later' | 'change_all', orig_subject?: string, + subject: string, + + // TODO(server-4.0): Changed in feat. 46 to array-of-objects shape, from string[] + topic_links?: $ReadOnlyArray<{| +text: string, +url: string |}> | $ReadOnlyArray, + // TODO(server-3.0): Replaced in feat. 1 by topic_links + subject_links?: string[], + + orig_content: string, orig_rendered_content: string, prev_rendered_content_version: number, + content: string, rendered_content: string, - subject_links: string[], - subject: string, - user_id: UserId, + is_me_message: boolean, + flags: $ReadOnlyArray, |}; type EventReactionCommon = {| diff --git a/src/message/__tests__/messagesReducer-test.js b/src/message/__tests__/messagesReducer-test.js index 9c483a3cb70..1095576ef37 100644 --- a/src/message/__tests__/messagesReducer-test.js +++ b/src/message/__tests__/messagesReducer-test.js @@ -175,13 +175,18 @@ describe('messagesReducer', () => { type: EVENT_UPDATE_MESSAGE, edit_timestamp: Date.now() - 1000, message_id: message3.id, + message_ids: [message3.id], orig_content: eg.randString(), orig_rendered_content: eg.randString(), prev_rendered_content_version: 0, + propagate_mode: 'change_one', rendered_content: eg.randString(), + content: eg.randString(), subject_links: [], subject: eg.randString(), user_id: message3.sender_id, + is_me_message: false, + flags: [], }); const newState = messagesReducer(prevState, action); expect(newState).toBe(prevState); @@ -211,13 +216,18 @@ describe('messagesReducer', () => { type: EVENT_UPDATE_MESSAGE, edit_timestamp: 123, message_id: message3New.id, + message_ids: [message3New.id], orig_content: '

Old content

', orig_rendered_content: '

Old content

', prev_rendered_content_version: 1, + propagate_mode: 'change_one', rendered_content: '

New content

', + content: 'New content', subject_links: [], subject: message3New.subject, user_id: message3New.sender_id, + is_me_message: false, + flags: [], }); const expectedState = eg.makeMessagesState([message1, message2, message3New]); const newState = messagesReducer(prevState, action); @@ -254,14 +264,19 @@ describe('messagesReducer', () => { type: EVENT_UPDATE_MESSAGE, edit_timestamp: 123, message_id: message1New.id, + message_ids: [message1New.id], orig_content: message1Old.content, orig_subject: message1Old.subject, orig_rendered_content: message1Old.content, prev_rendered_content_version: 1, + propagate_mode: 'change_one', rendered_content: message1New.content, + content: message1New.content, subject_links: [], subject: message1New.subject, user_id: message1Old.sender_id, + is_me_message: false, + flags: [], }); const expectedState = eg.makeMessagesState([message1New]); const newState = messagesReducer(prevState, action); @@ -307,14 +322,19 @@ describe('messagesReducer', () => { type: EVENT_UPDATE_MESSAGE, edit_timestamp: 456, message_id: message1Old.id, + message_ids: [message1Old.id], orig_content: message1Old.content, orig_rendered_content: message1Old.content, rendered_content: message1New.content, + content: message1New.content, + propagate_mode: 'change_one', subject: message1New.subject, orig_subject: message1Old.subject, prev_rendered_content_version: 1, user_id: message1New.sender_id, subject_links: [], + is_me_message: false, + flags: [], }); const expectedState = eg.makeMessagesState([message1New]); const newState = messagesReducer(prevState, action);