02591610a28ebd723cb56ed6001044a2a7de9c0a94e5b1a687dde5d54f23f9de1c1f07829a89c0397c6e13f3a580cb2ba10d24a56583ca49909a70094af3dc 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import { ref, inject, computed } from 'vue';
  2. import { radioGroupKey } from './constants.mjs';
  3. import { isPropAbsent } from '../../../utils/types.mjs';
  4. import { UPDATE_MODEL_EVENT } from '../../../constants/event.mjs';
  5. import { useFormSize, useFormDisabled } from '../../form/src/hooks/use-form-common-props.mjs';
  6. import { useDeprecated } from '../../../hooks/use-deprecated/index.mjs';
  7. const useRadio = (props, emit) => {
  8. const radioRef = ref();
  9. const radioGroup = inject(radioGroupKey, void 0);
  10. const isGroup = computed(() => !!radioGroup);
  11. const actualValue = computed(() => {
  12. if (!isPropAbsent(props.value)) {
  13. return props.value;
  14. }
  15. return props.label;
  16. });
  17. const modelValue = computed({
  18. get() {
  19. return isGroup.value ? radioGroup.modelValue : props.modelValue;
  20. },
  21. set(val) {
  22. if (isGroup.value) {
  23. radioGroup.changeEvent(val);
  24. } else {
  25. emit && emit(UPDATE_MODEL_EVENT, val);
  26. }
  27. radioRef.value.checked = props.modelValue === actualValue.value;
  28. }
  29. });
  30. const size = useFormSize(computed(() => radioGroup == null ? void 0 : radioGroup.size));
  31. const disabled = useFormDisabled(computed(() => radioGroup == null ? void 0 : radioGroup.disabled));
  32. const focus = ref(false);
  33. const tabIndex = computed(() => {
  34. return disabled.value || isGroup.value && modelValue.value !== actualValue.value ? -1 : 0;
  35. });
  36. useDeprecated({
  37. from: "label act as value",
  38. replacement: "value",
  39. version: "3.0.0",
  40. scope: "el-radio",
  41. ref: "https://element-plus.org/en-US/component/radio.html"
  42. }, computed(() => isGroup.value && isPropAbsent(props.value)));
  43. return {
  44. radioRef,
  45. isGroup,
  46. radioGroup,
  47. focus,
  48. size,
  49. disabled,
  50. tabIndex,
  51. modelValue,
  52. actualValue
  53. };
  54. };
  55. export { useRadio };
  56. //# sourceMappingURL=use-radio.mjs.map