1
+ /**
2
+ * WordPress dependencies.
3
+ */
4
+ import {
5
+ Button ,
6
+ Icon ,
7
+ TextControl
8
+ } from "@wordpress/components" ;
9
+
10
+ import {
11
+ useDispatch ,
12
+ useSelect
13
+ } from "@wordpress/data" ;
14
+
15
+ import {
16
+ useEffect ,
17
+ useState
18
+ } from "@wordpress/element" ;
19
+
20
+ /**
21
+ * Internal dependencies.
22
+ */
23
+ import APIForm from './APIForm' ;
24
+
25
+ const ConnectLayout = ( ) => {
26
+ const [ email , setEmail ] = useState ( optimoleDashboardApp . current_user . email ) ;
27
+ const [ method , setMethod ] = useState ( 'email' ) ;
28
+ const [ errors , setErrors ] = useState ( { } ) ;
29
+
30
+ const { registerAccount } = useDispatch ( 'optimole' ) ;
31
+
32
+ const {
33
+ autConnectError,
34
+ isConnecting
35
+ } = useSelect ( select => {
36
+ const {
37
+ getAutoConnectError,
38
+ isConnecting
39
+ } = select ( 'optimole' ) ;
40
+
41
+ return {
42
+ autConnectError : getAutoConnectError ( ) ,
43
+ isConnecting : isConnecting ( ) ,
44
+ } ;
45
+ } ) ;
46
+
47
+ useEffect ( ( ) => {
48
+ if ( autConnectError ) {
49
+ setErrors ( {
50
+ 'error_autoconnect' : autConnectError
51
+ } ) ;
52
+ }
53
+ } , [ autConnectError ] ) ;
54
+
55
+ const onConnect = async ( ) => {
56
+ setErrors ( { } ) ;
57
+
58
+ await registerAccount (
59
+ {
60
+ email
61
+ } ,
62
+ response => {
63
+ if ( response . code === 'email_registered' ) {
64
+ setErrors ( {
65
+ 'email_registered' : response . message
66
+ } ) ;
67
+ return ;
68
+ }
69
+
70
+ if ( response . code !== 'success' ) {
71
+ setErrors ( {
72
+ 'error_register' : optimoleDashboardApp . strings . error_register
73
+ } ) ;
74
+ }
75
+ }
76
+ ) ;
77
+ } ;
78
+
79
+ if ( 'key' === method ) {
80
+ return (
81
+ < div className = "optml-connect card" >
82
+ < div className = "optml-connect__container" >
83
+ < APIForm
84
+ setMethod = { setMethod }
85
+ />
86
+ </ div >
87
+ </ div >
88
+ ) ;
89
+ }
90
+
91
+ return (
92
+ < div className = "optml-connect card" >
93
+ < div className = "optml-connect__container" >
94
+ < div className = "optml-connect__content" >
95
+ < h2 className = "text__font optml-connect__content__title" > { optimoleDashboardApp . strings . account_needed_heading } </ h2 >
96
+ < p
97
+ className = "optml-connect__content__description"
98
+ dangerouslySetInnerHTML = { { __html : optimoleDashboardApp . strings . account_needed_title } }
99
+ />
100
+
101
+ < div className = "flex spacing__vertical" >
102
+ < Icon icon = "yes-alt" />
103
+ < p
104
+ className = "optml-connect__content__description__bullet"
105
+ dangerouslySetInnerHTML = { { __html : optimoleDashboardApp . strings . account_needed_subtitle_1 } }
106
+ />
107
+ </ div >
108
+
109
+ < div className = "flex spacing__vertical" >
110
+ < Icon icon = "yes-alt" />
111
+ < p
112
+ className = "optml-connect__content__description__bullet"
113
+ dangerouslySetInnerHTML = { { __html : optimoleDashboardApp . strings . account_needed_subtitle_2 } }
114
+ />
115
+ </ div >
116
+ </ div >
117
+
118
+ < div className = "optml-connect__form card__light-background" >
119
+ < TextControl
120
+ label = { optimoleDashboardApp . strings . email_address_label }
121
+ placeholder = { optimoleDashboardApp . strings . email }
122
+ value = { email }
123
+ onChange = { setEmail }
124
+ className = "optml-connect__input"
125
+ />
126
+
127
+ { Object . keys ( errors ) . length > 0 && Object . keys ( errors ) . map ( key => {
128
+ return (
129
+ < p
130
+ key = { key }
131
+ className = "text__help color__danger"
132
+ dangerouslySetInnerHTML = { { __html : errors [ key ] } }
133
+ />
134
+ ) ;
135
+ } ) || < br /> }
136
+
137
+ < Button
138
+ variant = "primary"
139
+ className = "optml-connect__button"
140
+ onClick = { onConnect }
141
+ isBusy = { isConnecting }
142
+ >
143
+ { optimoleDashboardApp . strings . register_btn }
144
+ </ Button >
145
+
146
+ < br /> < br />
147
+
148
+ < div className = "components-base-control__label" >
149
+ { optimoleDashboardApp . strings . existing_user }
150
+ </ div >
151
+
152
+ < Button
153
+ variant = "primary"
154
+ className = "optml-connect__button__secondary"
155
+ onClick = { ( ) => setMethod ( 'key' ) }
156
+ >
157
+ { optimoleDashboardApp . strings . api_exists }
158
+ </ Button >
159
+ </ div >
160
+ </ div >
161
+
162
+ < div className = "optml-connect__footer" >
163
+ < p
164
+ dangerouslySetInnerHTML = { { __html : optimoleDashboardApp . strings . account_needed_footer } }
165
+ />
166
+ </ div >
167
+ </ div >
168
+ ) ;
169
+ } ;
170
+
171
+ export default ConnectLayout ;
0 commit comments