feat(ui): lazy load routes

This commit is contained in:
Brian McGee
2025-05-22 16:05:18 +01:00
parent 0a75575e08
commit 985f66dac8
20 changed files with 72 additions and 57 deletions

View File

@@ -18,7 +18,7 @@ interface APITesterForm extends FieldValues {
payload: string;
}
export const ApiTester = () => {
const ApiTester = () => {
const [persistedTestData, setPersistedTestData] = makePersisted(
createSignal<APITesterForm>(),
{
@@ -103,3 +103,5 @@ export const ApiTester = () => {
</div>
);
};
export default ApiTester;

View File

@@ -17,7 +17,7 @@ type CreateForm = Meta & {
template: string;
};
export const CreateClan = () => {
const CreateClan = () => {
const [formStore, { Form, Field }] = createForm<CreateForm>({
initialValues: {
name: "",
@@ -205,3 +205,5 @@ type Meta = Extract<
OperationResponse<"show_clan_meta">,
{ status: "success" }
>["data"];
export default CreateClan;

View File

@@ -139,7 +139,7 @@ const EditClanForm = (props: EditClanFormProps) => {
type GeneralData = SuccessQuery<"show_clan_meta">["data"];
export const ClanDetails = () => {
const ClanDetails = () => {
const params = useParams();
const clan_dir = window.atob(params.id);
// Fetch general meta data
@@ -158,3 +158,5 @@ export const ClanDetails = () => {
</>
);
};
export default ClanDetails;

View File

@@ -1,3 +0,0 @@
export * from "./list";
export * from "./create";
export * from "./details";

View File

@@ -124,7 +124,7 @@ const ClanItem = (props: ClanItemProps) => {
);
};
export const ClanList = () => {
const ClanList = () => {
const navigate = useNavigate();
return (
<div class="">
@@ -158,3 +158,5 @@ export const ClanList = () => {
</div>
);
};
export default ClanList;

View File

@@ -8,7 +8,7 @@ const disabled = [false, true];
const readOnly = [false, true];
const error = [false, true];
export const Components = () => {
const Components = () => {
const [formStore, { Form, Field }] = createForm<{ ef: string }>({});
return (
<>
@@ -116,3 +116,5 @@ export const Components = () => {
</>
);
};
export default Components;

View File

@@ -2,7 +2,7 @@ import { callApi } from "@/src/api";
import { useQuery } from "@tanstack/solid-query";
import { useClanContext } from "@/src/contexts/clan";
export function DiskView() {
const DiskView = () => {
const { activeClanURI } = useClanContext();
const query = useQuery(() => ({
@@ -28,4 +28,6 @@ export function DiskView() {
</p>
</div>
);
}
};
export default DiskView;

View File

@@ -46,7 +46,7 @@ export interface FlashFormValues extends FieldValues {
sshKeys: File[]; // This field will use CustomFileField
}
export const Flash = () => {
const Flash = () => {
const [formStore, { Form, Field }] = createForm<FlashFormValues>({
initialValues: {
machine: {
@@ -436,3 +436,5 @@ export const Flash = () => {
</>
);
};
export default Flash;

View File

@@ -8,7 +8,7 @@ type ServiceModel = Extract<
{ status: "success" }
>["data"]["services"];
export const HostList: Component = () => {
const HostList: Component = () => {
const [services, setServices] = createSignal<ServiceModel>();
return (
@@ -74,3 +74,5 @@ export const HostList: Component = () => {
</div>
);
};
export default HostList;

View File

@@ -1,21 +1,6 @@
import { Navigate, RouteDefinition } from "@solidjs/router";
import {
CreateMachine,
MachineDetails,
MachineListView,
} from "@/src/routes/machines";
import { VarsPage } from "@/src/routes/machines/install/vars-step";
import { ClanDetails, ClanList, CreateClan } from "@/src/routes/clans";
import { ModuleList } from "@/src/routes/modules/list";
import { ModuleDetails } from "@/src/routes/modules/details";
import { ModuleDetails as AddModule } from "@/src/routes/modules/add";
import { Flash } from "@/src/routes/flash/view";
import { Welcome } from "@/src/routes/welcome";
import { HostList } from "@/src/routes/hosts/view";
import { ThreePlayground } from "@/src/three";
import { ApiTester } from "@/src/api_test";
import { Components } from "@/src/routes/components";
import { IconVariant } from "@/src/components/icon";
import { lazy } from "solid-js";
export type AppRoute = Omit<RouteDefinition, "children"> & {
label: string;
@@ -24,6 +9,8 @@ export type AppRoute = Omit<RouteDefinition, "children"> & {
hidden?: boolean;
};
const lazyLoad = (path: string) => lazy(() => import(path));
const routes: AppRoute[] = [
{
path: "/",
@@ -39,24 +26,24 @@ const routes: AppRoute[] = [
{
path: "/",
label: "Overview",
component: () => <MachineListView />,
component: lazyLoad("./machines/list"),
},
{
path: "/create",
label: "Create",
component: () => <CreateMachine />,
component: lazyLoad("./machines/create"),
},
{
path: "/:id",
label: "Details",
hidden: true,
component: () => <MachineDetails />,
component: lazyLoad("./machines/details"),
},
{
path: "/:id/vars",
label: "Vars",
hidden: true,
component: () => <VarsPage />,
component: lazyLoad("./machines/install/vars-step"),
},
],
},
@@ -69,18 +56,18 @@ const routes: AppRoute[] = [
{
path: "/",
label: "Overview",
component: () => <ClanList />,
component: lazyLoad("./clans/list"),
},
{
path: "/create",
label: "Create",
component: () => <CreateClan />,
component: lazyLoad("./clans/create"),
},
{
path: "/:id",
label: "Details",
hidden: true,
component: () => <ClanDetails />,
component: lazyLoad("./clans/details"),
},
],
},
@@ -92,19 +79,19 @@ const routes: AppRoute[] = [
{
path: "/",
label: "App Store",
component: () => <ModuleList />,
component: lazyLoad("./modules/list"),
},
{
path: "details/:id",
label: "Details",
hidden: true,
component: () => <ModuleDetails />,
component: lazyLoad("./modules/details"),
},
{
path: "/add/:id",
label: "Details",
hidden: true,
component: () => <AddModule />,
component: lazyLoad("./modules/add"),
},
],
},
@@ -116,7 +103,7 @@ const routes: AppRoute[] = [
{
path: "/flash",
label: "Flash Installer",
component: () => <Flash />,
component: lazyLoad("./flash/view"),
},
],
},
@@ -124,7 +111,7 @@ const routes: AppRoute[] = [
path: "/welcome",
label: "",
hidden: true,
component: () => <Welcome />,
component: lazyLoad("./welcome"),
},
{
path: "/internal-dev",
@@ -133,24 +120,24 @@ const routes: AppRoute[] = [
{
path: "/hosts",
label: "Local Hosts",
component: () => <HostList />,
component: lazyLoad("./hosts/list"),
},
{
path: "/3d",
label: "3D-Playground",
component: () => <ThreePlayground />,
component: lazyLoad("../three"),
},
{
path: "/api_testing",
label: "api_testing",
hidden: false,
component: () => <ApiTester />,
component: lazyLoad("../api_test"),
},
{
path: "/components",
label: "Components",
hidden: false,
component: () => <Components />,
component: lazyLoad("./components"),
},
],
},

View File

@@ -16,7 +16,7 @@ import { useClanContext } from "@/src/contexts/clan";
type CreateMachineForm = OperationArgs<"create_machine">;
export function CreateMachine() {
const CreateMachine = () => {
const navigate = useNavigate();
const { activeClanURI } = useClanContext();
@@ -189,4 +189,6 @@ export function CreateMachine() {
</div>
</>
);
}
};
export default CreateMachine;

View File

@@ -699,7 +699,7 @@ const MachineForm = (props: MachineDetailsProps) => {
);
};
export const MachineDetails = () => {
const MachineDetails = () => {
const params = useParams();
const { activeClanURI } = useClanContext();
@@ -735,3 +735,5 @@ export const MachineDetails = () => {
</>
);
};
export default MachineDetails;

View File

@@ -1,3 +0,0 @@
export * from "./details";
export * from "./create";
export * from "./list";

View File

@@ -203,7 +203,7 @@ export const VarsStep = (props: VarsStepProps) => {
);
};
export const VarsPage = () => {
const VarsPage = () => {
const params = useParams();
const navigate = useNavigate();
const { activeClanURI } = useClanContext();
@@ -249,3 +249,5 @@ export const VarsPage = () => {
</div>
);
};
export default VarsPage;

View File

@@ -18,7 +18,7 @@ export interface Filter {
tags: string[];
}
export const MachineListView: Component = () => {
const MachineListView: Component = () => {
const queryClient = useQueryClient();
const [filter, setFilter] = createSignal<Filter>({ tags: [] });
@@ -213,3 +213,5 @@ export const MachineListView: Component = () => {
</>
);
};
export default MachineListView;

View File

@@ -7,7 +7,7 @@ import { createForm, FieldValues, SubmitHandler } from "@modular-forms/solid";
import { SelectInput } from "@/src/Form/fields/Select";
import { useClanContext } from "@/src/contexts/clan";
export const ModuleDetails = () => {
const ModuleDetails = () => {
const params = useParams();
const { activeClanURI } = useClanContext();
const modulesQuery = createModulesQuery(activeClanURI());
@@ -27,6 +27,8 @@ export const ModuleDetails = () => {
);
};
export default ModuleDetails;
interface AddModuleProps {
data: ModuleInfo;
id: string;

View File

@@ -12,7 +12,7 @@ import Icon from "@/src/components/icon";
import { useClanContext } from "@/src/contexts/clan";
import { activeClanURI } from "@/src/stores/clan";
export const ModuleDetails = () => {
const ModuleDetails = () => {
const params = useParams();
const { activeClanURI } = useClanContext();
const modulesQuery = createModulesQuery(activeClanURI());
@@ -32,6 +32,8 @@ export const ModuleDetails = () => {
);
};
export default ModuleDetails;
function deepMerge(
// eslint-disable-next-line @typescript-eslint/no-explicit-any
obj1: Record<string, any>,

View File

@@ -108,7 +108,7 @@ const ModuleItem = (props: {
);
};
export const ModuleList = () => {
const ModuleList = () => {
const queryClient = useQueryClient();
const { activeClanURI } = useClanContext();
const modulesQuery = createModulesQuery(activeClanURI(), {
@@ -214,3 +214,5 @@ export const ModuleList = () => {
</>
);
};
export default ModuleList;

View File

@@ -3,7 +3,7 @@ import { registerClan } from "@/src/hooks";
import { useNavigate } from "@solidjs/router";
import { useClanContext } from "@/src/contexts/clan";
export const Welcome = () => {
const Welcome = () => {
const navigate = useNavigate();
const { setActiveClanURI } = useClanContext();
return (
@@ -35,3 +35,5 @@ export const Welcome = () => {
</div>
);
};
export default Welcome;

View File

@@ -230,7 +230,7 @@ const View = (props: ViewProps) => {
);
};
export const ThreePlayground = () => {
const ThreePlayground = () => {
const [count, setCount] = createSignal(1);
const [selected, setSelected] = createSignal<string>("");
@@ -269,3 +269,5 @@ export const ThreePlayground = () => {
</div>
);
};
export default ThreePlayground;