Skip to content

Commit 32392a9

Browse files
committed
Support emojis added after initial mount
1 parent 3d4799d commit 32392a9

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "4.5.8",
2+
"version": "4.5.9",
33
"license": "MIT",
44
"main": "dist/index.js",
55
"typings": "dist/index.d.ts",

src/EmojiPickerReact.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ function EmojiPicker(props: PickerProps) {
2626

2727
// eslint-disable-next-line complexity
2828
export default React.memo(EmojiPicker, (prev, next) => {
29+
const prevCustomEmojis = prev.customEmojis ?? [];
30+
const nextCustomEmojis = next.customEmojis ?? [];
2931
return (
3032
prev.emojiVersion === next.emojiVersion &&
3133
prev.searchPlaceHolder === next.searchPlaceHolder &&
@@ -40,6 +42,7 @@ export default React.memo(EmojiPicker, (prev, next) => {
4042
prev.height === next.height &&
4143
prev.width === next.width &&
4244
prev.searchDisabled === next.searchDisabled &&
43-
prev.skinTonePickerLocation === next.skinTonePickerLocation
45+
prev.skinTonePickerLocation === next.skinTonePickerLocation &&
46+
prevCustomEmojis.length === nextCustomEmojis.length
4447
);
4548
});

src/components/context/PickerConfigContext.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,31 @@ const ConfigContext = React.createContext<PickerConfigInternal>(
1717
);
1818

1919
export function PickerConfigProvider({ children, ...config }: Props) {
20-
const [mergedConfig] = React.useState(() => mergeConfig(config));
20+
const mergedConfig = useSetConfig(config);
21+
2122
return (
2223
<ConfigContext.Provider value={mergedConfig}>
2324
{children}
2425
</ConfigContext.Provider>
2526
);
2627
}
2728

29+
export function useSetConfig(config: PickerConfig) {
30+
const [mergedConfig, setMergedConfig] = React.useState(() =>
31+
mergeConfig(config)
32+
);
33+
34+
React.useEffect(() => {
35+
if (config.customEmojis?.length !== mergedConfig.customEmojis?.length) {
36+
setMergedConfig(mergeConfig(config));
37+
}
38+
// not gonna...
39+
// eslint-disable-next-line react-hooks/exhaustive-deps
40+
}, [config.customEmojis?.length]);
41+
42+
return mergedConfig;
43+
}
44+
2845
export function usePickerConfig() {
2946
return React.useContext(ConfigContext);
3047
}

stories/picker.stories.tsx

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Meta } from '@storybook/react';
2-
import React, { useState } from 'react';
2+
import React, { useEffect, useState } from 'react';
33

44
import EmojiPicker, {
55
Emoji,
@@ -44,9 +44,21 @@ export const AutoTheme = (args: Props) => (
4444
);
4545

4646
export const CustomEmojis = (args: Props) => (
47-
<Template {...args} customEmojis={ customEmojis} />
47+
<Template {...args} customEmojis={customEmojis} />
4848
);
4949

50+
export const CustomEmojisDeffered = (args: Props) => {
51+
const [custom, setCustomEmojis] = useState<any>(undefined);
52+
53+
useEffect(() => {
54+
setTimeout(() => {
55+
setCustomEmojis(customEmojis);
56+
}, 2000);
57+
}, []);
58+
59+
return <Template {...args} customEmojis={custom} />;
60+
};
61+
5062
export const SearchDisabled = (args: Props) => (
5163
<Template {...args} searchDisabled />
5264
);

0 commit comments

Comments
 (0)