021af1cfcc7c77ff9fb908da4b7039a8f3de2b9d6aa968fe35f43d5f3c6331908221d223a23f866e062fd523d8952b79d5c11b6d16e930d5ec9680a4a13fc7 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import { watch } from 'vue';
  2. import { isArray } from '@vue/shared';
  3. import { throwError, debugWarn } from '../../../../utils/error.mjs';
  4. import { isNumber } from '../../../../utils/types.mjs';
  5. import { UPDATE_MODEL_EVENT, INPUT_EVENT } from '../../../../constants/event.mjs';
  6. const useWatch = (props, initData, minValue, maxValue, emit, elFormItem) => {
  7. const _emit = (val) => {
  8. emit(UPDATE_MODEL_EVENT, val);
  9. emit(INPUT_EVENT, val);
  10. };
  11. const valueChanged = () => {
  12. if (props.range) {
  13. return ![minValue.value, maxValue.value].every((item, index) => item === initData.oldValue[index]);
  14. } else {
  15. return props.modelValue !== initData.oldValue;
  16. }
  17. };
  18. const setValues = () => {
  19. var _a, _b;
  20. if (props.min > props.max) {
  21. throwError("Slider", "min should not be greater than max.");
  22. }
  23. const val = props.modelValue;
  24. if (props.range && isArray(val)) {
  25. if (val[1] < props.min) {
  26. _emit([props.min, props.min]);
  27. } else if (val[0] > props.max) {
  28. _emit([props.max, props.max]);
  29. } else if (val[0] < props.min) {
  30. _emit([props.min, val[1]]);
  31. } else if (val[1] > props.max) {
  32. _emit([val[0], props.max]);
  33. } else {
  34. initData.firstValue = val[0];
  35. initData.secondValue = val[1];
  36. if (valueChanged()) {
  37. if (props.validateEvent) {
  38. (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => debugWarn());
  39. }
  40. initData.oldValue = val.slice();
  41. }
  42. }
  43. } else if (!props.range && isNumber(val) && !Number.isNaN(val)) {
  44. if (val < props.min) {
  45. _emit(props.min);
  46. } else if (val > props.max) {
  47. _emit(props.max);
  48. } else {
  49. initData.firstValue = val;
  50. if (valueChanged()) {
  51. if (props.validateEvent) {
  52. (_b = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _b.call(elFormItem, "change").catch((err) => debugWarn());
  53. }
  54. initData.oldValue = val;
  55. }
  56. }
  57. }
  58. };
  59. setValues();
  60. watch(() => initData.dragging, (val) => {
  61. if (!val) {
  62. setValues();
  63. }
  64. });
  65. watch(() => props.modelValue, (val, oldVal) => {
  66. if (initData.dragging || isArray(val) && isArray(oldVal) && val.every((item, index) => item === oldVal[index]) && initData.firstValue === val[0] && initData.secondValue === val[1]) {
  67. return;
  68. }
  69. setValues();
  70. }, {
  71. deep: true
  72. });
  73. watch(() => [props.min, props.max], () => {
  74. setValues();
  75. });
  76. };
  77. export { useWatch };
  78. //# sourceMappingURL=use-watch.mjs.map