// material-ui
import {
Button,
Grid, Typography
} from '@mui/material';
import {useEffect, useState} from "react";
import * as React from "react";
import axios from "axios";
import {apiPath} from "../../auth/utils";
import {useParams} from "react-router-dom";
import {
GeneralConfirmWindow,
getDeletedRecordWithRefList,
getIdList,
// notifyDeleteSuccess,
// notifySaveSuccess
} from "../../utils/CommonFunction";
import {POST_AND_UPDATE_USER_GROUP,GET_GROUP_LIST_PATH } from "../../utils/ApiPathConst";
import Loadable from 'components/Loadable';
import { lazy } from 'react';
const LoadingComponent = Loadable(lazy(() => import('../extra-pages/LoadingComponent')));
const GroupAuthCard = Loadable(lazy(() => import('./GroupAuthCard')));
const UserGroupInfoCard = Loadable(lazy(() => import('./UserGroupInfoCard')));
const UserAddCard = Loadable(lazy(() => import('./UserAddCard')));
import {useNavigate} from "react-router";
// ==============================|| DASHBOARD - DEFAULT ||============================== //
const UserMaintainPage = () => {
const params = useParams();
const navigate = useNavigate();
const [onReady, setOnReady] = useState(false);
const [isCollectData, setIsCollectData] = useState(false);
const [editedGroupData, setEditedGroupData] = useState({});
const [userGroupData,setUserGroupData] = useState([]);
const [userAuthData,setUserAuthData] = useState([]);
const [userConfirm, setUserConfirm] = useState(false);
const [groupMember, setGroupMember] = useState([]);
const [isNewRecord, setIsNewRecord] = useState(false);
const [deletedUserList, setDeletedUserList] = React.useState([]);
const [deletedAuthList, setDeletedAuthList] = React.useState([]);
const [isWindowOpen, setIsWindowOpen] = React.useState(false);
const handleClose = () => {
setIsWindowOpen(false);
};
const handleDeleteClick = () => {
setIsWindowOpen(true);
};
function deleteData(){
axios.delete(`${apiPath}${GET_GROUP_LIST_PATH}/${params.id}`,
)
.then((response) => {
if (response.status === 204) {
// notifyDeleteSuccess();
setIsWindowOpen(false);
navigate('/usergroupSearchview');
}
})
.catch(error => {
console.log(error);
return false;
});
}
function updateGroupObject(groupData) {
setEditedGroupData(groupData);
}
function updateGroupMember(groupMember){
setGroupMember(groupMember.currentList);
setDeletedUserList(groupMember.deletedList);
}
function updateUserAuthList(userAuthData){
setUserAuthData(userAuthData.currentList);
setDeletedAuthList(userAuthData.deletedList);
}
const submitData = () => {
setUserConfirm(true);
setIsCollectData(!isCollectData);
}
useEffect(() => {
if(params.id > 0 ){
axios.get(`${apiPath}${GET_GROUP_LIST_PATH}/${params.id}`)
.then((response) => {
if (response.status === 200) {
setUserGroupData(response.data);
}
})
.catch(error => {
console.log(error);
return false;
});
}
else{
//new record case
setUserGroupData(
{
"authIds": [],
"data": {},
"userIds": []
}
);
setIsNewRecord(true);
}
}, []);
useEffect(() => {
if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) {
setOnReady(true);
}
else if(isNewRecord){
setOnReady(true);
}
}, [userGroupData]);
useEffect(() => {
if(userConfirm && onReady){
//avoid delete and add user at the same time
let finalDeletedUserList = getDeletedRecordWithRefList(deletedUserList, getIdList(groupMember));
console.log(finalDeletedUserList)
axios.post(POST_AND_UPDATE_USER_GROUP,
{
"id": parseInt(params.id) !== -1? parseInt(params.id) : null,
"name": editedGroupData.userGroupName,
"description": editedGroupData.description,
"addUserIds": getIdList(groupMember),
"removeUserIds": finalDeletedUserList,
"addAuthIds": userAuthData,
"removeAuthIds": deletedAuthList,
},
)
.then((response) => {
if (response.status === 200) {
// notifySaveSuccess();
navigate('/usergroupSearchview');
}
})
.catch(error => {
console.log(error);
return false;
});
}
setUserConfirm(false);
}, [editedGroupData,userGroupData,userAuthData]);
return (
!onReady ?
:
{isNewRecord? "Create User Group" : "Maintain User Group"}
{/*col 1*/}
{/*col 2*/}
{/*bottom button*/}
);
};
export default UserMaintainPage;