UNPKG

@esri/calcite-components

Version:

Web Components for Esri's Calcite Design System.

96 lines (92 loc) 2.99 kB
/*! * All material copyright ESRI, All Rights Reserved, unless otherwise specified. * See https://github.com/Esri/calcite-components/blob/master/LICENSE.md for details. * v1.5.0-next.4 */ 'use strict'; const index = require('./index-55f8a3b7.js'); const locale = require('./locale-fc347462.js'); const componentLangToMessageBundleCache = {}; async function getMessageBundle(lang, component) { const key = `${component}_${lang}`; if (componentLangToMessageBundleCache[key]) { return componentLangToMessageBundleCache[key]; } componentLangToMessageBundleCache[key] = fetch(index.getAssetPath(`./assets/${component}/t9n/messages_${lang}.json`)) .then((resp) => { if (!resp.ok) { throwMessageFetchError(); } return resp.json(); }) .catch(() => throwMessageFetchError()); return componentLangToMessageBundleCache[key]; } function throwMessageFetchError() { throw new Error("could not fetch component message bundle"); } function mergeMessages(component) { component.messages = { ...component.defaultMessages, ...component.messageOverrides }; } /** * This utility sets up the messages used by the component. It should be awaited in the `componentWillLoad` lifecycle hook. * * @param component */ async function setUpMessages(component) { component.defaultMessages = await fetchMessages(component, component.effectiveLocale); mergeMessages(component); } async function fetchMessages(component, lang) { const { el } = component; const tag = el.tagName.toLowerCase(); const componentName = tag.replace("calcite-", ""); return getMessageBundle(locale.getSupportedLocale(lang, "t9n"), componentName); } /** * This utility must be set up for the component to update its default message bundle if the locale changes. * * It can be set up in **either** of the following ways: * * 1. called from `LocalizedComponent`'s `onLocaleChange` method or * 2. called from a watcher configured to watch `LocalizedComponent`'s `effectiveLocale` prop * * @param component * @param lang */ async function updateMessages(component, lang) { component.defaultMessages = await fetchMessages(component, lang); mergeMessages(component); } /** * This utility sets up internals for messages support. * * It needs to be called in `connectedCallback` * * **Note**: this must be called after `LocalizedComponent`'s `connectLocalized` method. * * @param component */ function connectMessages(component) { component.onMessagesChange = defaultOnMessagesChange; } /** * This utility tears down internals for messages support. * * It needs to be called in `disconnectedCallback` * * @param component */ function disconnectMessages(component) { component.onMessagesChange = undefined; } function defaultOnMessagesChange() { mergeMessages(this); } exports.connectMessages = connectMessages; exports.disconnectMessages = disconnectMessages; exports.setUpMessages = setUpMessages; exports.updateMessages = updateMessages;