All files / server-renderer/src/helpers ssrVModelHelpers.ts

100% Statements 38/38
100% Branches 21/21
100% Functions 3/3
100% Lines 38/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 472x 2x   2x   2x 14x 14x     2x 11x 11x 11x 11x 11x 11x 3x 11x 5x 3x 2x 11x   3x 11x 11x     2x 28x 28x 28x 28x 28x 28x 9x 28x 13x 7x 6x 28x   6x 28x 28x  
import { isArray, looseEqual, looseIndexOf } from '@vue/shared'
import { ssrRenderAttr } from './ssrRenderAttrs'
 
export const ssrLooseEqual = looseEqual as (a: unknown, b: unknown) => boolean
 
export function ssrLooseContain(arr: unknown[], value: unknown): boolean {
  return looseIndexOf(arr, value) > -1
}
 
// for <input :type="type" v-model="model" value="value">
export function ssrRenderDynamicModel(
  type: unknown,
  model: unknown,
  value: unknown,
): string {
  switch (type) {
    case 'radio':
      return looseEqual(model, value) ? ' checked' : ''
    case 'checkbox':
      return (isArray(model) ? ssrLooseContain(model, value) : model)
        ? ' checked'
        : ''
    default:
      // text types
      return ssrRenderAttr('value', model)
  }
}
 
// for <input v-bind="obj" v-model="model">
export function ssrGetDynamicModelProps(
  existingProps: any = {},
  model: unknown,
): { checked: true } | { value: any } | null {
  const { type, value } = existingProps
  switch (type) {
    case 'radio':
      return looseEqual(model, value) ? { checked: true } : null
    case 'checkbox':
      return (isArray(model) ? ssrLooseContain(model, value) : model)
        ? { checked: true }
        : null
    default:
      // text types
      return { value: model }
  }
}