import { type Component } from 'vue' import api from '@/composables/IvyFormAPI.ts' import TextFormField from '@/views/public/fields/TextFormField.vue' import EmailFormField from '@/views/public/fields/EmailFormField.vue' import ParagraphFormField from '@/views/public/fields/ParagraphFormField.vue' import PhoneFormField from '@/views/public/fields/PhoneFormField.vue' import NumberFormField from '@/views/public/fields/NumberFormField.vue' import WebsiteFormField from '@/views/public/fields/WebsiteFormField.vue' import NameFormField from '@/views/public/fields/NameFormField.vue' import RadioFormField from '@/views/public/fields/RadioFormField.vue' import SelectFormField from '@/views/public/fields/SelectFormField.vue' import CheckboxFormField from '@/views/public/fields/CheckboxFormField.vue' import AddressFormField from '@/views/public/fields/AddressFormField.vue' import DateFormField from '@/views/public/fields/DateFormField.vue' import TimeFormField from '@/views/public/fields/TimeFormField.vue' import HtmlFormField from '@/views/public/fields/HtmlFormField.vue' import RatingFormField from '@/views/public/fields/RatingFormField.vue' import FileUploadFormField from '@/views/public/fields/FileUploadFormField.vue' import RecaptchaFormField from '@/views/public/fields/RecaptchaFormField.vue' import TurnstileFormField from '@/views/public/fields/TurnstileFormField.vue' import HCaptchaFormField from '@/views/public/fields/HCaptchaFormField.vue' import SliderFormField from '@/views/public/fields/SliderFormField.vue' import ProductFormField from '@/views/public/fields/ProductFormField.vue' import QuantityFormField from '@/views/public/fields/QuantityFormField.vue' import TotalFormField from '@/views/public/fields/TotalFormField.vue' export const getPreviewFieldComponent = (fieldType: string): Component => { let base: Component switch (fieldType) { case 'text': base = TextFormField break case 'email': base = EmailFormField break case 'textarea': case 'paragraph': base = ParagraphFormField break case 'tel': case 'phone': base = PhoneFormField break case 'number': base = NumberFormField break case 'slider': base = SliderFormField break case 'product': base = ProductFormField break case 'quantity': base = QuantityFormField break case 'total': base = TotalFormField break case 'website': base = WebsiteFormField break case 'recaptcha': base = RecaptchaFormField break case 'turnstile': base = TurnstileFormField break case 'hcaptcha': base = HCaptchaFormField break case 'name': base = NameFormField break case 'radio': base = RadioFormField break case 'checkbox': base = CheckboxFormField break case 'select': case 'dropdown': case 'multi-select': base = SelectFormField break case 'address': base = AddressFormField break case 'date': base = DateFormField break case 'time': base = TimeFormField break case 'date_time': case 'datetime': base = (api.fields.public.date_time as Component | undefined) ?? TextFormField break case 'html': base = HtmlFormField break case 'rating': base = RatingFormField break case 'file-upload': base = FileUploadFormField break default: base = TextFormField break } try { const filtered = api.hooks.applyFilters('ivyforms/template/field/filter/component', base, { type: fieldType, }) as Component return filtered || base } catch { return base } }