mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-11-03 14:03:18 -05: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,
 | 
						|
  }
 | 
						|
}
 |