From 98dc854936a90048bf99113fcc38b8a67a47778c Mon Sep 17 00:00:00 2001 From: Igor Barcik Date: Mon, 4 Dec 2023 14:56:53 +0100 Subject: [PATCH] During navigation development. Trying to work out comfy workflow with navigation elements --- README.md | 2 +- bun.lockb | Bin 150085 -> 160747 bytes index.html | 1 - package.json | 3 +- src/configure.tsx | 1 + src/consts.ts | 1 + src/features/AdministrationPage.tsx | 5 ++ src/features/App.tsx | 28 +++++--- src/features/HomePage.tsx | 16 +++++ src/features/InboxPage.tsx | 5 ++ src/main.tsx | 1 + src/routes.tsx | 0 .../DebugNavigationButtonsGenerator.tsx | 26 +++++++ src/routes/RouteStructureGenerator.tsx | 19 +++++ src/routes/routes.tsx | 65 ++++++++++++++++++ 15 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 src/consts.ts create mode 100644 src/features/AdministrationPage.tsx create mode 100644 src/features/HomePage.tsx create mode 100644 src/features/InboxPage.tsx delete mode 100644 src/routes.tsx create mode 100644 src/routes/DebugNavigationButtonsGenerator.tsx create mode 100644 src/routes/RouteStructureGenerator.tsx create mode 100644 src/routes/routes.tsx diff --git a/README.md b/README.md index 64ed812..2429d43 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # TailwindElements-React-Starter -- __nothing__ - main styling +- [DaisyUI](https://daisyui.com/) - main styling - [react-icons](https://react-icons.github.io/react-icons/) - big icon library - [recharts](https://echarts.apache.org/) - charts library - [wouter](https://github.com/molefrog/wouter) - router library diff --git a/bun.lockb b/bun.lockb index 4b557db2ed7944743a291288a52b88996916725e..5dd2ec3d9e522da7a9c515f28c3a2b4021c2c717 100755 GIT binary patch delta 34762 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 z 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 IBo)T}KQuG<%K!iX diff --git a/index.html b/index.html index d8888cf..1a7416c 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,6 @@ -
diff --git a/package.json b/package.json index a1d1e12..073fe61 100644 --- a/package.json +++ b/package.json @@ -15,13 +15,14 @@ "@hookform/resolvers": "^3.3.2", "@tailwindcss/forms": "^0.5.7", "@tanstack/react-table": "^8.10.7", - "appwrite": "^13.0.0", "axios": "^1.6.1", "daisyui": "latest", "echarts": "^5.4.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.48.2", + "react-icons": "^4.12.0", + "recharts": "^2.10.1", "uuid": "^9.0.1", "wouter": "^2.12.1", "zod": "^3.22.4" diff --git a/src/configure.tsx b/src/configure.tsx index b697977..83d92d8 100644 --- a/src/configure.tsx +++ b/src/configure.tsx @@ -6,6 +6,7 @@ export const main = { viteEnv.MODE ? " [development]" : "" }`, program_version: "1.0.0", + basePath: viteEnv.VITE_BASE_PATH, }; //About page configuration export const about = { diff --git a/src/consts.ts b/src/consts.ts new file mode 100644 index 0000000..2ca849c --- /dev/null +++ b/src/consts.ts @@ -0,0 +1 @@ +export const ADMINISTRATION = "administration"; diff --git a/src/features/AdministrationPage.tsx b/src/features/AdministrationPage.tsx new file mode 100644 index 0000000..6d22b66 --- /dev/null +++ b/src/features/AdministrationPage.tsx @@ -0,0 +1,5 @@ +const AdministrationPage = () => { + return
🚀AdministrationPage🚀
; +}; + +export default AdministrationPage; diff --git a/src/features/App.tsx b/src/features/App.tsx index 9b19f5a..83cb99f 100644 --- a/src/features/App.tsx +++ b/src/features/App.tsx @@ -1,19 +1,31 @@ import ThemeButton from "../components/ThemeButton"; import { main } from "../configure"; +import { Router } from "wouter"; +import SwitchRoutesGenerator from "../routes/RouteStructureGenerator"; +import DebugNavigationButtonsGenerator from "../routes/DebugNavigationButtonsGenerator"; function App() { return ( -
-
-

- {main.program_name} v{main.program_version} -

+ +
+
+

+ {main.program_name} v{main.program_version} +

Base path is: {main.basePath}

+

+
+ +
+
+
+
- + + {/* Paths in Route should be without base path (even without '/'). If want Route for base path than pass base path */} +
-
-
+ ); } diff --git a/src/features/HomePage.tsx b/src/features/HomePage.tsx new file mode 100644 index 0000000..33f7271 --- /dev/null +++ b/src/features/HomePage.tsx @@ -0,0 +1,16 @@ +import { useState } from "react"; + +const HomePage = () => { + const [counter, setCounter] = useState(0); + return ( +
+

HomePage

+ +
Counter: {counter}
+
+ ); +}; + +export default HomePage; diff --git a/src/features/InboxPage.tsx b/src/features/InboxPage.tsx new file mode 100644 index 0000000..29544af --- /dev/null +++ b/src/features/InboxPage.tsx @@ -0,0 +1,5 @@ +const InboxPage = () => { + return
InboxPage
; +}; + +export default InboxPage; diff --git a/src/main.tsx b/src/main.tsx index 0216d4a..5f8488f 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -5,6 +5,7 @@ import { viteEnv } from "./configure"; import App from "./features/App"; import inDev from "./utils/inDebug"; import { Global, css } from "@emotion/react"; +import "/style.css"; setupAxiosInterceptors(); inDev(() => console.log(viteEnv)); diff --git a/src/routes.tsx b/src/routes.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/routes/DebugNavigationButtonsGenerator.tsx b/src/routes/DebugNavigationButtonsGenerator.tsx new file mode 100644 index 0000000..7ef9afd --- /dev/null +++ b/src/routes/DebugNavigationButtonsGenerator.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import * as R from "../routes/routes"; +import { Link } from "wouter"; +/** + * This component is used to generate buttons for debug navigation + * UNFINISHED + */ +const DebugNavigationButtonsGenerator = () => { + return ( +
+ + Home + + + {R.routesRoot[1].icon && + React.createElement(R.routesRoot[1].icon, { className: "h-6 w-6" })} + {R.routesRoot[1].name} + +
+ ); +}; + +export default DebugNavigationButtonsGenerator; diff --git a/src/routes/RouteStructureGenerator.tsx b/src/routes/RouteStructureGenerator.tsx new file mode 100644 index 0000000..230febb --- /dev/null +++ b/src/routes/RouteStructureGenerator.tsx @@ -0,0 +1,19 @@ +import { Route, Switch } from "wouter"; +import * as R from "./routes"; + +const SwitchRoutesGenerator = () => { + const routesCrawler = (parentPath?: string): JSX.Element[] => { + return R.routesRoot.map((route, index) => { + return ( + + ); + }); + }; + return {routesCrawler()}; +}; + +export default SwitchRoutesGenerator; diff --git a/src/routes/routes.tsx b/src/routes/routes.tsx new file mode 100644 index 0000000..645b3ab --- /dev/null +++ b/src/routes/routes.tsx @@ -0,0 +1,65 @@ +// ----- IMPORT ICONS ----- +import { RiHome3Fill } from "react-icons/ri"; +import { IoMdOptions } from "react-icons/io"; +import { FaUsers } from "react-icons/fa"; +// ----- IMPORT PAGES ----- +import AdministrationPage from "../features/AdministrationPage"; +import HomePage from "../features/HomePage"; +// ----- IMPORT CONSTS ----- +import { ADMINISTRATION } from "../consts"; + +// ----- TYPE DEFINITIONS ----- +type Route = { + name: string; + path: string; + component: () => JSX.Element; + icon?: () => JSX.Element; + children?: Route[]; +}; +type RoutesObject = { + [key: string]: Route[]; +}; + +// ----- ROUTES DEFINITIONS ----- +//! Don't leave trailor '/' in paths +//! Paths in Route should be without base path (even without '/'). If want Route for base path than pass base path +//* Wouter is basically join paths with each other, so if base path is "/" every sub path souldn't have "/" at the beginning + +// const routesSecondLevel = {}; + +const routesFirstLevel: RoutesObject = { + [ADMINISTRATION]: [ + { + name: "Users", + path: "/users", + component: () => <>UserPage, + icon: FaUsers, + }, + { + name: "Roles", + path: "/roles", + component: () => <>Roles, + }, + { + name: "Permissions", + path: "/permissions", + component: () => <>Permissions, + }, + ], +}; + +export const routesRoot: Route[] = [ + { + name: "Home", + path: "/", + component: HomePage, + icon: RiHome3Fill, + }, + { + name: ADMINISTRATION, + path: "administration", + component: AdministrationPage, + icon: IoMdOptions, + children: routesFirstLevel[ADMINISTRATION], + }, +];