useHoverValue.js 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import raf from '../../_util/raf';
  2. import { ref, onBeforeUnmount, watch } from 'vue';
  3. import useValueTexts from './useValueTexts';
  4. export default function useHoverValue(valueText, _ref) {
  5. let {
  6. formatList,
  7. generateConfig,
  8. locale
  9. } = _ref;
  10. const innerValue = ref(null);
  11. let rafId;
  12. function setValue(val) {
  13. let immediately = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  14. raf.cancel(rafId);
  15. if (immediately) {
  16. innerValue.value = val;
  17. return;
  18. }
  19. rafId = raf(() => {
  20. innerValue.value = val;
  21. });
  22. }
  23. const [, firstText] = useValueTexts(innerValue, {
  24. formatList,
  25. generateConfig,
  26. locale
  27. });
  28. function onEnter(date) {
  29. setValue(date);
  30. }
  31. function onLeave() {
  32. let immediately = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
  33. setValue(null, immediately);
  34. }
  35. watch(valueText, () => {
  36. onLeave(true);
  37. });
  38. onBeforeUnmount(() => {
  39. raf.cancel(rafId);
  40. });
  41. return [firstText, onEnter, onLeave];
  42. }