Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

158 linhas
6.0 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. import { PRIMARY_TEXT_BUTTON_SX } from "themes/colorConst";
  21. // ==============================|| EVENT TABLE ||============================== //
  22. export default function SearchPublicNoticeTable({ searchCriteria, applyGridOnReady, applySearch }) {
  23. const navigate = useNavigate()
  24. const theme = useTheme();
  25. const isMdOrLg = useMediaQuery(theme.breakpoints.up('md'));
  26. const intl = useIntl();
  27. const [_searchCriteria, set_searchCriteria] = useState(searchCriteria);
  28. useEffect(() => {
  29. set_searchCriteria(searchCriteria);
  30. }, [searchCriteria]);
  31. const handleDetailClick = (params) => () => {
  32. navigate('/publicNotice/' + params.id);
  33. };
  34. const renderHeaderWithAria = (params) => (
  35. <span aria-label={params.colDef.headerName}>{params.colDef.headerName}</span>
  36. );
  37. const columns = [
  38. {
  39. id: 'appNo',
  40. field: 'appNo',
  41. headerName: intl.formatMessage({ id: 'applicationId' }),
  42. sortable: true,
  43. width: isMdOrLg ? 'auto' : 160,
  44. flex: isMdOrLg ? 1 : undefined,
  45. renderHeader: renderHeaderWithAria,
  46. renderCell: (params) => {
  47. return params.row.appNo + getModeIntl(params, intl);
  48. },
  49. },
  50. {
  51. id: 'created',
  52. field: 'created',
  53. headerName: intl.formatMessage({ id: 'submitDate' }),
  54. sortable: true,
  55. width: isMdOrLg ? 'auto' : 160,
  56. flex: isMdOrLg ? 1 : undefined,
  57. renderHeader: renderHeaderWithAria,
  58. valueGetter: (params) => {
  59. return DateUtils.datetimeStr(params?.value);
  60. }
  61. },
  62. {
  63. id: 'remarks',
  64. field: 'remarks',
  65. headerName: isORGLoggedIn() ? intl.formatMessage({ id: 'gazetteCount2_1' }) : intl.formatMessage({ id: 'myRemarks' }),
  66. sortable: true,
  67. width: isMdOrLg ? 'auto' : 400,
  68. flex: isMdOrLg ? 3 : undefined,
  69. renderHeader: renderHeaderWithAria,
  70. renderCell: (params) => (
  71. isORGLoggedIn() ?
  72. isDummyLoggedIn()?
  73. <div>
  74. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  75. + " No. " + params.row.issueNo}<br />
  76. GLD: {params.row.custName} <br />
  77. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  78. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  79. </div>:
  80. <div>
  81. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  82. + " No. " + params.row.issueNo}<br />
  83. <FormattedMessage id="careOf" />: {params.row.careOf} <br />
  84. <FormattedMessage id="myRemarks" />: {params.row.remarks}
  85. </div>
  86. :
  87. <div>
  88. <FormattedMessage id="gazetteCount" />: {params.row.issueVolume + "/" + params.row.issueYear
  89. + " No. " + params.row.issueNo}<br />
  90. <Typography variant="pnspsNormalText">{params.row.remarks}</Typography>
  91. </div>
  92. )
  93. },
  94. {
  95. id: 'status',
  96. field: 'status',
  97. headerName: intl.formatMessage({ id: 'status' }),
  98. sortable: true,
  99. width: 200,
  100. renderHeader: renderHeaderWithAria,
  101. renderCell: (params) => {
  102. return StatusUtils.getStatusIntl(params, intl);
  103. },
  104. },
  105. {
  106. field: 'actions',
  107. type: 'actions',
  108. headerName: '',
  109. sortable: false,
  110. width: 150,
  111. renderHeader: renderHeaderWithAria,
  112. cellClassName: 'actions',
  113. renderCell: (params) => {
  114. return <Button onClick={handleDetailClick(params)}
  115. aria-label={intl.formatMessage({ id: 'viewDetail' })}
  116. sx={PRIMARY_TEXT_BUTTON_SX}
  117. >
  118. <FormattedMessage id="viewDetail" />
  119. </Button>;
  120. },
  121. }
  122. ];
  123. function handleRowDoubleClick(params) {
  124. navigate('/publicNotice/' + params.id);
  125. }
  126. return (
  127. <div style={{ minHeight: 400, height: "100%", width: '100%' }}>
  128. <FiDataGrid
  129. columns={columns}
  130. customPageSize={10}
  131. serverSorting
  132. getRowHeight={() => 'auto'}
  133. onRowDoubleClick={handleRowDoubleClick}
  134. applyGridOnReady = {applyGridOnReady}
  135. applySearch={applySearch}
  136. tab={"application"}
  137. doLoad={React.useMemo(() => ({
  138. url: GET_PUBLIC_NOTICE_LIST,
  139. params: _searchCriteria,
  140. applyGridOnReady: applyGridOnReady,
  141. // callback: function (responseData) {
  142. // setRows(responseData?.records);
  143. // // applyGridOnReady(false)
  144. // }
  145. }), [_searchCriteria])}
  146. />
  147. </div>
  148. );
  149. }