PluginProbe
The Innovative Form Builder – IvyForms / 0.3.1
The Innovative Form Builder – IvyForms v0.3.1
1.5.1 1.5 1.4.1 1.4 trunk 0.1.2 0.2 0.2.1 0.3 0.3.1 0.4 0.5 0.6 0.6.1 0.6.1-backup 0.6.1.1 0.7 0.8 0.8.1 0.8.2 0.9 0.9.1 1.0 1.1 1.1.1 All 27 releases
ivyforms / frontend / src / views / public / fields / PhoneFormField.vue

PhoneFormField.vue in The Innovative Form Builder – IvyForms 0.3.1, at frontend/src/views/public/fields/PhoneFormField.vue

90 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <template>
2 <div
3 :class="[
4 'ivyforms-field',
5 'ivyforms-field__phone',
6 'ivyforms-field__phone_' + field.id,
7 field.cssClasses,
8 ]"
9 >
10 <IvyFormItem
11 :label="field.hideLabel ? '' : field.label"
12 :required="field.required"
13 :error="error"
14 :prop="field.type + '_' + field.fieldIndex"
15 :show-info="!!field.description && !error"
16 :info-text="field.description || ''"
17 >
18 <IvyPhoneInput
19 :id="fieldID"
20 v-model="localModelValue"
21 class="ivyforms-field__phone-input"
22 :placeholder="field.placeholder"
23 :disabled="disabled"
24 :readonly="field.readOnly"
25 :required="field.required"
26 />
27 </IvyFormItem>
28 </div>
29 </template>
30
31 <script setup lang="ts">
32 import { computed, inject } from 'vue'
33
34 interface Field {
35 id: number
36 formId: number
37 fieldIndex: number
38 type: string
39 label: string
40 placeholder?: string
41 required?: boolean
42 hideLabel?: boolean
43 readOnly?: boolean
44 description?: string
45 cssClasses?: string
46 // Any other field properties from your data
47 }
48 interface FieldProps {
49 modelValue: string | number | null | undefined
50 field: Field
51 disabled?: boolean
52 error?: string
53 }
54
55 const props = withDefaults(defineProps<FieldProps>(), {
56 modelValue: '',
57 disabled: false,
58 error: '',
59 })
60
61 const emit = defineEmits(['update:modelValue'])
62
63 // Inject clearFieldError function from parent
64 const clearFieldError = inject<(fieldKey: string) => void>('clearFieldError', () => {})
65
66 // Generate field key for clearing errors
67 const fieldKey = computed(() => {
68 return props.field.type + '_' + props.field.fieldIndex
69 })
70
71 // Handle input event to clear errors when user starts typing
72 const handleInput = (value: string | number | null | undefined) => {
73 emit('update:modelValue', value)
74 clearFieldError(fieldKey.value)
75 }
76
77 const localModelValue = computed({
78 get() {
79 return props.modelValue != null ? String(props.modelValue) : ''
80 },
81 set(value) {
82 handleInput(value)
83 },
84 })
85 // Generate unique field ID as a string
86 const fieldID = computed(() => {
87 return `ivyforms-field__phone-input_${props.field.formId || ''}_${props.field.fieldIndex || ''}`
88 })
89 </script>
90