From 2cea99de9682b97f6c14a1fd824eb07fff0faba0 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Sun, 10 Apr 2022 13:04:50 -0700 Subject: [PATCH] add can edit indicator in the sidebar + username in topbar --- core/src/routes/deployments.ts | 31 ------------------- frontend/public/icons/edit.svg | 13 ++++++++ frontend/src/components/home/Home.tsx | 8 ++--- .../src/components/sidebar/builds/Build.tsx | 14 ++++++++- .../components/sidebar/server/Deployment.tsx | 23 ++++++++++++-- .../src/components/sidebar/server/Server.tsx | 9 +----- frontend/src/components/topbar/Account.tsx | 1 - frontend/src/components/topbar/Topbar.tsx | 5 ++- frontend/src/components/util/Icon.tsx | 3 +- .../src/components/util/menu/HoverMenu.tsx | 9 ++++-- frontend/src/state/UserProvider.tsx | 8 ++--- 11 files changed, 66 insertions(+), 58 deletions(-) create mode 100644 frontend/public/icons/edit.svg diff --git a/core/src/routes/deployments.ts b/core/src/routes/deployments.ts index 7f16bfd35..b25726b60 100644 --- a/core/src/routes/deployments.ts +++ b/core/src/routes/deployments.ts @@ -32,37 +32,6 @@ async function getDeployments(app: FastifyInstance, serverID: string) { } const deployments = fp((app: FastifyInstance, _: {}, done: () => void) => { - // app.get( - // "/api/deployments", - // { onRequest: [app.auth, app.userEnabled] }, - // async (req, res) => { - // // returns the periphery deployments on the given serverID - // // returns the core deployments if no serverID is specified - // const { serverID } = req.query as { serverID?: string }; - // const server = serverID ? await app.servers.findById(serverID) : app.core; - // if (!server) { - // res.status(400); - // res.send(); - // return; - // } - // const deployments = await app.deployments.find( - // { serverID: server._id }, - // "name containerName serverID owners repo" - // ); - // const status = server.isCore - // ? await deploymentStatusLocal(app) - // : await getPeripheryContainers(server); - // res.send( - // intoCollection( - // deployments.map((deployment) => ({ - // ...deployment, - // status: status[deployment.containerName!] || "not deployed", - // })) - // ) - // ); - // } - // ); - app.get( "/api/deployments", { onRequest: [app.auth, app.userEnabled] }, diff --git a/frontend/public/icons/edit.svg b/frontend/public/icons/edit.svg new file mode 100644 index 000000000..aec04099c --- /dev/null +++ b/frontend/public/icons/edit.svg @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/frontend/src/components/home/Home.tsx b/frontend/src/components/home/Home.tsx index 15340520e..53c390cb4 100644 --- a/frontend/src/components/home/Home.tsx +++ b/frontend/src/components/home/Home.tsx @@ -47,8 +47,8 @@ const Home: Component<{}> = (p) => { 0} > - -

my deployments

+ +

my deployments

{(id) => (
); diff --git a/frontend/src/components/sidebar/server/Deployment.tsx b/frontend/src/components/sidebar/server/Deployment.tsx index 84cbacc8d..227381545 100644 --- a/frontend/src/components/sidebar/server/Deployment.tsx +++ b/frontend/src/components/sidebar/server/Deployment.tsx @@ -1,12 +1,17 @@ import { ContainerStatus } from "@monitor/types"; import { Component, Show } from "solid-js"; import { useAppState } from "../../../state/StateProvider"; +import { useUser } from "../../../state/UserProvider"; import { combineClasses, deploymentStatusClass } from "../../../util/helpers"; +import Icon from "../../util/Icon"; +import Flex from "../../util/layout/Flex"; +import HoverMenu from "../../util/menu/HoverMenu"; import s from "../sidebar.module.scss"; const Deployment: Component<{ id: string }> = (p) => { const { deployments, selected } = useAppState(); - const deployment = () => deployments.get(p.id); + const { permissions, username } = useUser(); + const deployment = () => deployments.get(p.id)!; const status = () => { if (!deployment() || deployment()!.status === "not deployed") { return "not deployed"; @@ -24,7 +29,21 @@ const Deployment: Component<{ id: string }> = (p) => { onClick={() => selected.set(deployment()!._id!, "deployment")} >
{deployment()!.name}
-
{status()}
+ + + } + content="you are a collaborator" + padding="0.5rem" + position="bottom center" + /> + +
{status()}
+
); diff --git a/frontend/src/components/sidebar/server/Server.tsx b/frontend/src/components/sidebar/server/Server.tsx index a4798fa88..340596a44 100644 --- a/frontend/src/components/sidebar/server/Server.tsx +++ b/frontend/src/components/sidebar/server/Server.tsx @@ -22,13 +22,6 @@ const Server: Component<{ id: string }> = (p) => { ); }); const [open, toggleOpen] = useLocalStorageToggle(p.id); - // createEffect(() => { - // if (server() && !server()!.isCore) { - // getDeployments({ serverID: p.id }).then((more) => - // deployments.addMany(more) - // ); - // } - // }); return (
@@ -42,7 +35,7 @@ const Server: Component<{ id: string }> = (p) => { > -

{server()?.name}

+

{server()?.name}

void }> = (p) => { const { username, permissions } = useUser(); return ( -
{username()}
permissions: {readablePermissions(permissions())}
1}> } content={} diff --git a/frontend/src/components/util/Icon.tsx b/frontend/src/components/util/Icon.tsx index e4c90edf8..f77eea065 100644 --- a/frontend/src/components/util/Icon.tsx +++ b/frontend/src/components/util/Icon.tsx @@ -33,7 +33,8 @@ export type IconType = | "refresh" | "cut" | "fullscreen" - | "github"; + | "github" + | "edit"; const Icon: Component<{ type: IconType; diff --git a/frontend/src/components/util/menu/HoverMenu.tsx b/frontend/src/components/util/menu/HoverMenu.tsx index f7ad917c9..9824aacb8 100644 --- a/frontend/src/components/util/menu/HoverMenu.tsx +++ b/frontend/src/components/util/menu/HoverMenu.tsx @@ -7,6 +7,7 @@ import { Show, } from "solid-js"; import { combineClasses } from "../../../util/helpers"; +import Flex from "../layout/Flex"; import { getPositionClass } from "./helpers"; import { Position } from "./helpers"; import s from "./menu.module.scss"; @@ -17,7 +18,7 @@ const HoverMenu: Component<{ position?: Position; padding?: string; contentStyle?: JSX.CSSProperties; - + containerStyle?: JSX.CSSProperties; }> = (p) => { const [show, set] = createSignal(false); const [buffer, setBuffer] = createSignal(false); @@ -33,12 +34,14 @@ const HoverMenu: Component<{ } }); return ( -
set(true)} onMouseLeave={() => set(false)} onTouchStart={() => set((show) => !show)} // onClick={(e) => e.stopPropagation()} + alignItems="center" > {p.target} @@ -60,7 +63,7 @@ const HoverMenu: Component<{ {p.content}
-
+ ); }; diff --git a/frontend/src/state/UserProvider.tsx b/frontend/src/state/UserProvider.tsx index ca0030bd0..e827b70ee 100644 --- a/frontend/src/state/UserProvider.tsx +++ b/frontend/src/state/UserProvider.tsx @@ -11,7 +11,7 @@ export type UserState = { user: () => User; setUser: Setter; logout: () => void; - username: () => string | undefined; + username: () => string; permissions: () => number; loginStatus: () => | "LOGGED_IN_ENABLED" @@ -30,11 +30,7 @@ export const UserProvider: Component = (p) => { mutate(false); }; const username = () => { - if (user()) { - return (user() as User).username; - } else { - return undefined; - } + return (user() as User)?.username!; }; const loginStatus = createMemo(() => { const _user = user();