diff --git a/README.md b/README.md index 3ad0cac4..d0a0b7ee 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ As of today (2023-12-12) I have more then 1.2 million events in PSQL and perform - [*] View profiles in a list - [ ] Invite users - [ ] Drag n Drop reports on dashboard -- [ ] Manage dashboards +- [x] Manage dashboards - [ ] Support more chart types - [x] Bar - [ ] Pie diff --git a/apps/web/package.json b/apps/web/package.json index 17d93550..59065e3e 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -45,6 +45,7 @@ "mitt": "^3.0.1", "next": "13.4", "next-auth": "^4.23.0", + "prisma-error-enum": "^0.1.3", "ramda": "^0.29.1", "random-animal-name": "^0.1.1", "react": "18.2.0", diff --git a/apps/web/src/components/Card.tsx b/apps/web/src/components/Card.tsx index 50432d51..f4ce4090 100644 --- a/apps/web/src/components/Card.tsx +++ b/apps/web/src/components/Card.tsx @@ -1,20 +1,48 @@ +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuTrigger, +} from '@/components/ui/dropdown-menu'; import type { HtmlProps } from '@/types'; import { cn } from '@/utils/cn'; +import { MoreHorizontal } from 'lucide-react'; type CardProps = HtmlProps & { hover?: boolean; }; -export function Card({ children, hover }: CardProps) { +export function Card({ children, hover, className }: CardProps) { return (
{children}
); } + +interface CardActionsProps { + children: React.ReactNode; +} +export function CardActions({ children }: CardActionsProps) { + return ( +
+ + + + + + {children} + + +
+ ); +} + +export const CardActionsItem = DropdownMenuItem; diff --git a/apps/web/src/components/navbar/NavbarMenu.tsx b/apps/web/src/components/navbar/NavbarMenu.tsx index 53f8e3e3..060ea009 100644 --- a/apps/web/src/components/navbar/NavbarMenu.tsx +++ b/apps/web/src/components/navbar/NavbarMenu.tsx @@ -1,35 +1,46 @@ import { useOrganizationParams } from '@/hooks/useOrganizationParams'; import { cn } from '@/utils/cn'; import { strip } from '@/utils/object'; +import type { LinkProps } from 'next/link'; import Link from 'next/link'; import { NavbarUserDropdown } from './NavbarUserDropdown'; +function Item({ + children, + ...props +}: LinkProps & { children: React.ReactNode }) { + return ( + +
+ {children} + + ); +} + export function NavbarMenu() { const params = useOrganizationParams(); return ( -
+
{params.project && ( - - Home - + Home )} {params.project && ( - + Events - + )} {params.project && ( - + Profiles - + )} {params.project && ( - Create report - + )}
diff --git a/apps/web/src/components/navbar/NavbarUserDropdown.tsx b/apps/web/src/components/navbar/NavbarUserDropdown.tsx index ec72e2d2..323ef5df 100644 --- a/apps/web/src/components/navbar/NavbarUserDropdown.tsx +++ b/apps/web/src/components/navbar/NavbarUserDropdown.tsx @@ -9,20 +9,20 @@ import { } from '@/components/ui/dropdown-menu'; import { useOrganizationParams } from '@/hooks/useOrganizationParams'; import { User } from 'lucide-react'; -import { signOut } from 'next-auth/react'; +import { signOut, useSession } from 'next-auth/react'; import Link from 'next/link'; export function NavbarUserDropdown() { const params = useOrganizationParams(); + const session = useSession(); + const user = session.data?.user; return ( - - + + + {user?.name?.charAt(0) ?? '🤠'} + diff --git a/apps/web/src/components/ui/dropdown-menu.tsx b/apps/web/src/components/ui/dropdown-menu.tsx index 30d36822..a2cf187a 100644 --- a/apps/web/src/components/ui/dropdown-menu.tsx +++ b/apps/web/src/components/ui/dropdown-menu.tsx @@ -80,7 +80,7 @@ const DropdownMenuItem = React.forwardRef< @@ -37,9 +44,24 @@ export default function Home() { > {item.name} + + + + + + ))} - +