From 1b39aaaa38ad17641838c48cf352f56a1e5bff29 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Wed, 1 Mar 2023 09:46:50 +0000 Subject: [PATCH] implement description --- core/src/api/mod.rs | 8 +- frontend/src/components/Description.tsx | 125 ++++++++++++++++++ frontend/src/components/NotFound.tsx | 27 ++-- frontend/src/components/build/Build.tsx | 18 ++- .../src/components/deployment/Deployment.tsx | 21 ++- frontend/src/components/server/Server.tsx | 20 ++- frontend/src/components/server/tabs/Info.tsx | 16 ++- frontend/src/components/shared/TextArea.tsx | 1 + frontend/src/style/index.scss | 3 +- 9 files changed, 207 insertions(+), 32 deletions(-) create mode 100644 frontend/src/components/Description.tsx diff --git a/core/src/api/mod.rs b/core/src/api/mod.rs index 86c3ba9bf..791d1370b 100644 --- a/core/src/api/mod.rs +++ b/core/src/api/mod.rs @@ -170,7 +170,7 @@ impl State { self.get_deployment_check_permissions(id, user, PermissionLevel::Update) .await?; self.db - .builds + .deployments .update_one::<()>(id, mungos::Update::Set(doc! { "description": description })) .await?; } @@ -178,7 +178,7 @@ impl State { self.get_server_check_permissions(id, user, PermissionLevel::Update) .await?; self.db - .builds + .servers .update_one::<()>(id, mungos::Update::Set(doc! { "description": description })) .await?; } @@ -186,7 +186,7 @@ impl State { self.get_group_check_permissions(id, user, PermissionLevel::Update) .await?; self.db - .builds + .groups .update_one::<()>(id, mungos::Update::Set(doc! { "description": description })) .await?; } @@ -194,7 +194,7 @@ impl State { self.get_procedure_check_permissions(id, user, PermissionLevel::Update) .await?; self.db - .builds + .procedures .update_one::<()>(id, mungos::Update::Set(doc! { "description": description })) .await?; } diff --git a/frontend/src/components/Description.tsx b/frontend/src/components/Description.tsx new file mode 100644 index 000000000..aef07cd6a --- /dev/null +++ b/frontend/src/components/Description.tsx @@ -0,0 +1,125 @@ +import { Component, createSignal, onMount, Show } from "solid-js"; +import { client, pushNotification } from ".."; +import { useAppState } from "../state/StateProvider"; +import { UpdateTarget } from "../types"; +import { useToggle } from "../util/hooks"; +import ConfirmButton from "./shared/ConfirmButton"; +import Flex from "./shared/layout/Flex"; +import Grid from "./shared/layout/Grid"; +import Loading from "./shared/loading/Loading"; +import CenterMenu from "./shared/menu/CenterMenu"; +import TextArea from "./shared/TextArea"; + +const Description: Component<{ + name: string; + target: UpdateTarget; + description?: string; + userCanUpdate: boolean; +}> = (p) => { + const [show, toggleShow] = useToggle(); + const description = () => { + if (p.description) { + return p.description; + } else { + return "add a description"; + } + }; + const [width, setWidth] = createSignal(); + onMount(() => { + setWidth(ref!?.clientWidth); + }); + let ref: HTMLDivElement; + return ( + + {width() ? description() : ""} + + } + content={() => ( + + )} + /> + ); +}; + +const DescriptionMenu: Component<{ + target: UpdateTarget; + description?: string; + userCanUpdate: boolean; + toggleShow: () => void; +}> = (p) => { + const { builds, servers, deployments } = useAppState(); + let ref: HTMLTextAreaElement; + onMount(() => { + ref?.focus(); + }); + const [desc, setDesc] = createSignal(p.description); + const [loading, setLoading] = createSignal(false); + const update_description = () => { + setLoading(true); + client + .update_description({ target: p.target, description: desc() || "" }) + .then(() => { + if (p.target.type === "Build") { + builds.update({ ...builds.get(p.target.id)!, description: desc() }); + } else if (p.target.type === "Deployment") { + const deployment = deployments.get(p.target.id)!; + deployments.update({ + ...deployment, + deployment: { ...deployment.deployment, description: desc() }, + }); + } else if (p.target.type === "Server") { + const server = servers.get(p.target.id)!; + servers.update({ + ...server, + server: { ...server.server, description: desc() }, + }); + } + p.toggleShow(); + }) + .catch(() => { + pushNotification("bad", "failed to update description"); + p.toggleShow(); + }); + }; + return ( + +