From cb98da339503491e63ba39f8f06f559973ba83a1 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sat, 25 Oct 2025 18:30:52 +0100 Subject: [PATCH 1/7] chore: remove unnecessary load - user already in the context --- src/ui/views/User/User.tsx | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/ui/views/User/User.tsx b/src/ui/views/User/User.tsx index 517e09b4e..b6a195d6b 100644 --- a/src/ui/views/User/User.tsx +++ b/src/ui/views/User/User.tsx @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react'; +import React, { useState, useEffect, useContext } from 'react'; import { Navigate, useNavigate, useParams } from 'react-router-dom'; import GridItem from '../../components/Grid/GridItem'; import GridContainer from '../../components/Grid/GridContainer'; @@ -6,7 +6,8 @@ import Card from '../../components/Card/Card'; import CardBody from '../../components/Card/CardBody'; import Button from '../../components/CustomButtons/Button'; import FormLabel from '@material-ui/core/FormLabel'; -import { getUser, updateUser, getUserLoggedIn } from '../../services/user'; +import { getUser, updateUser } from '../../services/user'; +import { UserContext } from '../../../context'; import { UserData } from '../../../types/models'; import { makeStyles } from '@material-ui/core/styles'; @@ -32,10 +33,10 @@ export default function UserProfile(): React.ReactElement { const [isLoading, setIsLoading] = useState(true); const [isError, setIsError] = useState(false); const [isProfile, setIsProfile] = useState(false); - const [isAdmin, setIsAdmin] = useState(false); const [gitAccount, setGitAccount] = useState(''); const navigate = useNavigate(); const { id } = useParams<{ id?: string }>(); + const { user: loggedInUser } = useContext(UserContext); useEffect(() => { if (id == null) { @@ -53,9 +54,7 @@ export default function UserProfile(): React.ReactElement { setIsError, id, ); - getUserLoggedIn(setIsLoading, setIsAdmin, setIsError, setAuth); } else { - console.log('getting user data'); setIsProfile(true); getUser( setIsLoading, @@ -169,7 +168,7 @@ export default function UserProfile(): React.ReactElement { )} - {isProfile || isAdmin ? ( + {isProfile || loggedInUser.admin ? (

