2
0

Emoji: Picker native rendering (#36454)

This commit is contained in:
Echo
2025-10-13 17:29:39 +02:00
committed by GitHub
parent 33f739da44
commit edd7fd9872
2 changed files with 14 additions and 4 deletions

View File

@@ -2,9 +2,12 @@ import type { EmojiProps, PickerProps } from 'emoji-mart';
import EmojiRaw from 'emoji-mart/dist-es/components/emoji/nimble-emoji'; import EmojiRaw from 'emoji-mart/dist-es/components/emoji/nimble-emoji';
import PickerRaw from 'emoji-mart/dist-es/components/picker/nimble-picker'; import PickerRaw from 'emoji-mart/dist-es/components/picker/nimble-picker';
import { isModernEmojiEnabled } from '@/mastodon/utils/environment';
import { assetHost } from 'mastodon/utils/config'; import { assetHost } from 'mastodon/utils/config';
import { EMOJI_MODE_NATIVE } from './constants';
import EmojiData from './emoji_data.json'; import EmojiData from './emoji_data.json';
import { useEmojiAppState } from './hooks';
const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_15_1.png`; const backgroundImageFnDefault = () => `${assetHost}/emoji/sheet_15_1.png`;
@@ -16,6 +19,7 @@ const Emoji = ({
backgroundImageFn = backgroundImageFnDefault, backgroundImageFn = backgroundImageFnDefault,
...props ...props
}: EmojiProps) => { }: EmojiProps) => {
const { mode } = useEmojiAppState();
return ( return (
<EmojiRaw <EmojiRaw
data={EmojiData} data={EmojiData}
@@ -23,6 +27,7 @@ const Emoji = ({
sheetSize={sheetSize} sheetSize={sheetSize}
sheetColumns={sheetColumns} sheetColumns={sheetColumns}
sheetRows={sheetRows} sheetRows={sheetRows}
native={mode === EMOJI_MODE_NATIVE && isModernEmojiEnabled()}
backgroundImageFn={backgroundImageFn} backgroundImageFn={backgroundImageFn}
{...props} {...props}
/> />
@@ -37,6 +42,7 @@ const Picker = ({
backgroundImageFn = backgroundImageFnDefault, backgroundImageFn = backgroundImageFnDefault,
...props ...props
}: PickerProps) => { }: PickerProps) => {
const { mode } = useEmojiAppState();
return ( return (
<PickerRaw <PickerRaw
data={EmojiData} data={EmojiData}
@@ -45,6 +51,7 @@ const Picker = ({
sheetColumns={sheetColumns} sheetColumns={sheetColumns}
sheetRows={sheetRows} sheetRows={sheetRows}
backgroundImageFn={backgroundImageFn} backgroundImageFn={backgroundImageFn}
native={mode === EMOJI_MODE_NATIVE && isModernEmojiEnabled()}
{...props} {...props}
/> />
); );

View File

@@ -1,6 +1,6 @@
import { useCallback, useLayoutEffect, useMemo, useState } from 'react'; import { useCallback, useLayoutEffect, useMemo, useState } from 'react';
import { useAppSelector } from '@/mastodon/store'; import { createAppSelector, useAppSelector } from '@/mastodon/store';
import { isModernEmojiEnabled } from '@/mastodon/utils/environment'; import { isModernEmojiEnabled } from '@/mastodon/utils/environment';
import { toSupportedLocale } from './locale'; import { toSupportedLocale } from './locale';
@@ -58,13 +58,16 @@ export function useEmojify({
return emojifiedText; return emojifiedText;
} }
const modeSelector = createAppSelector(
[(state) => state.meta.get('emoji_style') as string],
(emoji_style) => determineEmojiMode(emoji_style),
);
export function useEmojiAppState(): EmojiAppState { export function useEmojiAppState(): EmojiAppState {
const locale = useAppSelector((state) => const locale = useAppSelector((state) =>
toSupportedLocale(state.meta.get('locale') as string), toSupportedLocale(state.meta.get('locale') as string),
); );
const mode = useAppSelector((state) => const mode = useAppSelector(modeSelector);
determineEmojiMode(state.meta.get('emoji_style') as string),
);
return { return {
currentLocale: locale, currentLocale: locale,