Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

294 рядки
11 KiB

  1. // material-ui
  2. import {
  3. Button,
  4. CardContent,
  5. Grid, TextField,
  6. Autocomplete
  7. } from '@mui/material';
  8. import MainCard from "components/MainCard";
  9. import { useForm } from "react-hook-form";
  10. import * as React from "react";
  11. import * as ComboData from "utils/ComboData";
  12. import * as DateUtils from "utils/DateUtils";
  13. // ==============================|| DASHBOARD - DEFAULT ||============================== //
  14. const SearchPublicNoticeForm = ({ applySearch, orgComboData, searchCriteria,issueComboData
  15. }) => {
  16. const [type, setType] = React.useState([]);
  17. const [status, setStatus] = React.useState({ key: 0, label: 'All', type: 'all' });
  18. const [orgSelected, setOrgSelected] = React.useState({});
  19. const [orgCombo, setOrgCombo] = React.useState();
  20. const [issueSelected, setIssueSelected] = React.useState({});
  21. const [issueCombo, setIssueCombo] = React.useState([]);
  22. const [minDate, setMinDate] = React.useState(searchCriteria.dateFrom);
  23. const [maxDate, setMaxDate] = React.useState(searchCriteria.dateTo);
  24. const { reset, register, handleSubmit } = useForm()
  25. const onSubmit = (data) => {
  26. let typeArray = [];
  27. for (let i = 0; i < type.length; i++) {
  28. typeArray.push(type[i].label);
  29. }
  30. const temp = {
  31. appNo: data.appNo,
  32. dateFrom: data.dateFrom,
  33. dateTo: data.dateTo,
  34. contact: data.contact,
  35. status: (status?.type && status?.type != 'all') ? status?.type : "",
  36. orgId: (orgSelected?.key && orgSelected?.key > 0) ? orgSelected?.key : "",
  37. issueId: issueSelected?.id,
  38. groupNo: data.groupNo,
  39. };
  40. applySearch(temp);
  41. };
  42. React.useEffect(() => {
  43. if (orgComboData && orgComboData.length > 0) {
  44. setOrgCombo(orgComboData);
  45. }
  46. }, [orgComboData]);
  47. React.useEffect(() => {
  48. if (issueComboData && issueComboData.length > 0) {
  49. setIssueCombo(issueComboData);
  50. }
  51. }, [issueComboData]);
  52. function resetForm() {
  53. setType([]);
  54. setStatus({ key: 0, label: 'All', type: 'all' });
  55. setOrgSelected({});
  56. setIssueSelected({});
  57. reset();
  58. }
  59. function getIssueLabel(data){
  60. if(data=={}) return "";
  61. return data.year
  62. +" Vol. "+zeroPad(data.volume,3)
  63. +", No. "+zeroPad(data.issueNo,2)
  64. +", "+DateUtils.dateFormat(data.issueDate, "D MMM YYYY (ddd)");
  65. }
  66. function zeroPad(num, places) {
  67. num=num?num:0;
  68. var zero = places - num.toString().length + 1;
  69. return Array(+(zero > 0 && zero)).join("0") + num;
  70. }
  71. return (
  72. <MainCard xs={12} md={12} lg={12}
  73. border={false}
  74. content={false}>
  75. <form onSubmit={handleSubmit(onSubmit)}>
  76. {/*row 1*/}
  77. <CardContent sx={{ px: 2.5, pt: 3 }}>
  78. <Grid item justifyContent="space-between" alignItems="center">
  79. Search Form
  80. </Grid>
  81. </CardContent>
  82. {/*row 2*/}
  83. <Grid container alignItems={"center"}>
  84. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  85. <TextField
  86. fullWidth
  87. {...register("appNo")}
  88. id='appNo'
  89. label="App No."
  90. defaultValue={searchCriteria.appNo}
  91. InputLabelProps={{
  92. shrink: true
  93. }}
  94. />
  95. </Grid>
  96. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  97. <TextField
  98. fullWidth
  99. {...register("dateFrom")}
  100. id="dateFrom"
  101. type="date"
  102. label="Submit Date(From)"
  103. defaultValue={searchCriteria.dateFrom}
  104. InputProps={{ inputProps: { max: maxDate } }}
  105. onChange={(newValue) => {
  106. setMinDate(DateUtils.dateStr(newValue));
  107. }}
  108. InputLabelProps={{
  109. shrink: true
  110. }}
  111. />
  112. </Grid>
  113. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  114. <TextField
  115. fullWidth
  116. InputLabelProps={{
  117. shrink: true
  118. }}
  119. {...register("dateTo")}
  120. InputProps={{ inputProps: { min: minDate } }}
  121. onChange={(newValue) => {
  122. setMaxDate(DateUtils.dateStr(newValue));
  123. }}
  124. id="dateTo"
  125. type="date"
  126. label="Submit Date(To)"
  127. defaultValue={searchCriteria.dateTo}
  128. />
  129. </Grid>
  130. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  131. <TextField
  132. fullWidth
  133. {...register("contact")}
  134. id="contact"
  135. label="Contact Person"
  136. defaultValue={searchCriteria.contact}
  137. InputLabelProps={{
  138. shrink: true
  139. }}
  140. />
  141. </Grid>
  142. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  143. <Autocomplete
  144. {...register("status")}
  145. disablePortal
  146. id="status"
  147. filterOptions={(options) => options}
  148. options={ComboData.publicNoticeStatic_GLD}
  149. value={status}
  150. inputValue={status?.label}
  151. onChange={(event, newValue) => {
  152. if (newValue !== null) {
  153. setStatus(newValue);
  154. }
  155. }}
  156. renderInput={(params) => (
  157. <TextField {...params}
  158. label="Status"
  159. />
  160. )}
  161. InputLabelProps={{
  162. shrink: true
  163. }}
  164. />
  165. </Grid>
  166. {
  167. orgCombo ?
  168. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  169. <Autocomplete
  170. {...register("orgId")}
  171. disablePortal
  172. id="orgId"
  173. options={orgCombo}
  174. value={orgSelected}
  175. inputValue={(orgSelected?.label) ? orgSelected?.label : ""}
  176. onChange={(event, newValue) => {
  177. if (newValue !== null) {
  178. setOrgSelected(newValue);
  179. }
  180. }}
  181. renderInput={(params) => (
  182. <TextField {...params}
  183. label="Organization"
  184. InputLabelProps={{
  185. shrink: true
  186. }}
  187. />
  188. )}
  189. />
  190. </Grid>
  191. : <></>
  192. }
  193. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  194. <Autocomplete
  195. {...register("issueId")}
  196. disablePortal
  197. id="issueId"
  198. options={issueCombo}
  199. value={issueSelected}
  200. inputValue={(issueSelected?.id) ? getIssueLabel(issueSelected) : ""}
  201. getOptionLabel={(option)=>getIssueLabel(option)}
  202. onChange={(event, newValue) => {
  203. if (newValue !== null) {
  204. setIssueSelected(newValue);
  205. }
  206. }}
  207. renderInput={(params) => (
  208. <TextField {...params}
  209. label="Gazette Issue"
  210. InputLabelProps={{
  211. shrink: true
  212. }}
  213. />
  214. )}
  215. />
  216. </Grid>
  217. <Grid item xs={9} s={6} md={5} lg={3} sx={{ ml: 3, mr: 3, mb: 3 }}>
  218. <TextField
  219. fullWidth
  220. {...register("groupNo")}
  221. id='groupNo'
  222. label="Gazette Code."
  223. defaultValue={searchCriteria.groupNo}
  224. InputLabelProps={{
  225. shrink: true
  226. }}
  227. />
  228. </Grid>
  229. </Grid>
  230. {/*last row*/}
  231. <Grid container maxWidth justifyContent="flex-end">
  232. <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}>
  233. <Button
  234. size="large"
  235. variant="contained"
  236. onClick={resetForm}
  237. sx={{
  238. textTransform: 'capitalize',
  239. alignItems: 'end'
  240. }}>
  241. Clear
  242. </Button>
  243. </Grid>
  244. <Grid item sx={{ ml: 3, mr: 3, mb: 3, mt: 3 }}>
  245. <Button
  246. size="large"
  247. variant="contained"
  248. type="submit"
  249. sx={{
  250. textTransform: 'capitalize',
  251. alignItems: 'end'
  252. }}>
  253. Submit
  254. </Button>
  255. </Grid>
  256. </Grid>
  257. </form>
  258. </MainCard>
  259. );
  260. };
  261. export default SearchPublicNoticeForm;