useDelayReset.js 735 B

1234567891011121314151617181920212223242526
  1. import { onMounted, shallowRef } from 'vue';
  2. /**
  3. * Similar with `useLock`, but this hook will always execute last value.
  4. * When set to `true`, it will keep `true` for a short time even if `false` is set.
  5. */
  6. export default function useDelayReset() {
  7. let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
  8. const bool = shallowRef(false);
  9. let delay;
  10. const cancelLatest = () => {
  11. clearTimeout(delay);
  12. };
  13. onMounted(() => {
  14. cancelLatest();
  15. });
  16. const delaySetBool = (value, callback) => {
  17. cancelLatest();
  18. delay = setTimeout(() => {
  19. bool.value = value;
  20. if (callback) {
  21. callback();
  22. }
  23. }, timeout);
  24. };
  25. return [bool, delaySetBool, cancelLatest];
  26. }