tf-checkout-react 1.0.102 → 1.0.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/components/common/RedirectModal.d.ts +7 -0
  2. package/dist/components/ticketsContainer/TicketsSection.d.ts +2 -1
  3. package/dist/components/ticketsContainer/index.d.ts +2 -1
  4. package/dist/images/done.svg +3 -3
  5. package/dist/index.d.ts +1 -0
  6. package/dist/tf-checkout-react.cjs.development.js +71 -25
  7. package/dist/tf-checkout-react.cjs.development.js.map +1 -1
  8. package/dist/tf-checkout-react.cjs.production.min.js +1 -1
  9. package/dist/tf-checkout-react.cjs.production.min.js.map +1 -1
  10. package/dist/tf-checkout-react.esm.js +71 -26
  11. package/dist/tf-checkout-react.esm.js.map +1 -1
  12. package/package.json +89 -89
  13. package/src/.d.ts +2 -2
  14. package/src/api/index.ts +293 -278
  15. package/src/assets/images/done.svg +3 -3
  16. package/src/components/billing-info-container/index.tsx +796 -796
  17. package/src/components/billing-info-container/style.css +105 -105
  18. package/src/components/billing-info-container/utils.ts +224 -224
  19. package/src/components/common/CheckboxField.tsx +41 -41
  20. package/src/components/common/CustomField.tsx +84 -84
  21. package/src/components/common/FormikPhoneNumberField.tsx +51 -51
  22. package/src/components/common/Loader.tsx +9 -9
  23. package/src/components/common/RadioField.tsx +35 -35
  24. package/src/components/common/RedirectModal.tsx +43 -0
  25. package/src/components/common/SelectField.tsx +80 -80
  26. package/src/components/common/SnackbarAlert.tsx +53 -53
  27. package/src/components/common/index.tsx +4 -4
  28. package/src/components/confirmModal/index.tsx +51 -51
  29. package/src/components/confirmModal/style.css +21 -21
  30. package/src/components/confirmationContainer/config.ts +72 -72
  31. package/src/components/confirmationContainer/index.tsx +197 -197
  32. package/src/components/confirmationContainer/social-buttons.tsx +94 -94
  33. package/src/components/confirmationContainer/style.css +202 -202
  34. package/src/components/countdown/index.tsx +89 -89
  35. package/src/components/countdown/style.css +9 -9
  36. package/src/components/index.ts +7 -7
  37. package/src/components/loginModal/index.tsx +209 -209
  38. package/src/components/loginModal/style.css +71 -71
  39. package/src/components/myTicketsContainer/index.tsx +196 -196
  40. package/src/components/myTicketsContainer/row.tsx +41 -41
  41. package/src/components/myTicketsContainer/style.css +39 -39
  42. package/src/components/myTicketsContainer/tableConfig.tsx +34 -34
  43. package/src/components/orderDetailsContainer/index.tsx +249 -249
  44. package/src/components/orderDetailsContainer/style.css +72 -72
  45. package/src/components/orderDetailsContainer/ticketsTable.tsx +124 -124
  46. package/src/components/paymentContainer/index.tsx +284 -284
  47. package/src/components/registerModal/index.tsx +190 -190
  48. package/src/components/stripePayment/index.tsx +253 -253
  49. package/src/components/stripePayment/style.css +59 -59
  50. package/src/components/ticketResale/index.tsx +56 -56
  51. package/src/components/ticketResaleModal/index.tsx +210 -210
  52. package/src/components/ticketResaleModal/style.css +28 -28
  53. package/src/components/ticketsContainer/PromoCodeSection.tsx +99 -99
  54. package/src/components/ticketsContainer/ReferralLogic.tsx +33 -33
  55. package/src/components/ticketsContainer/TicketRow.tsx +83 -83
  56. package/src/components/ticketsContainer/TicketsSection.tsx +85 -81
  57. package/src/components/ticketsContainer/index.tsx +430 -430
  58. package/src/components/ticketsContainer/style.css +181 -181
  59. package/src/components/ticketsContainer/utils.ts +11 -11
  60. package/src/components/timerWidget/index.tsx +70 -70
  61. package/src/components/timerWidget/style.css +26 -26
  62. package/src/components/waitingList/index.tsx +178 -178
  63. package/src/components/waitingList/style.css +26 -26
  64. package/src/env.ts +20 -20
  65. package/src/index.ts +14 -13
  66. package/src/normalizers/index.ts +45 -45
  67. package/src/types/billing-info-data.ts +37 -37
  68. package/src/types/payment-field.ts +7 -7
  69. package/src/types/referral-promotion.ts +7 -7
  70. package/src/utils/createCheckoutDataBodyWithDefaultHolder.ts +59 -59
  71. package/src/utils/downloadPDF.tsx +30 -30
  72. package/src/utils/formikErrorFocus.ts +24 -24
  73. package/src/utils/getImage.ts +14 -14
  74. package/src/utils/getQueryVariable.ts +13 -13
  75. package/src/utils/index.ts +5 -5
  76. package/src/utils/setConfigs.ts +26 -26
  77. package/src/utils/showZero.tsx +10 -10
  78. package/src/validators/index.ts +20 -20
  79. package/src/.DS_Store +0 -0
  80. package/src/components/.DS_Store +0 -0
