diff --git a/app/components/header.tsx b/app/components/header.tsx index 9f394cc..1e8feb0 100644 --- a/app/components/header.tsx +++ b/app/components/header.tsx @@ -1,8 +1,15 @@ -export default function Header() { +import type { HeaderProps } from '@/types/header.types'; +import UserProfileDropdown from './header/user-profile-dropdown'; + +export default function Header({ headerType }: HeaderProps) { return (
EquiBoard
- {/*
User Section
*/} + {headerType === 'user-section' && ( +
+ +
+ )}
); } diff --git a/app/components/header/user-profile-dropdown.tsx b/app/components/header/user-profile-dropdown.tsx new file mode 100644 index 0000000..99298bb --- /dev/null +++ b/app/components/header/user-profile-dropdown.tsx @@ -0,0 +1,45 @@ +import * as DropdownMenu from '@radix-ui/react-dropdown-menu'; +import * as Avatar from '@radix-ui/react-avatar'; +import { LogOut, Settings, User } from 'lucide-react'; + +export default function UserProfileDropdown() { + return ( + + {/* Trigger */} + + + + + {/* Dropdown */} + + + + + Profile + + + + + Settings + + + + + + + Logout + + + + + ); +} diff --git a/app/components/org-card.tsx b/app/components/org-card.tsx index 9d14602..57adaae 100644 --- a/app/components/org-card.tsx +++ b/app/components/org-card.tsx @@ -1,13 +1,24 @@ -import type { JSX } from 'react'; import type { IOrgCard } from '@/types/org-card.types'; -export default function orgCard({ cardProps, addClass }: { cardProps: IOrgCard; addClass: string }): JSX.Element { +interface OrgCardProps { + cardProps: IOrgCard; + onViewDetails?: () => void; +} + +export default function OrgCard({ cardProps, onViewDetails }: OrgCardProps) { return ( -
-
{cardProps.OrgName}
-
{cardProps.Equity}
-
{cardProps.Members}
- +
+
+

{cardProps.OrgName}

+ +

Your equity: {cardProps.Equity}%

+ +

Members: {cardProps.Members}

+
+ +
); } diff --git a/app/routes/userprofile.tsx b/app/routes/userprofile.tsx new file mode 100644 index 0000000..ea98b7d --- /dev/null +++ b/app/routes/userprofile.tsx @@ -0,0 +1,85 @@ +import Header from '@/components/header'; +import OrgCard from '@/components/org-card'; + +export default function userprofile() { + const orgs = [ + { + OrgName: 'Googil', + Equity: '40', + Members: '3', + ButtonLabel: 'Click here', + }, + { + OrgName: 'Aapil', + Equity: '60', + Members: '10', + ButtonLabel: 'Click here', + }, + ]; + + const recentActivities = [ + { + id: '1', + message: 'John D. submitted time contribution in TechStartup', + timestamp: '2h ago', + }, + { + id: '2', + message: 'Sarah M. voted on your expertise criteria in DesignCo', + timestamp: '5h ago', + }, + { + id: '3', + message: 'New member invitation sent to mark@example.com', + timestamp: '1d ago', + }, + { + id: '4', + message: 'Equity configuration completed for AI Solutions', + timestamp: '2d ago', + }, + ]; + + return ( +
+
+
+
+

My Organizations

+ + +
+
+
+ {orgs.map((org) => ( + { + console.log('View details for:', org.OrgName); + }} + /> + ))} +
+
+ +
+

Recent Activity

+ +
    + {recentActivities.map((activity) => ( +
  • + + + {activity.message} ({activity.timestamp}) + +
  • + ))} +
+
+
+
+ ); +} diff --git a/app/types/header.types.ts b/app/types/header.types.ts new file mode 100644 index 0000000..863b90e --- /dev/null +++ b/app/types/header.types.ts @@ -0,0 +1,3 @@ +export interface HeaderProps { + headerType?: string; +} diff --git a/app/types/user.types.ts b/app/types/user.types.ts index e4a23da..5c4cb3f 100644 --- a/app/types/user.types.ts +++ b/app/types/user.types.ts @@ -2,3 +2,9 @@ import type { UserSchema } from '@/service/database/schema/user.schema'; import type { InferSchemaType } from 'mongoose'; export type IUser = InferSchemaType; + +export interface IRecentActivity { + id: string; + message: string; + timestamp: string; +}