[WMS-55] Implemented review comments

Implemented review comments, added loader on submission
This commit is contained in:
m0n02hz
2022-03-11 02:35:40 +05:30
parent 728406b452
commit c4d3190d5e
6 changed files with 27 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -9,7 +9,7 @@ import EditIcon from '@mui/icons-material/Edit';
import './PwTablePanel.component.scss'; import './PwTablePanel.component.scss';
const PwTablePanel = props => { const PwTablePanel = props => {
const { backgroundColor, classes, color, headCells, id, loader, index, navUrl, records, table, value } = props; const { backgroundColor, classes, color, dataFetched, headCells, id, loader, index, navUrl, records, table, value } = props;
const navigate = useNavigate(); const navigate = useNavigate();
const StyledTableRow = styled(TableRow)(({ theme }) => ({ const StyledTableRow = styled(TableRow)(({ theme }) => ({
@@ -56,7 +56,7 @@ const PwTablePanel = props => {
{rowRenders({ records, headers: headCells, navUrl, table })} {rowRenders({ records, headers: headCells, navUrl, table })}
</TableBody>} </TableBody>}
</BasicTable> </BasicTable>
{(!records || records.length === 0) {(dataFetched && (!records || records.length === 0))
&& <p className='mx-3 my-5 d-flex justify-content-center align-items-center h4'>No Records to Display</p>} && <p className='mx-3 my-5 d-flex justify-content-center align-items-center h4'>No Records to Display</p>}
</TabPanel>; </TabPanel>;
}; };
@@ -65,6 +65,7 @@ PwTablePanel.propTypes = {
backgroundColor: PropTypes.string, backgroundColor: PropTypes.string,
classes: PropTypes.string, classes: PropTypes.string,
color: PropTypes.string, color: PropTypes.string,
dataFetched: PropTypes.bool,
headCells: PropTypes.array, headCells: PropTypes.array,
id: PropTypes.string, id: PropTypes.string,
index: PropTypes.number, index: PropTypes.number,

View File

@@ -29,7 +29,7 @@ import DateTimeInput from 'components/DateTimePicker';
import MDInput from 'components/MDInput'; import MDInput from 'components/MDInput';
import { API } from 'constant'; import { API } from 'constant';
import UserIcon from 'assets/images/userIcon.png'; import BlankImage from 'assets/images/blank-profile-picture.webp';
import EditIcon from 'assets/images/edit-icon.png'; import EditIcon from 'assets/images/edit-icon.png';
import Breadcrumbs from 'components/Breadcrumbs'; import Breadcrumbs from 'components/Breadcrumbs';
@@ -79,6 +79,7 @@ function CreateEditUser(props) {
const [editedUser, setEditedUser] = useState(location?.state?.user); const [editedUser, setEditedUser] = useState(location?.state?.user);
const [selectedRoles, setSelectedRoles] = useState([]); const [selectedRoles, setSelectedRoles] = useState([]);
const [uploadedImg, setUploadedImg] = useState(); const [uploadedImg, setUploadedImg] = useState();
const [loader, setLoader] = useState();
// const [selectedPermissions, setSelectedPermissions] = useState({}); // const [selectedPermissions, setSelectedPermissions] = useState({});
useEffect(() => { useEffect(() => {
@@ -174,9 +175,11 @@ function CreateEditUser(props) {
validationSchema: schema.createUser, validationSchema: schema.createUser,
onSubmit: (values, { setSubmitting }) => { onSubmit: (values, { setSubmitting }) => {
const onValidationFailed = () => { const onValidationFailed = () => {
setLoader(false);
setSubmitting(false); setSubmitting(false);
}; };
const onSuccessfulSubmission = () => { const onSuccessfulSubmission = () => {
setLoader(false);
navigate('/setup/users-access'); navigate('/setup/users-access');
}; };
const adaptPayload = (values) => { const adaptPayload = (values) => {
@@ -200,7 +203,8 @@ function CreateEditUser(props) {
valuesClone.roles = selectedRoles && selectedRoles.length > 0 ? selectedRoles.map(role => role._id) : []; valuesClone.roles = selectedRoles && selectedRoles.length > 0 ? selectedRoles.map(role => role._id) : [];
const formData = new FormData(); const formData = new FormData();
Object.keys(valuesClone).forEach(key => formData.append(key, valuesClone[key])); Object.keys(valuesClone).forEach(key => formData.append(key, valuesClone[key]));
uploadedImg && formData.append('image', uploadedImg); uploadedImg && formData.append('image', uploadedImg);
setLoader(true);
return formData; return formData;
}; };
dispatch( dispatch(
@@ -278,7 +282,7 @@ function CreateEditUser(props) {
{ name: 'User Details' } { name: 'User Details' }
]} ]}
/> />
<MDBox component="form" role="form" px={2} onSubmit={formik.handleSubmit}> <MDBox component="form" role="form" px={2} className={loader ? " loader" : ""} onSubmit={formik.handleSubmit}>
<MDBox <MDBox
mx={4} mx={4}
sx={{ sx={{
@@ -290,7 +294,8 @@ function CreateEditUser(props) {
> >
<MDBox sx={{ width: '50%', margin: 'auto' }}> <MDBox sx={{ width: '50%', margin: 'auto' }}>
<MDBox sx={{ width: '120px', margin: 'auto', position: 'relative' }}> <MDBox sx={{ width: '120px', margin: 'auto', position: 'relative' }}>
<img src={uploadedImg ? typeof uploadedImg === 'string' ? uploadedImg : URL.createObjectURL(uploadedImg) : UserIcon} alt='img' width='120' height='120' style={{borderRadius: '50%'}} /> <img src={uploadedImg ? typeof uploadedImg === 'string' ? uploadedImg : URL.createObjectURL(uploadedImg) : BlankImage}
alt='img' width='120' height='120' style={{borderRadius: '50%'}} onError={() => setUploadedImg(BlankImage)} />
<MDBox sx={{ position: 'absolute', bottom: '0', right: '0' }}> <MDBox sx={{ position: 'absolute', bottom: '0', right: '0' }}>
<label htmlFor="image" style={{ cursor: 'pointer' }}> <label htmlFor="image" style={{ cursor: 'pointer' }}>
<img src={EditIcon} /> <img src={EditIcon} />

View File

@@ -98,6 +98,8 @@ function UserAccessScreen() {
const [rolesRecords, setRoleRecords] = useState([]); const [rolesRecords, setRoleRecords] = useState([]);
const [userLoader, setUserLoader] = useState(false); const [userLoader, setUserLoader] = useState(false);
const [roleLoader, setRoleLoader] = useState(false); const [roleLoader, setRoleLoader] = useState(false);
const [roleApiCompleted, setRoleApiCompleted] = useState(false);
const [userApiCompleted, setUserApiCompleted] = useState(false);
const [originalUserRecords, setOriginalUserRecords] = useState([]); const [originalUserRecords, setOriginalUserRecords] = useState([]);
const [originalRolesRecords, setOriginalRoleRecords] = useState([]); const [originalRolesRecords, setOriginalRoleRecords] = useState([]);
const navigate = useNavigate(); const navigate = useNavigate();
@@ -144,7 +146,7 @@ function UserAccessScreen() {
]; ];
const rolesHeadCells = [ const rolesHeadCells = [
{ id: 'role', label: 'Role', isEditAnchor: true, placement: 'after', value: record => record.name }, { id: 'role', label: 'Role', isEditAnchor: true, value: record => record.name },
{ id: 'warehouse', label: 'Warehouse', limitWidth: true, value: record => { { id: 'warehouse', label: 'Warehouse', limitWidth: true, value: record => {
const roleWh = record.permissions?.warehouseScopes; const roleWh = record.permissions?.warehouseScopes;
return warehouses && roleWh && roleWh.length === warehouses.length ? 'All' : roleWh return warehouses && roleWh && roleWh.length === warehouses.length ? 'All' : roleWh
@@ -174,7 +176,10 @@ function UserAccessScreen() {
loader: 'loading-request', loader: 'loading-request',
slug: API.GET_USERS_DATA, slug: API.GET_USERS_DATA,
method: 'get', method: 'get',
callback: setUserLoader callback: () => {
setUserLoader(false);
setUserApiCompleted(true);
}
}) })
); );
}; };
@@ -186,7 +191,10 @@ function UserAccessScreen() {
loader: 'loading-request', loader: 'loading-request',
slug: API.GET_ROLES_DATA, slug: API.GET_ROLES_DATA,
method: 'get', method: 'get',
callback: setRoleLoader callback: () => {
setRoleLoader(false);
setRoleApiCompleted(true);
}
}) })
); );
}; };
@@ -296,9 +304,9 @@ function UserAccessScreen() {
</Grid> </Grid>
</Grid> </Grid>
<Grid> <Grid>
<PwTablePanel classes={classes} headCells={userHeadCells} id="user-list" index={0} loader={userLoader} <PwTablePanel classes={classes} headCells={userHeadCells} id="user-list" index={0} loader={userLoader} dataFetched={userApiCompleted}
records={userRecords} navUrl='/setup/users-access/edit-user' table="user" value={value} /> records={userRecords} navUrl='/setup/users-access/edit-user' table="user" value={value} />
<PwTablePanel classes={classes} headCells={rolesHeadCells} id="role-list" index={1} loader={roleLoader} <PwTablePanel classes={classes} headCells={rolesHeadCells} id="role-list" index={1} loader={roleLoader} dataFetched={roleApiCompleted}
records={rolesRecords} navUrl='/setup/users-access/edit-role' table="role" value={value} /> records={rolesRecords} navUrl='/setup/users-access/edit-role' table="role" value={value} />
</Grid> </Grid>
</MDBox> </MDBox>

View File

@@ -11,7 +11,7 @@ export function* onRequestRolesData({ payload }) {
payload?.slug, payload?.slug,
payload?.data payload?.data
); );
payload?.callback && payload?.callback(false); payload?.callback && payload?.callback();
if (response?.status === 200) { if (response?.status === 200) {
yield put( yield put(
RolesActions.getRolesSuccess({ RolesActions.getRolesSuccess({

View File

@@ -11,7 +11,7 @@ export function* onRequestUsersData({ payload }) {
payload?.slug, payload?.slug,
payload?.data payload?.data
); );
payload?.callback && payload?.callback(false); payload?.callback && payload?.callback();
if (response?.status === 200) { if (response?.status === 200) {
yield put( yield put(
UsersActions.getUsersSuccess({ UsersActions.getUsersSuccess({