diff --git a/web/src/labs/html2image/getFontsStyleElement.ts b/web/src/labs/html2image/getFontsStyleElement.ts deleted file mode 100644 index fef390ff..00000000 --- a/web/src/labs/html2image/getFontsStyleElement.ts +++ /dev/null @@ -1,46 +0,0 @@ -import convertResourceToDataURL from "./convertResourceToDataURL"; - -const getFontsStyleElement = async (element: HTMLElement) => { - const styleSheets = element.ownerDocument.styleSheets; - const fontFamilyStyles: CSSStyleDeclaration[] = []; - - for (const sheet of styleSheets) { - for (const rule of sheet.cssRules) { - if (rule.constructor.name === "CSSFontFaceRule") { - fontFamilyStyles.push((rule as CSSFontFaceRule).style); - } - } - } - - const styleElement = document.createElement("style"); - - for (const f of fontFamilyStyles) { - const fontFamily = f.getPropertyValue("font-family"); - const fontWeight = f.getPropertyValue("font-weight"); - const src = f.getPropertyValue("src"); - const resourceUrls = src.split(",").map((s) => { - return s.replace(/url\("?(.+?)"?\)/, "$1"); - }); - const base64Urls: string[] = []; - - for (const url of resourceUrls) { - try { - const base64Url = await convertResourceToDataURL(url); - base64Urls.push(`url("${base64Url}")`); - } catch (error) { - // do nth - } - } - - styleElement.innerHTML += ` - @font-face { - font-family: "${fontFamily}"; - src: ${base64Urls.join(",")}; - font-weight: ${fontWeight}; - }`; - } - - return styleElement; -}; - -export default getFontsStyleElement; diff --git a/web/src/labs/i18n/createI18nStore.tsx b/web/src/labs/i18n/createI18nStore.tsx new file mode 100644 index 00000000..10a0c56e --- /dev/null +++ b/web/src/labs/i18n/createI18nStore.tsx @@ -0,0 +1,52 @@ +type I18nState = Readonly<{ + locale: string; +}>; + +type Listener = (ns: I18nState, ps?: I18nState) => void; + +const createI18nStore = (preloadedState: I18nState) => { + const listeners: Listener[] = []; + let currentState = preloadedState; + + const getState = () => { + return currentState; + }; + + const setState = (state: Partial) => { + const nextState = { + ...currentState, + ...state, + }; + const prevState = currentState; + currentState = nextState; + + for (const cb of listeners) { + cb(currentState, prevState); + } + }; + + const subscribe = (listener: Listener) => { + let isSubscribed = true; + listeners.push(listener); + + const unsubscribe = () => { + if (!isSubscribed) { + return; + } + + const index = listeners.indexOf(listener); + listeners.splice(index, 1); + isSubscribed = false; + }; + + return unsubscribe; + }; + + return { + getState, + setState, + subscribe, + }; +}; + +export default createI18nStore; diff --git a/web/src/labs/i18n/i18nStore.ts b/web/src/labs/i18n/i18nStore.ts index 05ebb1f3..a3a86ae4 100644 --- a/web/src/labs/i18n/i18nStore.ts +++ b/web/src/labs/i18n/i18nStore.ts @@ -1,53 +1,4 @@ -type I18nState = Readonly<{ - locale: string; -}>; - -type Listener = (ns: I18nState, ps?: I18nState) => void; - -const createI18nStore = (preloadedState: I18nState) => { - const listeners: Listener[] = []; - let currentState = preloadedState; - - const getState = () => { - return currentState; - }; - - const setState = (state: Partial) => { - const nextState = { - ...currentState, - ...state, - }; - const prevState = currentState; - currentState = nextState; - - for (const cb of listeners) { - cb(currentState, prevState); - } - }; - - const subscribe = (listener: Listener) => { - let isSubscribed = true; - listeners.push(listener); - - const unsubscribe = () => { - if (!isSubscribed) { - return; - } - - const index = listeners.indexOf(listener); - listeners.splice(index, 1); - isSubscribed = false; - }; - - return unsubscribe; - }; - - return { - getState, - setState, - subscribe, - }; -}; +import createI18nStore from "./createI18nStore"; const defaultI18nState = { locale: "en", diff --git a/web/src/labs/i18n/useI18n.ts b/web/src/labs/i18n/useI18n.ts index 760b7b2a..0334b578 100644 --- a/web/src/labs/i18n/useI18n.ts +++ b/web/src/labs/i18n/useI18n.ts @@ -25,7 +25,8 @@ const useI18n = () => { const translate = (key: string) => { try { - return resources[locale][key] as string; + const value = resources[locale][key] as string; + return value; } catch (error) { return key; }