xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 7.7 kB
Source Map (JSON)
{"version":3,"file":"radio.mjs","sources":["../../src/radio/radio.tsx"],"sourcesContent":["import { defineComponent, inject, toRefs, computed, ref } from 'vue';\nimport { usePrefixClass, useCommonClassName } from '../hooks/useConfig';\nimport { omit } from '../utils/helper';\nimport props from './props';\nimport { RadioGroupInjectionKey, RadioButtonInjectionKey } from './constants';\n\n// hooks\nimport { useFormDisabled } from '../form/hooks';\nimport useVModel from '../hooks/useVModel';\nimport { useContent } from '../hooks/tnode';\nimport isUndefined from 'lodash/isUndefined';\nimport isString from 'lodash/isString';\n\nfunction getValidAttrs(obj: Record<string, any>): Record<string, any> {\n const newObj = {};\n Object.keys(obj).forEach((key) => {\n if (!isUndefined(obj[key])) {\n newObj[key] = obj[key];\n }\n });\n return newObj;\n}\n\nexport default defineComponent({\n name: 'XRadio',\n inheritAttrs: false,\n props: { ...props },\n\n setup(props, { attrs }) {\n const inputRef = ref();\n const { checked, modelValue } = toRefs(props);\n const [innerChecked, setInnerChecked] = useVModel(\n checked,\n modelValue,\n props.defaultChecked,\n props.onChange,\n 'checked',\n );\n\n const radioChecked = computed(() => (radioGroup ? props.value === radioGroup.value : innerChecked.value));\n\n const radioGroup = inject(RadioGroupInjectionKey, undefined);\n\n const allowUncheck = computed(() => Boolean(props.allowUncheck || radioGroup?.allowUncheck));\n\n const handleClick = (e: MouseEvent) => {\n e.stopPropagation();\n };\n\n const onLabelClick = (e: MouseEvent) => {\n if (disabled.value) return;\n props.onClick?.({ e });\n if (radioGroup) {\n const value = radioChecked.value && allowUncheck.value ? undefined : props.value;\n radioGroup.setValue(value, { e });\n } else {\n const value = allowUncheck.value ? !radioChecked.value : true;\n setInnerChecked(value, { e });\n }\n };\n\n const inputEvents = computed(() =>\n getValidAttrs({\n focus: attrs.onFocus,\n blur: attrs.onBlur,\n keydown: attrs.onKeydown,\n keyup: attrs.onKeyup,\n keypresss: attrs.onKeypresss,\n }),\n );\n const wrapperAttrs = computed(() => {\n const events = [...Object.keys(inputEvents.value), 'input', 'change'].map(\n (str) => `on${str[0].toUpperCase()}${str.slice(1)}`,\n );\n return omit(attrs, events);\n });\n /** Event END */\n\n // extend radioGroup disabled props\n const groupDisabled = computed(() => radioGroup?.disabled);\n const disabled = useFormDisabled(groupDisabled);\n\n // attribute\n const inputProps = computed(() => ({\n name: radioGroup ? radioGroup.name : props.name,\n checked: radioChecked.value,\n disabled: disabled.value,\n value: props.value,\n }));\n\n /** Style */\n const { STATUS } = useCommonClassName();\n const radioButton = inject(RadioButtonInjectionKey, undefined);\n const radioBtnName = usePrefixClass('radio-button');\n const COMPONENT_NAME = usePrefixClass('radio');\n const prefixCls = computed(() => (radioButton ? radioBtnName.value : COMPONENT_NAME.value));\n const inputClass = computed(() => [\n `${prefixCls.value}`,\n {\n [STATUS.value.checked]: inputProps.value.checked,\n [STATUS.value.disabled]: inputProps.value.disabled,\n },\n ]);\n /** Style END */\n\n const renderContent = useContent();\n\n return () => (\n <label\n ref={inputRef}\n class={inputClass.value}\n {...wrapperAttrs.value}\n tabindex={disabled.value ? undefined : '0'}\n onClick={onLabelClick}\n >\n <input\n type=\"radio\"\n class={`${prefixCls.value}__former`}\n {...inputEvents.value}\n {...inputProps.value}\n onClick={handleClick}\n tabindex=\"-1\"\n data-value={isString(props.value) ? `'${props.value}'` : props.value}\n data-allow-uncheck={allowUncheck.value || undefined}\n />\n <span class={`${prefixCls.value}__input`}></span>\n <span class={`${prefixCls.value}__label`}>{renderContent('default', 'label')}</span>\n </label>\n );\n },\n});\n"],"names":["newObj","name","inheritAttrs","props","setup","innerChecked","setInnerChecked","e","radioGroup","isString","_createVNode"],"mappings":"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"}