選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

FieldUtils.js 8.2 KiB

2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
2年前
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  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 spacing={1} alignItems={"center"}>
  10. <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
  11. <Typography variant="pnspsFormParagraphBold">{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"} sx={{mb:2}}>
  25. <Grid item xs={12} sm={12} md={12} lg={12}>
  26. <Grid container spacing={1}>
  27. <Grid item xs={12} sm={12} md={3} lg={3}
  28. sx={{ display: 'flex', alignItems: 'center' }} >
  29. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  30. </Grid>
  31. <Grid item xs={12} sm={12} md={6} lg={6}>
  32. {initField({
  33. type: "text",
  34. valueName: valueName,
  35. form: form,
  36. disabled: disabled
  37. })}
  38. </Grid>
  39. </Grid>
  40. </Grid>
  41. </Grid>;
  42. }
  43. export const getCarOfField = ({ label, valueName, form, disabled }) => {
  44. return <Grid container alignItems={"center"} >
  45. <Grid item xs={12} sm={12} md={12} lg={12}>
  46. <Grid container spacing={1}>
  47. <Grid item xs={12} sm={12} md={3} lg={3}
  48. sx={{ display: 'flex', alignItems: 'center' }} >
  49. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  50. </Grid>
  51. <Grid item xs={12} sm={12} md={6} lg={6}>
  52. {initField({
  53. type: "text",
  54. valueName: valueName,
  55. form: form,
  56. disabled: disabled
  57. })}
  58. </Grid>
  59. </Grid>
  60. </Grid>
  61. </Grid>;
  62. }
  63. export const getTextArea = ({ label, valueName, form, disabled, inputProps, ...props }) => {
  64. return <Grid container spacing={1} alignItems={"center"}>
  65. <Grid item xs={12} md={3} lg={3}
  66. sx={{ display: 'flex', alignItems: 'center' }}>
  67. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  68. </Grid>
  69. <Grid item xs={12} md={6} lg={6}>
  70. {initField({
  71. type: "text",
  72. valueName: valueName,
  73. form: form,
  74. disabled: disabled,
  75. minRows: 4,
  76. maxRows: 4,
  77. inputProps: inputProps,
  78. InputProps: {
  79. row: 10,
  80. multiline: true,
  81. inputComponent: 'textarea',
  82. style: { minHeight:'42.5px', maxHeight: '50vh',height: 'auto' },
  83. },
  84. props
  85. })}
  86. </Grid>
  87. </Grid>;
  88. }
  89. export const getPhoneField = ({ label, valueName, form, disabled }) => {
  90. return <Grid container spacing={1} alignItems={"center"} sx={{mb:2}}>
  91. <Grid item xs={12} md={3} lg={3}
  92. sx={{ display: 'flex', alignItems: 'center' }}>
  93. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  94. </Grid>
  95. <Grid item xs={12} md={6} lg={6}>
  96. <Stack direction="row">
  97. {initField({
  98. type: "tel",
  99. valueName: valueName.code,
  100. form: form,
  101. disabled: disabled,
  102. width: '35%',
  103. style:{minWidth: 80,},
  104. handleChange: (event) => {
  105. const value = event.target.value;
  106. const name = event.target.name;
  107. if (value.match(/[^0-9]/)) {
  108. return event.preventDefault();
  109. }
  110. if (valueName.code === name) form.setFieldValue(valueName.code, value)
  111. if (valueName.num === name) form.setFieldValue(valueName.num, value)
  112. }
  113. })}
  114. {initField({
  115. type: "tel",
  116. valueName: valueName.num,
  117. form: form,
  118. disabled: disabled,
  119. handleChange: (event) => {
  120. const value = event.target.value;
  121. const name = event.target.name;
  122. if (value.match(/[^0-9]/)) {
  123. return event.preventDefault();
  124. }
  125. if (valueName.code === name) form.setFieldValue(valueName.code, value)
  126. if (valueName.num === name) form.setFieldValue(valueName.num, value)
  127. }
  128. })}
  129. </Stack>
  130. </Grid>
  131. </Grid>;
  132. }
  133. export const getAddressField = ({ label, valueName, form, disabled }) => {
  134. return <Grid container spacing={1} alignItems={"top"}>
  135. <Grid item xs={12} md={3} lg={1} mt={1} sx={{ display: 'flex', alignItems: 'top' }}>
  136. <Grid item lg={12} sx={{ alignItems: 'center' }}>
  137. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  138. </Grid>
  139. </Grid>
  140. <Grid item xs={12} md={6} lg={6}>
  141. <Grid item lg={12} sx={{mb:2}}>
  142. {initField({
  143. type: "text",
  144. valueName: valueName[0],
  145. form: form,
  146. disabled: disabled
  147. })}
  148. </Grid>
  149. <Grid item lg={12} sx={{mb:2}}>
  150. {initField({
  151. type: "text",
  152. valueName: valueName[1],
  153. form: form,
  154. disabled: disabled
  155. })}
  156. </Grid>
  157. <Grid item lg={12} sx={{mb:2}}>
  158. {initField({
  159. type: "text",
  160. valueName: valueName[2],
  161. form: form,
  162. disabled: disabled
  163. })}
  164. </Grid>
  165. </Grid>
  166. </Grid>;
  167. }
  168. export const getComboField = ({ label, dataList, valueName, form, disabled, getOptionLabel, onInputChange, onChange, filterOptions, ...props }) => {
  169. let err = Boolean(form.errors[valueName]);
  170. return <Grid container spacing={1} alignItems={"center"} sx={{mb:2}}>
  171. <Grid item xs={12} md={3} lg={3} sx={{ display: 'flex', alignItems: 'center' }}>
  172. <Typography variant="pnspsFormParagraphBold">{label}</Typography>
  173. </Grid>
  174. <Grid item xs={12} md={6} lg={6}>
  175. <Combo
  176. valueName={valueName}
  177. disabled={disabled}
  178. dataList={dataList}
  179. form={form}
  180. error={err}
  181. helperText={form.errors[valueName] ? form.errors[valueName] : ''}
  182. filterOptions={filterOptions}
  183. getOptionLabel={getOptionLabel}
  184. onInputChange={onInputChange}
  185. onChange={onChange}
  186. {...props}
  187. />
  188. </Grid>
  189. </Grid>;
  190. }
  191. export const initField = ({ type, valueName, form, disabled, multiline, handleChange, placeholder, inputProps, InputProps, width, ...props }) => {
  192. let err = Boolean(form.errors[valueName]);
  193. return <TextField
  194. fullWidth
  195. multiline={multiline}
  196. id={valueName}
  197. name={valueName}
  198. type={type}
  199. placeholder={placeholder}
  200. inputProps={inputProps}
  201. InputProps={InputProps}
  202. error={err}
  203. helperText={form.errors[valueName] ? form.errors[valueName] : ''}
  204. onChange={handleChange ? handleChange : form.handleChange}
  205. value={form.values[valueName]}
  206. disabled={disabled}
  207. sx={{
  208. width: width ? width : '100%'
  209. }}
  210. {...props}
  211. />
  212. }