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.
 
 

184 lines
5.6 KiB

  1. // material-ui
  2. import { GridActionsCellItem } from "@mui/x-data-grid";
  3. import { FiDataGrid } from "components/FiDataGrid";
  4. //import VisibilityIcon from '@mui/icons-material/Visibility';
  5. import HighlightOff from '@mui/icons-material/HighlightOff';
  6. import CheckCircleOutline from '@mui/icons-material/CheckCircleOutline';
  7. import {useState, useEffect } from "react";
  8. import { useNavigate } from "react-router-dom";
  9. import * as DateUtils from "utils/DateUtils";
  10. import { GET_IND_USER_PATH } from "utils/ApiPathConst";
  11. import { clickableLink} from 'utils/CommonFunction';
  12. import * as React from 'react';
  13. // ==============================|| EVENT TABLE ||============================== //
  14. export default function UserTable_Individual({ searchCriteria, applyGridOnReady,applySearch }) {
  15. const [_searchCriteria, set_searchCriteria] = useState(searchCriteria);
  16. const navigate = useNavigate()
  17. useEffect(() => {
  18. set_searchCriteria(searchCriteria);
  19. }, [searchCriteria]);
  20. // const handleActionClick = (id) => () => {
  21. // navigate('/indUser/' + id);
  22. // };
  23. const columns = [
  24. // {
  25. // field: 'actions',
  26. // type: 'actions',
  27. // headerName: 'Actions',
  28. // width: 100,
  29. // cellClassName: 'actions',
  30. // getActions: ({ id }) => {
  31. // return [
  32. // <GridActionsCellItem
  33. // key="OutSave"
  34. // icon={<VisibilityIcon />}
  35. // label="View"
  36. // className="textPrimary"
  37. // onClick={handleActionClick(id)}
  38. // color="primary"
  39. // />]
  40. // },
  41. // },
  42. {
  43. id: 'username',
  44. field: 'username',
  45. headerName: 'Username',
  46. flex: 1,
  47. minWidth: 150,
  48. renderCell: (params) => {
  49. return clickableLink('/indUser/'+ params.row.id, params.row.username);
  50. },
  51. },
  52. {
  53. id: 'enName',
  54. field: 'enName',
  55. headerName: 'Name (Eng)',
  56. flex: 1,
  57. minWidth: 150,
  58. },
  59. {
  60. id: 'chName',
  61. field: 'chName',
  62. headerName: 'Name (Ch)',
  63. flex: 1,
  64. minWidth: 150,
  65. },
  66. {
  67. id: 'mobileNumber',
  68. field: 'mobileNumber',
  69. headerName: 'Phone',
  70. flex: 1,
  71. minWidth: 150,
  72. valueGetter: (params) => {
  73. if (params.value) {
  74. let tel = JSON.parse(params.value);
  75. if(tel?.phoneNumber)
  76. return "+" + tel?.countryCode + " " + tel?.phoneNumber;
  77. else return "";
  78. }
  79. }
  80. },
  81. {
  82. id: 'emailAddress',
  83. field: 'emailAddress',
  84. headerName: 'Email',
  85. flex: 1,
  86. minWidth: 150,
  87. },
  88. {
  89. id: 'created',
  90. field: 'created',
  91. headerName: 'Created Date',
  92. flex: 1,
  93. minWidth: 200,
  94. valueGetter: (params) => {
  95. if (params.value) {
  96. return DateUtils.datetimeStr(params.value);
  97. }
  98. }
  99. },
  100. {
  101. id: 'lastLogin',
  102. field: 'lastLogin',
  103. headerName: 'Last Login',
  104. flex: 1,
  105. minWidth: 200,
  106. valueGetter: (params) => {
  107. if (params.value) {
  108. return DateUtils.datetimeStr(params.value);
  109. }
  110. }
  111. },
  112. {
  113. id: 'locked',
  114. field: 'locked',
  115. headerName: 'Status',
  116. flex: 1,
  117. minWidth: 100,
  118. valueGetter: (params) => {
  119. if (params.value) {
  120. return "Locked";
  121. } else {
  122. return "Active";
  123. }
  124. }
  125. },
  126. {
  127. field: 'verifiedDate',
  128. type: 'actions',
  129. headerName: 'Verified',
  130. width: 100,
  131. cellClassName: 'actions',
  132. getActions: (params) => {
  133. if (params.row.verifiedDate)
  134. return [
  135. <GridActionsCellItem
  136. key="verified"
  137. icon={<CheckCircleOutline />}
  138. label="Verified"
  139. color="success"
  140. />];
  141. return [
  142. <GridActionsCellItem
  143. key="unverified"
  144. icon={<HighlightOff />}
  145. label="Not verified"
  146. color="error"
  147. />];
  148. },
  149. },
  150. ];
  151. function handleRowDoubleClick(params) {
  152. navigate('/indUser/' + params.id);
  153. }
  154. return (
  155. <div style={{ height: "fit-content", width: '100%' }}>
  156. <FiDataGrid
  157. columns={columns}
  158. customPageSize={10}
  159. onRowDoubleClick={handleRowDoubleClick}
  160. applyGridOnReady={applyGridOnReady}
  161. applySearch={applySearch}
  162. // doLoad={{
  163. // url: GET_IND_USER_PATH,
  164. // params: _searchCriteria,
  165. // }}
  166. doLoad={React.useMemo(() => ({
  167. url: GET_IND_USER_PATH,
  168. params: _searchCriteria,
  169. }), [_searchCriteria])}
  170. />
  171. </div>
  172. );
  173. }