import React, { useEffect, useState } from 'react'; import './_style.scss'; import { Table, Button, Form, Spin, Input, Select, Modal, Pagination, Switch, Badge, Tooltip, } from 'antd'; import { useDispatch, useSelector } from 'react-redux'; import { getListUser, deleteUser, getDetailUser, } from 'src/redux/user/user.sagaActions'; import { selectListItem, selectLoading, selectListItemDetail, } from 'src/redux/user/user.selector'; import * as config from 'src/constants/status.constant'; import VrsAddUser from 'src/components/VrsAddUser'; import { useMediaQuery } from 'react-responsive'; import VrsLoading from 'src/components/VrsLoading'; import { useHistory, useParams } from 'react-router-dom'; import { EditTwoTone, DeleteTwoTone, ProfileTwoTone, ExclamationCircleOutlined, } from '@ant-design/icons'; import UpdateUser from '../../components/UpdateUser'; const { Option } = Select; const { confirm } = Modal; const UserManagement = () => { const isMobile = useMediaQuery({ query: '(max-width: 1199px)' }); const [arrProducts, setArrProducts] = useState([]); const [data, setData] = useState(); const [visibleUser, setVisibleUser] = useState(false); const [visibleUpdateUser, setVisibleUpdateUser] = useState(false); const [visibleFilter, setVisibleFilter] = useState([]); const [totalPage, setTotalPage] = useState(); const [pageCurrent, setPageCurrent] = useState(1); let history = useHistory(); let { id } = useParams(); const [paramFilter, setParamFilter] = useState({ page: 1, pageSize: 10, }); const dataLoading = useSelector(selectLoading); const dispatch = useDispatch(); const dataList = useSelector(selectListItem); const dataListDetail = useSelector(selectListItemDetail); useEffect(() => { dispatch( getListUser({ page: 1, limit: 10, }) ); }, []); useEffect(() => { if (dataList && dataList.data && dataList.data.docs) { setArrProducts(dataList.data.docs); setTotalPage(dataList.data.totalDocs); } }, [dataList]); useEffect(() => { if (dataListDetail && dataListDetail.data) { setData(dataListDetail.data); } }, [dataListDetail]); function showPropsConfirm(id) { console.log('2323', id); confirm({ title: 'Xác nhận yêu cầu', icon: <ExclamationCircleOutlined />, okText: 'Xóa', okType: 'danger', cancelText: 'Không', onOk() { if (id) { dispatch(deleteUser(id)); } }, onCancel() { console.log('Cancel'); }, }); } const fetchRecords = (page) => { dispatch( getListUser({ page: page, limit: 10, // litmit: 10, }) ); setPageCurrent(page); }; function UpdateAccountUser(id) { dispatch(getDetailUser(id)); setVisibleUpdateUser(true); } const onChangePagination = (current) => { dispatch( getListUser({ page: current, limit: 10, }) ); setPageCurrent(current); }; const columns = [ { title: 'Họ và tên', dataIndex: 'name', }, { title: 'Tên tài khoản', dataIndex: 'username', }, { title: 'Email', dataIndex: 'email', }, { title: 'Vai trò', dataIndex: 'roles', render: (roles) => { return ( <div> {roles && roles.map((item, idx) => { return <div key={idx}>{item.name}</div>; })} </div> ); }, }, { title: 'Hành động', dataIndex: 'id', render: (id) => { return ( <div> <div className="icon-action"> <Tooltip placement="top" title="Sửa"> <Button onClick={() => { UpdateAccountUser(id); }} className="bg-bluez text-white"> Sửa </Button> </Tooltip> <Tooltip placement="top" title="Xóa"> <Button type="link" onClick={() => { showPropsConfirm(id); }}> Xóa </Button> </Tooltip> </div> </div> ); }, }, ]; function onChangeFilter(selectedOption) { let arrFilter = [...visibleFilter]; let itemFilter = arrFilter.includes(selectedOption); if (!itemFilter) { arrFilter.push(selectedOption); } setVisibleFilter(arrFilter); } function onChange(pagination, filters, sorter, extra) { console.log('Various parameters', pagination, filters, sorter, extra); } const removeUpdateModal = () => { setVisibleUpdateUser(false); }; const removeModal = () => { setVisibleUser(false); }; const onFinsish = (fieldValue) => { let obj = { page: pageCurrent, limit: 10, }; if (fieldValue.username) { obj.username = fieldValue.username; } if (fieldValue.email) { obj.email = fieldValue.email; } if (fieldValue.name) { obj.name = fieldValue.name; } dispatch(getListUser(obj)); }; return ( <div className="user-management"> <div className="titles">QUẢN LÝ NGƯỜI DÙNG</div> <div className="box-update-datas mb-20"> <Form layout="vertical" onFinish={onFinsish}> <p className="mt-15">Tìm kiếm</p> <div className="row"> <div className="col-md-4"> <Form.Item name="username"> <Input placeholder="Nhập tên tài khoản" /> </Form.Item> </div> <div className="col-md-4"> <Form.Item name="email"> <Input placeholder="Email" /> </Form.Item> </div> <div className="col-md-4"> <Form.Item name="name"> <Input placeholder="Nhập họ tên" /> </Form.Item> </div> <div className="col-md-4"> <Button className="text-white bg-bluez font-bold border-bluez" htmlType='submit' > Tìm kiếm </Button> </div> </div> </Form> </div> <Modal centered visible={visibleUpdateUser} onOk={() => setVisibleUpdateUser(false)} onCancel={() => setVisibleUpdateUser(false)} width={800} footer={null} closable={false} className="form-update-user"> <Spin spinning={dataLoading} indicator={VrsLoading}> <UpdateUser data={data && data} callbackUpdateRemove={removeUpdateModal} /> </Spin> </Modal> <div className="box-update-data"> <div className="box-btn"> <Button className="bg-bluez text-white" onClick={() => setVisibleUser(true)}> Thêm thành viên </Button> </div> </div> <div className="table-list-product"> <Table columns={columns} dataSource={arrProducts} onChange={onChange} scroll={{ x: true }} rowKey="id" pagination={false} // pagination={{ // total: totalPage, // pageSize: 10, // current: pageCurrent, // onChange: (page) => { // fetchRecords(page); // }, // }} loading={{ indicator: VrsLoading, spinning: dataLoading }} /> <Pagination onChange={onChangePagination} total={totalPage} pageSize={10} current={pageCurrent} /> </div> <Modal centered visible={visibleUser} onOk={() => setVisibleUser(false)} onCancel={() => setVisibleUser(false)} width={800} footer={null} closable={false} className="form-update-user"> <VrsAddUser callbackRemove={removeModal} /> </Modal> </div> ); }; UserManagement.propTypes = {}; export default UserManagement;