@@ -1,41 +1,41 @@
1
- import React from 'react'
2
- import FormGroup from '@mui/material/FormGroup'
3
- import FormControlLabel from '@mui/material/FormControlLabel'
4
- import Checkbox from '@mui/material/Checkbox'
5
- import { FieldInputProps } from 'formik'
6
- import { useTheme } from '@mui/styles'
7
- import { FormControl, FormHelperText } from '@mui/material'
8
-
9
- export interface ICheckboxField {
10
- label: string | number | JSX.Element;
11
- field?: FieldInputProps<any>;
12
- }
13
-
14
- interface IOtherProps {
15
- [key: string]: any;
16
- }
17
-
18
- export const CheckboxField = ({
19
- label,
20
- field,
21
- selectOptions,
22
- theme,
23
- setFieldValue,
24
- ...rest
25
- }: ICheckboxField & IOtherProps) => {
26
- const customTheme: any = useTheme()
27
- return (
28
- <FormControl error={!!(rest?.form?.errors && rest.form.errors[field?.name ?? ""])}>
29
- <FormGroup>
30
- <FormControlLabel
31
- control={<Checkbox {...field} {...rest} />}
32
- label={label}
33
- componentsProps={{
34
- typography: customTheme?.checkbox
35
- }}
36
- />
37
- </FormGroup>
38
- {!!(rest?.form?.errors && rest.form.errors[field?.name ?? ""]) ? <FormHelperText>Required</FormHelperText> : null}
39
- </FormControl>
40
- )
41
- }
1
+ import React from 'react'
2
+ import FormGroup from '@mui/material/FormGroup'
3
+ import FormControlLabel from '@mui/material/FormControlLabel'
4
+ import Checkbox from '@mui/material/Checkbox'
5
+ import { FieldInputProps } from 'formik'
6
+ import { useTheme } from '@mui/styles'
7
+ import { FormControl, FormHelperText } from '@mui/material'
8
+
9
+ export interface ICheckboxField {
10
+ label: string | number | JSX.Element;
11
+ field?: FieldInputProps<any>;
12
+ }
13
+
14
+ interface IOtherProps {
15
+ [key: string]: any;
16
+ }
17
+
18
+ export const CheckboxField = ({
19
+ label,
20
+ field,
21
+ selectOptions,
22
+ theme,
23
+ setFieldValue,
24
+ ...rest
25
+ }: ICheckboxField & IOtherProps) => {
26
+ const customTheme: any = useTheme()
27
+ return (
28
+ <FormControl error={!!(rest?.form?.errors && rest.form.errors[field?.name ?? ""])}>
29
+ <FormGroup>
30
+ <FormControlLabel
31
+ control={<Checkbox {...field} {...rest} />}
32
+ label={label}
33
+ componentsProps={{
34
+ typography: customTheme?.checkbox
35
+ }}
36
+ />
37
+ </FormGroup>
38
+ {!!(rest?.form?.errors && rest.form.errors[field?.name ?? ""]) ? <FormHelperText>Required</FormHelperText> : null}
39
+ </FormControl>
40
+ )
41
+ }
@@ -1,84 +1,84 @@
1
- import React from 'react'
2
- import TextField from '@mui/material/TextField'
3
- import _map from 'lodash/map'
4
- import _get from 'lodash/get'
5
- import _includes from 'lodash/includes'
6
-
7
- import { FieldInputProps, FormikProps } from 'formik'
8
- import { useTheme } from '@mui/styles'
9
-
10
- export interface ISelectOption {
11
- label: string | number;
12
- value?: string | number;
13
- [key: string]: any;
14
- }
15
-
16
- export interface ICustomField {
17
- label: string;
18
-
19
- field: FieldInputProps<any>;
20
- form: FormikProps<any>;
21
- theme: 'dark' | 'light';
22
-
23
- // optional
24
- type?: string;
25
- selectOptions?: ISelectOption[];
26
- }
27
-
28
- interface IOtherProps {
29
- [key: string]: any;
30
- }
31
-
32
- export const CustomField = ({
33
- label,
34
- type = 'text',
35
- field,
36
- selectOptions = [] as ISelectOption[],
37
- form: { touched, errors, submitCount },
38
- theme,
39
- }: ICustomField & IOtherProps) => {
40
- const isSelectField = type === 'select'
41
- const error = _get(errors, field.name)
42
- const isTouched =
43
- Boolean(_get(touched, field.name)) ||
44
- (_includes(field.name, 'holder') && !!error && !!submitCount)
45
-
46
- const customTheme: any = useTheme()
47
-
48
- return (
49
- <TextField
50
- id={field.name}
51
- label={label}
52
- type={type}
53
- select={isSelectField}
54
- fullWidth={true}
55
- error={!!error && isTouched}
56
- helperText={isTouched && error}
57
- SelectProps={{
58
- native: true,
59
- className: theme,
60
- MenuProps: { className: theme },
61
- }}
62
- InputLabelProps={{
63
- sx: customTheme?.input,
64
- shrink: field.name === 'holderAge' ? true : undefined,
65
- }}
66
- inputProps={{
67
- sx: customTheme?.input,
68
- }}
69
- {...field}
70
- >
71
- {isSelectField
72
- ? _map(selectOptions, option => (
73
- <option
74
- key={option.value}
75
- value={option.value}
76
- disabled={option.disabled}
77
- >
78
- {option.label}
79
- </option>
80
- ))
81
- : null}
82
- </TextField>
83
- )
84
- }
1
+ import React from 'react'
2
+ import TextField from '@mui/material/TextField'
3
+ import _map from 'lodash/map'
4
+ import _get from 'lodash/get'
5
+ import _includes from 'lodash/includes'
6
+
7
+ import { FieldInputProps, FormikProps } from 'formik'
8
+ import { useTheme } from '@mui/styles'
9
+
10
+ export interface ISelectOption {
11
+ label: string | number;
12
+ value?: string | number;
13
+ [key: string]: any;
14
+ }
15
+
16
+ export interface ICustomField {
17
+ label: string;
18
+
19
+ field: FieldInputProps<any>;
20
+ form: FormikProps<any>;
21
+ theme: 'dark' | 'light';
22
+
23
+ // optional
24
+ type?: string;
25
+ selectOptions?: ISelectOption[];
26
+ }
27
+
28
+ interface IOtherProps {
29
+ [key: string]: any;
30
+ }
31
+
32
+ export const CustomField = ({
33
+ label,
34
+ type = 'text',
35
+ field,
36
+ selectOptions = [] as ISelectOption[],
37
+ form: { touched, errors, submitCount },
38
+ theme,
39
+ }: ICustomField & IOtherProps) => {
40
+ const isSelectField = type === 'select'
41
+ const error = _get(errors, field.name)
42
+ const isTouched =
43
+ Boolean(_get(touched, field.name)) ||
44
+ (_includes(field.name, 'holder') && !!error && !!submitCount)
45
+
46
+ const customTheme: any = useTheme()
47
+
48
+ return (
49
+ <TextField
50
+ id={field.name}
51
+ label={label}
52
+ type={type}
53
+ select={isSelectField}
54
+ fullWidth={true}
55
+ error={!!error && isTouched}
56
+ helperText={isTouched && error}
57
+ SelectProps={{
58
+ native: true,
59
+ className: theme,
60
+ MenuProps: { className: theme },
61
+ }}
62
+ InputLabelProps={{
63
+ sx: customTheme?.input,
64
+ shrink: field.name === 'holderAge' ? true : undefined,
65
+ }}
66
+ inputProps={{
67
+ sx: customTheme?.input,
68
+ }}
69
+ {...field}
70
+ >
71
+ {isSelectField
72
+ ? _map(selectOptions, option => (
73
+ <option
74
+ key={option.value}
75
+ value={option.value}
76
+ disabled={option.disabled}
77
+ >
78
+ {option.label}
79
+ </option>
80
+ ))
81
+ : null}
82
+ </TextField>
83
+ )
84
+ }
@@ -1,52 +1,52 @@
1
- import React from 'react'
2
- import { FieldInputProps } from 'formik'
3
- import MuiPhoneNumber from 'material-ui-phone-number'
4
- import _get from 'lodash/get'
5
- import { removePlusSign } from '../../normalizers'
6
- import { useTheme } from '@mui/styles'
7
-
8
- export interface INumberInField {
9
- label: string | number | JSX.Element;
10
- field: FieldInputProps<any>;
11
- }
12
-
13
- interface IOtherProps {
14
- [key: string]: any;
15
- }
16
-
17
- export const FormikPhoneNumberField = ({
18
- label,
19
- field,
20
- form: { touched, errors, initialValues },
21
- setFieldValue,
22
- selectOptions,
23
- ...rest
24
- }: INumberInField & IOtherProps) => {
25
- const error = _get(errors, field.name)
26
- const isTouched = Boolean(_get(touched, field.name))
27
-
28
- const customTheme: any = useTheme()
29
-
30
- return (
31
- <MuiPhoneNumber
32
- name='phone'
33
- value={initialValues.phone}
34
- onChange={(e: any) => setFieldValue("phone", removePlusSign(e))}
35
- variant="outlined"
36
- defaultCountry='us'
37
- disableDropdown={true}
38
- label={label}
39
- error={!!error && isTouched}
40
- helperText={isTouched && error}
41
- fullWidth
42
- InputLabelProps={{
43
- sx: customTheme?.input
44
- }}
45
- InputProps={{
46
- sx: customTheme?.input
47
- }}
48
- autoFormat={false}
49
- {...rest}
50
- />
51
- )
1
+ import React from 'react'
2
+ import { FieldInputProps } from 'formik'
3
+ import MuiPhoneNumber from 'material-ui-phone-number'
4
+ import _get from 'lodash/get'
5
+ import { removePlusSign } from '../../normalizers'
6
+ import { useTheme } from '@mui/styles'
7
+
8
+ export interface INumberInField {
9
+ label: string | number | JSX.Element;
10
+ field: FieldInputProps<any>;
11
+ }
12
+
13
+ interface IOtherProps {
14
+ [key: string]: any;
15
+ }
16
+
17
+ export const FormikPhoneNumberField = ({
18
+ label,
19
+ field,
20
+ form: { touched, errors, initialValues },
21
+ setFieldValue,
22
+ selectOptions,
23
+ ...rest
24
+ }: INumberInField & IOtherProps) => {
25
+ const error = _get(errors, field.name)
26
+ const isTouched = Boolean(_get(touched, field.name))
27
+
28
+ const customTheme: any = useTheme()
29
+
30
+ return (
31
+ <MuiPhoneNumber
32
+ name='phone'
33
+ value={initialValues.phone}
34
+ onChange={(e: any) => setFieldValue("phone", removePlusSign(e))}
35
+ variant="outlined"
36
+ defaultCountry='us'
37
+ disableDropdown={true}
38
+ label={label}
39
+ error={!!error && isTouched}
40
+ helperText={isTouched && error}
41
+ fullWidth
42
+ InputLabelProps={{
43
+ sx: customTheme?.input
44
+ }}
45
+ InputProps={{
46
+ sx: customTheme?.input
47
+ }}
48
+ autoFormat={false}
49
+ {...rest}
50
+ />
51
+ )
52
52
  }
@@ -1,10 +1,10 @@
1
- import React from 'react'
2
- import CircularProgress from '@mui/material/CircularProgress'
3
-
4
- export function Loader() {
5
- return (
6
- <div className="loader-container">
7
- <CircularProgress />
8
- </div>
9
- )
1
+ import React from 'react'
2
+ import CircularProgress from '@mui/material/CircularProgress'
3
+
4
+ export function Loader() {
5
+ return (
6
+ <div className="loader-container">
7
+ <CircularProgress />
8
+ </div>
9
+ )
10
10
  }
@@ -1,35 +1,35 @@
1
- import React from 'react'
2
- import FormGroup from '@mui/material/FormGroup'
3
- import FormControlLabel from '@mui/material/FormControlLabel'
4
- import Radio from '@mui/material/Radio';
5
- import { FieldInputProps } from 'formik'
6
- import { useTheme } from '@mui/styles'
7
-
8
- export interface IRadioField {
9
- label: string | number | JSX.Element;
10
- field?: FieldInputProps<any>;
11
- }
12
-
13
- interface IOtherProps {
14
- [key: string]: any;
15
- }
16
-
17
- export const RadioField = ({
18
- label,
19
- field,
20
- theme,
21
- ...rest
22
- }: IRadioField & IOtherProps) => {
23
- const customTheme: any = useTheme()
24
- return (
25
- <FormGroup>
26
- <FormControlLabel
27
- control={<Radio {...field} {...rest} />}
28
- label={label}
29
- componentsProps={{
30
- typography: customTheme?.checkbox
31
- }}
32
- />
33
- </FormGroup>
34
- )
35
- }
1
+ import React from 'react'
2
+ import FormGroup from '@mui/material/FormGroup'
3
+ import FormControlLabel from '@mui/material/FormControlLabel'
4
+ import Radio from '@mui/material/Radio';
5
+ import { FieldInputProps } from 'formik'
6
+ import { useTheme } from '@mui/styles'
7
+
8
+ export interface IRadioField {
9
+ label: string | number | JSX.Element;
10
+ field?: FieldInputProps<any>;
11
+ }
12
+
13
+ interface IOtherProps {
14
+ [key: string]: any;
15
+ }
16
+
17
+ export const RadioField = ({
18
+ label,
19
+ field,
20
+ theme,
21
+ ...rest
22
+ }: IRadioField & IOtherProps) => {
23
+ const customTheme: any = useTheme()
24
+ return (
25
+ <FormGroup>
26
+ <FormControlLabel
27
+ control={<Radio {...field} {...rest} />}
28
+ label={label}
29
+ componentsProps={{
30
+ typography: customTheme?.checkbox
31
+ }}
32
+ />
33
+ </FormGroup>
34
+ )
35
+ }
@@ -0,0 +1,43 @@
1
+ import React from 'react'
2
+ import Modal from '@mui/material/Modal'
3
+ import Box from '@mui/material/Box'
4
+
5
+ interface IRedirectModal {
6
+ message: string
7
+ onClickOk: () => void
8
+ }
9
+
10
+ const style: React.CSSProperties = {
11
+ position: 'absolute',
12
+ top: '10%',
13
+ left: '50%',
14
+ transform: 'translate(-50%, -50%)',
15
+ minWidth: 480,
16
+ backgroundColor: '#e3e3e3',
17
+ border: '1px solid white',
18
+ outline: 'none',
19
+ padding: '14px',
20
+ maxHeight: '85vh',
21
+ overflow: 'auto',
22
+ }
23
+
24
+ export const RedirectModal = ({
25
+ message = 'Your cart has expired. Please click on "OK" to return to the ticket selection page.',
26
+ onClickOk = () => {},
27
+ }: IRedirectModal) => {
28
+ return (
29
+ <Modal
30
+ open={true}
31
+ aria-labelledby="modal-modal-title"
32
+ aria-describedby="modal-modal-description"
33
+ className="redirect-modal"
34
+ >
35
+ <Box style={style}>
36
+ <p>{message}</p>
37
+ <div className="footer">
38
+ <button onClick={onClickOk}>OK</button>
39
+ </div>
40
+ </Box>
41
+ </Modal>
42
+ )
43
+ }
@@ -1,80 +1,80 @@
1
- import React from 'react'
2
- import Select from '@mui/material/Select'
3
- import _map from 'lodash/map'
4
- import _get from 'lodash/get'
5
-
6
- import { FieldInputProps, FormikProps } from 'formik'
7
- import { FormControl, InputLabel, FormHelperText } from '@mui/material'
8
- import { useTheme } from '@mui/styles'
9
-
10
- export interface ISelectOption {
11
- label: string | number;
12
- value?: string | number;
13
- [key: string]: any;
14
- }
15
-
16
- export interface ISelectField {
17
- label: string;
18
-
19
- field: FieldInputProps<any>;
20
- form: FormikProps<any>;
21
- theme: 'dark' | 'light';
22
-
23
- // optional
24
- type?: string;
25
- selectOptions?: ISelectOption[];
26
- }
27
-
28
- interface IOtherProps {
29
- [key: string]: any;
30
- }
31
-
32
- export const SelectField = ({
33
- label,
34
- type = 'text',
35
- field,
36
- selectOptions = [] as ISelectOption[],
37
- form: { touched, errors },
38
- theme,
39
- }: ISelectField & IOtherProps) => {
40
- const isTouched = Boolean(_get(touched, field.name))
41
- const error = _get(errors, field.name)
42
-
43
- const customTheme: any = useTheme()
44
-
45
- return (
46
- <FormControl fullWidth={true}>
47
- <InputLabel style={customTheme?.input} htmlFor={field.name} error={!!error && isTouched} shrink={true}>
48
- {label}
49
- </InputLabel>
50
- <Select
51
- id={field.name}
52
- label={label}
53
- type={type}
54
- fullWidth={true}
55
- error={!!error && isTouched}
56
- inputProps={{
57
- id: field.name,
58
- }}
59
- native={true}
60
- className={theme}
61
- MenuProps={{ className: theme }}
62
- {...field}
63
- style={customTheme?.input}
64
- >
65
- {_map(selectOptions, option => (
66
- <option
67
- key={option.value}
68
- value={option.value}
69
- disabled={option.disabled}
70
- >
71
- {option.label}
72
- </option>
73
- ))}
74
- </Select>
75
- {isTouched && error ? (
76
- <FormHelperText error={!!error && isTouched}>{error}</FormHelperText>
77
- ) : null}
78
- </FormControl>
79
- )
80
- }
1
+ import React from 'react'
2
+ import Select from '@mui/material/Select'
3
+ import _map from 'lodash/map'
4
+ import _get from 'lodash/get'
5
+
6
+ import { FieldInputProps, FormikProps } from 'formik'
7
+ import { FormControl, InputLabel, FormHelperText } from '@mui/material'
8
+ import { useTheme } from '@mui/styles'
9
+
10
+ export interface ISelectOption {
11
+ label: string | number;
12
+ value?: string | number;
13
+ [key: string]: any;
14
+ }
15
+
16
+ export interface ISelectField {
17
+ label: string;
18
+
19
+ field: FieldInputProps<any>;
20
+ form: FormikProps<any>;
21
+ theme: 'dark' | 'light';
22
+
23
+ // optional
24
+ type?: string;
25
+ selectOptions?: ISelectOption[];
26
+ }
27
+
28
+ interface IOtherProps {
29
+ [key: string]: any;
30
+ }
31
+
32
+ export const SelectField = ({
33
+ label,
34
+ type = 'text',
35
+ field,
36
+ selectOptions = [] as ISelectOption[],
37
+ form: { touched, errors },
38
+ theme,
39
+ }: ISelectField & IOtherProps) => {
40
+ const isTouched = Boolean(_get(touched, field.name))
41
+ const error = _get(errors, field.name)
42
+
43
+ const customTheme: any = useTheme()
44
+
45
+ return (
46
+ <FormControl fullWidth={true}>
47
+ <InputLabel style={customTheme?.input} htmlFor={field.name} error={!!error && isTouched} shrink={true}>
48
+ {label}
49
+ </InputLabel>
50
+ <Select
51
+ id={field.name}
52
+ label={label}
53
+ type={type}
54
+ fullWidth={true}
55
+ error={!!error && isTouched}
56
+ inputProps={{
57
+ id: field.name,
58
+ }}
59
+ native={true}
60
+ className={theme}
61
+ MenuProps={{ className: theme }}
62
+ {...field}
63
+ style={customTheme?.input}
64
+ >
65
+ {_map(selectOptions, option => (
66
+ <option
67
+ key={option.value}
68
+ value={option.value}
69
+ disabled={option.disabled}
70
+ >
71
+ {option.label}
72
+ </option>
73
+ ))}
74
+ </Select>
75
+ {isTouched && error ? (
76
+ <FormHelperText error={!!error && isTouched}>{error}</FormHelperText>
77
+ ) : null}
78
+ </FormControl>
79
+ )
80
+ }