mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-29 12:41:10 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { toRefs } from 'vue'
 | |
| import isNullish from './../utils/isNullish'
 | |
| 
 | |
| export default function useData(props, context, dep) {
 | |
|   const { object, valueProp, mode } = toRefs(props)
 | |
| 
 | |
|   // ============ DEPENDENCIES ============
 | |
| 
 | |
|   const iv = dep.iv
 | |
| 
 | |
|   // =============== METHODS ==============
 | |
| 
 | |
|   const update = (val) => {
 | |
|     // Setting object(s) as internal value
 | |
|     iv.value = makeInternal(val)
 | |
| 
 | |
|     // Setting object(s) or plain value as external
 | |
|     // value based on `option` setting
 | |
|     const externalVal = makeExternal(val)
 | |
| 
 | |
|     context.emit('change', externalVal)
 | |
|     context.emit('input', externalVal)
 | |
|     context.emit('update:modelValue', externalVal)
 | |
|   }
 | |
| 
 | |
|   // no export
 | |
|   const makeExternal = (val) => {
 | |
|     // If external value should be object
 | |
|     // no transformation is required
 | |
|     if (object.value) {
 | |
|       return val
 | |
|     }
 | |
| 
 | |
|     // No need to transform if empty value
 | |
|     if (isNullish(val)) {
 | |
|       return val
 | |
|     }
 | |
| 
 | |
|     // If external should be plain transform
 | |
|     // value object to plain values
 | |
|     return !Array.isArray(val) ? val[valueProp.value] : val.map(v => v[valueProp.value])
 | |
|   }
 | |
| 
 | |
|   // no export
 | |
|   const makeInternal = (val) => {
 | |
|     if (isNullish(val)) {
 | |
|       return mode.value === 'single' ? {} : []
 | |
|     }
 | |
| 
 | |
|     return val
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     update,
 | |
|   }
 | |
| }
 |