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.
 
 

167 line
6.2 KiB

  1. // material-ui
  2. import {useState, useEffect} from 'react';
  3. import {
  4. Button,
  5. Typography, useMediaQuery
  6. } from '@mui/material';
  7. import * as DateUtils from "utils/DateUtils";
  8. import * as StatusUtils from "utils/statusUtils/PublicNoteStatusUtils";
  9. import { useNavigate } from "react-router-dom";
  10. import { FiDataGrid } from "components/FiDataGrid";
  11. import {
  12. isORGLoggedIn,
  13. isDummyLoggedIn,
  14. } from "utils/Utils";
  15. import {GET_PUBLIC_NOTICE_LIST} from "utils/ApiPathConst";
  16. import {getModeIntl } from "utils/statusUtils/PublicNoteStatusUtils";
  17. import { useTheme } from "@emotion/react";
  18. import { FormattedMessage, useIntl } from "react-intl";
  19. import * as React from 'react';
  20. // ==============================|| EVENT TABLE ||============================== //
  21. export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnReady, applySearch }) {
  22. const navigate = useNavigate()
  23. const theme = useTheme();
  24. const isMdOrLg = useMediaQuery(theme.breakpoints.up('md'));
  25. const intl = useIntl();
  26. const [_searchCriteria, set_searchCriteria] = useState(searchCriteria);
  27. useEffect(() => {
  28. set_searchCriteria(searchCriteria);
  29. }, [searchCriteria]);
  30. const handleDetailClick = (params) => () => {
  31. navigate('/publicNotice/' + params.id);
  32. };
  33. const columns = [
  34. {
  35. id: 'appNo',
  36. field: 'appNo',
  37. headerName: intl.formatMessage({ id: 'applicationId' }),
  38. width: isMdOrLg ? 'auto' : 160,
  39. flex: isMdOrLg ? 1 : undefined,
  40. renderCell: (params) => {
  41. return [params.row.appNo+getModeIntl(params,intl)]
  42. },
  43. },
  44. {
  45. id: 'created',
  46. field: 'created',
  47. headerName: intl.formatMessage({ id: 'submitDate' }),
  48. width: isMdOrLg ? 'auto' : 160,
  49. flex: isMdOrLg ? 1 : undefined,
  50. valueGetter: (params) => {
  51. return DateUtils.datetimeStr(params?.value);
  52. }
  53. },
  54. // {
  55. // id: 'contactPerson',
  56. // field: 'contactPerson',
  57. // headerName: '聯絡人',
  58. // flex: 2,
  59. // renderCell: (params) => {
  60. // let phone = JSON.parse(params.row.contactTelNo);
  61. // let faxNo = JSON.parse(params.row.contactFaxNo);
  62. // let contact = "";
  63. // if (phone) {
  64. // contact = "電話: " + phone?.countryCode + " " + phone?.phoneNumber
  65. // }
  66. // if (faxNo && faxNo?.faxNumber) {
  67. // if (contact != "")
  68. // contact = contact + ", "
  69. // contact = contact + "傳真:" + faxNo?.countryCode + " " + faxNo?.faxNumber
  70. // }
  71. // return (<>
  72. // {params?.value}<br />
  73. // {contact}
  74. // </>);
  75. // }
  76. // },
  77. {
  78. id: 'remarks',
  79. field: 'remarks',
  80. headerName: isORGLoggedIn() ? intl.formatMessage({ id: 'gazetteCount2_1' }) : intl.formatMessage({ id: 'myRemarks' }),
  81. width: isMdOrLg ? 'auto' : 400,
  82. flex: isMdOrLg ? 3 : undefined,
  83. renderCell: (params) => (
  84. isORGLoggedIn() ?
  85. isDummyLoggedIn()?
  86. <div>
  87. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  88. + " No. " + params.row.issueNo}<br />
  89. GLD: {params.row.custName} <br />
  90. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  91. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  92. </div>:
  93. <div>
  94. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  95. + " No. " + params.row.issueNo}<br />
  96. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  97. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  98. </div>
  99. :
  100. <div>
  101. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  102. + " No. " + params.row.issueNo}<br />
  103. <Typography variant="pnspsNormalText">{params.row.remarks}</Typography>
  104. </div>
  105. )
  106. },
  107. {
  108. id: 'status',
  109. field: 'status',
  110. headerName: intl.formatMessage({ id: 'status' }),
  111. width: 200,
  112. renderCell: (params) => {
  113. return [StatusUtils.getStatusIntl(params, intl)]
  114. },
  115. },
  116. {
  117. field: 'actions',
  118. type: 'actions',
  119. headerName: '',
  120. width: 150,
  121. cellClassName: 'actions',
  122. renderCell: (params) => {
  123. return <Button onClick={handleDetailClick(params)}
  124. aria-label={intl.formatMessage({ id: 'viewDetail' })}
  125. >
  126. <FormattedMessage id="viewDetail" />
  127. </Button>;
  128. },
  129. }
  130. ];
  131. function handleRowDoubleClick(params) {
  132. navigate('/publicNotice/' + params.id);
  133. }
  134. return (
  135. <div style={{ minHeight: 400, height: "100%", width: '100%' }}>
  136. <FiDataGrid
  137. columns={columns}
  138. customPageSize={10}
  139. getRowHeight={() => 'auto'}
  140. onRowDoubleClick={handleRowDoubleClick}
  141. applyGridOnReady = {applyGridOnReady}
  142. applySearch={applySearch}
  143. tab={"application"}
  144. doLoad={React.useMemo(() => ({
  145. url: GET_PUBLIC_NOTICE_LIST,
  146. params: _searchCriteria,
  147. applyGridOnReady: applyGridOnReady,
  148. // callback: function (responseData) {
  149. // setRows(responseData?.records);
  150. // // applyGridOnReady(false)
  151. // }
  152. }), [_searchCriteria])}
  153. />
  154. </div>
  155. );
  156. }