Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

176 lignes
6.6 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 renderHeaderWithAria = (params) => (
  34. <span aria-label={params.colDef.headerName}>{params.colDef.headerName}</span>
  35. );
  36. const columns = [
  37. {
  38. id: 'appNo',
  39. field: 'appNo',
  40. headerName: intl.formatMessage({ id: 'applicationId' }),
  41. width: isMdOrLg ? 'auto' : 160,
  42. flex: isMdOrLg ? 1 : undefined,
  43. renderHeader: renderHeaderWithAria,
  44. renderCell: (params) => {
  45. return [params.row.appNo+getModeIntl(params,intl)]
  46. },
  47. },
  48. {
  49. id: 'created',
  50. field: 'created',
  51. headerName: intl.formatMessage({ id: 'submitDate' }),
  52. width: isMdOrLg ? 'auto' : 160,
  53. flex: isMdOrLg ? 1 : undefined,
  54. renderHeader: renderHeaderWithAria,
  55. valueGetter: (params) => {
  56. return DateUtils.datetimeStr(params?.value);
  57. }
  58. },
  59. // {
  60. // id: 'contactPerson',
  61. // field: 'contactPerson',
  62. // headerName: '聯絡人',
  63. // flex: 2,
  64. // renderCell: (params) => {
  65. // let phone = JSON.parse(params.row.contactTelNo);
  66. // let faxNo = JSON.parse(params.row.contactFaxNo);
  67. // let contact = "";
  68. // if (phone) {
  69. // contact = "電話: " + phone?.countryCode + " " + phone?.phoneNumber
  70. // }
  71. // if (faxNo && faxNo?.faxNumber) {
  72. // if (contact != "")
  73. // contact = contact + ", "
  74. // contact = contact + "傳真:" + faxNo?.countryCode + " " + faxNo?.faxNumber
  75. // }
  76. // return (<>
  77. // {params?.value}<br />
  78. // {contact}
  79. // </>);
  80. // }
  81. // },
  82. {
  83. id: 'remarks',
  84. field: 'remarks',
  85. headerName: isORGLoggedIn() ? intl.formatMessage({ id: 'gazetteCount2_1' }) : intl.formatMessage({ id: 'myRemarks' }),
  86. width: isMdOrLg ? 'auto' : 400,
  87. flex: isMdOrLg ? 3 : undefined,
  88. renderHeader: renderHeaderWithAria,
  89. renderCell: (params) => (
  90. isORGLoggedIn() ?
  91. isDummyLoggedIn()?
  92. <div>
  93. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  94. + " No. " + params.row.issueNo}<br />
  95. GLD: {params.row.custName} <br />
  96. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  97. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  98. </div>:
  99. <div>
  100. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  101. + " No. " + params.row.issueNo}<br />
  102. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  103. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  104. </div>
  105. :
  106. <div>
  107. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  108. + " No. " + params.row.issueNo}<br />
  109. <Typography variant="pnspsNormalText">{params.row.remarks}</Typography>
  110. </div>
  111. )
  112. },
  113. {
  114. id: 'status',
  115. field: 'status',
  116. headerName: intl.formatMessage({ id: 'status' }),
  117. width: 200,
  118. renderHeader: renderHeaderWithAria,
  119. renderCell: (params) => {
  120. return [StatusUtils.getStatusIntl(params, intl)]
  121. },
  122. },
  123. {
  124. field: 'actions',
  125. type: 'actions',
  126. headerName: '',
  127. width: 150,
  128. renderHeader: renderHeaderWithAria,
  129. cellClassName: 'actions',
  130. renderCell: (params) => {
  131. return <Button onClick={handleDetailClick(params)}
  132. aria-label={intl.formatMessage({ id: 'viewDetail' })}
  133. >
  134. <FormattedMessage id="viewDetail" />
  135. </Button>;
  136. },
  137. }
  138. ];
  139. function handleRowDoubleClick(params) {
  140. navigate('/publicNotice/' + params.id);
  141. }
  142. return (
  143. <div style={{ minHeight: 400, height: "100%", width: '100%' }}>
  144. <FiDataGrid
  145. columns={columns}
  146. customPageSize={10}
  147. getRowHeight={() => 'auto'}
  148. onRowDoubleClick={handleRowDoubleClick}
  149. applyGridOnReady = {applyGridOnReady}
  150. applySearch={applySearch}
  151. tab={"application"}
  152. doLoad={React.useMemo(() => ({
  153. url: GET_PUBLIC_NOTICE_LIST,
  154. params: _searchCriteria,
  155. applyGridOnReady: applyGridOnReady,
  156. // callback: function (responseData) {
  157. // setRows(responseData?.records);
  158. // // applyGridOnReady(false)
  159. // }
  160. }), [_searchCriteria])}
  161. />
  162. </div>
  163. );
  164. }