solid-intlayer
Version: 
Easily internationalize i18n your Solid applications with type-safe multilingual content management.
66 lines (65 loc) • 1.85 kB
JavaScript
import s from "@intlayer/config/built";
import { localeResolver as v } from "@intlayer/core";
import { createContext as y, createComponent as n, useContext as w, createSignal as I, createEffect as c } from "solid-js";
import { IntlayerEditorProvider as A } from "../editor/IntlayerEditorProvider.mjs";
import { localeCookie as d, setLocaleCookie as b } from "./useLocaleCookie.mjs";
const f = y({
  locale: () => d ?? s?.internationalization?.defaultLocale,
  setLocale: () => null,
  disableEditor: !1
}), p = () => w(f), x = (t) => {
  const {
    internationalization: u
  } = s ?? {}, {
    defaultLocale: L,
    locales: a
  } = u ?? {}, m = t.locale ?? d ?? t.defaultLocale ?? L, [o, l] = I(m);
  c(() => {
    if (typeof window < "u") {
      const e = (r) => {
        if (r.data?.type === "INTLAYER_LOCALE_CHANGE") {
          const i = r.data.locale;
          a?.includes(i) && l(i);
        }
      };
      return window.addEventListener("message", e), () => window.removeEventListener("message", e);
    }
  }), c(() => {
    const e = o();
    typeof window < "u" && window.postMessage({
      type: "INTLAYER_LOCALE_CHANGE",
      locale: e
    }, "*");
  });
  const C = (e) => {
    if (o().toString() !== e.toString()) {
      if (!a?.map(String).includes(e)) {
        console.error(`Locale ${e} is not available`);
        return;
      }
      l(e), b(e);
    }
  }, g = t.setLocale ?? C, E = () => v(t.locale ?? o());
  return n(f.Provider, {
    get value() {
      return {
        locale: E,
        setLocale: g,
        disableEditor: t.disableEditor
      };
    },
    get children() {
      return t.children;
    }
  });
}, R = (t) => n(A, {
  get children() {
    return n(x, t);
  }
});
export {
  f as IntlayerClientContext,
  R as IntlayerProvider,
  x as IntlayerProviderContent,
  p as useIntlayerContext
};