From 4a20cd89b3d8935d0d0d7fd136b31a51b92f8451 Mon Sep 17 00:00:00 2001 From: Tin Geber <tin@greenhost.nl> Date: Fri, 1 Dec 2023 09:50:46 +0100 Subject: [PATCH] adding UI components to table --- frontend/src/modules/users/Users.tsx | 89 ++++++++++++++++------------ 1 file changed, 51 insertions(+), 38 deletions(-) diff --git a/frontend/src/modules/users/Users.tsx b/frontend/src/modules/users/Users.tsx index 76ff240c..329e61e5 100644 --- a/frontend/src/modules/users/Users.tsx +++ b/frontend/src/modules/users/Users.tsx @@ -123,8 +123,38 @@ export const Users: React.FC = () => { return classes.filter(Boolean).join(' '); } + const userCard = (person: User) => { + return ( + <div className="flex min-w-0 gap-x-4 items-center"> + {/* <img className="h-12 w-12 flex-none rounded-full bg-gray-50" src={person.imageUrl} alt="" /> */} + <span className="inline-flex items-center relative justify-center h-8 w-8 rounded-full bg-primary overflow-hidden"> + <span className="absolute z-10"> + <Gravatar md5={md5(person.email) || undefined} size={32} rating="pg" default="blank" protocol="https://" /> + </span> + <span className="absolute z-0 text-primary-800">{person.name[0]}</span> + </span> + <div className="min-w-0 flex-auto"> + <p className="text-sm font-semibold leading-6 text-gray-900"> + {/* <a href={person.href} className="hover:underline"> */} + {person.name ? ( + <span>{person.name}</span> + ) : ( + <span className="text-sm italic text-gray-400">no name given</span> + )} + {/* </a> */} + </p> + <p className="mt-1 flex text-xs leading-5 text-gray-500"> + <a href={`mailto:${person.email}`} className="truncate hover:underline"> + {person.email} + </a> + </p> + </div> + </div> + ); + }; + // //////////////////////// - // New Table Start + // Table Start // //////////////////////// function IndeterminateCheckbox({ @@ -181,21 +211,30 @@ export const Users: React.FC = () => { header: 'Name', footer: (props) => props.column.id, accessorKey: 'name', + cell: (props) => { + const { row } = props; + return userCard(row.original); + }, }, + // { + // header: 'Email', + // footer: (props) => props.column.id, + // accessorKey: 'email', + // }, { - header: 'Email', - footer: (props) => props.column.id, - accessorKey: 'email', - }, - { - header: 'is Admin?', + header: 'Role', accessorKey: 'admin', - }, - { - header: 'Status', footer: (props) => props.column.id, - accessorKey: 'status', + cell: (props) => { + const { row } = props; + return <>{row.original.admin ? <span>Admin</span> : <span>User</span>}</>; + }, }, + // { + // header: 'Status', + // footer: (props) => props.column.id, + // accessorKey: 'status', + // }, { header: ' ', cell: (props: any) => { @@ -469,33 +508,7 @@ export const Users: React.FC = () => { <ul className="divide-y divide-gray-100"> {filterSearch.map((person) => ( <li key={person.email} className="flex justify-between gap-x-6 py-5 px-4 group"> - <div className="flex min-w-0 gap-x-4 items-center"> - {/* <img className="h-12 w-12 flex-none rounded-full bg-gray-50" src={person.imageUrl} alt="" /> */} - <span className="inline-flex items-center relative justify-center h-8 w-8 rounded-full bg-primary overflow-hidden"> - <span className="absolute z-10"> - <Gravatar - md5={md5(person.email) || undefined} - size={32} - rating="pg" - default="blank" - protocol="https://" - /> - </span> - <span className="absolute z-0 text-primary-800">{person.name[0]}</span> - </span> - <div className="min-w-0 flex-auto"> - <p className="text-sm font-semibold leading-6 text-gray-900"> - {/* <a href={person.href} className="hover:underline"> */} - {person.name} - {/* </a> */} - </p> - <p className="mt-1 flex text-xs leading-5 text-gray-500"> - <a href={`mailto:${person.email}`} className="truncate hover:underline"> - {person.email} - </a> - </p> - </div> - </div> + {userCard(person)} <div className="flex shrink-0 items-center gap-x-6"> <div className="hidden sm:flex sm:flex-col sm:items-end"> <p className="text-sm leading-6 text-gray-900">{person.status}</p> -- GitLab