index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var runtime = require('../../utils/vue/props/runtime.js');
  5. var core = require('@vueuse/core');
  6. var types = require('../../utils/types.js');
  7. var shared = require('@vue/shared');
  8. const _prop = runtime.buildProp({
  9. type: runtime.definePropType(Boolean),
  10. default: null
  11. });
  12. const _event = runtime.buildProp({
  13. type: runtime.definePropType(Function)
  14. });
  15. const createModelToggleComposable = (name) => {
  16. const updateEventKey = `update:${name}`;
  17. const updateEventKeyRaw = `onUpdate:${name}`;
  18. const useModelToggleEmits2 = [updateEventKey];
  19. const useModelToggleProps2 = {
  20. [name]: _prop,
  21. [updateEventKeyRaw]: _event
  22. };
  23. const useModelToggle2 = ({
  24. indicator,
  25. toggleReason,
  26. shouldHideWhenRouteChanges,
  27. shouldProceed,
  28. onShow,
  29. onHide
  30. }) => {
  31. const instance = vue.getCurrentInstance();
  32. const { emit } = instance;
  33. const props = instance.props;
  34. const hasUpdateHandler = vue.computed(
  35. () => shared.isFunction(props[updateEventKeyRaw])
  36. );
  37. const isModelBindingAbsent = vue.computed(() => props[name] === null);
  38. const doShow = (event) => {
  39. if (indicator.value === true) {
  40. return;
  41. }
  42. indicator.value = true;
  43. if (toggleReason) {
  44. toggleReason.value = event;
  45. }
  46. if (shared.isFunction(onShow)) {
  47. onShow(event);
  48. }
  49. };
  50. const doHide = (event) => {
  51. if (indicator.value === false) {
  52. return;
  53. }
  54. indicator.value = false;
  55. if (toggleReason) {
  56. toggleReason.value = event;
  57. }
  58. if (shared.isFunction(onHide)) {
  59. onHide(event);
  60. }
  61. };
  62. const show = (event) => {
  63. if (props.disabled === true || shared.isFunction(shouldProceed) && !shouldProceed())
  64. return;
  65. const shouldEmit = hasUpdateHandler.value && core.isClient;
  66. if (shouldEmit) {
  67. emit(updateEventKey, true);
  68. }
  69. if (isModelBindingAbsent.value || !shouldEmit) {
  70. doShow(event);
  71. }
  72. };
  73. const hide = (event) => {
  74. if (props.disabled === true || !core.isClient)
  75. return;
  76. const shouldEmit = hasUpdateHandler.value && core.isClient;
  77. if (shouldEmit) {
  78. emit(updateEventKey, false);
  79. }
  80. if (isModelBindingAbsent.value || !shouldEmit) {
  81. doHide(event);
  82. }
  83. };
  84. const onChange = (val) => {
  85. if (!types.isBoolean(val))
  86. return;
  87. if (props.disabled && val) {
  88. if (hasUpdateHandler.value) {
  89. emit(updateEventKey, false);
  90. }
  91. } else if (indicator.value !== val) {
  92. if (val) {
  93. doShow();
  94. } else {
  95. doHide();
  96. }
  97. }
  98. };
  99. const toggle = () => {
  100. if (indicator.value) {
  101. hide();
  102. } else {
  103. show();
  104. }
  105. };
  106. vue.watch(() => props[name], onChange);
  107. if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) {
  108. vue.watch(
  109. () => ({
  110. ...instance.proxy.$route
  111. }),
  112. () => {
  113. if (shouldHideWhenRouteChanges.value && indicator.value) {
  114. hide();
  115. }
  116. }
  117. );
  118. }
  119. vue.onMounted(() => {
  120. onChange(props[name]);
  121. });
  122. return {
  123. hide,
  124. show,
  125. toggle,
  126. hasUpdateHandler
  127. };
  128. };
  129. return {
  130. useModelToggle: useModelToggle2,
  131. useModelToggleProps: useModelToggleProps2,
  132. useModelToggleEmits: useModelToggleEmits2
  133. };
  134. };
  135. const { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable("modelValue");
  136. exports.createModelToggleComposable = createModelToggleComposable;
  137. exports.useModelToggle = useModelToggle;
  138. exports.useModelToggleEmits = useModelToggleEmits;
  139. exports.useModelToggleProps = useModelToggleProps;
  140. //# sourceMappingURL=index.js.map