PluginProbe
HubSpot All-In-One Marketing – Forms, Popups, Live Chat / 11.3.69
HubSpot All-In-One Marketing – Forms, Popups, Live Chat v11.3.69
11.3.73 11.3.71 11.3.70 11.3.69 11.3.64 11.3.65 11.3.62 11.3.61 11.3.56 11.3.58 11.0.31 11.0.52 11.0.54 11.0.56 11.0.58 11.0.7 11.1.10 11.1.11 11.1.13 11.1.14 11.1.15 11.1.2 11.1.20 11.1.21 11.1.22 All 72 releases
leadin / scripts / shared / Form / FormSelect.tsx

FormSelect.tsx in HubSpot All-In-One Marketing – Forms, Popups, Live Chat 11.3.69, at scripts/shared/Form/FormSelect.tsx

85 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import React from 'react';
2 import FormSelector from './FormSelector';
3 import LoadingBlock from '../Common/LoadingBlock';
4 import { __ } from '@wordpress/i18n';
5 import useForms from './hooks/useForms';
6 import useCreateFormFromTemplate from './hooks/useCreateFormFromTemplate';
7 import { FormType, isDefaultForm } from '../../constants/defaultFormOptions';
8 import ErrorHandler from '../Common/ErrorHandler';
9
10 interface IFormSelectProps {
11 formId: string;
12 formName: string;
13 handleChange: Function;
14 origin: 'gutenberg' | 'elementor';
15 embedVersion?: string;
16 }
17
18 export default function FormSelect({
19 formId,
20 formName,
21 handleChange,
22 origin = 'gutenberg',
23 embedVersion,
24 }: IFormSelectProps) {
25 const { search, formApiError, reset } = useForms();
26 const {
27 createFormByTemplate,
28 reset: createReset,
29 isCreating,
30 hasError,
31 formApiError: createApiError,
32 } = useCreateFormFromTemplate(origin);
33 const value =
34 formId && formName
35 ? {
36 label: formName,
37 value: formId,
38 embedVersion,
39 }
40 : null;
41
42 const handleLocalChange = (option: { value: FormType }) => {
43 if (isDefaultForm(option.value)) {
44 createFormByTemplate(option.value).then(({ guid, name }) => {
45 handleChange({
46 value: guid,
47 label: name,
48 embedVersion: 'v4',
49 });
50 });
51 } else {
52 handleChange(option);
53 }
54 };
55
56 return isCreating ? (
57 <LoadingBlock />
58 ) : formApiError || createApiError ? (
59 <ErrorHandler
60 status={formApiError ? formApiError.status : createApiError.status}
61 resetErrorState={() => {
62 if (hasError) {
63 createReset();
64 } else {
65 reset();
66 }
67 }}
68 errorInfo={{
69 header: __('There was a problem retrieving your forms', 'leadin'),
70 message: __(
71 'Please refresh your forms or try again in a few minutes',
72 'leadin'
73 ),
74 action: __('Refresh forms', 'leadin'),
75 }}
76 />
77 ) : (
78 <FormSelector
79 loadOptions={search}
80 onChange={(option: { value: FormType }) => handleLocalChange(option)}
81 value={value}
82 />
83 );
84 }
85