From 547a4d5b66309cf3a4916e10544934cde0419543 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 11:27:26 -0400 Subject: [PATCH 1/2] refactor: integrate PageWithBreadcrumb into Controls layout for improved navigation and remove unused SecondaryMenu component --- .../[orgId]/controls/[controlId]/page.tsx | 15 ++++++++++++++- .../controls/components/ControlsOverview.tsx | 13 ++----------- .../(app)/(dashboard)/[orgId]/controls/layout.tsx | 9 --------- .../(app)/(dashboard)/[orgId]/controls/page.tsx | 5 ++++- 4 files changed, 20 insertions(+), 22 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx index a11887c283..592548785a 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/[controlId]/page.tsx @@ -5,6 +5,7 @@ import { getControl } from "./data/getControl"; import { getOrganizationControlProgress } from "./data/getOrganizationControlProgress"; import type { ControlProgressResponse } from "./data/getOrganizationControlProgress"; import { headers } from "next/headers"; +import PageWithBreadcrumb from "@/components/pages/PageWithBreadcrumb"; interface PageProps { params: Promise<{ controlId: string }>; @@ -41,5 +42,17 @@ export default async function SingleControlPage({ params }: PageProps) { byType: {}, }; - return ; + return ( + + + + ); } diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsOverview.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsOverview.tsx index 181e63d527..223e181cd7 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsOverview.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsOverview.tsx @@ -1,9 +1,8 @@ "use client"; import { useI18n } from "@/locales/client"; -import { Card, CardContent, CardHeader, CardTitle } from "@bubba/ui/card"; -import { ControlsTable } from "./table/ControlsTable"; import type { Control } from "@bubba/db/types"; +import { ControlsTable } from "./table/ControlsTable"; interface ControlsOverviewProps { controls: (Control & { @@ -16,19 +15,11 @@ interface ControlsOverviewProps { organizationId: string; } -export function ControlsOverview({ - controls, - organizationId, -}: ControlsOverviewProps) { +export function ControlsOverview({ controls }: ControlsOverviewProps) { const t = useI18n(); return (
-
-

- {t("controls.overview.title")} -

-
); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/layout.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/layout.tsx index be790f321c..0ee182d077 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/layout.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/layout.tsx @@ -21,15 +21,6 @@ export default async function Layout({ return (
- -
{children}
); diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/page.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/page.tsx index cec055522e..0ca96de7cb 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/page.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/page.tsx @@ -4,6 +4,7 @@ import { headers } from "next/headers"; import { redirect } from "next/navigation"; import { ControlsOverview } from "./components/ControlsOverview"; import { getAllOrganizationControls } from "./data/getAllOrganizationControls"; +import PageWithBreadcrumb from "@/components/pages/PageWithBreadcrumb"; export async function generateMetadata() { const t = await getI18n(); @@ -29,6 +30,8 @@ export default async function ControlsPage() { }); return ( - + + + ); } From 4053a7e87e54618d5e536eb3bedcf4d5012a02a4 Mon Sep 17 00:00:00 2001 From: Claudio Fuentes Date: Thu, 3 Apr 2025 11:32:51 -0400 Subject: [PATCH 2/2] refactor: simplify control links by removing locale from href paths in ControlsTableColumns components --- .../components/ControlsTableColumns.tsx | 2 +- .../components/table/ControlsTableColumns.tsx | 2 +- apps/portal/src/app/components/main-menu.tsx | 242 +++++++++--------- 3 files changed, 123 insertions(+), 123 deletions(-) diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsTableColumns.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsTableColumns.tsx index a15d17ee99..3f46960da8 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsTableColumns.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/ControlsTableColumns.tsx @@ -28,7 +28,7 @@ export function ControlsTableColumns(): ColumnDef[] { const control = row.original; return ( {control.name} diff --git a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/table/ControlsTableColumns.tsx b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/table/ControlsTableColumns.tsx index dd65a30f57..0d1c3d8a22 100644 --- a/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/table/ControlsTableColumns.tsx +++ b/apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/controls/components/table/ControlsTableColumns.tsx @@ -29,7 +29,7 @@ export function ControlsTableColumns(): ColumnDef[] { return (
{control.name} diff --git a/apps/portal/src/app/components/main-menu.tsx b/apps/portal/src/app/components/main-menu.tsx index 83933d1bad..16c78fce13 100644 --- a/apps/portal/src/app/components/main-menu.tsx +++ b/apps/portal/src/app/components/main-menu.tsx @@ -5,10 +5,10 @@ import { Button } from "@bubba/ui/button"; import { cn } from "@bubba/ui/cn"; import { Icons } from "@bubba/ui/icons"; import { - Tooltip, - TooltipContent, - TooltipProvider, - TooltipTrigger, + Tooltip, + TooltipContent, + TooltipProvider, + TooltipTrigger, } from "@bubba/ui/tooltip"; import { useClickAway } from "@uidotdev/usehooks"; import { Reorder, motion, useMotionValue } from "framer-motion"; @@ -19,146 +19,146 @@ import { useState } from "react"; import { useLongPress } from "use-long-press"; const icons = { - "/": () => , + "/": () => , }; interface ItemProps { - item: { path: string; name: string; disabled: boolean }; - isActive: boolean; - onSelect?: () => void; - disabled: boolean; + item: { path: string; name: string; disabled: boolean }; + isActive: boolean; + onSelect?: () => void; + disabled: boolean; } const Item = ({ item, isActive, onSelect, disabled }: ItemProps) => { - const Icon = icons[item.path as keyof typeof icons]; - const linkDisabled = disabled || item.disabled; + const Icon = icons[item.path as keyof typeof icons]; + const linkDisabled = disabled || item.disabled; - return ( - - {linkDisabled ? ( -
- Coming -
- ) : ( - onSelect?.()}> - - - - -
- - {item.name} -
-
-
-
- - {item.name} - -
- - )} -
- ); + return ( + + {linkDisabled ? ( +
+ Coming +
+ ) : ( + onSelect?.()}> + + + + +
+ + {item.name} +
+
+
+
+ + {item.name} + +
+ + )} +
+ ); }; const listVariant = { - hidden: { opacity: 0 }, - show: { - opacity: 1, - transition: { - staggerChildren: 0.04, - }, - }, + hidden: { opacity: 0 }, + show: { + opacity: 1, + transition: { + staggerChildren: 0.04, + }, + }, }; const itemVariant = { - hidden: { opacity: 0 }, - show: { opacity: 1 }, + hidden: { opacity: 0 }, + show: { opacity: 1 }, }; type Props = { - initialItems?: { path: string; name: string; disabled: boolean }[]; - onSelect?: () => void; + initialItems?: { path: string; name: string; disabled: boolean }[]; + onSelect?: () => void; }; export function MainMenu({ initialItems, onSelect }: Props) { - const t = useI18n(); + const t = useI18n(); - const defaultItems = [ - { - path: "/", - name: "Dashboard", - disabled: false, - }, - ]; + const defaultItems = [ + { + path: "/", + name: "Frameworks", + disabled: false, + }, + ]; - const [items, setItems] = useState(initialItems ?? defaultItems); - const pathname = usePathname(); - const part = pathname?.split("/")[1]; + const [items, setItems] = useState(initialItems ?? defaultItems); + const pathname = usePathname(); + const part = pathname?.split("/")[1]; - const hiddenItems = defaultItems.filter( - (item) => !items.some((i) => i.path === item.path), - ); + const hiddenItems = defaultItems.filter( + (item) => !items.some((i) => i.path === item.path), + ); - const onReorder = ( - items: { - path: string; - name: string; - disabled: boolean; - }[], - ) => { - setItems(items); - }; + const onReorder = ( + items: { + path: string; + name: string; + disabled: boolean; + }[], + ) => { + setItems(items); + }; - return ( -
- +
+ ); }