Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 26 additions & 19 deletions src/actionTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The second TODO is resolved with Tim's clarifications in in
8295bb918.

Let's clarify what repo that commit ID is in, like zulip/zulip@8295bb918.

// 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<number>,

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<string>,

// 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<string>,
|};

type EventReactionCommon = {|
Expand Down
20 changes: 20 additions & 0 deletions src/message/__tests__/messagesReducer-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -211,13 +216,18 @@ describe('messagesReducer', () => {
type: EVENT_UPDATE_MESSAGE,
edit_timestamp: 123,
message_id: message3New.id,
message_ids: [message3New.id],
orig_content: '<p>Old content</p>',
orig_rendered_content: '<p>Old content</p>',
prev_rendered_content_version: 1,
propagate_mode: 'change_one',
rendered_content: '<p>New content</p>',
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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down