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
1 change: 1 addition & 0 deletions src/__tests__/lib/exampleData.js
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,7 @@ const outboxMessageBase: $Diff<Outbox, {| id: mixed, timestamp: mixed |}> = deep
reactions: [],
sender_email: selfUser.email,
sender_full_name: selfUser.full_name,
sender_id: selfUser.user_id,
subject: 'test topic',
// timestamp: ...,
type: 'stream',
Expand Down
8 changes: 8 additions & 0 deletions src/message/__tests__/renderMessages-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ describe('renderMessages', () => {
timestamp: 123,
type: 'stream',
id: 1,
sender_email: 'john@example.com',
sender_full_name: 'John Doe',
display_recipient: 'general',
subject: '',
Expand All @@ -42,6 +43,7 @@ describe('renderMessages', () => {
timestamp: 124,
type: 'stream',
id: 2,
sender_email: 'john@example.com',
sender_full_name: 'John Doe',
display_recipient: 'general',
subject: '',
Expand All @@ -51,6 +53,7 @@ describe('renderMessages', () => {
timestamp: 125,
type: 'stream',
id: 3,
sender_email: 'john@example.com',
sender_full_name: 'John Doe',
display_recipient: 'general',
subject: '',
Expand All @@ -72,6 +75,7 @@ describe('renderMessages', () => {
timestamp: 123,
type: 'stream',
id: 1,
sender_email: 'john@example.com',
sender_full_name: 'John',
display_recipient: 'general',
subject: '',
Expand All @@ -81,6 +85,7 @@ describe('renderMessages', () => {
timestamp: 124,
type: 'stream',
id: 2,
sender_email: 'mark@example.com',
sender_full_name: 'Mark',
display_recipient: 'general',
subject: '',
Expand All @@ -90,6 +95,7 @@ describe('renderMessages', () => {
timestamp: 125,
type: 'stream',
id: 3,
sender_email: 'peter@example.com',
sender_full_name: 'Peter',
display_recipient: 'general',
subject: '',
Expand All @@ -111,6 +117,7 @@ describe('renderMessages', () => {
timestamp: 123,
type: 'private',
id: 1,
sender_email: 'john@example.com',
sender_full_name: 'John',
avatar_url: '',
display_recipient: [{ email: 'john@example.com' }, { email: 'mark@example.com' }],
Expand All @@ -119,6 +126,7 @@ describe('renderMessages', () => {
timestamp: 123,
type: 'private',
id: 2,
sender_email: 'mark@example.com',
sender_full_name: 'Mark',
avatar_url: '',
display_recipient: [{ email: 'john@example.com' }, { email: 'mark@example.com' }],
Expand Down
10 changes: 6 additions & 4 deletions src/message/renderMessages.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@ export default (
data: [],
});
}

// TODO(#3764): Use sender_id, not sender_email. Needs making
// Outbox#sender_id required; which needs a migration to drop Outbox
// values that lack it; which is fine once the release that adds it
// has been out for a few weeks.
const shouldGroupWithPrev =
!diffRecipient
&& !diffDays
&& prevItem
&& prevItem.sender_full_name === item.sender_full_name;
!diffRecipient && !diffDays && prevItem && prevItem.sender_email === item.sender_email;

sections[sections.length - 1].data.push({
key: item.id,
Expand Down
1 change: 1 addition & 0 deletions src/outbox/outboxActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ export const addToOutbox = (narrow: Narrow, content: string) => async (
id: localTime,
sender_full_name: ownUser.full_name,
sender_email: ownUser.email,
sender_id: ownUser.user_id,
avatar_url: ownUser.avatar_url,
isOutbox: true,
reactions: [],
Expand Down
15 changes: 12 additions & 3 deletions src/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -175,14 +175,22 @@ export type Outbox = {|
// It's used for sending the message to the server.
markdownContent: string,

// These fields are modeled on `Message`.
// The remaining fields are modeled on `Message`.

avatar_url: string | null,
content: string,
display_recipient: $FlowFixMe, // `string` for type stream, else PmRecipientUser[].
id: number,
reactions: Reaction[],
sender_email: string,
sender_full_name: string,

// TODO(#3764): Make sender_id required. Needs a migration to drop Outbox
// values that lack it; which is fine once the release that adds it has
// been out for a few weeks.
// (Also drop the hack line about it in MessageLike.)
sender_id?: number,

subject: string,
timestamp: number,
type: 'stream' | 'private',
Expand All @@ -194,7 +202,7 @@ export type Outbox = {|
* Flow reasonably dispermits certain classes of access on union types. In
* particular,
* ```
* const { sender_id } = (message: Message | Outbox); // error
* const { match_content } = (message: Message | Outbox); // error
* ```
* is not allowed. However, as long as you're prepared to handle values of
* `undefined`, it's both JavaScript-legal to do so and occasionally convenient.
Expand All @@ -203,7 +211,7 @@ export type Outbox = {|
* subtype of `Message | Outbox`, but which Flow will permit us to directly (and
* soundly) destructure certain `Message`-only fields from:
* ```
* const { sender_id } = (message: MessageLike); // ok!
* const { match_content } = (message: MessageLike); // ok!
* ```
*
* * Note: `MessageLike` <: `Message | Outbox`, but the converse does not hold.
Expand All @@ -221,6 +229,7 @@ export type MessageLike =
| $ReadOnly<{
// $Shape<T> is unsound, per Flow docs, but $ReadOnly<$Shape<T>> is not
...$Shape<{ [$Keys<Message>]: void }>,
sender_id?: number, // TODO: Drop this once required in Outbox.
...Outbox,
}>;

Expand Down