From 162390008bfef71358e2e4beb93b7ad28aa63601 Mon Sep 17 00:00:00 2001 From: Darren Clarke Date: Thu, 9 May 2024 07:42:44 +0200 Subject: [PATCH] Bridge integration --- apps/bridge-frontend/app/(main)/page.tsx | 7 +- .../bridge-frontend/app/_components/Login.tsx | 5 +- apps/leafcutter/Dockerfile | 1 - .../app/(login)/login/_components/Login.tsx | 5 +- .../app/(main)/_components/InternalLayout.tsx | 2 +- .../link/app/(main)/_components/SearchBox.tsx | 2 +- apps/link/app/(main)/_components/Sidebar.tsx | 96 +++-- .../bridge/[...segment]/@create/page.tsx | 11 + .../bridge/[...segment]/@detail/page.tsx | 27 ++ .../admin/bridge/[...segment]/@edit/page.tsx | 27 ++ .../admin/bridge/[...segment]/layout.tsx | 3 + .../(main)/admin/bridge/[...segment]/page.tsx | 22 ++ apps/link/app/(main)/admin/bridge/page.tsx | 5 +- .../(main)/docs/_components/DocsWrapper.tsx | 5 +- apps/link/app/(main)/leafcutter/page.tsx | 2 +- .../_components/TicketCreateDialog.tsx | 174 ++++----- .../[overview]/_components/TicketList.tsx | 69 ++-- .../[overview]/_components/ZammadOverview.tsx | 2 +- .../[id]/@detail/_components/TicketDetail.tsx | 89 ++--- .../[id]/@edit/_components/TicketEdit.tsx | 331 ++++++++++-------- apps/link/app/_actions/tickets.ts | 113 ++++++ apps/link/app/_actions/users.ts | 3 + apps/link/app/_components/MultiProvider.tsx | 30 +- apps/link/app/_styles/theme.ts | 113 ------ apps/link/package.json | 3 +- docker/compose/leafcutter.yml | 2 +- docker/compose/link.yml | 2 +- docker/memcached/Dockerfile | 2 +- docker/nginx-proxy/Dockerfile | 2 +- docker/opensearch-dashboards/Dockerfile | 2 +- docker/opensearch/Dockerfile | 2 +- docker/signal-cli-rest-api/Dockerfile | 2 +- docker/zammad/Dockerfile | 4 +- packages/bridge-ui/components/Create.tsx | 7 +- packages/bridge-ui/components/Detail.tsx | 13 +- packages/bridge-ui/components/Edit.tsx | 7 +- packages/bridge-ui/components/Home.tsx | 5 + packages/bridge-ui/components/List.tsx | 9 +- packages/bridge-ui/config/webhooks.ts | 11 +- packages/bridge-ui/index.ts | 1 + packages/bridge-ui/lib/frontendUtils.ts | 10 + packages/bridge-ui/tsconfig.tsbuildinfo | 2 +- .../leafcutter-ui/actions/visualizations.ts | 33 +- packages/leafcutter-ui/components/Home.tsx | 16 +- packages/leafcutter-ui/lib/frontendUtils.ts | 9 + packages/leafcutter-ui/lib/utils.ts | 9 + packages/leafcutter-ui/tsconfig.tsbuildinfo | 2 +- packages/opensearch-common/lib/opensearch.ts | 2 +- .../opensearch-common/tsconfig.tsbuildinfo | 2 +- packages/ui/components/Autocomplete.tsx | 38 ++ packages/ui/components/List.tsx | 11 +- packages/ui/components/Sidebar.tsx | 2 +- packages/ui/components/SidebarItem.tsx | 2 +- packages/ui/components/TextField.tsx | 8 +- packages/ui/index.ts | 1 + packages/ui/tsconfig.tsbuildinfo | 2 +- 56 files changed, 776 insertions(+), 591 deletions(-) create mode 100644 apps/link/app/(main)/admin/bridge/[...segment]/@create/page.tsx create mode 100644 apps/link/app/(main)/admin/bridge/[...segment]/@detail/page.tsx create mode 100644 apps/link/app/(main)/admin/bridge/[...segment]/@edit/page.tsx create mode 100644 apps/link/app/(main)/admin/bridge/[...segment]/layout.tsx create mode 100644 apps/link/app/(main)/admin/bridge/[...segment]/page.tsx create mode 100644 apps/link/app/_actions/tickets.ts create mode 100644 apps/link/app/_actions/users.ts delete mode 100644 apps/link/app/_styles/theme.ts create mode 100644 packages/bridge-ui/components/Home.tsx create mode 100644 packages/bridge-ui/lib/frontendUtils.ts create mode 100644 packages/leafcutter-ui/lib/frontendUtils.ts create mode 100644 packages/leafcutter-ui/lib/utils.ts create mode 100644 packages/ui/components/Autocomplete.tsx diff --git a/apps/bridge-frontend/app/(main)/page.tsx b/apps/bridge-frontend/app/(main)/page.tsx index c16c000..d8a8d6c 100644 --- a/apps/bridge-frontend/app/(main)/page.tsx +++ b/apps/bridge-frontend/app/(main)/page.tsx @@ -1,4 +1,5 @@ -export default function Page() { - return

Home

; -} +import { Home } from "bridge-ui"; +export default function Page() { + return ; +} diff --git a/apps/bridge-frontend/app/_components/Login.tsx b/apps/bridge-frontend/app/_components/Login.tsx index 0b3cfbb..9282b19 100644 --- a/apps/bridge-frontend/app/_components/Login.tsx +++ b/apps/bridge-frontend/app/_components/Login.tsx @@ -17,7 +17,7 @@ import { import { signIn } from "next-auth/react"; import Image from "next/image"; import LinkLogo from "@/app/_images/link-logo-small.png"; -import { colors } from "ui"; +import { colors, fonts } from "ui"; import { useSearchParams } from "next/navigation"; type LoginProps = { @@ -34,6 +34,7 @@ export const Login: FC = ({ session }) => { const params = useSearchParams(); const error = params.get("error"); const { darkGray, cdrLinkOrange, white } = colors; + const { poppins } = fonts; const buttonStyles = { borderRadius: 500, width: "100%", @@ -102,7 +103,7 @@ export const Login: FC = ({ session }) => { fontWeight: 700, mt: 1, ml: 0.5, - fontFamily: "Poppins", + fontFamily: poppins.style.fontFamily, }} > CDR Bridge diff --git a/apps/leafcutter/Dockerfile b/apps/leafcutter/Dockerfile index a682ef0..a37308e 100644 --- a/apps/leafcutter/Dockerfile +++ b/apps/leafcutter/Dockerfile @@ -1,4 +1,3 @@ - FROM node:20 AS base FROM base AS builder diff --git a/apps/link/app/(login)/login/_components/Login.tsx b/apps/link/app/(login)/login/_components/Login.tsx index 16331e3..5a2dc3f 100644 --- a/apps/link/app/(login)/login/_components/Login.tsx +++ b/apps/link/app/(login)/login/_components/Login.tsx @@ -17,7 +17,7 @@ import { import { signIn } from "next-auth/react"; import Image from "next/image"; import LinkLogo from "public/link-logo-small.png"; -import { colors } from "app/_styles/theme"; +import { colors, fonts } from "ui"; import { useSearchParams } from "next/navigation"; type LoginProps = { @@ -34,6 +34,7 @@ export const Login: FC = ({ session }) => { const params = useSearchParams(); const error = params.get("error"); const { darkGray, cdrLinkOrange, white } = colors; + const { poppins } = fonts; const buttonStyles = { borderRadius: 500, width: "100%", @@ -102,7 +103,7 @@ export const Login: FC = ({ session }) => { fontWeight: 700, mt: 1, ml: 0.5, - fontFamily: "Poppins", + fontFamily: poppins.style.fontFamily, }} > CDR Link diff --git a/apps/link/app/(main)/_components/InternalLayout.tsx b/apps/link/app/(main)/_components/InternalLayout.tsx index 3eea55f..a388f59 100644 --- a/apps/link/app/(main)/_components/InternalLayout.tsx +++ b/apps/link/app/(main)/_components/InternalLayout.tsx @@ -12,7 +12,7 @@ export const InternalLayout: FC = ({ children }) => { {children as any} diff --git a/apps/link/app/(main)/_components/SearchBox.tsx b/apps/link/app/(main)/_components/SearchBox.tsx index 03f0f37..d854e15 100644 --- a/apps/link/app/(main)/_components/SearchBox.tsx +++ b/apps/link/app/(main)/_components/SearchBox.tsx @@ -3,7 +3,7 @@ import { usePathname, useRouter } from "next/navigation"; import useSWR from "swr"; import { Grid, Box, TextField, Autocomplete } from "@mui/material"; import { searchQuery } from "@/app/_graphql/searchQuery"; -import { colors } from "@/app/_styles/theme"; +import { colors } from "ui"; type SearchResultProps = { props: any; diff --git a/apps/link/app/(main)/_components/Sidebar.tsx b/apps/link/app/(main)/_components/Sidebar.tsx index 55daed4..f4bfb72 100644 --- a/apps/link/app/(main)/_components/Sidebar.tsx +++ b/apps/link/app/(main)/_components/Sidebar.tsx @@ -35,10 +35,10 @@ import LinkLogo from "public/link-logo-small.png"; import { useSession, signOut } from "next-auth/react"; import { getTicketOverviewCountsQuery } from "app/_graphql/getTicketOverviewCountsQuery"; import { SearchBox } from "./SearchBox"; -import { fonts } from "app/_styles/theme"; +import { fonts } from "ui"; const openWidth = 270; -const closedWidth = 100; +const closedWidth = 70; const MenuItem = ({ name, @@ -49,6 +49,7 @@ const MenuItem = ({ selected = false, open = true, badge, + depth = 0, target = "_self", }: any) => { const { roboto } = fonts; @@ -90,8 +91,8 @@ const MenuItem = ({ width: 30, height: "28px", position: "relative", - ml: "9px", - mr: "1px", + ml: "8px", + mr: "2px", }} > + {depth > 0 && ( + + )} )} {open && ( @@ -132,6 +145,7 @@ const MenuItem = ({ border: 0, textAlign: "left", color: "white", + ml: depth * 3, }} > {name} @@ -220,7 +234,7 @@ export const Sidebar: FC = ({ open, setOpen }) => { = ({ open, setOpen }) => { > = ({ open, setOpen }) => { }} /> - - - + {open && } = ({ open, setOpen }) => { <> = ({ open, setOpen }) => { onClick={undefined} > + + + + + + + + + + = ({ open, setOpen }) => { selected={pathname.endsWith("/admin/zammad")} open={open} /> - {false && roles.includes("bridge") && ( - - )} {roles.includes("label_studio") && ( ; +} diff --git a/apps/link/app/(main)/admin/bridge/[...segment]/@detail/page.tsx b/apps/link/app/(main)/admin/bridge/[...segment]/@detail/page.tsx new file mode 100644 index 0000000..66d9c09 --- /dev/null +++ b/apps/link/app/(main)/admin/bridge/[...segment]/@detail/page.tsx @@ -0,0 +1,27 @@ +import { db } from "bridge-common"; +import { serviceConfig, Detail } from "bridge-ui"; + +type Props = { + params: { segment: string[] }; +}; + +export default async function Page({ params: { segment } }: Props) { + const service = segment[0]; + const id = segment?.[1]; + + if (!id) return null; + + const { + [service]: { table }, + } = serviceConfig; + + const row = await db + .selectFrom(table) + .selectAll() + .where("id", "=", id) + .executeTakeFirst(); + + if (!row) return null; + + return ; +} diff --git a/apps/link/app/(main)/admin/bridge/[...segment]/@edit/page.tsx b/apps/link/app/(main)/admin/bridge/[...segment]/@edit/page.tsx new file mode 100644 index 0000000..f028400 --- /dev/null +++ b/apps/link/app/(main)/admin/bridge/[...segment]/@edit/page.tsx @@ -0,0 +1,27 @@ +import { db } from "bridge-common"; +import { serviceConfig, Edit } from "bridge-ui"; + +type PageProps = { + params: { segment: string[] }; +}; + +export default async function Page({ params: { segment } }: PageProps) { + const service = segment[0]; + const id = segment?.[1]; + + if (!id) return null; + + const { + [service]: { table }, + } = serviceConfig; + + const row = await db + .selectFrom(table) + .selectAll() + .where("id", "=", id) + .executeTakeFirst(); + + if (!row) return null; + + return ; +} diff --git a/apps/link/app/(main)/admin/bridge/[...segment]/layout.tsx b/apps/link/app/(main)/admin/bridge/[...segment]/layout.tsx new file mode 100644 index 0000000..773d96c --- /dev/null +++ b/apps/link/app/(main)/admin/bridge/[...segment]/layout.tsx @@ -0,0 +1,3 @@ +import { ServiceLayout } from "bridge-ui"; + +export default ServiceLayout; diff --git a/apps/link/app/(main)/admin/bridge/[...segment]/page.tsx b/apps/link/app/(main)/admin/bridge/[...segment]/page.tsx new file mode 100644 index 0000000..6da1c45 --- /dev/null +++ b/apps/link/app/(main)/admin/bridge/[...segment]/page.tsx @@ -0,0 +1,22 @@ +import { db } from "bridge-common"; +import { serviceConfig, List } from "bridge-ui"; + +type PageProps = { + params: { + segment: string[]; + }; +}; + +export default async function Page({ params: { segment } }: PageProps) { + const service = segment[0]; + + if (!service) return null; + + const config = serviceConfig[service]; + + if (!config) return null; + + const rows = await db.selectFrom(config.table).selectAll().execute(); + + return ; +} diff --git a/apps/link/app/(main)/admin/bridge/page.tsx b/apps/link/app/(main)/admin/bridge/page.tsx index 5ba85be..d8a8d6c 100644 --- a/apps/link/app/(main)/admin/bridge/page.tsx +++ b/apps/link/app/(main)/admin/bridge/page.tsx @@ -1,6 +1,5 @@ -// import { Admin } from "./_components/Admin"; -import { Box } from "@mui/material"; +import { Home } from "bridge-ui"; export default function Page() { - return ; + return ; } diff --git a/apps/link/app/(main)/docs/_components/DocsWrapper.tsx b/apps/link/app/(main)/docs/_components/DocsWrapper.tsx index 2c521e7..319f428 100644 --- a/apps/link/app/(main)/docs/_components/DocsWrapper.tsx +++ b/apps/link/app/(main)/docs/_components/DocsWrapper.tsx @@ -11,7 +11,10 @@ export const DocsWrapper: FC = () => ( sx={{ height: "100%", width: "100%" }} direction="column" > - +