* 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 { StyleValue } from 'vue'
import type { ISwitchRenderlessParams, ISwitchClass } from '@/types'
export const toggle =
({ emit, props, state }: Pick<ISwitchRenderlessParams, 'emit' | 'props' | 'state'>) =>
(event: KeyboardEvent | MouseEvent): void => {
event.preventDefault()
if (state.disabled || props.types === 'loading') {
return
}
const change = () => {
state.currentValue = state.currentValue === props.trueValue ? props.falseValue : props.trueValue
emit('update:modelValue', state.currentValue)
emit('change', state.currentValue)
}
props.beforeChange ? props.beforeChange(change) : change()
}
export const computedWarpClasses =
({ prefixCls, props, state }: Pick<ISwitchRenderlessParams, 'prefixCls' | 'props' | 'state'>) =>
(): ISwitchClass => {
return [
{
[prefixCls]: true,
[`${prefixCls}-checked`]: state.currentValue === props.trueValue,
[`${prefixCls}-disabled`]: state.disabled,
mini: props.mini,
disabled: state.disabled
}
]
}
export const computedInnerClasses =
({ prefixCls }: Pick<ISwitchRenderlessParams, 'prefixCls'>) =>
(): string =>
`${prefixCls}-inner`
export const computedStyle =
({ props, state }: Pick<ISwitchRenderlessParams, 'props' | 'state'>) =>
(): StyleValue => {
return {
backgroundColor: props.trueValue === state.currentValue ? props.trueColor : props.falseColor
}
}