diff --git a/packages/client/src/components/NavMenu/sub-components/header-unauth.js b/packages/client/src/components/NavMenu/sub-components/header-unauth.js index 807bfa8c57..61c69e37f6 100644 --- a/packages/client/src/components/NavMenu/sub-components/header-unauth.js +++ b/packages/client/src/components/NavMenu/sub-components/header-unauth.js @@ -99,9 +99,11 @@ const HeaderUnAuth = ({ const currentCultureName = i18n.language; const onSelect = (culture) => { - i18n.changeLanguage(culture); + const { key } = culture; - setCookie(LANGUAGE, culture, { + i18n.changeLanguage(key); + + setCookie(LANGUAGE, key, { "max-age": COOKIE_EXPIRATION_YEAR, }); diff --git a/packages/client/src/pages/Confirm/sub-components/createUser.js b/packages/client/src/pages/Confirm/sub-components/createUser.js index d59243b785..036797949a 100644 --- a/packages/client/src/pages/Confirm/sub-components/createUser.js +++ b/packages/client/src/pages/Confirm/sub-components/createUser.js @@ -478,9 +478,11 @@ const CreateUserForm = (props) => { : {}; const onSelect = (culture) => { - i18n.changeLanguage(culture); + const { key } = culture; - setCookie(LANGUAGE, culture, { + i18n.changeLanguage(key); + + setCookie(LANGUAGE, key, { "max-age": COOKIE_EXPIRATION_YEAR, }); diff --git a/packages/client/src/pages/FormGallery/Filter/LanguageFilter/index.js b/packages/client/src/pages/FormGallery/Filter/LanguageFilter/index.js index aa4ec8b717..83c0645142 100644 --- a/packages/client/src/pages/FormGallery/Filter/LanguageFilter/index.js +++ b/packages/client/src/pages/FormGallery/Filter/LanguageFilter/index.js @@ -31,10 +31,28 @@ import { inject, observer } from "mobx-react"; import { RectangleSkeleton } from "@docspace/shared/skeletons"; import { LanguageCombobox } from "@docspace/shared/components/language-combobox"; + +const keyedCollections = { + ar: "ar-SA", + en: "en-US", + el: "el-GR", + hy: "hy-AM", + ko: "ko-KR", + lo: "lo-LA", + pt: "pt-BR", + uk: "uk-UA", + ja: "ja-JP", + zh: "zh-CN", +}; + +const convertToCulture = (key) => { + return keyedCollections[key] ?? key; +}; + +const getOformLocaleByIndex = (index, array) => { + return array[index]; +}; const LanguageFilter = ({ - t, - oformsFilter, - defaultOformLocale, oformLocales, filterOformsByLocale, filterOformsByLocaleIsLoading, @@ -42,9 +60,14 @@ const LanguageFilter = ({ categoryFilterLoaded, languageFilterLoaded, oformFilesLoaded, + oformsCurrentLocal, }) => { + const convertedLocales = oformLocales.map((item) => convertToCulture(item)); + const onFilterByLocale = async (newLocale) => { - await filterOformsByLocale(newLocale); + const key = getOformLocaleByIndex(newLocale.index, oformLocales); + + await filterOformsByLocale(key); const [sectionScroll] = document.getElementsByClassName("section-scroll"); sectionScroll.scrollTop = 0; @@ -62,18 +85,16 @@ const LanguageFilter = ({ return ( ); }; export default inject(({ oformsStore }) => ({ - oformsFilter: oformsStore.oformsFilter, - defaultOformLocale: oformsStore.defaultOformLocale, oformLocales: oformsStore.oformLocales, filterOformsByLocale: oformsStore.filterOformsByLocale, filterOformsByLocaleIsLoading: oformsStore.filterOformsByLocaleIsLoading, @@ -81,4 +102,5 @@ export default inject(({ oformsStore }) => ({ categoryFilterLoaded: oformsStore.categoryFilterLoaded, languageFilterLoaded: oformsStore.languageFilterLoaded, oformFilesLoaded: oformsStore.oformFilesLoaded, + oformsCurrentLocal: oformsStore.oformsCurrentLocal, }))(withTranslation(["Common"])(observer(LanguageFilter))); diff --git a/packages/client/src/store/OformsStore.js b/packages/client/src/store/OformsStore.js index da7a109a99..7b6bf6256d 100644 --- a/packages/client/src/store/OformsStore.js +++ b/packages/client/src/store/OformsStore.js @@ -41,14 +41,10 @@ import { } from "@docspace/shared/api/oforms"; import { toastr } from "@docspace/shared/components/toast"; -import { - convertToCulture, - convertToLanguage, -} from "@docspace/shared/utils/common"; +import { convertToLanguage } from "@docspace/shared/utils/common"; import { LANGUAGE } from "@docspace/shared/constants"; import { getCookie } from "@docspace/shared/utils/cookie"; import { combineUrl } from "@docspace/shared/utils/combineUrl"; -import { flagsIcons } from "@docspace/shared/utils/image-flags"; const myDocumentsFolderId = 2; @@ -115,11 +111,7 @@ class OformsStore { this.infoPanelStore.setInfoPanelSelection(gallerySelected); }; - setOformLocales = (oformLocales) => { - const convertedLocales = oformLocales.map((item) => convertToCulture(item)); - - this.oformLocales = convertedLocales; - }; + setOformLocales = (oformLocales) => (this.oformLocales = oformLocales); setFilterOformsByLocaleIsLoading = (filterOformsByLocaleIsLoading) => { this.filterOformsByLocaleIsLoading = filterOformsByLocaleIsLoading; @@ -385,6 +377,10 @@ class OformsStore { get hasMoreForms() { return this.oformFiles.length < this.oformsFilterTotal; } + + get oformsCurrentLocal() { + return this.oformsFilter.locale; + } } export default OformsStore; diff --git a/packages/login/src/client/components/Login.tsx b/packages/login/src/client/components/Login.tsx index d5d9882f9c..66921d5a32 100644 --- a/packages/login/src/client/components/Login.tsx +++ b/packages/login/src/client/components/Login.tsx @@ -146,10 +146,12 @@ const Login: React.FC = ({ cookieSettingsEnabled: false, }; - const onLanguageSelect = (culture: string) => { - i18n.changeLanguage(culture); + const onLanguageSelect = (culture: { key: string }) => { + const { key } = culture; - setCookie(LANGUAGE, culture, { + i18n.changeLanguage(key); + + setCookie(LANGUAGE, key, { "max-age": COOKIE_EXPIRATION_YEAR, }); }; diff --git a/packages/shared/components/language-combobox/LanguageCombobox.tsx b/packages/shared/components/language-combobox/LanguageCombobox.tsx index d28752d0fe..41d7a1f548 100644 --- a/packages/shared/components/language-combobox/LanguageCombobox.tsx +++ b/packages/shared/components/language-combobox/LanguageCombobox.tsx @@ -57,7 +57,7 @@ const LanguageCombobox = (props: ComboboxProps) => { const onSelect = (culture: TCulture) => { if (culture.key === selectedCulture) return; - onSelectLanguage(culture.key); + onSelectLanguage(culture); }; if (!currentCulture) return <>; diff --git a/packages/shared/components/language-combobox/LanguageCombobox.types.ts b/packages/shared/components/language-combobox/LanguageCombobox.types.ts index 77b3451bab..a1844b8dcb 100644 --- a/packages/shared/components/language-combobox/LanguageCombobox.types.ts +++ b/packages/shared/components/language-combobox/LanguageCombobox.types.ts @@ -28,13 +28,14 @@ export type TCulture = { key: string; icon: string; label?: string; + index?: number; }; export type TCultures = TCulture[]; export interface ComboboxProps { selectedCulture: string; cultures: string[]; - onSelectLanguage: (culture: string) => void; + onSelectLanguage: (culture: TCulture) => void; /** Accepts id */ id?: string; /** Accepts class */ diff --git a/packages/shared/utils/common.ts b/packages/shared/utils/common.ts index 8c2c6d3185..099b7ea922 100644 --- a/packages/shared/utils/common.ts +++ b/packages/shared/utils/common.ts @@ -481,33 +481,6 @@ export function convertLanguage(key: string) { } } -export function convertToCulture(key: string) { - switch (key) { - case "ar": - return "ar-SA"; - case "en": - return "en-US"; - case "el": - return "el-GR"; - case "hy": - return "hy-AM"; - case "ko": - return "ko-KR"; - case "lo": - return "lo-LA"; - case "pt": - return "pt-BR"; - case "uk": - return "uk-UA"; - case "ja": - return "ja-JP"; - case "zh": - return "zh-CN"; - default: - return key; - } -} - export function convertToLanguage(key: string) { if (!key) return; @@ -1052,20 +1025,22 @@ export const mapCulturesToArray = ( ) => { if (i18nArg) { const t = i18nArg.getFixedT(null, "Common"); - return culturesArg.map((culture) => { + return culturesArg.map((culture, index) => { return { key: culture, label: t(`Culture_${culture}`), icon: flagsIcons?.get(`${culture}.react.svg`), ...(isBetaBadge && { isBeta: isBetaLanguage(culture) }), + index, }; }); } - return culturesArg.map((culture) => { + return culturesArg.map((culture, index) => { return { key: culture, icon: flagsIcons?.get(`${culture}.react.svg`), + index, }; }); };