You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

153 regels
5.6 KiB

  1. // material-ui
  2. import {
  3. Button,
  4. Grid, TextField,
  5. Typography
  6. } from '@mui/material';
  7. import MainCard from "../../components/MainCard";
  8. import * as React from "react";
  9. import {useEffect, useState} from "react";
  10. import {GET_GROUP_MEMBER_LIST_PATH, GET_USER_COMBO_LIST} from "../../utils/ApiPathConst";
  11. import axios from "axios";
  12. import {apiPath} from "../../auth/utils";
  13. import Autocomplete from "@mui/material/Autocomplete";
  14. import {getIdList} from "../../utils/CommonFunction";
  15. //import LoadingComponent from "../extra-pages/LoadingComponent";
  16. //import UserAddTable from "./UserAddTable";
  17. import Loadable from 'components/Loadable';
  18. import { lazy } from 'react';
  19. const LoadingComponent = Loadable(lazy(() => import('../extra-pages/LoadingComponent')));
  20. const UserAddTable = Loadable(lazy(() => import('./UserAddTable')));
  21. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  22. const UserAddCard = ({isCollectData, updateGroupMember,userGroupData,isNewRecord}) => {
  23. const [currentUserData, setCurrentUserData] = React.useState({});
  24. const [onReady, setOnReady] = useState(false);
  25. const [groupUserData, setGroupUserData] = useState([]);
  26. const [userComboList, setUserComboList] = useState([]);
  27. const [selectedUser, setSelectedUser] = useState(null);
  28. const [deletedList, setDeletedList] = useState([]);
  29. function updateUserList (){
  30. const idList = getIdList(groupUserData);
  31. if(selectedUser!==null){
  32. if(!idList.includes(selectedUser.id)){
  33. const userList = [...groupUserData, selectedUser];
  34. setGroupUserData(userList);
  35. console.log(userList);
  36. }
  37. }
  38. }
  39. useEffect(() => {
  40. axios.get(`${apiPath}${GET_USER_COMBO_LIST}`)
  41. .then((response) => {
  42. if (response.status === 200) {
  43. setUserComboList(response.data.records);
  44. }
  45. })
  46. .catch(error => {
  47. console.log(error);
  48. return false;
  49. });
  50. }, []);
  51. useEffect(() => {
  52. //if user data from parent are not null
  53. if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) {
  54. setCurrentUserData(userGroupData.data);
  55. }
  56. }, [userGroupData]);
  57. useEffect(() => {
  58. //if state data are ready and assign to different field
  59. if(isNewRecord){
  60. setOnReady(true);
  61. }
  62. else{
  63. if (Object.keys(userGroupData).length > 0 &&currentUserData !== undefined) {
  64. axios.get(`${apiPath}${GET_GROUP_MEMBER_LIST_PATH}?id=${userGroupData.data.id}`)
  65. .then((response) => {
  66. if (response.status === 200) {
  67. setGroupUserData(response.data.records);
  68. }
  69. setOnReady(true);
  70. })
  71. .catch(error => {
  72. console.log(error);
  73. return false;
  74. });
  75. }
  76. }
  77. }, [currentUserData]);
  78. useEffect(() => {
  79. //upload latest data to parent
  80. updateGroupMember({
  81. "currentList" : groupUserData,
  82. "deletedList" : deletedList
  83. });
  84. }, [isCollectData]);
  85. return (
  86. !onReady ?
  87. <LoadingComponent/>
  88. :
  89. <MainCard elevation={0}
  90. border={false}
  91. content={false}
  92. >
  93. <Typography variant="h5" sx={{mt: 3, ml: 3}}>
  94. User(s)
  95. </Typography>
  96. <Grid item xs={12} s={12} md={12} lg={12} sx={{ml: 3, mr: 3, mt: 2}}>
  97. <Grid container alignItems={"center"}>
  98. <Grid item xs={3} s={3} md={2} lg={2}
  99. sx={{display: 'flex', alignItems: 'center'}}>
  100. User:
  101. </Grid>
  102. <Grid item xs={6} s={5} md={5} lg={5}>
  103. <Autocomplete
  104. disablePortal
  105. id="user-combo"
  106. value={selectedUser === null ? null : selectedUser}
  107. options={userComboList}
  108. onChange={(event, newValue) => {
  109. console.log(newValue)
  110. setSelectedUser(newValue);
  111. }}
  112. renderInput={(params) => <TextField {...params} />}
  113. />
  114. </Grid>
  115. <Grid item xs={3} s={3} md={4} lg={4} sx={{ml: 3}}>
  116. <Button
  117. size="large"
  118. variant="contained"
  119. type="submit"
  120. sx={{
  121. textTransform: 'capitalize',
  122. alignItems: 'end'
  123. }}
  124. onClick={updateUserList}
  125. >
  126. Add
  127. </Button>
  128. </Grid>
  129. </Grid>
  130. </Grid>
  131. <UserAddTable
  132. setGroupUserData={setGroupUserData}
  133. setDeletedList={setDeletedList}
  134. userList={groupUserData}
  135. />
  136. </MainCard>
  137. );
  138. };
  139. export default UserAddCard;