diff options
author | Eric Bailey <git@esb.lol> | 2025-03-28 17:01:21 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-03-28 17:01:21 -0500 |
commit | 7c124a870585758336e8d274ff60d3973c324047 (patch) | |
tree | 5961f2e153db181cf57974d79f01eadc66866660 /src/view/com/composer/text-input/web/useWebPreloadEmoji.ts | |
parent | 78220e29d95db8b7f33cce6c240bc64d1540f5fe (diff) | |
download | voidsky-7c124a870585758336e8d274ff60d3973c324047.tar.zst |
Preload emoji picker data for reactions on web (#8079)
* Preload emoji picker data for reactions on web * Sort imports
Diffstat (limited to 'src/view/com/composer/text-input/web/useWebPreloadEmoji.ts')
-rw-r--r-- | src/view/com/composer/text-input/web/useWebPreloadEmoji.ts | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/view/com/composer/text-input/web/useWebPreloadEmoji.ts b/src/view/com/composer/text-input/web/useWebPreloadEmoji.ts new file mode 100644 index 000000000..08f18d94b --- /dev/null +++ b/src/view/com/composer/text-input/web/useWebPreloadEmoji.ts @@ -0,0 +1,24 @@ +import React from 'react' +import {init} from 'emoji-mart' + +/** + * Only load the emoji picker data once per page load. + */ +let loadRequested = false + +/** + * Preload the emoji picker data to prevent flash. + * {@link https://github.com/missive/emoji-mart/blob/16978d04a766eec6455e2e8bb21cd8dc0b3c7436/README.md?plain=1#L194} + */ +export function useWebPreloadEmoji({immediate}: {immediate?: boolean} = {}) { + const preload = React.useCallback(async () => { + if (loadRequested) return + loadRequested = true + try { + const data = (await import('./EmojiPickerData.json')).default + init({data}) + } catch (e) {} + }, []) + if (immediate) preload() + return preload +} |