import { Refine } from "@refinedev/core"; import { RefineKbar, RefineKbarProvider } from "@refinedev/kbar"; import { ErrorComponent, notificationProvider, ThemedLayoutV2, ThemedSiderV2, ThemedTitleV2, } from "@refinedev/antd"; import "@refinedev/antd/dist/reset.css"; import routerBindings, { DocumentTitleHandler, NavigateToResource, UnsavedChangesNotifier, } from "@refinedev/react-router-v6"; import dataProvider from "./components/dataProvider"; import { useTranslation } from "react-i18next"; import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom"; import { Header } from "./components/header"; import { ColorModeContextProvider } from "./contexts/color-mode"; import { ReactComponent as Logo } from "./icon.svg"; import { FileOutlined, HighlightOutlined, UserOutlined, } from "@ant-design/icons"; import { ConfigProvider } from "antd"; import { Footer } from "antd/es/layout/layout"; import { Version } from "./components/version"; import React from "react"; import { Locale } from "antd/es/locale"; import { languages } from "./i18n"; import loadable from "@loadable/component"; interface PageProps { resource: "spools" | "filaments" | "vendors"; page: "list" | "create" | "edit" | "show"; mode?: "create" | "clone"; } const LoadablePage = loadable( (props: PageProps) => import(`./pages/${props.resource}/${props.page}.tsx`), { fallback:
Page is Loading...
, cacheKey: (props: PageProps) => `${props.resource}-${props.page}-${props.mode ?? ""}`, } ); function App() { const { t, i18n } = useTranslation(); const i18nProvider = { translate: (key: string, params: object) => t(key, params), changeLocale: (lang: string) => i18n.changeLanguage(lang), getLocale: () => i18n.language, }; // Fetch the antd locale using dynamic imports const [antdLocale, setAntdLocale] = React.useState(); React.useEffect(() => { const fetchLocale = async () => { const locale = await import( `./../node_modules/antd/es/locale/${languages[ i18n.language ].fullCode.replace("-", "_")}.js` ); setAntdLocale(locale.default); }; fetchLocale().catch(console.error); }, [i18n.language]); if (!import.meta.env.VITE_APIURL) { return ( <>

Missing API URL

App was built without an API URL. Please set the VITE_APIURL environment variable to the URL of your Spoolman API.

); } return ( , }, }, { name: "filament", list: "/filament", create: "/filament/create", clone: "/filament/clone/:id", edit: "/filament/edit/:id", show: "/filament/show/:id", meta: { canDelete: true, icon: , }, }, { name: "vendor", list: "/vendor", create: "/vendor/create", clone: "/vendor/clone/:id", edit: "/vendor/edit/:id", show: "/vendor/show/:id", meta: { canDelete: true, icon: , }, }, ]} options={{ syncWithLocation: true, warnWhenUnsavedChanges: true, disableTelemetry: true, }} >
} Sider={() => ( ( } /> )} /> )} Footer={() => (
Spoolman - {t("version")}
)} > } > } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); } export default App;