import { IngredientSearch } from "@/components/Nutrition";
import { LoadingWidget } from "@/core/ui/LoadingWidget/LoadingWidget";
import { WgerRoutes } from "@/routes";
import { makeTheme, theme } from '@/theme';
import createCache from '@emotion/cache';
import { CacheProvider } from "@emotion/react";
import { ThemeProvider } from '@mui/material/styles';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ReactQueryDevtools } from '@tanstack/react-query-devtools';
import axios from 'axios';
import React, { Suspense } from 'react';
import { createRoot } from "react-dom/client";
import { BrowserRouter as Router } from 'react-router-dom';
import App from './App';
import './i18n';
import './index.css';
const queryClient = new QueryClient({
// -> https://tanstack.com/query/latest/docs/reference/QueryClient
// time in milliseconds, so 1000 * 30 = 30s
defaultOptions: {
queries: {
// Don't retry client errors (e.g. a 404 for a deleted/stale resource), they
// won't succeed on a retry and only delay surfacing the result
retry: (failureCount, error) => {
const status = axios.isAxiosError(error) ? error.response?.status : undefined;
if (status !== undefined && status >= 400 && status < 500) {
return false;
}
return failureCount < 3;
},
staleTime: 1000 * 60 * 5,
refetchOnMount: true,
refetchOnWindowFocus: true,
refetchOnReconnect: "always"
},
}
});
const renderComponentShadowDom = (divId: string) => {
const rootElement = document.getElementById(divId);
if (rootElement === null) {
return;
}
const shadow = rootElement.attachShadow({ mode: 'open' });
const shadowRoot = document.createElement('div');
const styleElement = document.createElement('style');
const djangoReactStyle = document.getElementById('react-css') as HTMLLinkElement | null;
if (djangoReactStyle) {
const djangoStyleElement = document.createElement('link');
djangoStyleElement.setAttribute('rel', 'stylesheet');
djangoStyleElement.setAttribute('href', djangoReactStyle.href);
shadow.appendChild(djangoStyleElement);
}
shadow.appendChild(shadowRoot);
shadow.appendChild(styleElement);
const cache = createCache({
key: 'css',
prepend: true,
container: styleElement,
});
const root = createRoot(shadowRoot);
root.render(
}>
);
};
const rootElement = document.getElementById("root");
if (rootElement) {
const root = createRoot(rootElement);
root.render(
}>
);
}
const rootNoShadowDom = document.getElementById("react-page-no-shadow-dom");
if (rootNoShadowDom) {
const root = createRoot(rootNoShadowDom);
root.render(
}>
);
}
renderComponentShadowDom('react-page');
/*
* Components used in the wger django app, don't change the IDs here
*/
const ingredientSearchBox = document.getElementById("react-ingredient-search");
if (ingredientSearchBox) {
const root = createRoot(ingredientSearchBox);
root.render(
}>
);
}