From 66cc68a1ac4737ad9ac672cda9012a11e547b4c7 Mon Sep 17 00:00:00 2001 From: Alex Kakyris Date: Thu, 20 Aug 2026 12:13:26 +0300 Subject: [PATCH 1/4] Fix users page crash on refresh --- capif_frontend/src/pages/users/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/capif_frontend/src/pages/users/index.js b/capif_frontend/src/pages/users/index.js index c8a9060..eb43a4e 100644 --- a/capif_frontend/src/pages/users/index.js +++ b/capif_frontend/src/pages/users/index.js @@ -75,7 +75,7 @@ const Users = () => { }); useEffect(() => { - if (usersData.data) { + if (usersData && Array.isArray(usersData.data)) { let filteredUsers = usersData.data; // Search filter by any field -- GitLab From aa1d54fee500fd4afba4e4ae9db4996559490d13 Mon Sep 17 00:00:00 2001 From: Alex Kakyris Date: Thu, 20 Aug 2026 12:51:50 +0300 Subject: [PATCH 2/4] Fix users page refresh after user creation --- capif_frontend/src/pages/users/index.js | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/capif_frontend/src/pages/users/index.js b/capif_frontend/src/pages/users/index.js index eb43a4e..088ddbf 100644 --- a/capif_frontend/src/pages/users/index.js +++ b/capif_frontend/src/pages/users/index.js @@ -69,7 +69,7 @@ const Users = () => { const [errorCreating, setErrorCreating] = useState(false); // Fetch all users data - const { data: usersData, isLoading, isError } = useQuery({ + const { data: usersData, isLoading, isError, refetch } = useQuery({ queryKey: ['users'], queryFn: () => getUsersPagesOrder(), // Fetch all data without pagination in query }); @@ -134,11 +134,7 @@ const Users = () => { await deleteUsers(selectedUsers); setDeleteMessage('Users removed'); - const response = await getUsersPagesOrder(); - setUsers(response); - setTotalUsers(response.length); - setTotalPages(Math.ceil(response.length / pageSize)); - + await refetch(); // Refetch the users after deletion setDeleteDialogOpen(false); setSelectedUsers([]); setShowDeleteMessage(true); @@ -186,13 +182,9 @@ const Users = () => { const handleCreateConfirm = async () => { try { setIsCreating(true); + setErrorCreating(false); await createUser(userCreate); - - const response = await getUsersPagesOrder(); - setUsers(response); - setTotalUsers(response.length); - setTotalPages(Math.ceil(response.length / pageSize)); - + await refetch(); // Refetch the users after creation setCreateDialogOpen(false); setShowCreateMessage(true); } catch (error) { -- GitLab From b3899bcf5787d1d05e657519f60292ee08899849 Mon Sep 17 00:00:00 2001 From: Alex Kakyris Date: Thu, 20 Aug 2026 15:20:33 +0300 Subject: [PATCH 3/4] Reset create user form after successfull creation --- capif_frontend/src/pages/users/index.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/capif_frontend/src/pages/users/index.js b/capif_frontend/src/pages/users/index.js index 088ddbf..c202c2d 100644 --- a/capif_frontend/src/pages/users/index.js +++ b/capif_frontend/src/pages/users/index.js @@ -35,6 +35,15 @@ const LinkStyled = styled(Link)(({ theme }) => ({ color: theme.palette.primary.main, })); +const EMPTY_USER = { + username: '', + password: '', + enterprise: '', + country: '', + email: '', + purpose: '' +}; + const Users = () => { const queryClient = useQueryClient(); const [selectedUsers, setSelectedUsers] = useState([]); @@ -57,14 +66,7 @@ const Users = () => { const [isCreating, setIsCreating] = useState(false); const [isCreateDialogOpen, setCreateDialogOpen] = useState(false); - const [userCreate, setUserCreate] = useState({ - username: '', - password: '', - enterprise: '', - country: '', - email: '', - purpose: '' - }); + const [userCreate, setUserCreate] = useState(EMPTY_USER); const [showCreateMessage, setShowCreateMessage] = useState(false); const [errorCreating, setErrorCreating] = useState(false); @@ -183,9 +185,11 @@ const Users = () => { try { setIsCreating(true); setErrorCreating(false); + await createUser(userCreate); await refetch(); // Refetch the users after creation setCreateDialogOpen(false); + setUserCreate(EMPTY_USER); // Reset the form setShowCreateMessage(true); } catch (error) { setErrorCreating(true); @@ -196,6 +200,7 @@ const Users = () => { const handleCreateCancel = () => { setCreateDialogOpen(false); + setUserCreate(EMPTY_USER); // Reset the form on cancel }; const handleCreateMessageAccept = () => { -- GitLab From c62414ef9ecd8494123a6294182ae1b7fa514c5f Mon Sep 17 00:00:00 2001 From: Alex Kakyris Date: Thu, 20 Aug 2026 15:35:37 +0300 Subject: [PATCH 4/4] Prevent crash in users search filter on null fields --- capif_frontend/src/pages/users/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/capif_frontend/src/pages/users/index.js b/capif_frontend/src/pages/users/index.js index c202c2d..0d073dc 100644 --- a/capif_frontend/src/pages/users/index.js +++ b/capif_frontend/src/pages/users/index.js @@ -83,9 +83,9 @@ const Users = () => { // Search filter by any field if (searchTerm) { filteredUsers = filteredUsers.filter((user) => - user.username.toLowerCase().includes(searchTerm.toLowerCase()) || - user.enterprise.toLowerCase().includes(searchTerm.toLowerCase()) || - user.email.toLowerCase().includes(searchTerm.toLowerCase()) + user.username?.toLowerCase().includes(searchTerm.toLowerCase()) || + user.enterprise?.toLowerCase().includes(searchTerm.toLowerCase()) || + user.email?.toLowerCase().includes(searchTerm.toLowerCase()) ); } -- GitLab