gatsby#WrapPageElementBrowserArgs TypeScript Examples
The following examples show how to use
gatsby#WrapPageElementBrowserArgs.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: gatsby-browser.tsx From gatsby-plugin-next-seo with MIT License | 6 votes |
wrapPageElement = (
{ element }: WrapPageElementBrowserArgs,
options: GatsbySeoPluginOptions,
) => {
return (
<>
<BaseSeo {...options} />
{element}
</>
);
}
Example #2
Source File: wrapPageElement.tsx From gatsby-plugin-react-i18next with MIT License | 4 votes |
wrapPageElement = (
{element, props}: WrapPageElementBrowserArgs<any, PageContext>,
{
i18nextOptions = {},
redirect = true,
generateDefaultLanguagePage = false,
siteUrl,
localeJsonNodeName = 'locales',
fallbackLanguage
}: PluginOptions
) => {
if (!props) return;
const {data, pageContext, location} = props;
const {routed, language, languages, originalPath, defaultLanguage, path} = pageContext.i18n;
const isRedirect = redirect && !routed;
if (isRedirect) {
const {search} = location;
// Skip build, Browsers only
if (typeof window !== 'undefined') {
let detected =
window.localStorage.getItem(LANGUAGE_KEY) ||
browserLang({
languages,
fallback: fallbackLanguage || language
});
if (!languages.includes(detected)) {
detected = language;
}
window.localStorage.setItem(LANGUAGE_KEY, detected);
if (detected !== defaultLanguage) {
const queryParams = search || '';
const newUrl = withPrefix(
`/${detected}${removePathPrefix(location.pathname)}${queryParams}${location.hash}`
);
// @ts-ignore
window.___replace(newUrl);
return null;
}
}
}
const localeNodes: Array<{node: LocaleNode}> = data?.[localeJsonNodeName]?.edges || [];
if (languages.length > 1 && localeNodes.length === 0 && process.env.NODE_ENV === 'development') {
console.error(
outdent`
No translations were found in "${localeJsonNodeName}" key for "${originalPath}".
You need to add a graphql query to every page like this:
export const query = graphql\`
query($language: String!) {
${localeJsonNodeName}: allLocale(language: {eq: $language}}) {
edges {
node {
ns
data
language
}
}
}
}
\`;
`
);
}
const namespaces = localeNodes.map(({node}) => node.ns);
// We want to set default namespace to a page namespace if it exists
// and use other namespaces as fallback
// this way you dont need to specify namespaces in pages
let defaultNS = i18nextOptions.defaultNS || 'translation';
defaultNS = namespaces.find((ns) => ns !== defaultNS) || defaultNS;
const fallbackNS = namespaces.filter((ns) => ns !== defaultNS);
const resources: Resource = localeNodes.reduce<Resource>((res: Resource, {node}) => {
const parsedData: ResourceKey = JSON.parse(node.data);
if (!(node.language in res)) res[node.language] = {};
res[node.language][node.ns] = parsedData;
return res;
}, {});
const i18n = i18next.createInstance();
i18n.init({
...i18nextOptions,
resources,
lng: language,
fallbackLng: defaultLanguage,
defaultNS,
fallbackNS,
react: {
useSuspense: false
}
});
if (i18n.language !== language) {
i18n.changeLanguage(language);
}
const context = {
routed,
language,
languages,
originalPath,
defaultLanguage,
generateDefaultLanguagePage,
siteUrl,
path
};
return withI18next(i18n, context)(element);
}