From d0fc188a65551e82d0c4d832ef4840e24da9c698 Mon Sep 17 00:00:00 2001 From: Rory Ou Date: Mon, 23 May 2022 09:21:10 -0400 Subject: [PATCH] Adventures: introduce Page component with proper navbar (#24) * Adventures: introduce Page component with proper navbar * PR fixes --- packages/common/src/components/Navbar.jsx | 2 +- packages/common/src/components/NavbarLink.jsx | 7 +-- packages/projects/src/App.config.json | 22 +++----- packages/projects/src/App.js | 12 ++--- packages/projects/src/components/Page.jsx | 50 +++++++++++++++++++ .../src/views/{Browse.js => Browse.jsx} | 46 ++++++++--------- .../src/views/{Create.js => Create.jsx} | 18 +++---- .../projects/src/views/{Edit.js => Edit.jsx} | 16 +++--- .../src/views/{Login.js => Login.jsx} | 20 ++------ .../src/views/{NotFound.js => NotFound.jsx} | 0 .../projects/src/views/{View.js => View.jsx} | 22 ++++---- 11 files changed, 117 insertions(+), 98 deletions(-) create mode 100644 packages/projects/src/components/Page.jsx rename packages/projects/src/views/{Browse.js => Browse.jsx} (65%) rename packages/projects/src/views/{Create.js => Create.jsx} (94%) rename packages/projects/src/views/{Edit.js => Edit.jsx} (95%) rename packages/projects/src/views/{Login.js => Login.jsx} (79%) rename packages/projects/src/views/{NotFound.js => NotFound.jsx} (100%) rename packages/projects/src/views/{View.js => View.jsx} (84%) diff --git a/packages/common/src/components/Navbar.jsx b/packages/common/src/components/Navbar.jsx index f230781..7c80dce 100644 --- a/packages/common/src/components/Navbar.jsx +++ b/packages/common/src/components/Navbar.jsx @@ -44,7 +44,7 @@ export default function Navbar (props) { } - {menuLinks && + {(menuLinks || additionalMenuItems) &&
{iconName && <> @@ -23,6 +24,6 @@ export default function NavbarLink (props) { {' '} } {title} - + ) } diff --git a/packages/projects/src/App.config.json b/packages/projects/src/App.config.json index fb374e0..d95e5e3 100644 --- a/packages/projects/src/App.config.json +++ b/packages/projects/src/App.config.json @@ -1,27 +1,17 @@ { "appTitle": "Kernel Adventures", + "logoUrl": "/icon-192x192.png", + "homeUrl": "/browse", "minRole": 1000, "navbar": { "links": [ { - "url": "https://kernel.community/en/learn/", - "iconName": "far fa-file-alt", - "title": "Learn" + "url": "/browse", + "title": "Browse" }, { - "url": "https://twitter.com/kernel0x", - "iconName": "fab fa-twitter", - "title": "Tweet" - }, - { - "url": "https://www.youtube.com/channel/UC2kUaSgR0L-uzGkNsOxSxzw", - "iconName": "fab fa-youtube", - "title": "Watch" - }, - { - "url": "https://github.com/kernel-community/", - "iconName": "fab fa-github", - "title": "Contribute" + "url": "/create", + "title": "Create" } ] } diff --git a/packages/projects/src/App.js b/packages/projects/src/App.js index 32b1e60..1f13133 100644 --- a/packages/projects/src/App.js +++ b/packages/projects/src/App.js @@ -10,14 +10,14 @@ import React, { Suspense, lazy } from 'react' import { BrowserRouter, Route, Routes, Navigate } from 'react-router-dom' import { ServicesProvider } from '@kernel/common' -import NotFound from 'views/NotFound.js' +import NotFound from 'views/NotFound' import 'App.css' -const Login = lazy(() => import('views/Login.js')) -const Create = lazy(() => import('views/Create.js')) -const Edit = lazy(() => import('views/Edit.js')) -const Browse = lazy(() => import('views/Browse.js')) -const View = lazy(() => import('views/View.js')) +const Login = lazy(() => import('views/Login')) +const Create = lazy(() => import('views/Create')) +const Edit = lazy(() => import('views/Edit')) +const Browse = lazy(() => import('views/Browse')) +const View = lazy(() => import('views/View')) const App = () => { return ( diff --git a/packages/projects/src/components/Page.jsx b/packages/projects/src/components/Page.jsx new file mode 100644 index 0000000..a38b79d --- /dev/null +++ b/packages/projects/src/components/Page.jsx @@ -0,0 +1,50 @@ +/** + * Copyright (c) Kernel + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + */ + +import { Link } from 'react-router-dom' + +import { Footer, Navbar } from '@kernel/common' + +import AppConfig from 'App.config' + +const editMenuItem = ({ projectHandle }) => { + return ( + + Edit + + ) +} + +const Page = ({ projectHandle, children }) => { + const additionalMenuItems = projectHandle ? [editMenuItem({ projectHandle })] : [] + + return ( +
+ +
+ {children} +
+ +
+ ) +} + +export default Page diff --git a/packages/projects/src/views/Browse.js b/packages/projects/src/views/Browse.jsx similarity index 65% rename from packages/projects/src/views/Browse.js rename to packages/projects/src/views/Browse.jsx index b097845..a1e40e0 100644 --- a/packages/projects/src/views/Browse.js +++ b/packages/projects/src/views/Browse.jsx @@ -11,7 +11,8 @@ import { useNavigate, Link } from 'react-router-dom' import { useServices } from '@kernel/common' import AppConfig from 'App.config' -import NavBar from 'components/NavBar' + +import Page from 'components/Page' const INITIAL_STATE = { items: {} } @@ -44,7 +45,7 @@ const humanize = (ms, dp = 0) => { return `${scaledTime.toFixed(dp)} ${timeUnits[timeScalarIndex]}` } -const Page = () => { +const Browse = () => { const [state, dispatch] = useReducer(reducer, INITIAL_STATE) const navigate = useNavigate() @@ -68,31 +69,24 @@ const Page = () => { }, [services]) return ( -
- -
-
-
-
-
    - {state && state.items && Object.keys(state.items).map((e) => { - const meta = state.items[e] - const project = state.items[e].data - const updated = Date.now() - meta.updated - return ( -
  • - {project.title} - {humanize(updated)} ago -
  • - ) - })} -
-
-
-
+ +
+
    + {state && state.items && Object.keys(state.items).map((e) => { + const meta = state.items[e] + const project = state.items[e].data + const updated = Date.now() - meta.updated + return ( +
  • + {project.title} + {humanize(updated)} ago +
  • + ) + })} +
-
+ ) } -export default Page +export default Browse diff --git a/packages/projects/src/views/Create.js b/packages/projects/src/views/Create.jsx similarity index 94% rename from packages/projects/src/views/Create.js rename to packages/projects/src/views/Create.jsx index a10b326..87b655c 100644 --- a/packages/projects/src/views/Create.js +++ b/packages/projects/src/views/Create.jsx @@ -20,7 +20,8 @@ import { MDXProvider, useMDXComponents } from '@mdx-js/react' import { CodePen, Gist, Figma } from 'mdx-embed' import AppConfig from 'App.config' -import NavBar from 'components/NavBar' + +import Page from 'components/Page' const INITIAL_STATE = { url: '', title: '', markdown: '' } @@ -82,7 +83,7 @@ const create = async (state, dispatch, e) => { console.log(created) } -const Page = () => { +const Create = () => { const [state, dispatch] = useReducer(reducer, INITIAL_STATE) const navigate = useNavigate() @@ -132,10 +133,9 @@ const Page = () => { }, [markdown]) return ( -
- -
-
+ +
+
}
-
+
-
+
) } -export default Page +export default Create diff --git a/packages/projects/src/views/Edit.js b/packages/projects/src/views/Edit.jsx similarity index 95% rename from packages/projects/src/views/Edit.js rename to packages/projects/src/views/Edit.jsx index b7009a3..7a710d3 100644 --- a/packages/projects/src/views/Edit.js +++ b/packages/projects/src/views/Edit.jsx @@ -20,7 +20,8 @@ import { MDXProvider, useMDXComponents } from '@mdx-js/react' import { CodePen, Gist, Figma } from 'mdx-embed' import AppConfig from 'App.config' -import NavBar from 'components/NavBar' + +import Page from 'components/Page' const INITIAL_STATE = { url: '', title: '', markdown: '' } @@ -82,7 +83,7 @@ const update = async (state, dispatch, e) => { console.log(updated) } -const Page = () => { +const Edit = () => { const [state, dispatch] = useReducer(reducer, INITIAL_STATE) const navigate = useNavigate() const { project } = useParams() @@ -138,10 +139,9 @@ const Page = () => { }, [markdown]) return ( -
- -
-
+ +
+
-
+ ) } -export default Page +export default Edit diff --git a/packages/projects/src/views/Login.js b/packages/projects/src/views/Login.jsx similarity index 79% rename from packages/projects/src/views/Login.js rename to packages/projects/src/views/Login.jsx index eb072af..d217bf5 100644 --- a/packages/projects/src/views/Login.js +++ b/packages/projects/src/views/Login.jsx @@ -6,29 +6,15 @@ * */ -import { useNavigate, Link } from 'react-router-dom' +import { useNavigate } from 'react-router-dom' import { useServices, Navbar, Footer } from '@kernel/common' import AppConfig from 'App.config' import bgImage from 'assets/images/admin_bg.png' -const additionalNavItems = [ - ( - - ) -] - const Login = () => { const navigate = useNavigate() const { walletLogin } = useServices() - const navbarConfig = AppConfig.navbar const handleLogin = async () => { const user = await walletLogin() @@ -41,8 +27,8 @@ const Login = () => { return (
diff --git a/packages/projects/src/views/NotFound.js b/packages/projects/src/views/NotFound.jsx similarity index 100% rename from packages/projects/src/views/NotFound.js rename to packages/projects/src/views/NotFound.jsx diff --git a/packages/projects/src/views/View.js b/packages/projects/src/views/View.jsx similarity index 84% rename from packages/projects/src/views/View.js rename to packages/projects/src/views/View.jsx index 2977d76..2769ec6 100644 --- a/packages/projects/src/views/View.js +++ b/packages/projects/src/views/View.jsx @@ -20,7 +20,8 @@ import { MDXProvider, useMDXComponents } from '@mdx-js/react' import { CodePen, Gist, Figma } from 'mdx-embed' import AppConfig from 'App.config' -import NavBar from 'components/NavBar' + +import Page from 'components/Page' /* eslint-disable */ const components = { @@ -36,7 +37,7 @@ const components = { } /* eslint-enable */ -const Page = () => { +const View = () => { const navigate = useNavigate() const { project } = useParams() @@ -85,17 +86,14 @@ const Page = () => { }, [markdown]) return ( -
- -
-
- - {markdownError || } - -
+ +
+ + {markdownError || } +
-
+ ) } -export default Page +export default View