From d2d9686da9f8eeeb96c249a8cb4becbe0b1ff4fb Mon Sep 17 00:00:00 2001 From: bh0fer Date: Tue, 1 Sep 2026 13:32:31 +0200 Subject: [PATCH 1/2] show last logged in --- src/api/user.ts | 4 +++ src/components/Admin/UserTable/User.tsx | 1 + src/components/Admin/UserTable/index.tsx | 33 ++++++++++++++++++++---- src/models/User.ts | 27 ++++++++++++++++++- 4 files changed, 59 insertions(+), 6 deletions(-) diff --git a/src/api/user.ts b/src/api/user.ts index 95dac96d1..31dd166d4 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -2,6 +2,7 @@ import { mdiEmailLock, mdiGithub, mdiMicrosoft } from '@mdi/js'; import api from './base'; import { AxiosPromise } from 'axios'; import { IfmColors } from '@tdev-components/shared/Colors'; +import { Session as BetterAuthSession } from 'better-auth'; export enum Role { STUDENT = 'student', @@ -45,6 +46,8 @@ export const AuthProviderColor = { [AuthProvider.GITHUB]: IfmColors.black }; +export type Session = Omit; + export type User = { id: string; email: string; @@ -53,6 +56,7 @@ export type User = { lastName: string; role: Role; authProviders?: AuthProvider[]; + sessions?: Session[]; banned?: boolean; banReason?: string; banExpires?: Date; diff --git a/src/components/Admin/UserTable/User.tsx b/src/components/Admin/UserTable/User.tsx index 32f5843fd..dc9ec26ca 100644 --- a/src/components/Admin/UserTable/User.tsx +++ b/src/components/Admin/UserTable/User.tsx @@ -88,6 +88,7 @@ const UserTableRow = observer((props: Props) => { {formatDateTime(user.createdAt)} {formatDateTime(user.updatedAt)} + {user.lastSeen ? formatDateTime(user.lastSeen) : '-'} {user.studentGroups.map((group, idx) => ( diff --git a/src/components/Admin/UserTable/index.tsx b/src/components/Admin/UserTable/index.tsx index 41a5c24c4..6cfcf7f98 100644 --- a/src/components/Admin/UserTable/index.tsx +++ b/src/components/Admin/UserTable/index.tsx @@ -19,7 +19,9 @@ type SortColumn = | 'linkedAccounts' | 'createdAt' | 'updatedAt' - | 'groups' + | 'authProviderNames' + | 'lastSeen' + | 'studentGroupNames' | 'id' | 'connectedClients'; interface Props { @@ -137,7 +139,15 @@ const UserTable = observer((props: Props) => { onClick={() => setSortColumn('lastName')} /> - Auth Provider + +