Skip to content

Commit 0ff2c23

Browse files
committed
PAGES: all pages ues the new components now.
1 parent 8ceba83 commit 0ff2c23

File tree

5 files changed

+153
-406
lines changed

5 files changed

+153
-406
lines changed

src/pages/AdminPage.tsx

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,67 @@
1-
import AuditTrail from '@/components/admin/AuditTrail';
2-
import TeamManagement from '@/components/admin/TeamManagement';
3-
import UserManagement from '@/components/admin/UserManagement';
4-
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
1+
import CreateTeam from '@/features/team/create-team/CreateTeam';
2+
import CreateUser from '@/features/user/create-user/CreateUser';
3+
import { Card, CardContent, CardHeader, CardTitle } from '@/shared/ui/card';
4+
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/shared/ui/tabs';
5+
import AuditTrail from '@/widgets/audit/AuditTrail';
6+
import TeamList from '@/widgets/team/TeamList';
7+
import UserList from '@/widgets/user/UserList';
58

69
const AdminPage = () => {
710
return (
811
<div className="space-y-6">
912
<div>
1013
<h1 className="text-3xl font-bold text-gradient py-5">Admin Panel</h1>
11-
<p className="text-muted-foreground">Manage users and teams across the platform.</p>
14+
15+
<p className="text-muted-foreground">
16+
Manage users, teams, and system-wide settings across the platform.
17+
</p>
1218
</div>
19+
1320
<Tabs defaultValue="users" className="space-y-4">
14-
<TabsList>
15-
<TabsTrigger value="users">Manage Users</TabsTrigger>
16-
<TabsTrigger value="teams">Manage Teams</TabsTrigger>
17-
<TabsTrigger value="audit">Audit Trail</TabsTrigger>
18-
</TabsList>
21+
<div className="w-full overflow-x-auto pb-1 no-scrollbar">
22+
<TabsList className="inline-flex w-auto justify-start">
23+
<TabsTrigger value="users" className="whitespace-nowrap">
24+
Manage Users
25+
</TabsTrigger>
26+
27+
<TabsTrigger value="teams" className="whitespace-nowrap">
28+
Manage Teams
29+
</TabsTrigger>
30+
31+
<TabsTrigger value="audit" className="whitespace-nowrap">
32+
Audit Trail
33+
</TabsTrigger>
34+
</TabsList>
35+
</div>
1936

2037
<TabsContent value="users">
21-
<UserManagement />
38+
<Card>
39+
<CardHeader>
40+
<CardTitle className="flex justify-between items-center">
41+
Users
42+
<CreateUser />
43+
</CardTitle>
44+
</CardHeader>
45+
46+
<CardContent className="space-y-4">
47+
<UserList />
48+
</CardContent>
49+
</Card>
2250
</TabsContent>
2351

2452
<TabsContent value="teams">
25-
<TeamManagement />
53+
<Card>
54+
<CardHeader>
55+
<CardTitle className="flex justify-between items-center">
56+
Teams
57+
<CreateTeam />
58+
</CardTitle>
59+
</CardHeader>
60+
61+
<CardContent className="space-y-4">
62+
<TeamList />
63+
</CardContent>
64+
</Card>
2665
</TabsContent>
2766

2867
<TabsContent value="audit">

src/pages/AuthCallbackPage.tsx

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Path: src/pages/AuthCallbackPage.tsx
1+
import { useAuth } from '@/app/providers/AuthContext';
22
import PageLoader from '@/components/general/PageLoader';
3-
import { useAuth } from '@/contexts/AuthContext';
3+
import { useUpdateProfilePicture } from '@/entities/User/api/useMe';
44
import { useToast } from '@/hooks/use-toast';
55
import React, { useEffect, useState } from 'react';
66
import { useNavigate, useSearchParams } from 'react-router-dom';
@@ -10,11 +10,29 @@ const AuthCallbackPage: React.FC = () => {
1010
const navigate = useNavigate();
1111
const { handleOAuthCallback } = useAuth();
1212
const { toast } = useToast();
13+
const updateProfilePictureMutation = useUpdateProfilePicture();
1314
const [error, setError] = useState<string | null>(null);
1415

16+
const handleProfileImageSync = async (imageUrl: string) => {
17+
try {
18+
const response = await fetch(imageUrl);
19+
const blob = await response.blob();
20+
const file = new File([blob], 'gitlab-avatar.jpg', { type: blob.type });
21+
22+
const formData = new FormData();
23+
formData.append('file', file);
24+
25+
await updateProfilePictureMutation.mutateAsync(formData);
26+
console.log('GitLab profile picture synced successfully');
27+
} catch (e) {
28+
console.error('Failed to sync GitLab profile picture:', e);
29+
}
30+
};
31+
1532
useEffect(() => {
16-
const processToken = async () => {
33+
const processAuth = async () => {
1734
const token = searchParams.get('token');
35+
const avatarUrl = searchParams.get('avatar') || searchParams.get('picture');
1836

1937
if (!token) {
2038
setError('Authentication token was not found. Redirecting to login.');
@@ -29,19 +47,26 @@ const AuthCallbackPage: React.FC = () => {
2947

3048
try {
3149
await handleOAuthCallback(token);
50+
51+
if (avatarUrl) {
52+
handleProfileImageSync(avatarUrl);
53+
}
54+
3255
navigate('/', { replace: true });
3356
} catch (err) {
3457
setError('Failed to validate authentication token. Redirecting to login.');
58+
3559
toast({
3660
title: 'Authentication Failed',
3761
description: err instanceof Error ? err.message : 'An unknown error occurred.',
3862
variant: 'destructive',
3963
});
64+
4065
setTimeout(() => navigate('/login', { replace: true }), 3000);
4166
}
4267
};
4368

44-
processToken();
69+
processAuth();
4570
}, [searchParams, navigate, handleOAuthCallback, toast]);
4671

4772
if (error) {

src/pages/LoginPage.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import { useAuth } from '@/app/providers/AuthContext';
2+
import LoginForm from '@/components/auth/LoginForm';
13
import { useEffect } from 'react';
24
import { useNavigate } from 'react-router-dom';
3-
import { useAuth } from '@/contexts/AuthContext';
4-
import LoginForm from '@/components/auth/LoginForm';
55

66
const LoginPage = () => {
77
const { isAuthenticated, isLoading } = useAuth();

0 commit comments

Comments
 (0)