Skip to content

Commit 0eddc09

Browse files
authored
Store reacji skin tone locally (#23632)
* Store reacji skin tone locally * cleanup * comment
1 parent 80b47e7 commit 0eddc09

9 files changed

Lines changed: 145 additions & 34 deletions

File tree

go/protocol/keybase1/common.go

Lines changed: 34 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protocol/avdl/keybase1/common.avdl

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
@namespace("keybase.1")
32
protocol Common {
43

@@ -404,7 +403,15 @@ protocol Common {
404403
}
405404

406405
// Primarily used in chat but defined here to avoid a circular import
407-
@typedef("int") record ReacjiSkinTone {}
406+
enum ReacjiSkinTone {
407+
NONE_0,
408+
SKINTONE1_1,
409+
SKINTONE2_2,
410+
SKINTONE3_3,
411+
SKINTONE4_4,
412+
SKINTONE5_5
413+
}
414+
408415
record UserReacjis {
409416
// sorted array of frequently used reacjis
410417
array<UserReacji> topReacjis;

protocol/bin/enabled-calls.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
"chat.1.local.addEmojis": {"promise": true},
9494
"chat.1.local.addEmojiAlias": {"promise": true},
9595
"chat.1.local.removeEmoji": {"promise": true},
96+
"chat.1.local.putReacjiSkinTone": {"promise": true},
9697
"keybase.1.Proxy.getProxyData": {"promise": true},
9798
"keybase.1.Proxy.setProxyData": {"promise": true},
9899
"keybase.1.SimpleFS.simpleFSCancel": {"promise": true},

protocol/json/keybase1/common.json

Lines changed: 9 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

shared/chat/conversation/messages/react-button/emoji-picker/container.tsx

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import debounce from 'lodash/debounce'
1515
import SkinTonePicker from './skin-tone-picker'
1616
import EmojiPicker, {getSkinToneModifierStrIfAvailable} from '.'
1717
import {emojiDataToRenderableEmoji, renderEmoji, EmojiData, RenderableEmoji} from '../../../../../util/emoji'
18+
import useRPC from '../../../../../util/use-rpc'
19+
import * as RPCChatGen from '../../../../../constants/types/rpc-chat-gen'
1820

1921
type Props = {
2022
conversationIDKey: Types.ConversationIDKey
@@ -57,17 +59,33 @@ const useReacji = ({conversationIDKey, onDidPick, onPickAction, onPickAddToMessa
5759
}
5860

5961
let lastSetSkinTone: undefined | Types.EmojiSkinTone = undefined
62+
6063
// This can only be used in one place at a time for now since when it's changed
6164
// it doesn't cause other hook instances to update.
6265
const useSkinTone = () => {
63-
const [currentSkinTone, _setSkinTone] = React.useState(lastSetSkinTone)
64-
const setSkinTone = React.useCallback(
65-
(skinTone: undefined | Types.EmojiSkinTone) => {
66-
lastSetSkinTone = skinTone
67-
_setSkinTone(skinTone)
68-
},
69-
[_setSkinTone]
66+
lastSetSkinTone = Types.EmojiSkinToneFromRPC(
67+
Container.useSelector(state => state.chat2.userReacjis.skinTone)
7068
)
69+
const [currentSkinTone, _setSkinTone] = React.useState(lastSetSkinTone)
70+
// NOTE: The store does not update skin tones after put so we track the
71+
// module variable `lastSetSkinTone`
72+
const rpc = useRPC(RPCChatGen.localPutReacjiSkinToneRpcPromise)
73+
const setSkinTone = (emojiSkinTone: undefined | Types.EmojiSkinTone) => {
74+
rpc(
75+
[
76+
{
77+
skinTone: Types.EmojiSkinToneToRPC(emojiSkinTone),
78+
},
79+
],
80+
_ => {
81+
lastSetSkinTone = emojiSkinTone
82+
_setSkinTone(emojiSkinTone)
83+
},
84+
err => {
85+
throw err
86+
}
87+
)
88+
}
7189
return {currentSkinTone, setSkinTone}
7290
}
7391
const useCustomReacji = (conversationIDKey: Types.ConversationIDKey, onlyInTeam: boolean | undefined) => {

shared/chat/conversation/messages/react-button/emoji-picker/skin-tone-picker.tsx

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,6 @@ const skinTones: Array<undefined | Types.EmojiSkinTone> = [
1111
'1F3FE',
1212
'1F3FF',
1313
]
14-
const skinToneToDotColor = (skinTone: undefined | Types.EmojiSkinTone): string => {
15-
switch (skinTone) {
16-
case undefined:
17-
return '#ffc93a'
18-
case '1F3FB':
19-
return '#fadcbc'
20-
case '1F3FC':
21-
return '#e1bb95'
22-
case '1F3FD':
23-
return '#bf9068'
24-
case '1F3FE':
25-
return '#9b643d'
26-
case '1F3FF':
27-
return '#5a4539'
28-
}
29-
}
3014

3115
const circle = (skinTone: undefined | Types.EmojiSkinTone, isExpanded: boolean, outerCircle: boolean) => {
3216
return (
@@ -36,7 +20,7 @@ const circle = (skinTone: undefined | Types.EmojiSkinTone, isExpanded: boolean,
3620
style={Styles.collapseStyles([
3721
!isExpanded && styles.circleCollapsed,
3822
isExpanded && styles.circleExpanded,
39-
{backgroundColor: skinToneToDotColor(skinTone)},
23+
{backgroundColor: Types.SkinToneToDotColor(skinTone)},
4024
])}
4125
></Kb.Box>
4226
</Kb.Box>

shared/constants/types/chat2/index.tsx

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ export type CommandStatusInfo = {
119119

120120
export type UserReacjis = {
121121
topReacjis: Array<RPCTypes.UserReacji>
122-
skinTone: number
122+
skinTone: RPCTypes.ReacjiSkinTone
123123
}
124124

125125
export type Coordinate = {
@@ -183,6 +183,57 @@ export type ParticipantInfo = {
183183
// Corresponds to skinTones in emoji-datasource.
184184
export type EmojiSkinTone = '1F3FB' | '1F3FC' | '1F3FD' | '1F3FE' | '1F3FF'
185185

186+
export const EmojiSkinToneToRPC = (emojiSkinTone: undefined | EmojiSkinTone): RPCTypes.ReacjiSkinTone => {
187+
switch (emojiSkinTone) {
188+
case undefined:
189+
return RPCTypes.ReacjiSkinTone.none
190+
case '1F3FB':
191+
return RPCTypes.ReacjiSkinTone.skintone1
192+
case '1F3FC':
193+
return RPCTypes.ReacjiSkinTone.skintone2
194+
case '1F3FD':
195+
return RPCTypes.ReacjiSkinTone.skintone3
196+
case '1F3FE':
197+
return RPCTypes.ReacjiSkinTone.skintone4
198+
case '1F3FF':
199+
return RPCTypes.ReacjiSkinTone.skintone5
200+
}
201+
}
202+
203+
export const EmojiSkinToneFromRPC = (reacjiSkinTone: RPCTypes.ReacjiSkinTone): undefined | EmojiSkinTone => {
204+
switch (reacjiSkinTone) {
205+
case RPCTypes.ReacjiSkinTone.none:
206+
return undefined
207+
case RPCTypes.ReacjiSkinTone.skintone1:
208+
return '1F3FB'
209+
case RPCTypes.ReacjiSkinTone.skintone2:
210+
return '1F3FC'
211+
case RPCTypes.ReacjiSkinTone.skintone3:
212+
return '1F3FD'
213+
case RPCTypes.ReacjiSkinTone.skintone4:
214+
return '1F3FE'
215+
case RPCTypes.ReacjiSkinTone.skintone5:
216+
return '1F3FF'
217+
}
218+
}
219+
220+
export const SkinToneToDotColor = (skinTone: undefined | EmojiSkinTone): string => {
221+
switch (skinTone) {
222+
case undefined:
223+
return '#ffc93a'
224+
case '1F3FB':
225+
return '#fadcbc'
226+
case '1F3FC':
227+
return '#e1bb95'
228+
case '1F3FD':
229+
return '#bf9068'
230+
case '1F3FE':
231+
return '#9b643d'
232+
case '1F3FF':
233+
return '#5a4539'
234+
}
235+
}
236+
186237
export type State = {
187238
readonly accountsInfoMap: Map<
188239
Common.ConversationIDKey,

shared/constants/types/rpc-chat-gen.tsx

Lines changed: 5 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

shared/constants/types/rpc-gen.tsx

Lines changed: 9 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)