diff --git a/src/__tests__/lib/exampleData.js b/src/__tests__/lib/exampleData.js index f60370f94b1..50ee2217b4d 100644 --- a/src/__tests__/lib/exampleData.js +++ b/src/__tests__/lib/exampleData.js @@ -15,6 +15,7 @@ import type { User, UserGroup, UserId, + UserStatus, } from '../../api/modelTypes'; import { makeUserId } from '../../api/idTypes'; import type { InitialData } from '../../api/apiTypes'; @@ -184,6 +185,24 @@ export const makeCrossRealmBot = ( is_bot: true, }); +export const userStatusEmojiUnicode: $PropertyType = deepFreeze({ + reaction_type: 'unicode_emoji', + emoji_code: '1f44d', + emoji_name: 'thumbs_up', +}); + +export const userStatusEmojiZulipExtra: $PropertyType = deepFreeze({ + reaction_type: 'zulip_extra_emoji', + emoji_code: 'zulip', + emoji_name: 'zulip', +}); + +export const userStatusEmojiRealm: $PropertyType = deepFreeze({ + reaction_type: 'realm_emoji', + emoji_code: '80', + emoji_name: 'github_parrot', +}); + export const realm: URL = new URL('https://zulip.example.org'); export const zulipVersion: ZulipVersion = new ZulipVersion('2.1.0-234-g7c3acf4'); diff --git a/src/emoji/Emoji.js b/src/emoji/Emoji.js index b879ad5ddb2..79885989df9 100644 --- a/src/emoji/Emoji.js +++ b/src/emoji/Emoji.js @@ -1,11 +1,11 @@ /* @flow strict-local */ -import React, { useMemo } from 'react'; +import React, { useContext, useMemo } from 'react'; import type { Node } from 'react'; import { Image } from 'react-native'; import { createIconSet } from 'react-native-vector-icons'; import type { EmojiType } from '../types'; -import { createStyleSheet } from '../styles'; +import { createStyleSheet, ThemeContext } from '../styles'; import { useSelector } from '../react-redux'; import { getAllImageEmojiByCode } from './emojiSelectors'; import { codeToEmojiMap } from './data'; @@ -23,6 +23,7 @@ type Props = $ReadOnly<{| export default function Emoji(props: Props): Node { const { code, size = 20 } = props; + const { color } = useContext(ThemeContext); const imageEmoji = useSelector(state => props.type === 'image' ? getAllImageEmojiByCode(state)[props.code] : undefined, ); @@ -33,5 +34,18 @@ export default function Emoji(props: Props): Node { if (imageEmoji) { return ; } - return ; + return ( + + ); } diff --git a/src/user-statuses/userStatusesCore.js b/src/user-statuses/userStatusesCore.js index 4319662ba6d..7cf2429ed63 100644 --- a/src/user-statuses/userStatusesCore.js +++ b/src/user-statuses/userStatusesCore.js @@ -35,3 +35,20 @@ export const kUserStatusZero: UserStatus = { * implicitly by having no record in this map. */ export type UserStatusesState = Immutable.Map; + +// +// +// Getters. +// + +/** + * The `UserStatus` object for the given UserId, from `UserStatusesState`. + * + * Use this instead of reading `UserStatusesState` directly, because it + * takes care of this fact about UserStatusesState (from jsdoc): + * + * Users who have the "zero" status, `kUserStatusZero`, may be + * represented implicitly by having no record in this map. + */ +export const getUserStatusFromModel = (state: UserStatusesState, userId: UserId): UserStatus => + state.get(userId, kUserStatusZero); diff --git a/src/user-statuses/userStatusesModel.js b/src/user-statuses/userStatusesModel.js index f6637d5ffa1..56554ace437 100644 --- a/src/user-statuses/userStatusesModel.js +++ b/src/user-statuses/userStatusesModel.js @@ -21,10 +21,16 @@ import { kUserStatusZero } from './userStatusesCore'; // Selectors. // -const getUserStatuses = (state: PerAccountState): UserStatusesState => state.userStatuses; +/** + * The `UserStatusesState`. + * + * Don't read from `UserStatusesState` directly; see `userStatusesCore` for + * a getter that takes a `UserStatusesState`. + */ +export const getUserStatuses = (state: PerAccountState): UserStatusesState => state.userStatuses; /** - * The `UserStatus` object for the given UserId. + * The `UserStatus` object for the given UserId, from `PerAccountState`. */ export const getUserStatus = (state: PerAccountState, userId: UserId): UserStatus => getUserStatuses(state).get(userId, kUserStatusZero); diff --git a/src/users/UserItem.js b/src/users/UserItem.js index 2b04d7b8d51..50706ae28d9 100644 --- a/src/users/UserItem.js +++ b/src/users/UserItem.js @@ -13,6 +13,9 @@ import styles, { createStyleSheet, BRAND_COLOR } from '../styles'; import { useSelector } from '../react-redux'; import { getUserForId } from './userSelectors'; import { getMutedUsers } from '../selectors'; +import { getUserStatus } from '../user-statuses/userStatusesModel'; +import { emojiTypeFromReactionType } from '../emoji/data'; +import Emoji from '../emoji/Emoji'; const componentStyles = createStyleSheet({ selectedRow: { @@ -28,9 +31,6 @@ const componentStyles = createStyleSheet({ fontSize: 10, color: 'hsl(0, 0%, 60%)', }, - textWrapper: { - flex: 1, - }, }); type Props = $ReadOnly<{| @@ -57,6 +57,7 @@ export function UserItemRaw< const { user, isSelected = false, onPress, unreadCount, showEmail = false } = props; const _ = useContext(TranslationContext); const isMuted = useSelector(getMutedUsers).has(user.user_id); + const userStatusEmoji = useSelector(state => getUserStatus(state, user.user_id)).status_emoji; const handlePress = useCallback(() => { if (onPress) { @@ -73,7 +74,7 @@ export function UserItemRaw< isMuted={isMuted} onPress={onPress && handlePress} /> - + )} + {userStatusEmoji && ( + + + + )} diff --git a/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.android b/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.android index ba6cd47d764..046f2913f6f 100644 --- a/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.android +++ b/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.android @@ -36,6 +36,38 @@ exports[`getEditSequence correct for interesting changes from many messages to e exports[`getEditSequence correct for interesting changes within a given message add reactions to a message 1`] = `3`; +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> none (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> realm (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> unicode (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> zulip extra (no change) 1`] = `0`; + exports[`getEditSequence correct for interesting changes within a given message mute a sender 1`] = `1`; exports[`getEditSequence correct for interesting changes within a given message polls choice added 1`] = `3`; @@ -68,7 +100,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -112,7 +144,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -129,7 +161,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -161,7 +193,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -185,7 +217,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -217,7 +249,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -241,7 +273,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -273,7 +305,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -294,7 +326,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -321,7 +353,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -360,7 +392,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -377,7 +409,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -404,7 +436,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -425,7 +457,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -452,7 +484,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -491,7 +523,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -508,7 +540,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -535,7 +567,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -556,7 +588,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -588,7 +620,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -619,7 +651,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -640,7 +672,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -668,7 +700,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -692,7 +724,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -711,7 +743,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -728,7 +760,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -747,7 +779,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -788,7 +820,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -807,7 +839,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -828,7 +860,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -856,7 +888,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -880,7 +912,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -904,7 +936,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -921,7 +953,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -940,7 +972,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -976,7 +1008,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -997,7 +1029,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -1024,7 +1056,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1063,7 +1095,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1080,7 +1112,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1107,7 +1139,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1128,7 +1160,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1155,7 +1187,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1194,7 +1226,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1211,7 +1243,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1238,7 +1270,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1259,7 +1291,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1286,7 +1318,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1307,7 +1339,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1330,7 +1362,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1347,7 +1379,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1366,7 +1398,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1407,7 +1439,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1426,7 +1458,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1447,7 +1479,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1468,7 +1500,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1512,7 +1544,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1554,7 +1586,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1586,7 +1618,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1618,7 +1650,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1650,7 +1682,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1682,7 +1714,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1714,7 +1746,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1746,7 +1778,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1778,7 +1810,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1810,7 +1842,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1842,7 +1874,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1874,7 +1906,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1906,7 +1938,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1938,7 +1970,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1946,7 +1978,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other

This is an example stream message.

-
 2👍 1 1
+
 2👍 1 1
" @@ -1970,7 +2002,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1986,6 +2018,134 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
" `; +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: none 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: realm 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: unicode 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User👍 +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: zulip extra 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2 1`] = ` "
@@ -1997,7 +2157,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2034,7 +2194,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2051,7 +2211,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2076,7 +2236,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2097,7 +2257,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2122,7 +2282,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2139,7 +2299,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2156,7 +2316,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2177,7 +2337,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2198,7 +2358,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2235,7 +2395,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2272,7 +2432,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2289,7 +2449,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2314,7 +2474,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2335,7 +2495,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2360,7 +2520,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2381,7 +2541,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2402,7 +2562,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2443,7 +2603,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2471,7 +2631,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2511,7 +2671,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2528,7 +2688,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name two User
12:00 PM
@@ -2556,7 +2716,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2576,7 +2736,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2604,7 +2764,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2625,7 +2785,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2653,7 +2813,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2686,7 +2846,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2706,7 +2866,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2730,7 +2890,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2747,7 +2907,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name two User
12:00 PM
@@ -2764,7 +2924,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2785,7 +2945,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2810,7 +2970,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2847,7 +3007,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2864,7 +3024,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name two User
12:00 PM
@@ -2889,7 +3049,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2910,7 +3070,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2935,7 +3095,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2968,7 +3128,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2985,7 +3145,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name two User
12:00 PM
@@ -3002,7 +3162,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -3023,7 +3183,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
diff --git a/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.ios b/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.ios index ba6cd47d764..046f2913f6f 100644 --- a/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.ios +++ b/src/webview/__tests__/__snapshots__/generateInboundEventEditSequence-test.js.snap.ios @@ -36,6 +36,38 @@ exports[`getEditSequence correct for interesting changes from many messages to e exports[`getEditSequence correct for interesting changes within a given message add reactions to a message 1`] = `3`; +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> none (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: none -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> realm (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: realm -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> unicode (no change) 1`] = `0`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: unicode -> zulip extra 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> none 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> realm 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> unicode 1`] = `1`; + +exports[`getEditSequence correct for interesting changes within a given message add/remove/change emoji status status emoji: zulip extra -> zulip extra (no change) 1`] = `0`; + exports[`getEditSequence correct for interesting changes within a given message mute a sender 1`] = `1`; exports[`getEditSequence correct for interesting changes within a given message polls choice added 1`] = `3`; @@ -68,7 +100,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -112,7 +144,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -129,7 +161,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -161,7 +193,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -185,7 +217,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -217,7 +249,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -241,7 +273,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -273,7 +305,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -294,7 +326,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -321,7 +353,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -360,7 +392,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -377,7 +409,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -404,7 +436,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -425,7 +457,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -452,7 +484,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -491,7 +523,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -508,7 +540,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -535,7 +567,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -556,7 +588,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -588,7 +620,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -619,7 +651,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -640,7 +672,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -668,7 +700,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -692,7 +724,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -711,7 +743,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -728,7 +760,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -747,7 +779,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -788,7 +820,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -807,7 +839,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -828,7 +860,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -856,7 +888,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -880,7 +912,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -904,7 +936,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -921,7 +953,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name two User
12:00 PM
@@ -940,7 +972,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -976,7 +1008,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -997,7 +1029,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible HOME_N
-
+
Nonrandom name one User
12:00 PM
@@ -1024,7 +1056,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1063,7 +1095,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1080,7 +1112,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1107,7 +1139,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1128,7 +1160,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1155,7 +1187,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1194,7 +1226,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1211,7 +1243,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1238,7 +1270,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1259,7 +1291,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1286,7 +1318,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1307,7 +1339,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1330,7 +1362,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1347,7 +1379,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1366,7 +1398,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1407,7 +1439,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name two User
12:00 PM
@@ -1426,7 +1458,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1447,7 +1479,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1468,7 +1500,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible all-pm
-
+
Nonrandom name one User
12:00 PM
@@ -1512,7 +1544,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1554,7 +1586,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1586,7 +1618,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1618,7 +1650,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1650,7 +1682,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1682,7 +1714,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1714,7 +1746,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1746,7 +1778,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1778,7 +1810,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1810,7 +1842,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1842,7 +1874,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1874,7 +1906,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1906,7 +1938,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1938,7 +1970,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1946,7 +1978,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other

This is an example stream message.

-
 2👍 1 1
+
 2👍 1 1
" @@ -1970,7 +2002,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
-
+
Nonrandom name sender User
11:59 PM
@@ -1986,6 +2018,134 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible other
" `; +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: none 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: realm 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: unicode 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User👍 +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + +exports[`messages -> piece descriptors -> content HTML is stable/sensible other interesting cases (single messages) sender status emoji: zulip extra 1`] = ` +"
+
+ Dec 31, 1969 +
+
+
+ # nonrandom stream +
+
example topic
+
Dec 31, 1969
+
+
+ \\"Nonrandom +
+
+
+
+ Nonrandom name sender User +
+
11:59 PM
+
+

This is an example stream message.

+ + + +
+ +
" +`; + exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2 1`] = ` "
@@ -1997,7 +2157,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2034,7 +2194,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2051,7 +2211,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2076,7 +2236,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2097,7 +2257,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2122,7 +2282,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2139,7 +2299,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2156,7 +2316,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2177,7 +2337,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2198,7 +2358,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2235,7 +2395,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2272,7 +2432,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2289,7 +2449,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2314,7 +2474,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2335,7 +2495,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2360,7 +2520,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2381,7 +2541,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2402,7 +2562,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name one User
12:00 PM
@@ -2443,7 +2603,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible pm:1,2
-
+
Nonrandom name two User
12:00 PM
@@ -2471,7 +2631,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2511,7 +2671,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2528,7 +2688,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name two User
12:00 PM
@@ -2556,7 +2716,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2576,7 +2736,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2604,7 +2764,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2625,7 +2785,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2653,7 +2813,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2686,7 +2846,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2706,7 +2866,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2730,7 +2890,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2747,7 +2907,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name two User
12:00 PM
@@ -2764,7 +2924,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2785,7 +2945,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible stream
-
+
Nonrandom name one User
12:00 PM
@@ -2810,7 +2970,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2847,7 +3007,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2864,7 +3024,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name two User
12:00 PM
@@ -2889,7 +3049,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2910,7 +3070,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2935,7 +3095,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2968,7 +3128,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -2985,7 +3145,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name two User
12:00 PM
@@ -3002,7 +3162,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
@@ -3023,7 +3183,7 @@ exports[`messages -> piece descriptors -> content HTML is stable/sensible topic:
-
+
Nonrandom name one User
12:00 PM
diff --git a/src/webview/__tests__/generateInboundEventEditSequence-test.js b/src/webview/__tests__/generateInboundEventEditSequence-test.js index e8b18eff584..87c08aa50cf 100644 --- a/src/webview/__tests__/generateInboundEventEditSequence-test.js +++ b/src/webview/__tests__/generateInboundEventEditSequence-test.js @@ -184,8 +184,8 @@ const pmMessages6 = [ }), ]; -const baseBackgroundData = { - ...eg.baseBackgroundData, +const plusBackgroundData = { + ...eg.plusBackgroundData, streams: new Map([stream1, stream2].map(s => [s.stream_id, s])), }; @@ -224,7 +224,7 @@ const baseBackgroundData = { * and `messageListElementHtml`. */ describe('messages -> piece descriptors -> content HTML is stable/sensible', () => { - const check = ({ backgroundData = baseBackgroundData, narrow, messages }) => { + const check = ({ backgroundData = plusBackgroundData, narrow, messages }) => { invariant( messages.every((message, i, allMessages) => { const prevMessage: Message | void = allMessages[i - 1]; @@ -418,7 +418,7 @@ describe('messages -> piece descriptors -> content HTML is stable/sensible', () check({ narrow: HOME_NARROW, backgroundData: { - ...eg.baseBackgroundData, + ...eg.plusBackgroundData, ownUser: stableSelfUser, allUsersById: new Map([ [singleMessageSender.user_id, singleMessageSender], @@ -488,12 +488,12 @@ describe('messages -> piece descriptors -> content HTML is stable/sensible', () Object.keys(eg.baseReduxState.flags).forEach(flag => { test(`message with flag: ${flag}`, () => { - const flags: ReadWrite = { ...eg.baseBackgroundData.flags }; + const flags: ReadWrite = { ...eg.plusBackgroundData.flags }; flags[flag] = { [baseSingleMessage.id]: true }; check({ narrow: HOME_NARROW, messages: [baseSingleMessage], - backgroundData: { ...eg.baseBackgroundData, flags }, + backgroundData: { ...eg.plusBackgroundData, flags }, }); }); }); @@ -503,11 +503,34 @@ describe('messages -> piece descriptors -> content HTML is stable/sensible', () narrow: HOME_NARROW, messages: [baseSingleMessage], backgroundData: { - ...eg.baseBackgroundData, + ...eg.plusBackgroundData, mutedUsers: Immutable.Map([[baseSingleMessage.sender_id, 1644366787]]), }, }); }); + + [ + ['none', null], + ['unicode', eg.userStatusEmojiUnicode], + ['realm', eg.userStatusEmojiRealm], + ['zulip extra', eg.userStatusEmojiZulipExtra], + ].forEach(([description, statusEmoji]) => { + test(`sender status emoji: ${description}`, () => { + check({ + narrow: HOME_NARROW, + messages: [baseSingleMessage], + backgroundData: { + ...eg.plusBackgroundData, + userStatuses: Immutable.Map([ + [ + baseSingleMessage.sender_id, + { away: false, status_text: null, status_emoji: statusEmoji }, + ], + ]), + }, + }); + }); + }); }); }); @@ -527,12 +550,12 @@ describe('getEditSequence correct for interesting changes', () => { const check = ( // TODO: Test with a variety of different things in background data { - backgroundData: oldBackgroundData = baseBackgroundData, + backgroundData: oldBackgroundData = plusBackgroundData, narrow: oldNarrow = HOME_NARROW, messages: oldMessages, }, { - backgroundData: newBackgroundData = baseBackgroundData, + backgroundData: newBackgroundData = plusBackgroundData, narrow: newNarrow = HOME_NARROW, messages: newMessages, }, @@ -779,15 +802,15 @@ describe('getEditSequence correct for interesting changes', () => { { messages: [message], backgroundData: { - ...eg.baseBackgroundData, - flags: { ...eg.baseBackgroundData.flags, starred: {} }, + ...eg.plusBackgroundData, + flags: { ...eg.plusBackgroundData.flags, starred: {} }, }, }, { messages: [message], backgroundData: { - ...eg.baseBackgroundData, - flags: { ...eg.baseBackgroundData.flags, starred: { [message.id]: true } }, + ...eg.plusBackgroundData, + flags: { ...eg.plusBackgroundData.flags, starred: { [message.id]: true } }, }, }, ); @@ -799,15 +822,15 @@ describe('getEditSequence correct for interesting changes', () => { { messages: [message], backgroundData: { - ...eg.baseBackgroundData, - flags: { ...eg.baseBackgroundData.flags, starred: { [message.id]: true } }, + ...eg.plusBackgroundData, + flags: { ...eg.plusBackgroundData.flags, starred: { [message.id]: true } }, }, }, { messages: [message], backgroundData: { - ...eg.baseBackgroundData, - flags: { ...eg.baseBackgroundData.flags, starred: {} }, + ...eg.plusBackgroundData, + flags: { ...eg.plusBackgroundData.flags, starred: {} }, }, }, ); @@ -821,12 +844,12 @@ describe('getEditSequence correct for interesting changes', () => { check( { messages: [message], - backgroundData: { ...eg.baseBackgroundData, mutedUsers: Immutable.Map() }, + backgroundData: { ...eg.plusBackgroundData, mutedUsers: Immutable.Map() }, }, { messages: [message], backgroundData: { - ...eg.baseBackgroundData, + ...eg.plusBackgroundData, mutedUsers: Immutable.Map([[message.sender_id, 1644366787]]), }, }, @@ -839,15 +862,54 @@ describe('getEditSequence correct for interesting changes', () => { { messages: [message], backgroundData: { - ...eg.baseBackgroundData, + ...eg.plusBackgroundData, mutedUsers: Immutable.Map([[message.sender_id, 1644366787]]), }, }, { messages: [message], - backgroundData: { ...eg.baseBackgroundData, mutedUsers: Immutable.Map() }, + backgroundData: { ...eg.plusBackgroundData, mutedUsers: Immutable.Map() }, }, ); }); + + describe('add/remove/change emoji status', () => { + const message = eg.streamMessage(); + const emojiStatuses = [ + ['none', null], + ['unicode', eg.userStatusEmojiUnicode], + ['realm', eg.userStatusEmojiRealm], + ['zulip extra', eg.userStatusEmojiZulipExtra], + ]; + + emojiStatuses.forEach(([statusALabel, emojiStatusA]) => { + emojiStatuses.forEach(([statusBLabel, emojiStatusB]) => { + let description = `status emoji: ${statusALabel} -> ${statusBLabel}`; + if (emojiStatusA === emojiStatusB) { + description += ' (no change)'; + } + test(description, () => { + check( + ...[emojiStatusA, emojiStatusB].map(emojiStatus => ({ + messages: [message], + backgroundData: { + ...eg.plusBackgroundData, + userStatuses: Immutable.Map([ + [ + message.sender_id, + { + away: false, + status_text: null, + status_emoji: emojiStatus, + }, + ], + ]), + }, + })), + ); + }); + }); + }); + }); }); }); diff --git a/src/webview/backgroundData.js b/src/webview/backgroundData.js index 9ee27e4591c..43e38325466 100644 --- a/src/webview/backgroundData.js +++ b/src/webview/backgroundData.js @@ -33,6 +33,8 @@ import { } from '../selectors'; import { getMute } from '../mute/muteModel'; import { getUnread } from '../unread/unreadModel'; +import { getUserStatuses } from '../user-statuses/userStatusesModel'; +import { type UserStatusesState } from '../user-statuses/userStatusesCore'; /** * Data about the user, the realm, and all known messages. @@ -60,6 +62,7 @@ export type BackgroundData = $ReadOnly<{| theme: ThemeName, twentyFourHourTime: boolean, userSettingStreamNotification: boolean, + userStatuses: UserStatusesState, zulipFeatureLevel: number, |}>; @@ -88,5 +91,6 @@ export const getBackgroundData = ( theme: globalSettings.theme, twentyFourHourTime: getRealm(state).twentyFourHourTime, userSettingStreamNotification: getSettings(state).streamNotification, + userStatuses: getUserStatuses(state), zulipFeatureLevel: getZulipFeatureLevel(state), }); diff --git a/src/webview/generateInboundEventEditSequence.js b/src/webview/generateInboundEventEditSequence.js index c88658d2525..c48576571d6 100644 --- a/src/webview/generateInboundEventEditSequence.js +++ b/src/webview/generateInboundEventEditSequence.js @@ -7,6 +7,7 @@ import type { MessageListElement, GetText } from '../types'; import { ensureUnreachable } from '../generics'; import type { BackgroundData } from './backgroundData'; import messageListElementHtml from './html/messageListElementHtml'; +import { getUserStatusFromModel } from '../user-statuses/userStatusesCore'; const NODE_ENV = process.env.NODE_ENV; @@ -94,6 +95,10 @@ function doElementsDifferInterestingly( ) || oldBackgroundData.mutedUsers.get(oldElement.message.sender_id) !== newBackgroundData.mutedUsers.get(newElement.message.sender_id) + || getUserStatusFromModel(oldBackgroundData.userStatuses, oldElement.message.sender_id) + .status_emoji + !== getUserStatusFromModel(newBackgroundData.userStatuses, newElement.message.sender_id) + .status_emoji ); } default: { diff --git a/src/webview/html/message.js b/src/webview/html/message.js index 538bf89c516..3d581980d7f 100644 --- a/src/webview/html/message.js +++ b/src/webview/html/message.js @@ -19,6 +19,7 @@ import type { ImageEmojiType, UserId, WidgetData, + UserStatus, } from '../../types'; import type { BackgroundData } from '../backgroundData'; import { shortTime } from '../../utils/date'; @@ -26,6 +27,7 @@ import aggregateReactions from '../../reactions/aggregateReactions'; import { codeToEmojiMap } from '../../emoji/data'; import processAlertWords from './processAlertWords'; import * as logging from '../../utils/logging'; +import { getUserStatusFromModel } from '../../user-statuses/userStatusesCore'; const messageTagsAsHtml = (isStarred: boolean, timeEdited: number | void): string => { const pieces = []; @@ -180,6 +182,21 @@ $!${message.content} export const flagsStateToStringList = (flags: FlagsState, id: number): $ReadOnlyArray => Object.keys(flags).filter(key => flags[key][id]); +const senderEmojiStatus = ( + emoji: $PropertyType, + allImageEmojiById: $ReadOnly<{| [id: string]: ImageEmojiType |}>, +): string => + emoji + ? allImageEmojiById[emoji.emoji_code] + ? template`\ +` + : template`\ +$!${codeToEmojiMap[emoji.emoji_code]}` + : ''; + /** * The HTML string for a message-list element of the "message" type. * @@ -236,8 +253,11 @@ $!${divOpenHtml} .toString(); const subheaderHtml = template`\
-
- ${sender_full_name} +
+ ${sender_full_name}$!${senderEmojiStatus( + getUserStatusFromModel(backgroundData.userStatuses, sender_id).status_emoji, + backgroundData.allImageEmojiById, + )}
${messageTime}
`; diff --git a/src/webview/js/generatedEs3.js b/src/webview/js/generatedEs3.js index ba14c976bd1..e4daf1ce6e5 100644 --- a/src/webview/js/generatedEs3.js +++ b/src/webview/js/generatedEs3.js @@ -847,7 +847,7 @@ var compiledWebviewJs = (function (exports) { return; } - if (target.matches('.avatar-img') || target.matches('.username')) { + if (target.matches('.avatar-img') || target.matches('.name-and-status-emoji')) { sendMessage({ type: 'request-user-profile', fromUserId: makeUserId(requireNumericAttribute(target, 'data-sender-id')) diff --git a/src/webview/js/js.js b/src/webview/js/js.js index 78c0923a401..b0cd9088acb 100644 --- a/src/webview/js/js.js +++ b/src/webview/js/js.js @@ -824,7 +824,7 @@ documentBody.addEventListener('click', (e: MouseEvent) => { return; } - if (target.matches('.avatar-img') || target.matches('.username')) { + if (target.matches('.avatar-img') || target.matches('.name-and-status-emoji')) { sendMessage({ type: 'request-user-profile', fromUserId: makeUserId(requireNumericAttribute(target, 'data-sender-id')), diff --git a/src/webview/static/base.css b/src/webview/static/base.css index 49646ba032f..58d7d122e09 100644 --- a/src/webview/static/base.css +++ b/src/webview/static/base.css @@ -338,19 +338,28 @@ body { border-radius: 3px; } -/* The "subheader" showing sender and timestamp. */ +/* The "subheader" showing sender, emoji status, and timestamp. */ .subheader { display: flex; flex-direction: row; justify-content: space-between; margin-bottom: 6px; } -.username { +.name-and-status-emoji { + display: flex; + align-items: center; font-weight: bold; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } +.status-emoji { + height: 1.4rem; + + /* Different from web, which has 2px. More is mysteriously needed here to + get the same effective spacing. */ + margin-left: 4px; +} .static-timestamp { color: hsl(0, 0%, 60%); font-size: 0.9rem;