/* Copyright (C) 2025 QuantumNous This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . For commercial licensing, please contact support@quantumnous.com */ 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; // Modal states 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); // Modal handlers 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); }; // Modal confirm handlers 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); }; // Get all columns 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, ]); // Handle compact mode by removing fixed positioning const tableColumns = useMemo(() => { return compactMode ? columns.map((col) => { if (col.dataIndex === 'operate') { const { fixed, ...rest } = col; return rest; } return col; }) : columns; }, [compactMode, columns]); return ( <> } darkModeImage={ } description={t('搜索无结果')} style={{ padding: 30 }} /> } className='overflow-hidden' size='middle' /> {/* Modal components */} setShowPromoteModal(false)} onConfirm={handlePromoteConfirm} user={modalUser} t={t} /> setShowDemoteModal(false)} onConfirm={handleDemoteConfirm} user={modalUser} t={t} /> setShowEnableDisableModal(false)} onConfirm={handleEnableDisableConfirm} user={modalUser} action={enableDisableAction} t={t} /> setShowDeleteModal(false)} user={modalUser} users={users} activePage={activePage} refresh={refresh} manageUser={manageUser} t={t} /> setShowResetPasskeyModal(false)} onConfirm={handleResetPasskeyConfirm} user={modalUser} t={t} /> setShowResetTwoFAModal(false)} onConfirm={handleResetTwoFAConfirm} user={modalUser} t={t} /> ); }; export default UsersTable;