Files
fredy/ui/src/views/user/Users.jsx

81 lines
2.3 KiB
React
Raw Normal View History

2025-12-11 10:40:55 +01:00
/*
* Copyright (c) 2026 by Christian Kellner.
2025-12-11 10:40:55 +01:00
* Licensed under Apache-2.0 with Commons Clause and Attribution/Naming Clause
*/
import React from 'react';
import { Toast } from '@douyinfe/semi-ui-19';
import UserTable from '../../components/table/UserTable';
import { useActions, useSelector } from '../../services/state/store';
2023-03-20 08:52:13 +01:00
import { IconPlus } from '@douyinfe/semi-icons';
import { Button } from '@douyinfe/semi-ui-19';
import UserRemovalModal from './UserRemovalModal';
import { xhrDelete } from '../../services/xhr';
2025-09-02 20:18:37 +02:00
import { useNavigate } from 'react-router-dom';
import './Users.less';
const Users = function Users() {
const actions = useActions();
const [loading, setLoading] = React.useState(true);
const users = useSelector((state) => state.user.users);
const [userIdToBeRemoved, setUserIdToBeRemoved] = React.useState(null);
2025-09-02 20:18:37 +02:00
const navigate = useNavigate();
2022-12-19 21:10:00 +01:00
React.useEffect(() => {
async function init() {
await actions.user.getUsers();
2022-12-19 21:10:00 +01:00
setLoading(false);
}
2023-03-20 08:52:13 +01:00
2022-12-19 21:10:00 +01:00
init();
}, []);
const onUserRemoval = async () => {
try {
await xhrDelete('/api/admin/users', { userId: userIdToBeRemoved });
2023-03-20 08:52:13 +01:00
Toast.success('User successfully remove');
setUserIdToBeRemoved(null);
await actions.jobsData.getJobs();
await actions.user.getUsers();
} catch (error) {
2023-03-20 08:52:13 +01:00
Toast.error(error);
setUserIdToBeRemoved(null);
}
};
return (
<div>
{!loading && (
<React.Fragment>
{userIdToBeRemoved && <UserRemovalModal onCancel={() => setUserIdToBeRemoved(null)} onOk={onUserRemoval} />}
2023-03-20 08:52:13 +01:00
<Button
type="primary"
className="users__newButton"
icon={<IconPlus />}
2025-09-02 20:18:37 +02:00
onClick={() => navigate('/users/new')}
2023-03-20 08:52:13 +01:00
>
New User
</Button>
<UserTable
user={users}
onUserEdit={(userId) => {
2025-09-02 20:18:37 +02:00
navigate(`/users/edit/${userId}`);
}}
onUserRemoval={(userId) => {
setUserIdToBeRemoved(userId);
//throw warning message that all jobs will be removed associated to this user
//check if at least 1 admin is available
}}
/>
</React.Fragment>
)}
</div>
);
};
export default Users;