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.

203 lines
6.9 KiB

  1. import {
  2. Grid, TextField, Stack, Typography
  3. } from '@mui/material';
  4. import Combo from "./Combo";
  5. export const notNullFieldLabel = (label) => {
  6. return (<>{label}<span style={{ "color": "red" }}>*</span></>)
  7. }
  8. export const getDateField = ({ label, valueName, form, disabled }) => {
  9. return <Grid container alignItems={"center"}>
  10. <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
  11. <Typography variant="h5">{label}</Typography>
  12. </Grid>
  13. <Grid item xs={12} md={6} lg={6}>
  14. {initField({
  15. type: "date",
  16. valueName: valueName,
  17. form: form,
  18. disabled: disabled
  19. })}
  20. </Grid>
  21. </Grid>;
  22. }
  23. export const getTextField = ({ label, valueName, form, disabled }) => {
  24. return <Grid container alignItems={"center"} xs={12} sm={12} md={12} lg={12} sx={{mb:2}}>
  25. <Grid item xs={12} sm={12} md={3} lg={3}
  26. sx={{ display: 'flex', alignItems: 'center' }}>
  27. <Typography variant="h5">{label}</Typography>
  28. </Grid>
  29. <Grid item xs={12} sm={12} md={6} lg={6}>
  30. {initField({
  31. type: "text",
  32. valueName: valueName,
  33. form: form,
  34. disabled: disabled
  35. })}
  36. </Grid>
  37. </Grid>;
  38. }
  39. export const getTextArea = ({ label, valueName, form, disabled, inputProps, ...props }) => {
  40. return <Grid container alignItems={"center"}>
  41. <Grid item xs={12} md={3} lg={3}
  42. sx={{ display: 'flex', alignItems: 'center' }}>
  43. <Typography variant="h5">{label}</Typography>
  44. </Grid>
  45. <Grid item xs={12} md={6} lg={6}>
  46. {initField({
  47. type: "text",
  48. valueName: valueName,
  49. form: form,
  50. disabled: disabled,
  51. multiline: true,
  52. row: 10,
  53. minRows: 4,
  54. maxRows: 4,
  55. inputProps: inputProps,
  56. InputProps: {
  57. style: { minHeight:'42.5px', maxHeight: '50vh',height: 'auto' },
  58. },
  59. props
  60. })}
  61. </Grid>
  62. </Grid>;
  63. }
  64. export const getPhoneField = ({ label, valueName, form, disabled }) => {
  65. return <Grid container alignItems={"center"} sx={{mb:2}}>
  66. <Grid item xs={12} md={3} lg={3}
  67. sx={{ display: 'flex', alignItems: 'center' }}>
  68. <Typography variant="h5">{label}</Typography>
  69. </Grid>
  70. <Grid item xs={12} md={6} lg={6}>
  71. <Stack direction="row">
  72. {initField({
  73. type: "tel",
  74. valueName: valueName.code,
  75. form: form,
  76. disabled: disabled,
  77. width: '35%',
  78. handleChange: (event) => {
  79. const value = event.target.value;
  80. const name = event.target.name;
  81. if (value.match(/[^0-9]/)) {
  82. return event.preventDefault();
  83. }
  84. if (valueName.code === name) form.setFieldValue(valueName.code, value)
  85. if (valueName.num === name) form.setFieldValue(valueName.num, value)
  86. }
  87. })}
  88. {initField({
  89. type: "tel",
  90. valueName: valueName.num,
  91. form: form,
  92. disabled: disabled,
  93. handleChange: (event) => {
  94. const value = event.target.value;
  95. const name = event.target.name;
  96. if (value.match(/[^0-9]/)) {
  97. return event.preventDefault();
  98. }
  99. if (valueName.code === name) form.setFieldValue(valueName.code, value)
  100. if (valueName.num === name) form.setFieldValue(valueName.num, value)
  101. }
  102. })}
  103. </Stack>
  104. </Grid>
  105. </Grid>;
  106. }
  107. export const getAddressField = ({ label, valueName, form, disabled }) => {
  108. return <Grid container alignItems={"top"}>
  109. <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'top' }}>
  110. <Grid item lg={12} sx={{ alignItems: 'center' }}>
  111. <Typography variant="h5">{label}</Typography>
  112. </Grid>
  113. </Grid>
  114. <Grid item xs={12} md={6} lg={6}>
  115. <Grid item lg={12} sx={{mb:2}}>
  116. {initField({
  117. type: "text",
  118. valueName: valueName[0],
  119. form: form,
  120. disabled: disabled
  121. })}
  122. </Grid>
  123. <Grid item lg={12} sx={{mb:2}}>
  124. {initField({
  125. type: "text",
  126. valueName: valueName[1],
  127. form: form,
  128. disabled: disabled
  129. })}
  130. </Grid>
  131. <Grid item lg={12} sx={{mb:2}}>
  132. {initField({
  133. type: "text",
  134. valueName: valueName[2],
  135. form: form,
  136. disabled: disabled
  137. })}
  138. </Grid>
  139. </Grid>
  140. </Grid>;
  141. }
  142. export const getComboField = ({ label, dataList, valueName, form, disabled, getOptionLabel, onInputChange, onChange, filterOptions, ...props }) => {
  143. return <Grid container alignItems={"center"} sx={{mb:2}}>
  144. <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
  145. <Typography variant="h5">{label}</Typography>
  146. </Grid>
  147. <Grid item xs={12} md={6} lg={6}>
  148. <Combo
  149. valueName={valueName}
  150. disabled={disabled}
  151. dataList={dataList}
  152. form={form}
  153. filterOptions={filterOptions}
  154. getOptionLabel={getOptionLabel}
  155. onInputChange={onInputChange}
  156. onChange={onChange}
  157. {...props}
  158. />
  159. </Grid>
  160. </Grid>;
  161. }
  162. export const initField = ({ type, valueName, form, disabled, multiline, handleChange, placeholder, inputProps, InputProps, width, ...props }) => {
  163. let err = Boolean(form.errors[valueName]);
  164. return <TextField
  165. fullWidth
  166. multiline={multiline}
  167. id={valueName}
  168. name={valueName}
  169. type={type}
  170. placeholder={placeholder}
  171. inputProps={inputProps}
  172. InputProps={InputProps}
  173. error={err}
  174. helperText={form.errors[valueName] ? form.errors[valueName] : ''}
  175. onChange={handleChange ? handleChange : form.handleChange}
  176. value={form.values[valueName]}
  177. disabled={disabled}
  178. sx={{
  179. "& .MuiInputBase-input.Mui-disabled": {
  180. WebkitTextFillColor: "#000000",
  181. background: "#f8f8f8",
  182. },
  183. width: width ? width : '100%'
  184. }}
  185. {...props}
  186. />
  187. }