| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import React, { useMemo, useState } from 'react'; |
| import { Empty } from '@douyinfe/semi-ui'; |
| import CardTable from '../../common/ui/CardTable'; |
| import { |
| IllustrationNoResult, |
| IllustrationNoResultDark, |
| } from '@douyinfe/semi-illustrations'; |
| import { getUsersColumns } from './UsersColumnDefs'; |
| import PromoteUserModal from './modals/PromoteUserModal'; |
| import DemoteUserModal from './modals/DemoteUserModal'; |
| import EnableDisableUserModal from './modals/EnableDisableUserModal'; |
| import DeleteUserModal from './modals/DeleteUserModal'; |
| import ResetPasskeyModal from './modals/ResetPasskeyModal'; |
| import ResetTwoFAModal from './modals/ResetTwoFAModal'; |
|
|
| const UsersTable = (usersData) => { |
| const { |
| users, |
| loading, |
| activePage, |
| pageSize, |
| userCount, |
| compactMode, |
| handlePageChange, |
| handlePageSizeChange, |
| handleRow, |
| setEditingUser, |
| setShowEditUser, |
| manageUser, |
| refresh, |
| resetUserPasskey, |
| resetUserTwoFA, |
| t, |
| } = usersData; |
|
|
| |
| const [showPromoteModal, setShowPromoteModal] = useState(false); |
| const [showDemoteModal, setShowDemoteModal] = useState(false); |
| const [showEnableDisableModal, setShowEnableDisableModal] = useState(false); |
| const [showDeleteModal, setShowDeleteModal] = useState(false); |
| const [modalUser, setModalUser] = useState(null); |
| const [enableDisableAction, setEnableDisableAction] = useState(''); |
| const [showResetPasskeyModal, setShowResetPasskeyModal] = useState(false); |
| const [showResetTwoFAModal, setShowResetTwoFAModal] = useState(false); |
|
|
| |
| const showPromoteUserModal = (user) => { |
| setModalUser(user); |
| setShowPromoteModal(true); |
| }; |
|
|
| const showDemoteUserModal = (user) => { |
| setModalUser(user); |
| setShowDemoteModal(true); |
| }; |
|
|
| const showEnableDisableUserModal = (user, action) => { |
| setModalUser(user); |
| setEnableDisableAction(action); |
| setShowEnableDisableModal(true); |
| }; |
|
|
| const showDeleteUserModal = (user) => { |
| setModalUser(user); |
| setShowDeleteModal(true); |
| }; |
|
|
| const showResetPasskeyUserModal = (user) => { |
| setModalUser(user); |
| setShowResetPasskeyModal(true); |
| }; |
|
|
| const showResetTwoFAUserModal = (user) => { |
| setModalUser(user); |
| setShowResetTwoFAModal(true); |
| }; |
|
|
| |
| const handlePromoteConfirm = () => { |
| manageUser(modalUser.id, 'promote', modalUser); |
| setShowPromoteModal(false); |
| }; |
|
|
| const handleDemoteConfirm = () => { |
| manageUser(modalUser.id, 'demote', modalUser); |
| setShowDemoteModal(false); |
| }; |
|
|
| const handleEnableDisableConfirm = () => { |
| manageUser(modalUser.id, enableDisableAction, modalUser); |
| setShowEnableDisableModal(false); |
| }; |
|
|
| const handleResetPasskeyConfirm = async () => { |
| await resetUserPasskey(modalUser); |
| setShowResetPasskeyModal(false); |
| }; |
|
|
| const handleResetTwoFAConfirm = async () => { |
| await resetUserTwoFA(modalUser); |
| setShowResetTwoFAModal(false); |
| }; |
|
|
| |
| const columns = useMemo(() => { |
| return getUsersColumns({ |
| t, |
| setEditingUser, |
| setShowEditUser, |
| showPromoteModal: showPromoteUserModal, |
| showDemoteModal: showDemoteUserModal, |
| showEnableDisableModal: showEnableDisableUserModal, |
| showDeleteModal: showDeleteUserModal, |
| showResetPasskeyModal: showResetPasskeyUserModal, |
| showResetTwoFAModal: showResetTwoFAUserModal, |
| }); |
| }, [ |
| t, |
| setEditingUser, |
| setShowEditUser, |
| showPromoteUserModal, |
| showDemoteUserModal, |
| showEnableDisableUserModal, |
| showDeleteUserModal, |
| showResetPasskeyUserModal, |
| showResetTwoFAUserModal, |
| ]); |
|
|
| |
| const tableColumns = useMemo(() => { |
| return compactMode |
| ? columns.map((col) => { |
| if (col.dataIndex === 'operate') { |
| const { fixed, ...rest } = col; |
| return rest; |
| } |
| return col; |
| }) |
| : columns; |
| }, [compactMode, columns]); |
|
|
| return ( |
| <> |
| <CardTable |
| columns={tableColumns} |
| dataSource={users} |
| scroll={compactMode ? undefined : { x: 'max-content' }} |
| pagination={{ |
| currentPage: activePage, |
| pageSize: pageSize, |
| total: userCount, |
| pageSizeOpts: [10, 20, 50, 100], |
| showSizeChanger: true, |
| onPageSizeChange: handlePageSizeChange, |
| onPageChange: handlePageChange, |
| }} |
| hidePagination={true} |
| loading={loading} |
| onRow={handleRow} |
| empty={ |
| <Empty |
| image={<IllustrationNoResult style={{ width: 150, height: 150 }} />} |
| darkModeImage={ |
| <IllustrationNoResultDark style={{ width: 150, height: 150 }} /> |
| } |
| description={t('搜索无结果')} |
| style={{ padding: 30 }} |
| /> |
| } |
| className='overflow-hidden' |
| size='middle' |
| /> |
| |
| {/* Modal components */} |
| <PromoteUserModal |
| visible={showPromoteModal} |
| onCancel={() => setShowPromoteModal(false)} |
| onConfirm={handlePromoteConfirm} |
| user={modalUser} |
| t={t} |
| /> |
| |
| <DemoteUserModal |
| visible={showDemoteModal} |
| onCancel={() => setShowDemoteModal(false)} |
| onConfirm={handleDemoteConfirm} |
| user={modalUser} |
| t={t} |
| /> |
| |
| <EnableDisableUserModal |
| visible={showEnableDisableModal} |
| onCancel={() => setShowEnableDisableModal(false)} |
| onConfirm={handleEnableDisableConfirm} |
| user={modalUser} |
| action={enableDisableAction} |
| t={t} |
| /> |
| |
| <DeleteUserModal |
| visible={showDeleteModal} |
| onCancel={() => setShowDeleteModal(false)} |
| user={modalUser} |
| users={users} |
| activePage={activePage} |
| refresh={refresh} |
| manageUser={manageUser} |
| t={t} |
| /> |
| |
| <ResetPasskeyModal |
| visible={showResetPasskeyModal} |
| onCancel={() => setShowResetPasskeyModal(false)} |
| onConfirm={handleResetPasskeyConfirm} |
| user={modalUser} |
| t={t} |
| /> |
| |
| <ResetTwoFAModal |
| visible={showResetTwoFAModal} |
| onCancel={() => setShowResetTwoFAModal(false)} |
| onConfirm={handleResetTwoFAConfirm} |
| user={modalUser} |
| t={t} |
| /> |
| </> |
| ); |
| }; |
|
|
| export default UsersTable; |
|
|