From 4c2ddc27ccfba762ad2604114d5b20408af20da1 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sat, 25 Oct 2025 18:32:15 +0100 Subject: [PATCH 2/7] chore: remove unused getUserLoggedIn --- src/ui/services/user.ts | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/ui/services/user.ts b/src/ui/services/user.ts index ef2f60e5c..afe791a11 100644 --- a/src/ui/services/user.ts +++ b/src/ui/services/user.ts @@ -80,29 +80,4 @@ const updateUser = async (data: UserData): Promise => { } }; -const getUserLoggedIn = async ( - setIsLoading: SetStateCallback, - setIsAdmin: SetStateCallback, - setIsError: SetStateCallback, - setAuth: SetStateCallback, -): Promise => { - try { - const response: AxiosResponse = await axios( - `${API_BASE}/api/auth/me`, - getAxiosConfig(), - ); - const data = response.data; - setIsLoading(false); - setIsAdmin(data.admin || false); - } catch (error) { - setIsLoading(false); - const axiosError = error as AxiosError; - if (axiosError.response?.status === 401) { - setAuth(false); - } else { - setIsError(true); - } - } -}; - -export { getUser, getUsers, updateUser, getUserLoggedIn }; +export { getUser, getUsers, updateUser }; From f46ec07274177de9b5e11b29a45e8d6a16ffbdc3 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sat, 25 Oct 2025 18:35:45 +0100 Subject: [PATCH 3/7] chore: make isProfile a const --- src/ui/views/User/User.tsx | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/ui/views/User/User.tsx b/src/ui/views/User/User.tsx index b6a195d6b..670e85c95 100644 --- a/src/ui/views/User/User.tsx +++ b/src/ui/views/User/User.tsx @@ -32,17 +32,13 @@ export default function UserProfile(): React.ReactElement { const [auth, setAuth] = useState(true); const [isLoading, setIsLoading] = useState(true); const [isError, setIsError] = useState(false); - const [isProfile, setIsProfile] = useState(false); const [gitAccount, setGitAccount] = useState(''); const navigate = useNavigate(); const { id } = useParams<{ id?: string }>(); const { user: loggedInUser } = useContext(UserContext); + const isProfile = !id; useEffect(() => { - if (id == null) { - setIsProfile(true); - } - if (id) { getUser( setIsLoading, @@ -55,7 +51,6 @@ export default function UserProfile(): React.ReactElement { id, ); } else { - setIsProfile(true); getUser( setIsLoading, (userData: UserData) => { From c596eaafcff83c6da7989a3afcef192683061905 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sat, 25 Oct 2025 18:38:50 +0100 Subject: [PATCH 4/7] chore: remove duplicate code --- src/ui/services/user.ts | 1 - src/ui/views/User/User.tsx | 32 ++++++++++---------------------- 2 files changed, 10 insertions(+), 23 deletions(-) diff --git a/src/ui/services/user.ts b/src/ui/services/user.ts index afe791a11..5896b60ea 100644 --- a/src/ui/services/user.ts +++ b/src/ui/services/user.ts @@ -17,7 +17,6 @@ const getUser = async ( if (id) { url = `${API_BASE}/api/v1/user/${id}`; } - console.log(url); try { const response: AxiosResponse = await axios(url, getAxiosConfig()); diff --git a/src/ui/views/User/User.tsx b/src/ui/views/User/User.tsx index 670e85c95..d56393e16 100644 --- a/src/ui/views/User/User.tsx +++ b/src/ui/views/User/User.tsx @@ -39,28 +39,16 @@ export default function UserProfile(): React.ReactElement { const isProfile = !id; useEffect(() => { - if (id) { - getUser( - setIsLoading, - (userData: UserData) => { - setData(userData); - setGitAccount(userData.gitAccount || ''); - }, - setAuth, - setIsError, - id, - ); - } else { - getUser( - setIsLoading, - (userData: UserData) => { - setData(userData); - setGitAccount(userData.gitAccount || ''); - }, - setAuth, - setIsError, - ); - } + getUser( + setIsLoading, + (userData: UserData) => { + setData(userData); + setGitAccount(userData.gitAccount || ''); + }, + setAuth, + setIsError, + id, + ); }, [id]); if (isLoading) return
Loading...
; From b47b6bdb8100a09d40d337233c15611a16ee5577 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sat, 25 Oct 2025 18:56:57 +0100 Subject: [PATCH 5/7] chore: improve typing --- src/ui/views/User/User.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/views/User/User.tsx b/src/ui/views/User/User.tsx index d56393e16..25c8c6e67 100644 --- a/src/ui/views/User/User.tsx +++ b/src/ui/views/User/User.tsx @@ -16,6 +16,7 @@ import { LogoGithubIcon } from '@primer/octicons-react'; import CloseRounded from '@material-ui/icons/CloseRounded'; import { Check, Save } from '@material-ui/icons'; import { TextField, Theme } from '@material-ui/core'; +import { UserContextType } from '../RepoDetails/RepoDetails'; const useStyles = makeStyles((theme: Theme) => ({ root: { @@ -35,7 +36,7 @@ export default function UserProfile(): React.ReactElement { const [gitAccount, setGitAccount] = useState(''); const navigate = useNavigate(); const { id } = useParams<{ id?: string }>(); - const { user: loggedInUser } = useContext(UserContext); + const { user: loggedInUser } = useContext(UserContext); const isProfile = !id; useEffect(() => { From d8c37822855d0ab1bfc8616e000e5b316b34a99e Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sun, 26 Oct 2025 10:35:38 +0000 Subject: [PATCH 6/7] chore: rename file to match component --- src/routes.tsx | 2 +- src/ui/views/User/{User.tsx => UserProfile.tsx} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/ui/views/User/{User.tsx => UserProfile.tsx} (100%) diff --git a/src/routes.tsx b/src/routes.tsx index 2cf0aa5b3..43a2ac41c 100644 --- a/src/routes.tsx +++ b/src/routes.tsx @@ -21,7 +21,7 @@ import RouteGuard from './ui/components/RouteGuard/RouteGuard'; import Person from '@material-ui/icons/Person'; import OpenPushRequests from './ui/views/OpenPushRequests/OpenPushRequests'; import PushDetails from './ui/views/PushDetails/PushDetails'; -import User from './ui/views/User/User'; +import User from './ui/views/User/UserProfile'; import UserList from './ui/views/UserList/UserList'; import RepoDetails from './ui/views/RepoDetails/RepoDetails'; import RepoList from './ui/views/RepoList/RepoList'; diff --git a/src/ui/views/User/User.tsx b/src/ui/views/User/UserProfile.tsx similarity index 100% rename from src/ui/views/User/User.tsx rename to src/ui/views/User/UserProfile.tsx From 20f4bd0152a74c0835c07ffb4877f2caaeca1703 Mon Sep 17 00:00:00 2001 From: Andy Pols Date: Sun, 26 Oct 2025 10:39:15 +0000 Subject: [PATCH 7/7] chore: isOwnProfile is more obvious what it is for --- src/ui/views/User/UserProfile.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/views/User/UserProfile.tsx b/src/ui/views/User/UserProfile.tsx index 25c8c6e67..89b8a1bf9 100644 --- a/src/ui/views/User/UserProfile.tsx +++ b/src/ui/views/User/UserProfile.tsx @@ -37,7 +37,7 @@ export default function UserProfile(): React.ReactElement { const navigate = useNavigate(); const { id } = useParams<{ id?: string }>(); const { user: loggedInUser } = useContext(UserContext); - const isProfile = !id; + const isOwnProfile = !id; useEffect(() => { getUser( @@ -152,7 +152,7 @@ export default function UserProfile(): React.ReactElement { )} - {isProfile || loggedInUser.admin ? ( + {isOwnProfile || loggedInUser.admin ? (