import { computed , ExtractPropTypes } from 'vue' ; import { useWidget , ThemeRendererComponentNames , BuiltInWidgets , } from '../theme' ; import { useVJSFContext } from '../Context' ; import { CommonFieldPropsDefine , Schema , SchemaTypes } from '../types' ; import { getSchemaType , isSelect , optionsList } from '../utils' ; type PropsArg = ExtractPropTypes < typeof CommonFieldPropsDefine > ; export const getUiSchema = ( props ) => { const uiSchemaRef = computed ( ( ) => { const uiSchema = props . uiSchema ; const vjsf = props . schema . vjsf ; if ( uiSchema && vjsf ) { return { ... vjsf , ... uiSchema } ; } else { return uiSchema || vjsf || { } ; } } ) ; return uiSchemaRef ; } ; function getDefaultWidgetOfSchema ( schema , type ) { let defaultType = 'text' ; switch ( type ) { case SchemaTypes . NUMBER : case SchemaTypes . INTEGER : { defaultType = 'number' ; break ; } case SchemaTypes . STRING : { defaultType = 'text' ; break ; } case SchemaTypes . BOOLEAN : { defaultType = 'checkbox' ; break ; } } return isSelect ( schema ) ? 'select' : defaultType ; } export function useCommonField ( props , type ) { const componentRef = computed ( ( ) => { const { uiSchema } = props ; const widget = uiSchema . widget || getDefaultWidgetOfSchema ( props . schema , type ) ; const Widget = useWidget ( props . schema , widget ) ; return Widget . value ; } ) ; const optionsRef = computed ( ( ) => { const { schema , uiSchema } = props ; const isBool = schema . type === SchemaTypes . BOOLEAN ; let enumOptions = [ ] ; if ( isBool ) { enumOptions = [ { key : '----------------' , value : undefined , } , { key : 'true' , value : true , } , { key : 'false' , value : false , } , ] ; } else { enumOptions = isSelect ( schema ) ? optionsList ( schema ) : [ ] ; } return { enumOptions , ... uiSchema , } ; } ) ; const formContextRef = useVJSFContext ( ) ; const formatRef = computed ( ( ) => props . schema . format ) ; const vjsfRef = computed ( ( ) => { const { schema , uiSchema } = props ; return uiSchema || schema . vjsf || { } ; } ) ; const uiSchemaRef = getUiSchema ( props ) ; const schemaTitleRef = computed ( ( ) => { const vjsf = uiSchemaRef . value ; const { schema } = props ; return schema . title || ( vjsf && vjsf . title ? vjsf . title : '' ) ; } ) ; const rendererPropsRef = computed ( ( ) => { return { id : props . id , value : props . value , format : formatRef . value , schema : props . schema , uiSchema : uiSchemaRef . value , title : schemaTitleRef . value , required : props . required , rootSchema : props . rootSchema , path : props . path , isDependenciesKey : props . isDependenciesKey , options : optionsRef . value , errors : ( props . errorSchema && props . errorSchema . __errors ) || [ ] , } ; } ) ; return { rendererPropsRef , componentRef , vjsfRef , schemaTitleRef , formContextRef , } ; }