25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

174 satır
6.8 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_GLD_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, editMode }) => {
  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. const [_editMode, setEditMode] = useState(editMode);
  30. useEffect(() => {
  31. setEditMode(editMode);
  32. }, [editMode])
  33. function updateUserList() {
  34. const idList = getIdList(groupUserData);
  35. if (selectedUser !== null) {
  36. if (!idList.includes(selectedUser.id)) {
  37. const userList = [...groupUserData, selectedUser];
  38. setGroupUserData(userList);
  39. // console.log(userList);
  40. }
  41. }
  42. }
  43. useEffect(() => {
  44. axios.get(`${apiPath}${GET_USER_GLD_COMBO_LIST}`)
  45. .then((response) => {
  46. if (response.status === 200) {
  47. setUserComboList(response.data.records);
  48. }
  49. })
  50. .catch(error => {
  51. console.log(error);
  52. return false;
  53. });
  54. }, []);
  55. useEffect(() => {
  56. //if user data from parent are not null
  57. if (Object.keys(userGroupData).length > 0 && userGroupData !== undefined) {
  58. setCurrentUserData(userGroupData.data);
  59. }
  60. }, [userGroupData]);
  61. useEffect(() => {
  62. //if state data are ready and assign to different field
  63. if (isNewRecord) {
  64. setOnReady(true);
  65. }
  66. else {
  67. if (Object.keys(userGroupData).length > 0 && currentUserData !== undefined) {
  68. axios.get(`${apiPath}${GET_GROUP_MEMBER_LIST_PATH}?id=${userGroupData.data.id}`)
  69. .then((response) => {
  70. if (response.status === 200) {
  71. setGroupUserData(response.data.records);
  72. }
  73. setOnReady(true);
  74. })
  75. .catch(error => {
  76. console.log(error);
  77. return false;
  78. });
  79. }
  80. }
  81. }, [currentUserData]);
  82. useEffect(() => {
  83. //upload latest data to parent
  84. updateGroupMember({
  85. "currentList": groupUserData,
  86. "deletedList": deletedList
  87. });
  88. }, [isCollectData]);
  89. return (
  90. !onReady ?
  91. <LoadingComponent />
  92. :
  93. <MainCard elevation={0}
  94. border={false}
  95. content={false}
  96. >
  97. <Typography variant="h4" sx={{ mt: 3, ml: 3, mb: 2, mr: 3, borderBottom: "1px solid black" }}>
  98. User(s)
  99. </Typography>
  100. {
  101. _editMode ?
  102. <Grid item xs={12} s={12} md={12} lg={12} sx={{ ml: 3, mr: 3, mt: 2 }}>
  103. <Grid container alignItems={"center"}>
  104. <Grid item xs={3} s={3} md={2} lg={2}
  105. sx={{ display: 'flex', alignItems: 'center' }}>
  106. <Typography variant="h5">User:</Typography>
  107. </Grid>
  108. <Grid item xs={6} s={5} md={5} lg={5}>
  109. <Autocomplete
  110. disablePortal
  111. id="user-combo"
  112. value={selectedUser === null ? null : selectedUser}
  113. options={userComboList}
  114. onChange={(event, newValue) => {
  115. // console.log(newValue)
  116. setSelectedUser(newValue);
  117. }}
  118. sx={{
  119. '& .MuiInputBase-root': { alignItems: 'center' },
  120. '& .MuiAutocomplete-endAdornment': { top: '50%', transform: 'translateY(-50%)' },
  121. '& .MuiOutlinedInput-root': { height: 40 }
  122. }}
  123. renderInput={(params) => <TextField {...params} />}
  124. />
  125. </Grid>
  126. <Grid item xs={3} s={3} md={4} lg={4} sx={{ ml: 3 }}>
  127. <Button
  128. size="large"
  129. variant="contained"
  130. type="submit"
  131. sx={{
  132. textTransform: 'capitalize',
  133. alignItems: 'end'
  134. }}
  135. onClick={updateUserList}
  136. >
  137. <Typography variant="h5">Add</Typography>
  138. </Button>
  139. </Grid>
  140. </Grid>
  141. </Grid>
  142. : <></>
  143. }
  144. <Grid container>
  145. <Grid item xs={12}>
  146. <UserAddTable
  147. setGroupUserData={setGroupUserData}
  148. setDeletedList={setDeletedList}
  149. userList={groupUserData}
  150. editMode={_editMode}
  151. />
  152. </Grid>
  153. </Grid>
  154. </MainCard>
  155. );
  156. };
  157. export default UserAddCard;