* Copyright (c) 2022 - present TinyVue Authors.
* Copyright (c) 2022 - present Huawei Cloud Computing Technologies Co., Ltd.
*
* Use of this source code is governed by an MIT-style license.
*
* THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,
* BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR
* A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
*
*/
import type { IRadioButtonRenderlessParams, IRadioGroupProps, IRadioButtonState } from '@/types'
export const handleChange =
({
constants,
nextTick,
dispatch,
state
}: Pick<IRadioButtonRenderlessParams, 'constants' | 'nextTick' | 'dispatch' | 'state'>) =>
(): void => {
nextTick(() => {
dispatch(constants.RADIO_GROUP, 'handleChange', [state.value])
})
}
export const getValue = (state: IRadioButtonRenderlessParams['state']) => (): IRadioGroupProps['modelValue'] =>
state.radioGroup?.modelValue
export const setValue =
({ state }: Pick<IRadioButtonRenderlessParams, 'state'>) =>
(val: IRadioGroupProps['modelValue']): void =>
state.radioGroup?.$emit('update:modelValue', val)
export const getGroup =
({ constants, parent: $parent }: Pick<IRadioButtonRenderlessParams, 'constants' | 'parent'>) =>
(): IRadioButtonState['radioGroup'] | null => {
let parent = $parent.$parent
while (parent) {
if (parent.$options.componentName !== constants.RADIO_GROUP) {
parent = parent.$parent
} else {
return parent
}
}
return null
}
export const getStyle = (state: IRadioButtonRenderlessParams['state']) => () => ({
backgroundColor: state.radioGroup?.fill || '',
borderColor: state.radioGroup?.fill || '',
boxShadow: state.radioGroup?.fill ? `-1px 0 0 0 ${state.radioGroup.fill}` : '',
color: state.radioGroup?.textColor || ''
})
export const toggleEvents =
({ vm, props }: Pick<IRadioButtonRenderlessParams, 'vm' | 'props'>) =>
(isUnBind = false): void => {
const radioEl = vm.$refs.radio
Object.keys(props.events).forEach((ev) => {
radioEl[(isUnBind ? 'remove' : 'add') + 'EventListener'](ev, props.events[ev])
})
}
export const keydownHandle =
({ state, props }: Pick<IRadioButtonRenderlessParams, 'state' | 'props'>) =>
(): void => {
state.value = state.isDisabled ? state.value : props.label
}
export const handleFocus = (state: IRadioButtonRenderlessParams['state']) => (): boolean => (state.focus = true)
export const handleBlur = (state: IRadioButtonRenderlessParams['state']) => (): boolean => (state.focus = false)