{"version":3,"file":"use-model-toggle.mjs","sources":["../../../../../packages/composables/private/use-model-toggle.ts"],"sourcesContent":["import { watch, nextTick, onMounted, getCurrentInstance, Ref, ComputedRef } from 'vue'\n\nimport { vmHasRouter, vmHasListener } from 'casc-cesium-utils/private/vm'\nimport { AnyFunction } from 'casc-cesium-utils/types'\n\nexport const useModelToggleProps = {\n  modelValue: {\n    type: Boolean,\n    default: null\n  }\n}\n\nexport const useModelToggleEmits = ['update:modelValue', 'before-show', 'show', 'before-hide', 'hide']\n\n// handleShow/handleHide -> removeTick(), self (& emit show), prepareTick()\n\nexport default function ({\n  showing,\n  canShow = undefined, // optional\n  hideOnRouteChange = undefined, // optional\n  handleShow = undefined, // optional\n  handleHide = undefined, // optional\n  processOnMount = undefined // optional\n}: {\n  showing?: Ref<boolean>\n  canShow?: AnyFunction<boolean>\n  hideOnRouteChange?: ComputedRef<boolean>\n  handleShow?: AnyFunction<void>\n  handleHide?: AnyFunction<void>\n  processOnMount?: boolean\n}) {\n  const vm = getCurrentInstance()!\n  const { props, emit, proxy } = vm\n\n  let payload\n\n  function toggle(evt) {\n    if (showing?.value === true) {\n      hide(evt)\n    } else {\n      show(evt)\n    }\n  }\n\n  function show(evt) {\n    if (props.disable === true || (canShow !== void 0 && canShow(evt) !== true)) {\n      return\n    }\n\n    const listener = vmHasListener(vm, 'onUpdate:modelValue') === true\n\n    if (listener === true) {\n      emit('update:modelValue', true)\n      payload = evt\n      nextTick(() => {\n        if (payload === evt) {\n          payload = void 0\n        }\n      })\n    }\n\n    if (props.modelValue === null || listener === false) {\n      processShow(evt)\n    }\n  }\n\n  function processShow(evt) {\n    if (showing?.value === true) {\n      return\n    }\n\n    showing && (showing.value = true)\n\n    emit('before-show', evt)\n\n    if (evt && evt.cancel === true) {\n      return\n    }\n\n    if (handleShow !== void 0) {\n      handleShow(evt)\n    } else {\n      emit('show', evt)\n    }\n  }\n\n  function hide(evt?) {\n    if (props.disable === true) {\n      return\n    }\n\n    const listener = vmHasListener(vm, 'onUpdate:modelValue') === true\n\n    if (listener === true) {\n      emit('update:modelValue', false)\n      payload = evt\n      nextTick(() => {\n        if (payload === evt) {\n          payload = void 0\n        }\n      })\n    }\n\n    if (props.modelValue === null || listener === false) {\n      processHide(evt)\n    }\n  }\n\n  function processHide(evt) {\n    if (showing?.value === false) {\n      return\n    }\n\n    showing && (showing.value = false)\n\n    emit('before-hide', evt)\n\n    if (handleHide !== void 0) {\n      handleHide(evt)\n    } else {\n      emit('hide', evt)\n    }\n  }\n\n  function processModelChange(val) {\n    if (props.disable === true && val === true) {\n      if (vmHasListener(vm, 'onUpdate:modelValue') === true) {\n        emit('update:modelValue', false)\n      }\n    } else if ((val === true) !== showing?.value) {\n      const fn = val === true ? processShow : processHide\n      fn(payload)\n    }\n  }\n\n  watch(() => props.modelValue, processModelChange)\n\n  if (hideOnRouteChange !== void 0 && vmHasRouter(vm) === true) {\n    watch(\n      () => (proxy as any).$route,\n      () => {\n        if (hideOnRouteChange.value === true && showing?.value === true) {\n          hide()\n        }\n      }\n    )\n  }\n\n  processOnMount === true &&\n    onMounted(() => {\n      processModelChange(props.modelValue)\n    })\n\n  // expose public methods\n  const publicMethods = { show, hide, toggle }\n  Object.assign(proxy, publicMethods)\n\n  return publicMethods\n}\n"],"names":[],"mappings":"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"}