♻️ refactor(users): modularize UsersTable component into microcomponent architecture
BREAKING CHANGE: Removed standalone user edit routes (/console/user/edit, /console/user/edit/:id) - Decompose 673-line monolithic UsersTable.js into 8 specialized components - Extract column definitions to UsersColumnDefs.js with render functions - Create dedicated UsersActions.jsx for action buttons - Create UsersFilters.jsx for search and filtering logic - Create UsersDescription.jsx for description area - Extract all data management logic to useUsersData.js hook - Move AddUser.js and EditUser.js to users/modals/ folder as modal components - Create 4 new confirmation modal components (Promote, Demote, EnableDisable, Delete) - Implement pure UsersTable.jsx component for table rendering only - Create main container component users/index.jsx to compose all subcomponents - Update import paths in pages/User/index.js to use new modular structure - Remove obsolete EditUser imports and routes from App.js - Delete original monolithic files: UsersTable.js, AddUser.js, EditUser.js The new architecture follows the same modular pattern as tokens and redemptions modules: - Consistent file organization across all table modules - Better separation of concerns and maintainability - Enhanced reusability and testability - Unified modal management approach All existing functionality preserved with improved code organization.
This commit is contained in:
95
web/src/components/table/users/index.jsx
Normal file
95
web/src/components/table/users/index.jsx
Normal file
@@ -0,0 +1,95 @@
|
||||
import React from 'react';
|
||||
import CardPro from '../../common/ui/CardPro';
|
||||
import UsersTable from './UsersTable.jsx';
|
||||
import UsersActions from './UsersActions.jsx';
|
||||
import UsersFilters from './UsersFilters.jsx';
|
||||
import UsersDescription from './UsersDescription.jsx';
|
||||
import AddUserModal from './modals/AddUserModal.jsx';
|
||||
import EditUserModal from './modals/EditUserModal.jsx';
|
||||
import { useUsersData } from '../../../hooks/users/useUsersData';
|
||||
|
||||
const UsersPage = () => {
|
||||
const usersData = useUsersData();
|
||||
|
||||
const {
|
||||
// Modal state
|
||||
showAddUser,
|
||||
showEditUser,
|
||||
editingUser,
|
||||
setShowAddUser,
|
||||
closeAddUser,
|
||||
closeEditUser,
|
||||
refresh,
|
||||
|
||||
// Form state
|
||||
formInitValues,
|
||||
setFormApi,
|
||||
searchUsers,
|
||||
loadUsers,
|
||||
activePage,
|
||||
pageSize,
|
||||
groupOptions,
|
||||
loading,
|
||||
searching,
|
||||
|
||||
// Description state
|
||||
compactMode,
|
||||
setCompactMode,
|
||||
|
||||
// Translation
|
||||
t,
|
||||
} = usersData;
|
||||
|
||||
return (
|
||||
<>
|
||||
<AddUserModal
|
||||
refresh={refresh}
|
||||
visible={showAddUser}
|
||||
handleClose={closeAddUser}
|
||||
/>
|
||||
|
||||
<EditUserModal
|
||||
refresh={refresh}
|
||||
visible={showEditUser}
|
||||
handleClose={closeEditUser}
|
||||
editingUser={editingUser}
|
||||
/>
|
||||
|
||||
<CardPro
|
||||
type="type1"
|
||||
descriptionArea={
|
||||
<UsersDescription
|
||||
compactMode={compactMode}
|
||||
setCompactMode={setCompactMode}
|
||||
t={t}
|
||||
/>
|
||||
}
|
||||
actionsArea={
|
||||
<div className="flex flex-col md:flex-row justify-between items-center gap-2 w-full">
|
||||
<UsersActions
|
||||
setShowAddUser={setShowAddUser}
|
||||
t={t}
|
||||
/>
|
||||
|
||||
<UsersFilters
|
||||
formInitValues={formInitValues}
|
||||
setFormApi={setFormApi}
|
||||
searchUsers={searchUsers}
|
||||
loadUsers={loadUsers}
|
||||
activePage={activePage}
|
||||
pageSize={pageSize}
|
||||
groupOptions={groupOptions}
|
||||
loading={loading}
|
||||
searching={searching}
|
||||
t={t}
|
||||
/>
|
||||
</div>
|
||||
}
|
||||
>
|
||||
<UsersTable {...usersData} />
|
||||
</CardPro>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export default UsersPage;
|
||||
Reference in New Issue
Block a user