import { ComputedRef, MaybeRefOrGetter, computed, toValue } from 'vue' import { useSchemaFormSettings } from '@/schemas/compositions/useSchemaFormSettings' import { SchemaProperty } from '@/schemas/types/schema' import { mergeSchemaPropertyDefinition } from '@/schemas/utilities/definitions' type UseSchemaProperty = { property: ComputedRef, label: ComputedRef, description: ComputedRef, disabled: ComputedRef, } export function useSchemaProperty(source: MaybeRefOrGetter, required?: MaybeRefOrGetter): UseSchemaProperty { const { schema } = useSchemaFormSettings() const property = computed(() => { const value = toValue(source) return mergeSchemaPropertyDefinition(value, schema) }) const label = computed(() => { const title = property.value.title ?? '' if (!toValue(required)) { return `${title} (Optional)`.trim() } return title }) const description = computed(() => { const { description = '' } = property.value const descriptionWithNewlinesRemoved = description.replace(/\n(?!\n)/g, ' ') return descriptionWithNewlinesRemoved }) const disabled = computed(() => Boolean(property.value.const)) return { property, label, description, disabled, } }