Added beginnings of a home page
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
"buttons": {
|
"buttons": {
|
||||||
"create": "Create",
|
"create": "Create",
|
||||||
"save": "Save",
|
"save": "Save",
|
||||||
"saveAndAdd": "Save and Add",
|
"saveAndAdd": "Save and Add",
|
||||||
"logout": "Log out",
|
"logout": "Log out",
|
||||||
"delete": "Delete",
|
"delete": "Delete",
|
||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
@@ -192,7 +192,7 @@
|
|||||||
"settings_extruder_temp": "Extruder Temp",
|
"settings_extruder_temp": "Extruder Temp",
|
||||||
"settings_bed_temp": "Bed Temp",
|
"settings_bed_temp": "Bed Temp",
|
||||||
"color_hex": "Color",
|
"color_hex": "Color",
|
||||||
"spools": "Show Spools"
|
"spools": "Show Spools"
|
||||||
},
|
},
|
||||||
"fields_help": {
|
"fields_help": {
|
||||||
"name": "Filament name, to distinguish this filament type among others from the same vendor. Should contain the color for example.",
|
"name": "Filament name, to distinguish this filament type among others from the same vendor. Should contain the color for example.",
|
||||||
@@ -234,12 +234,18 @@
|
|||||||
"vendor_updated": "This vendor has been updated by someone/something else since you opened this page. Saving will overwrite those changes!"
|
"vendor_updated": "This vendor has been updated by someone/something else since you opened this page. Saving will overwrite those changes!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"home": {
|
||||||
|
"home": "Home"
|
||||||
|
},
|
||||||
"table": {
|
"table": {
|
||||||
"actions": "Actions"
|
"actions": "Actions"
|
||||||
},
|
},
|
||||||
"documentTitle": {
|
"documentTitle": {
|
||||||
"default": "Spoolman",
|
"default": "Spoolman",
|
||||||
"suffix": " | Spoolman",
|
"suffix": " | Spoolman",
|
||||||
|
"home": {
|
||||||
|
"list": "Home | Spoolman"
|
||||||
|
},
|
||||||
"filament": {
|
"filament": {
|
||||||
"list": "Filaments | Spoolman",
|
"list": "Filaments | Spoolman",
|
||||||
"show": "#{{id}} Show Filament | Spoolman",
|
"show": "#{{id}} Show Filament | Spoolman",
|
||||||
|
|||||||
@@ -234,12 +234,18 @@
|
|||||||
"vendor_updated": "Den här leverantören har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!"
|
"vendor_updated": "Den här leverantören har uppdaterats av något eller någon sedan du öppnade den här sidan. Om du sparar så skriver du över ändringarna!"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"home": {
|
||||||
|
"home": "Hem"
|
||||||
|
},
|
||||||
"table": {
|
"table": {
|
||||||
"actions": "Åtgärder"
|
"actions": "Åtgärder"
|
||||||
},
|
},
|
||||||
"documentTitle": {
|
"documentTitle": {
|
||||||
"default": "Spoolman",
|
"default": "Spoolman",
|
||||||
"suffix": " | Spoolman",
|
"suffix": " | Spoolman",
|
||||||
|
"home": {
|
||||||
|
"list": "Hem | Spoolman"
|
||||||
|
},
|
||||||
"filament": {
|
"filament": {
|
||||||
"list": "Filament | Spoolman",
|
"list": "Filament | Spoolman",
|
||||||
"show": "#{{id}} Visa filament | Spoolman",
|
"show": "#{{id}} Visa filament | Spoolman",
|
||||||
|
|||||||
@@ -5,16 +5,12 @@ import { ReactQueryDevtools } from "@tanstack/react-query-devtools";
|
|||||||
import { ErrorComponent } from "@refinedev/antd";
|
import { ErrorComponent } from "@refinedev/antd";
|
||||||
import "@refinedev/antd/dist/reset.css";
|
import "@refinedev/antd/dist/reset.css";
|
||||||
|
|
||||||
import routerBindings, {
|
import routerBindings, { DocumentTitleHandler, UnsavedChangesNotifier } from "@refinedev/react-router-v6";
|
||||||
DocumentTitleHandler,
|
|
||||||
NavigateToResource,
|
|
||||||
UnsavedChangesNotifier,
|
|
||||||
} from "@refinedev/react-router-v6";
|
|
||||||
import dataProvider from "./components/dataProvider";
|
import dataProvider from "./components/dataProvider";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";
|
import { BrowserRouter, Outlet, Route, Routes } from "react-router-dom";
|
||||||
import { ColorModeContextProvider } from "./contexts/color-mode";
|
import { ColorModeContextProvider } from "./contexts/color-mode";
|
||||||
import { FileOutlined, HighlightOutlined, UserOutlined } from "@ant-design/icons";
|
import { FileOutlined, HighlightOutlined, HomeOutlined, UserOutlined } from "@ant-design/icons";
|
||||||
import { ConfigProvider } from "antd";
|
import { ConfigProvider } from "antd";
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import { Locale } from "antd/es/locale";
|
import { Locale } from "antd/es/locale";
|
||||||
@@ -24,15 +20,27 @@ import SpoolmanNotificationProvider from "./components/notificationProvider";
|
|||||||
import { SpoolmanLayout } from "./components/layout";
|
import { SpoolmanLayout } from "./components/layout";
|
||||||
import liveProvider from "./components/liveProvider";
|
import liveProvider from "./components/liveProvider";
|
||||||
|
|
||||||
interface PageProps {
|
interface ResourcePageProps {
|
||||||
resource: "spools" | "filaments" | "vendors";
|
resource: "spools" | "filaments" | "vendors";
|
||||||
page: "list" | "create" | "edit" | "show";
|
page: "list" | "create" | "edit" | "show";
|
||||||
mode?: "create" | "clone";
|
mode?: "create" | "clone";
|
||||||
}
|
}
|
||||||
|
|
||||||
const LoadablePage = loadable((props: PageProps) => import(`./pages/${props.resource}/${props.page}.tsx`), {
|
const LoadableResourcePage = loadable(
|
||||||
|
(props: ResourcePageProps) => import(`./pages/${props.resource}/${props.page}.tsx`),
|
||||||
|
{
|
||||||
|
fallback: <div>Page is Loading...</div>,
|
||||||
|
cacheKey: (props: ResourcePageProps) => `${props.resource}-${props.page}-${props.mode ?? ""}`,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
interface LoadablePageProps {
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const LoadablePage = loadable((props: LoadablePageProps) => import(`./pages/${props.name}/index.tsx`), {
|
||||||
fallback: <div>Page is Loading...</div>,
|
fallback: <div>Page is Loading...</div>,
|
||||||
cacheKey: (props: PageProps) => `${props.resource}-${props.page}-${props.mode ?? ""}`,
|
cacheKey: (props: LoadablePageProps) => `page-${props.name}`,
|
||||||
});
|
});
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
@@ -87,6 +95,14 @@ function App() {
|
|||||||
routerProvider={routerBindings}
|
routerProvider={routerBindings}
|
||||||
liveProvider={liveProvider(import.meta.env.VITE_APIURL)}
|
liveProvider={liveProvider(import.meta.env.VITE_APIURL)}
|
||||||
resources={[
|
resources={[
|
||||||
|
{
|
||||||
|
name: "home",
|
||||||
|
list: "/",
|
||||||
|
meta: {
|
||||||
|
canDelete: false,
|
||||||
|
icon: <HomeOutlined />,
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "spool",
|
name: "spool",
|
||||||
list: "/spool",
|
list: "/spool",
|
||||||
@@ -138,30 +154,45 @@ function App() {
|
|||||||
</SpoolmanLayout>
|
</SpoolmanLayout>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Route index element={<NavigateToResource resource="spool" />} />
|
<Route index element={<LoadablePage name="home" />} />
|
||||||
<Route path="/spool">
|
<Route path="/spool">
|
||||||
<Route index element={<LoadablePage resource="spools" page="list" />} />
|
<Route index element={<LoadableResourcePage resource="spools" page="list" />} />
|
||||||
<Route path="create" element={<LoadablePage resource="spools" page="create" mode="create" />} />
|
<Route
|
||||||
<Route path="clone/:id" element={<LoadablePage resource="spools" page="create" mode="clone" />} />
|
path="create"
|
||||||
<Route path="edit/:id" element={<LoadablePage resource="spools" page="edit" />} />
|
element={<LoadableResourcePage resource="spools" page="create" mode="create" />}
|
||||||
<Route path="show/:id" element={<LoadablePage resource="spools" page="show" />} />
|
/>
|
||||||
</Route>
|
|
||||||
<Route path="/filament">
|
|
||||||
<Route index element={<LoadablePage resource="filaments" page="list" />} />
|
|
||||||
<Route path="create" element={<LoadablePage resource="filaments" page="create" mode="create" />} />
|
|
||||||
<Route
|
<Route
|
||||||
path="clone/:id"
|
path="clone/:id"
|
||||||
element={<LoadablePage resource="filaments" page="create" mode="clone" />}
|
element={<LoadableResourcePage resource="spools" page="create" mode="clone" />}
|
||||||
/>
|
/>
|
||||||
<Route path="edit/:id" element={<LoadablePage resource="filaments" page="edit" />} />
|
<Route path="edit/:id" element={<LoadableResourcePage resource="spools" page="edit" />} />
|
||||||
<Route path="show/:id" element={<LoadablePage resource="filaments" page="show" />} />
|
<Route path="show/:id" element={<LoadableResourcePage resource="spools" page="show" />} />
|
||||||
|
</Route>
|
||||||
|
<Route path="/filament">
|
||||||
|
<Route index element={<LoadableResourcePage resource="filaments" page="list" />} />
|
||||||
|
<Route
|
||||||
|
path="create"
|
||||||
|
element={<LoadableResourcePage resource="filaments" page="create" mode="create" />}
|
||||||
|
/>
|
||||||
|
<Route
|
||||||
|
path="clone/:id"
|
||||||
|
element={<LoadableResourcePage resource="filaments" page="create" mode="clone" />}
|
||||||
|
/>
|
||||||
|
<Route path="edit/:id" element={<LoadableResourcePage resource="filaments" page="edit" />} />
|
||||||
|
<Route path="show/:id" element={<LoadableResourcePage resource="filaments" page="show" />} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/vendor">
|
<Route path="/vendor">
|
||||||
<Route index element={<LoadablePage resource="vendors" page="list" />} />
|
<Route index element={<LoadableResourcePage resource="vendors" page="list" />} />
|
||||||
<Route path="create" element={<LoadablePage resource="vendors" page="create" mode="create" />} />
|
<Route
|
||||||
<Route path="clone/:id" element={<LoadablePage resource="vendors" page="create" mode="clone" />} />
|
path="create"
|
||||||
<Route path="edit/:id" element={<LoadablePage resource="vendors" page="edit" />} />
|
element={<LoadableResourcePage resource="vendors" page="create" mode="create" />}
|
||||||
<Route path="show/:id" element={<LoadablePage resource="vendors" page="show" />} />
|
/>
|
||||||
|
<Route
|
||||||
|
path="clone/:id"
|
||||||
|
element={<LoadableResourcePage resource="vendors" page="create" mode="clone" />}
|
||||||
|
/>
|
||||||
|
<Route path="edit/:id" element={<LoadableResourcePage resource="vendors" page="edit" />} />
|
||||||
|
<Route path="show/:id" element={<LoadableResourcePage resource="vendors" page="show" />} />
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="*" element={<ErrorComponent />} />
|
<Route path="*" element={<ErrorComponent />} />
|
||||||
</Route>
|
</Route>
|
||||||
|
|||||||
121
client/src/pages/home/index.tsx
Normal file
121
client/src/pages/home/index.tsx
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
import React from "react";
|
||||||
|
import { IResourceComponentsProps } from "@refinedev/core";
|
||||||
|
import dayjs from "dayjs";
|
||||||
|
import utc from "dayjs/plugin/utc";
|
||||||
|
import { Content } from "antd/es/layout/layout";
|
||||||
|
import { Collapse, List, theme } from "antd";
|
||||||
|
import Title from "antd/es/typography/Title";
|
||||||
|
import Logo from "../../icon.svg?react";
|
||||||
|
import { FileOutlined, HighlightOutlined, UserOutlined } from "@ant-design/icons";
|
||||||
|
|
||||||
|
dayjs.extend(utc);
|
||||||
|
|
||||||
|
const { useToken } = theme;
|
||||||
|
|
||||||
|
export const Home: React.FC<IResourceComponentsProps> = () => {
|
||||||
|
const { token } = useToken();
|
||||||
|
// const t = useTranslate();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Content
|
||||||
|
style={{
|
||||||
|
padding: 8,
|
||||||
|
minHeight: 280,
|
||||||
|
maxWidth: 1000,
|
||||||
|
margin: "0 auto",
|
||||||
|
backgroundColor: token.colorBgContainer,
|
||||||
|
borderRadius: token.borderRadiusLG,
|
||||||
|
color: token.colorText,
|
||||||
|
fontFamily: token.fontFamily,
|
||||||
|
fontSize: token.fontSizeLG,
|
||||||
|
lineHeight: 1.5,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Title
|
||||||
|
style={{
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "center",
|
||||||
|
justifyContent: "center",
|
||||||
|
margin: "1em 0",
|
||||||
|
fontSize: token.fontSizeHeading1 + 8,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
style={{
|
||||||
|
display: "inline-block",
|
||||||
|
height: "1.5em",
|
||||||
|
float: "left",
|
||||||
|
marginRight: "0.5em",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Logo />
|
||||||
|
</div>
|
||||||
|
Spoolman
|
||||||
|
</Title>
|
||||||
|
<Collapse
|
||||||
|
className="site-collapse-custom-collapse"
|
||||||
|
items={[
|
||||||
|
{
|
||||||
|
key: "1",
|
||||||
|
label: <span style={{ fontSize: "200%" }}>Getting Started</span>,
|
||||||
|
children: (
|
||||||
|
<>
|
||||||
|
<p>Here are some tips to get you started.</p>
|
||||||
|
<p>Spoolman holds 3 different types of data:</p>
|
||||||
|
<List
|
||||||
|
itemLayout="horizontal"
|
||||||
|
size="large"
|
||||||
|
dataSource={[
|
||||||
|
{
|
||||||
|
title: "Filaments",
|
||||||
|
description:
|
||||||
|
"Brands of filament. They have properties such as name, material, color, diameter, and more.",
|
||||||
|
icon: <HighlightOutlined />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Spools",
|
||||||
|
description: "Individual physical spools of a specific filament.",
|
||||||
|
icon: <FileOutlined />,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Vendors",
|
||||||
|
description: "The companies that make the filament.",
|
||||||
|
icon: <UserOutlined />,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
renderItem={(item) => (
|
||||||
|
<List.Item>
|
||||||
|
<List.Item.Meta avatar={item.icon} title={item.title} description={item.description} />
|
||||||
|
</List.Item>
|
||||||
|
)}
|
||||||
|
/>
|
||||||
|
<p>
|
||||||
|
To enter a new spool into the database, you first need to create a <strong>Filament</strong> object
|
||||||
|
for it. Once that is done, you can then create a <strong>Spool</strong> object for that individual
|
||||||
|
spool. If you then purchase additional spools of the same filament, you can just create additional
|
||||||
|
Spool objects, and re-use the same Filament object.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can optionally also create a <strong>Vendor</strong> object for the company that makes the
|
||||||
|
filament, if you want to track that information.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
You can connect other 3D printer services to Spoolman, such as Moonraker, which can then automatically
|
||||||
|
track filament usage and update the Spool objects for you. See the{" "}
|
||||||
|
<a href="https://github.com/Donkie/Spoolman#integration-status" target="_blank">
|
||||||
|
Spoolman README
|
||||||
|
</a>{" "}
|
||||||
|
for how to do that.
|
||||||
|
</p>
|
||||||
|
</>
|
||||||
|
),
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
bordered={false}
|
||||||
|
ghost
|
||||||
|
/>
|
||||||
|
</Content>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default Home;
|
||||||
Reference in New Issue
Block a user