From e7a528a88245d0911b2601a30d76466e3c183f47 Mon Sep 17 00:00:00 2001 From: "producta-ai[bot]" <166633092+producta-ai[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 14:50:02 +0000 Subject: [PATCH] refactor: convert JavaScript files to TypeScript with type annotations --- packages/base-shell/src/components/index.ts | 2 + packages/base-shell/src/providers/index.ts | 7 ++ packages/base-shell/src/utils/config.ts | 11 +++ packages/base-shell/src/utils/index.ts | 2 + packages/base-shell/src/utils/locale.ts | 76 +++++++++++++++++++++ 5 files changed, 98 insertions(+) create mode 100644 packages/base-shell/src/components/index.ts create mode 100644 packages/base-shell/src/providers/index.ts create mode 100644 packages/base-shell/src/utils/config.ts create mode 100644 packages/base-shell/src/utils/index.ts create mode 100644 packages/base-shell/src/utils/locale.ts diff --git a/packages/base-shell/src/components/index.ts b/packages/base-shell/src/components/index.ts new file mode 100644 index 000000000..a2595439b --- /dev/null +++ b/packages/base-shell/src/components/index.ts @@ -0,0 +1,2 @@ +export { AuthorizedRoute } from "./AuthorizedRoute"; +export { UnauthorizedRoute } from "./UnauthorizedRoute"; diff --git a/packages/base-shell/src/providers/index.ts b/packages/base-shell/src/providers/index.ts new file mode 100644 index 000000000..01e01be5c --- /dev/null +++ b/packages/base-shell/src/providers/index.ts @@ -0,0 +1,7 @@ +export * from "./Update"; +export * from "./SimpleValues"; +export * from "./Online"; +export * from "./Locale"; +export * from "./Config"; +export * from "./Auth"; +export * from "./AddToHomeScreen"; diff --git a/packages/base-shell/src/utils/config.ts b/packages/base-shell/src/utils/config.ts new file mode 100644 index 000000000..faa48414c --- /dev/null +++ b/packages/base-shell/src/utils/config.ts @@ -0,0 +1,11 @@ +export const merge = (obj1: Record, obj2: Record): Record => { + let temp = { ...obj1, ...obj2 }; + + Object.keys(temp).forEach((key) => { + if (typeof temp[key] === "object" && !(temp[key] instanceof Array)) { + temp[key] = { ...obj1[key], ...obj2[key] }; + } + }); + + return temp; +}; diff --git a/packages/base-shell/src/utils/index.ts b/packages/base-shell/src/utils/index.ts new file mode 100644 index 000000000..ef8e0ed5d --- /dev/null +++ b/packages/base-shell/src/utils/index.ts @@ -0,0 +1,2 @@ +export { merge } from "./config"; +export * from "./locale"; diff --git a/packages/base-shell/src/utils/locale.ts b/packages/base-shell/src/utils/locale.ts new file mode 100644 index 000000000..5122aff58 --- /dev/null +++ b/packages/base-shell/src/utils/locale.ts @@ -0,0 +1,76 @@ +//import areIntlLocalesSupported from 'intl-locales-supported' +//import intl from 'intl' +import { defineMessages } from 'react-intl' + +/* +const loadLocalePolyfill = (locale) => { + // START: Intl polyfill + // Required for working on Safari + // Code from here: https://formatjs.io/guides/runtime-environments/ + let localesMyAppSupports = [locale] + + if (global.Intl) { + // Determine if the built-in `Intl` has the locale data we need. + if (!areIntlLocalesSupported(localesMyAppSupports)) { + // `Intl` exists, but it doesn't have the data we need, so load the + // polyfill and replace the constructors with need with the polyfill's. + let IntlPolyfill = intl + Intl.NumberFormat = IntlPolyfill.NumberFormat + Intl.DateTimeFormat = IntlPolyfill.DateTimeFormat + } + } else { + // No `Intl`, so use and load the polyfill. + global.Intl = intl + } + // END: Intl polyfill +} +*/ + +const getUsersPreferredLanguages = (): string[] | undefined => { + if (navigator.languages !== undefined) { + return navigator.languages; + } else if (navigator.language !== undefined) { + return [navigator.language]; + } else { + return undefined; + } +}; + +const parseLanguages = (acceptedLangs: string[], defaultLang: string | false = false): string | false | undefined => { + const userPref = getUsersPreferredLanguages(); + + const match = userPref + ? userPref.find((lang) => acceptedLangs.includes(lang)) + : undefined; + + if (match === undefined && defaultLang !== false) { + return defaultLang; + } + + return match; +}; + +const getLocaleMessages = async (l: string, ls: { locale: string; messages: any }[]): Promise> => { + if (ls) { + for (let i = 0; i < ls.length; i++) { + if (ls[i]['locale'] === l) { + const { default: messages } = await defineMessages(ls[i].messages); + + return messages; + } + } + } + + return {}; +}; + +const formatMessage = (messages: Record = {}, id: string): string => { + return messages[id] || id; +}; + +export { + formatMessage, + getLocaleMessages, + //loadLocalePolyfill + parseLanguages +}; \ No newline at end of file