90
90
<span v-if =" fieldError.country" class =" error message" v-html =" errorMessage" />
91
91
</div >
92
92
93
- <ZeroButton
94
- class =" submit-button"
93
+ <ButtonCta
94
+ :class =" ['submit-button', { submitted: formSubmitted }]"
95
+ theme =" primary"
95
96
@clicked =" submitForm" >
96
- <span class =" button-label" > Register </span >
97
- </ZeroButton >
97
+ <span class =" button-label" > {{ submitButtonLabel }} </span >
98
+ </ButtonCta >
98
99
99
100
</div >
100
101
@@ -114,6 +115,7 @@ const props = defineProps({
114
115
})
115
116
116
117
// ======================================================================== Data
118
+ const formSubmitted = ref (false )
117
119
const errorMessage = ' [ Field is required ]'
118
120
const fieldError = ref ({
119
121
firstName: false ,
@@ -150,6 +152,8 @@ const orgField = computed(() => { return props.signupCard.signup_form.org })
150
152
151
153
const countryField = computed (() => { return props .signupCard .signup_form .country })
152
154
155
+ const submitButtonLabel = computed (() => { return formSubmitted .value ? ' Success' : ' Submit' })
156
+
153
157
// ===================================================================== Methdos
154
158
/**
155
159
* @method updateInputValue
@@ -206,19 +210,19 @@ const submitForm = async () => {
206
210
' Content-Type' : ' application/json' ,
207
211
' Authorization' : ` Bearer ${ SINGULARITY_DEMO_SIGNUPS_TOKEN } `
208
212
}
209
- await $fetch (' https://api.airtable.com/v0/apphbQmrNLNNXiaqG/tblDUSr66nczukX9Y' , {
213
+ const res = await $fetch (' https://api.airtable.com/v0/apphbQmrNLNNXiaqG/tblDUSr66nczukX9Y' , {
210
214
method: ' POST' ,
211
215
body,
212
216
headers
213
217
})
214
- } else {
215
- if ( ! firstName . value ) { fieldError . value . firstName = true }
216
- if (! lastName .value ) { fieldError .value .lastName = true }
217
- if (! email .value ) { fieldError .value .email = true }
218
- if (! organization .value ) { fieldError .value .organization = true }
219
- if (! organization .value ) { fieldError .value .organization = true }
220
- if (! country .value ) { fieldError .value .country = true }
221
- }
218
+ if (res) { formSubmitted . value = true ; return }
219
+ }
220
+ if (! firstName .value ) { fieldError .value .firstName = true }
221
+ if (! lastName .value ) { fieldError .value .lastName = true }
222
+ if (! email .value ) { fieldError .value .email = true }
223
+ if (! organization .value ) { fieldError .value .organization = true }
224
+ if (! organization .value ) { fieldError .value .organization = true }
225
+ if ( ! country . value ) { fieldError . value . country = true }
222
226
}
223
227
</script >
224
228
@@ -256,6 +260,11 @@ const submitForm = async () => {
256
260
}
257
261
// //////////////////////////////////////////////////////////////////////// Form
258
262
// ---------------------------------------------------------------------- General
263
+ .signup-form {
264
+ display : flex ;
265
+ flex-direction : column ;
266
+ }
267
+
259
268
.form-field {
260
269
border : var (--brand-color ) 1px solid ;
261
270
border-radius : toRem (5 );
@@ -268,14 +277,12 @@ const submitForm = async () => {
268
277
border-color : var (--error );
269
278
}
270
279
}
271
-
272
280
.message {
273
281
position : absolute ;
274
282
right : 0 ;
275
283
bottom : -1.3rem ;
276
284
@include formFieldErrorMessage ;
277
285
}
278
-
279
286
.error {
280
287
color : var (--error );
281
288
}
@@ -287,8 +294,26 @@ const submitForm = async () => {
287
294
}
288
295
289
296
.submit-button {
290
-
297
+ align-self : flex-end ;
298
+ & .submitted {
299
+ filter : drop-shadow (0px 2px 14px rgba (203 , 221 , 187 , 0.32 ));
300
+ :deep (.fill-path ) {
301
+ opacity : 1 ;
302
+ fill : var (--brand-color );
303
+ }
304
+ :deep (.stroke-path ) {
305
+ stroke : var (--brand-color );
306
+ }
307
+ & ::before {
308
+ border-color : var (--brand-color );
309
+ background-color : var (--brand-color );
310
+ }
311
+ :deep(.button-content ) {
312
+ color : var (--background-color );
313
+ }
314
+ }
291
315
}
316
+
292
317
// ----------------------------------------------------------------- Input Fields
293
318
.name-fields {
294
319
display : flex ;
@@ -302,6 +327,7 @@ const submitForm = async () => {
302
327
303
328
.input-field {
304
329
@include formFieldText ;
330
+ color : var (--primary-text-color );
305
331
width : 100% ;
306
332
& ::placeholder {
307
333
@include formFieldPlaceholder ;
@@ -310,10 +336,6 @@ const submitForm = async () => {
310
336
}
311
337
312
338
// -------------------------------------------------------------- Dropdown Fields
313
- // .dropdown-field {
314
- // padding: 0;
315
- // }
316
-
317
339
.toggle-button {
318
340
display : flex ;
319
341
align-items : center ;
@@ -326,9 +348,9 @@ const submitForm = async () => {
326
348
padding-bottom : toRem (4 );
327
349
}
328
350
}
329
-
330
351
.toggle-button-label {
331
352
@include formFieldPlaceholder ;
353
+ color : var (--primary-text-color );
332
354
& .selected {
333
355
@include formFieldText ;
334
356
}
@@ -346,7 +368,6 @@ const submitForm = async () => {
346
368
border-bottom-left-radius : toRem (5 );
347
369
border-bottom-right-radius : toRem (5 );
348
370
}
349
-
350
371
.option {
351
372
@include formFieldPlaceholder ;
352
373
cursor : pointer ;
@@ -357,5 +378,4 @@ const submitForm = async () => {
357
378
color : var (--background-color );
358
379
}
359
380
}
360
-
361
381
</style >
0 commit comments