Passed
Push — development ( e131c7...d0a4d7 )
by Peter
05:27 queued 13s
created

frontend/src/pages/AdminUserOverviewPage.tsx   A

Complexity

Total Complexity 5
Complexity/F 0

Size

Lines of Code 80
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 68
dl 0
loc 80
rs 10
c 0
b 0
f 0
wmc 5
mnd 5
bc 5
fnc 0
bpm 0
cpm 0
noi 0
1
import React, { useState, useEffect } from 'react';
2
import { useParams } from 'react-router-dom';
3
import { API_URL, getHeader } from '../helpers/config';
4
import { useSelector } from 'react-redux';
5
import { RootState } from '../redux/store/store';
6
import axios from 'axios';
7
import { Link } from 'react-router-dom';
8
9
interface User {
10
  githubId: string;
11
  username: string;
12
  email: string;
13
  roles: string[];
14
  createdAt: string;
15
  hasAcceptedTerms: boolean;
16
  avatarUrl?: string;
17
}
18
19
const AdminUserOverviewPage: React.FC = () => {
20
  const { githubId } = useParams<{ githubId: string }>();
21
  const { token } = useSelector((state: RootState) => state.auth);
22
  const [user, setUser] = useState<User | null>(null);
23
  const [loading, setLoading] = useState(true);
24
25
  useEffect(() => {
26
    const getUserInfo = async () => {
27
      try {
28
        const response = await axios.get(`${API_URL}/users/${githubId}`, getHeader(token));
29
        setUser(response.data);
30
      } catch (error) {
31
        console.error('Failed to fetch user info:', error);
32
      } finally {
33
        setLoading(false);
34
      }
35
    };
36
37
    if (githubId) {
38
      getUserInfo();
39
    }
40
  }, [githubId]);
41
42
  if (loading) {
43
    return <div data-testid="admin-user-overview-page">Laddar användardata...</div>;
44
  }
45
46
  if (!user) {
47
    return <div data-testid="admin-user-overview-page">Ingen användare hittades.</div>;
48
  }
49
50
  return (
51
    <div className="w-full max-w-4xl mx-auto p-6 bg-white border border-gray-200 rounded-lg shadow dark:bg-gray-800 dark:border-gray-700">
52
      <h1 className="text-2xl font-bold text-center mb-6 text-gray-900 dark:text-white">{user.username}</h1>
53
      <div className="space-y-4">
54
        <p className="text-gray-600 dark:text-gray-400">Email: <b>{user.email}</b></p>
55
        <p className="font-normal text-gray-700 dark:text-gray-400 p-2">Skapat: <b>{user.createdAt || "No User"}</b></p>
56
        <p className="font-normal text-gray-700 dark:text-gray-400 p-2">Github Id: <b>{user.githubId || ":("}</b></p>
57
        <p className="text-gray-600 dark:text-gray-400">Roller: <b>{user.roles.join(', ')}</b></p>
58
        <p className="text-gray-600 dark:text-gray-400">
59
          <b>{user.hasAcceptedTerms ? 'Godkänt användarvillkor' : 'Ej godkänt användarvillkor'}</b>
60
        </p>
61
        {user.avatarUrl && (
62
          <img
63
            src={user.avatarUrl}
64
            alt={`${user.username}'s avatar`}
65
            className="w-24 h-24 rounded-full mt-4"
66
          />
67
        )}
68
69
        <p>
70
            <Link to="/userlistpage" className="py-2 m-16 px-4 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-300 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700">
71
                Gå tillbaka
72
            </Link>
73
        </p>
74
      </div>
75
    </div>
76
  );
77
};
78
79
export default AdminUserOverviewPage;
80