From 3c790ebff41f0999507dda1a19bff64b1fcb34f9 Mon Sep 17 00:00:00 2001 From: Lim Chee Aun Date: Mon, 30 Oct 2023 23:50:15 +0800 Subject: [PATCH] Better segmentation of languages with
--- src/components/compose.jsx | 65 +++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 26 deletions(-) diff --git a/src/components/compose.jsx b/src/components/compose.jsx index 5b64608..e504c1b 100644 --- a/src/components/compose.jsx +++ b/src/components/compose.jsx @@ -522,6 +522,34 @@ function Compose({ const [showEmoji2Picker, setShowEmoji2Picker] = useState(false); + const [topSupportedLanguages, restSupportedLanguages] = useMemo(() => { + const topLanguages = []; + const restLanguages = []; + const { contentTranslationHideLanguages = [] } = states.settings; + supportedLanguages.forEach((l) => { + const [code] = l; + if ( + code === language || + code === prevLanguage.current || + code === DEFAULT_LANG || + contentTranslationHideLanguages.includes(code) + ) { + topLanguages.push(l); + } else { + restLanguages.push(l); + } + }); + topLanguages.sort(([codeA, commonA], [codeB, commonB]) => { + if (codeA === language) return -1; + if (codeB === language) return 1; + return commonA.localeCompare(commonB); + }); + restLanguages.sort(([codeA, commonA], [codeB, commonB]) => + commonA.localeCompare(commonB), + ); + return [topLanguages, restLanguages]; + }, [language]); + return (
@@ -1126,32 +1154,17 @@ function Compose({ }} disabled={uiState === 'loading'} > - {supportedLanguages - .sort(([codeA, commonA], [codeB, commonB]) => { - const { contentTranslationHideLanguages = [] } = - states.settings; - // Sort codes that same as language, prevLanguage, DEFAULT_LANGUAGE and all the ones in states.settings.contentTranslationHideLanguages, to the top - if ( - codeA === language || - codeA === prevLanguage || - codeA === DEFAULT_LANG || - contentTranslationHideLanguages?.includes(codeA) - ) - return -1; - if ( - codeB === language || - codeB === prevLanguage || - codeB === DEFAULT_LANG || - contentTranslationHideLanguages?.includes(codeB) - ) - return 1; - return commonA.localeCompare(commonB); - }) - .map(([code, common, native]) => ( - - ))} + {topSupportedLanguages.map(([code, common, native]) => ( + + ))} +
+ {restSupportedLanguages.map(([code, common, native]) => ( + + ))} {' '}