2021-04-12 18:31:11 +08:00
|
|
|
import { looseEqual, looseIndexOf, isArray } from '@vue/shared'
|
2020-02-07 01:07:25 +08:00
|
|
|
import { ssrRenderAttr } from './ssrRenderAttrs'
|
2020-02-06 06:01:00 +08:00
|
|
|
|
2020-02-07 01:07:25 +08:00
|
|
|
export const ssrLooseEqual = looseEqual as (a: unknown, b: unknown) => boolean
|
2020-02-06 06:01:00 +08:00
|
|
|
|
2020-02-07 01:07:25 +08:00
|
|
|
export function ssrLooseContain(arr: unknown[], value: unknown): boolean {
|
2020-02-06 06:01:00 +08:00
|
|
|
return looseIndexOf(arr, value) > -1
|
|
|
|
}
|
|
|
|
|
|
|
|
// for <input :type="type" v-model="model" value="value">
|
2020-02-07 01:07:25 +08:00
|
|
|
export function ssrRenderDynamicModel(
|
2020-02-06 06:01:00 +08:00
|
|
|
type: unknown,
|
|
|
|
model: unknown,
|
|
|
|
value: unknown
|
|
|
|
) {
|
|
|
|
switch (type) {
|
|
|
|
case 'radio':
|
2020-02-07 01:07:25 +08:00
|
|
|
return looseEqual(model, value) ? ' checked' : ''
|
2020-02-06 06:01:00 +08:00
|
|
|
case 'checkbox':
|
2021-07-20 06:24:18 +08:00
|
|
|
return (isArray(model) ? ssrLooseContain(model, value) : model)
|
2020-02-06 06:01:00 +08:00
|
|
|
? ' checked'
|
|
|
|
: ''
|
|
|
|
default:
|
|
|
|
// text types
|
2020-02-07 01:07:25 +08:00
|
|
|
return ssrRenderAttr('value', model)
|
2020-02-06 06:01:00 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// for <input v-bind="obj" v-model="model">
|
2020-02-07 01:07:25 +08:00
|
|
|
export function ssrGetDynamicModelProps(
|
|
|
|
existingProps: any = {},
|
|
|
|
model: unknown
|
|
|
|
) {
|
2020-02-06 06:01:00 +08:00
|
|
|
const { type, value } = existingProps
|
|
|
|
switch (type) {
|
|
|
|
case 'radio':
|
2020-02-07 01:07:25 +08:00
|
|
|
return looseEqual(model, value) ? { checked: true } : null
|
2020-02-06 06:01:00 +08:00
|
|
|
case 'checkbox':
|
2021-07-20 06:24:18 +08:00
|
|
|
return (isArray(model) ? ssrLooseContain(model, value) : model)
|
2020-02-06 06:01:00 +08:00
|
|
|
? { checked: true }
|
|
|
|
: null
|
|
|
|
default:
|
|
|
|
// text types
|
|
|
|
return { value: model }
|
|
|
|
}
|
|
|
|
}
|