@codecavepro/brand 2.7.2 → 2.7.3
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.
|
@@ -135,7 +135,7 @@ const currentValues = (): ContactFormValues => ({
|
|
|
135
135
|
})
|
|
136
136
|
|
|
137
137
|
const isSubmitting = ref(false)
|
|
138
|
-
|
|
138
|
+
const isFormSubmitted = ref(false)
|
|
139
139
|
const submitContactsForm = async () => {
|
|
140
140
|
if (isSubmitting.value || !validateForm()) {
|
|
141
141
|
return
|
|
@@ -149,12 +149,10 @@ const submitContactsForm = async () => {
|
|
|
149
149
|
const result = await props.client.submit(values)
|
|
150
150
|
|
|
151
151
|
if (result.ok) {
|
|
152
|
+
isFormSubmitted.value = true
|
|
152
153
|
resetForm()
|
|
153
154
|
showAlert('success')
|
|
154
155
|
} else {
|
|
155
|
-
/* The previous code logged the failure and showed nothing, so a visitor
|
|
156
|
-
* whose enquiry never sent had no way to know. The wording below is a
|
|
157
|
-
* placeholder for a writer -- see CCWEB2-325. */
|
|
158
156
|
showAlert('error')
|
|
159
157
|
}
|
|
160
158
|
|
|
@@ -189,6 +187,41 @@ watch(isAlertVisible, () => {
|
|
|
189
187
|
})
|
|
190
188
|
})
|
|
191
189
|
|
|
190
|
+
const validateField = (field) => {
|
|
191
|
+
if (isFormSubmitted.value) {
|
|
192
|
+
field.error = ''
|
|
193
|
+
return
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (field.required && !field.value) {
|
|
197
|
+
field.error = 'This field is required'
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
field.error = ''
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
const fields = [
|
|
205
|
+
'email',
|
|
206
|
+
'firstName',
|
|
207
|
+
'companyName',
|
|
208
|
+
'linkedinCompanyPage',
|
|
209
|
+
'privacyPolicy'
|
|
210
|
+
]
|
|
211
|
+
|
|
212
|
+
fields.forEach((key) => {
|
|
213
|
+
watch(
|
|
214
|
+
() => formData.value[key].value,
|
|
215
|
+
(value) => {
|
|
216
|
+
if (isFormSubmitted.value && value) {
|
|
217
|
+
isFormSubmitted.value = false
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
validateField(formData.value[key])
|
|
221
|
+
}
|
|
222
|
+
)
|
|
223
|
+
})
|
|
224
|
+
|
|
192
225
|
</script>
|
|
193
226
|
|
|
194
227
|
<template>
|
|
@@ -220,18 +253,18 @@ watch(isAlertVisible, () => {
|
|
|
220
253
|
</div>
|
|
221
254
|
</div>
|
|
222
255
|
<GlowButton @click="submitContactsForm" title="Leave consultation request" class="self-center lg:self-start" />
|
|
223
|
-
|
|
256
|
+
</form>
|
|
257
|
+
<div v-show="isAlertVisible" class="border border-action group absolute bottom-19.25 md:fixed z-350 left-1/2 -translate-x-1/2 md:top-40 form-alert flex gap-2 md:gap-8 items-center justify-between w-full h-fit max-w-139 bg-surface-secondary p-4 md:px-6 md:py-2.5 rounded-3xl">
|
|
224
258
|
<div v-if="alertKind === 'success'" class="w-8 h-8">
|
|
225
259
|
<component :is="SuccessIcon" class="w-8 h-8" />
|
|
226
260
|
</div>
|
|
227
|
-
<p class="text-sm md:text-lg font-bold text-heading md:max-w-sm">
|
|
261
|
+
<p class="text-sm md:text-lg font-bold text-heading md:max-w-sm ">
|
|
228
262
|
{{ alertKind ? ALERT_TEXT[alertKind] : '' }}
|
|
229
263
|
</p>
|
|
230
264
|
<button @click="alertKind = null" class="group-hover:text-action text-heading transition-colors cursor-pointer">
|
|
231
265
|
<component :is="CloseIcon" />
|
|
232
266
|
</button>
|
|
233
267
|
</div>
|
|
234
|
-
</form>
|
|
235
268
|
</template>
|
|
236
269
|
|
|
237
270
|
<style scoped>
|
package/package.json
CHANGED