[WMS-55] Implemented review comments
Implemented review comments, added loader on submission
This commit is contained in:
BIN
src/assets/images/blank-profile-picture.webp
Normal file
BIN
src/assets/images/blank-profile-picture.webp
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
@@ -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,
|
||||||
|
|||||||
@@ -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} />
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
@@ -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({
|
||||||
|
|||||||
Reference in New Issue
Block a user