{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-model-toggle/index.ts"],"sourcesContent":["import { computed, getCurrentInstance, watch, onMounted } from 'vue'\nimport { isFunction } from '@vue/shared'\nimport { isBool } from '@element-plus/utils/util'\nimport { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'\nimport isServer from '@element-plus/utils/isServer'\n\nimport type { Ref, ComponentPublicInstance } from 'vue'\n\nexport const useModelToggleProps = {\n  modelValue: {\n    type: Boolean,\n    default: null,\n  },\n\n  'onUpdate:modelValue': Function,\n}\n\nexport const useModelToggleEmits = [UPDATE_MODEL_EVENT]\n\nexport type ModelToggleParams = {\n  indicator: Ref<boolean>\n  shouldHideWhenRouteChanges?: Ref<boolean>\n  shouldProceed?: () => boolean\n  onShow?: () => void\n  onHide?: () => void\n}\n\nexport const useModelToggle = ({\n  indicator,\n  shouldHideWhenRouteChanges,\n  shouldProceed,\n  onShow,\n  onHide,\n}: ModelToggleParams) => {\n  const { appContext, props, proxy, emit } = getCurrentInstance()!\n\n  const hasUpdateHandler = computed(() =>\n    isFunction(props['onUpdate:modelValue'])\n  )\n  // when it matches the default value we say this is absent\n  // though this could be mistakenly passed from the user but we need to rule out that\n  // condition\n  const isModelBindingAbsent = computed(() => props.modelValue === null)\n\n  const doShow = () => {\n    if (indicator.value === true) {\n      return\n    }\n\n    indicator.value = true\n    if (isFunction(onShow)) {\n      onShow()\n    }\n  }\n\n  const doHide = () => {\n    if (indicator.value === false) {\n      return\n    }\n\n    indicator.value = false\n\n    if (isFunction(onHide)) {\n      onHide()\n    }\n  }\n\n  const show = () => {\n    if (\n      props.disabled === true ||\n      (isFunction(shouldProceed) && !shouldProceed())\n    )\n      return\n\n    const shouldEmit = hasUpdateHandler.value && !isServer\n\n    if (shouldEmit) {\n      emit(UPDATE_MODEL_EVENT, true)\n    }\n\n    if (isModelBindingAbsent.value || !shouldEmit) {\n      doShow()\n    }\n  }\n\n  const hide = () => {\n    if (props.disabled === true || isServer) return\n\n    const shouldEmit = hasUpdateHandler.value && !isServer\n\n    if (shouldEmit) {\n      emit(UPDATE_MODEL_EVENT, false)\n    }\n\n    if (isModelBindingAbsent.value || !shouldEmit) {\n      doHide()\n    }\n  }\n\n  const onChange = (val: boolean) => {\n    if (!isBool(val)) return\n    if (props.disabled && val) {\n      if (hasUpdateHandler.value) {\n        emit(UPDATE_MODEL_EVENT, false)\n      }\n    } else if (indicator.value !== val) {\n      if (val) {\n        doShow()\n      } else {\n        doHide()\n      }\n    }\n  }\n\n  const toggle = () => {\n    if (indicator.value) {\n      hide()\n    } else {\n      show()\n    }\n  }\n\n  watch(() => props.modelValue, onChange as any)\n\n  if (\n    shouldHideWhenRouteChanges &&\n    appContext.config.globalProperties.$route !== undefined\n  ) {\n    watch(\n      () => ({\n        ...(\n          proxy as ComponentPublicInstance<{\n            $route: any\n          }>\n        ).$route,\n      }),\n      () => {\n        if (shouldHideWhenRouteChanges.value && indicator.value) {\n          hide()\n        }\n      }\n    )\n  }\n\n  onMounted(() => {\n    onChange(props.modelValue as boolean)\n  })\n\n  return {\n    hide,\n    show,\n    toggle,\n  }\n}\n"],"names":[],"mappings":";;;;;;MAQa,sBAAsB;AAAA,EACjC,YAAY;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA;AAAA,EAGX,uBAAuB;AAAA;MAGZ,sBAAsB,CAAC;MAUvB,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,MACuB;AACvB,QAAM,EAAE,YAAY,OAAO,OAAO,SAAS;AAE3C,QAAM,mBAAmB,SAAS,MAChC,WAAW,MAAM;AAKnB,QAAM,uBAAuB,SAAS,MAAM,MAAM,eAAe;AAEjE,QAAM,SAAS,MAAM;AACnB,QAAI,UAAU,UAAU,MAAM;AAC5B;AAAA;AAGF,cAAU,QAAQ;AAClB,QAAI,WAAW,SAAS;AACtB;AAAA;AAAA;AAIJ,QAAM,SAAS,MAAM;AACnB,QAAI,UAAU,UAAU,OAAO;AAC7B;AAAA;AAGF,cAAU,QAAQ;AAElB,QAAI,WAAW,SAAS;AACtB;AAAA;AAAA;AAIJ,QAAM,OAAO,MAAM;AACjB,QACE,MAAM,aAAa,QAClB,WAAW,kBAAkB,CAAC;AAE/B;AAEF,UAAM,aAAa,iBAAiB,SAAS,CAAC;AAE9C,QAAI,YAAY;AACd,WAAK,oBAAoB;AAAA;AAG3B,QAAI,qBAAqB,SAAS,CAAC,YAAY;AAC7C;AAAA;AAAA;AAIJ,QAAM,OAAO,MAAM;AACjB,QAAI,MAAM,aAAa,QAAQ;AAAU;AAEzC,UAAM,aAAa,iBAAiB,SAAS,CAAC;AAE9C,QAAI,YAAY;AACd,WAAK,oBAAoB;AAAA;AAG3B,QAAI,qBAAqB,SAAS,CAAC,YAAY;AAC7C;AAAA;AAAA;AAIJ,QAAM,WAAW,CAAC,QAAiB;AACjC,QAAI,CAAC,OAAO;AAAM;AAClB,QAAI,MAAM,YAAY,KAAK;AACzB,UAAI,iBAAiB,OAAO;AAC1B,aAAK,oBAAoB;AAAA;AAAA,eAElB,UAAU,UAAU,KAAK;AAClC,UAAI,KAAK;AACP;AAAA,aACK;AACL;AAAA;AAAA;AAAA;AAKN,QAAM,SAAS,MAAM;AACnB,QAAI,UAAU,OAAO;AACnB;AAAA,WACK;AACL;AAAA;AAAA;AAIJ,QAAM,MAAM,MAAM,YAAY;AAE9B,MACE,8BACA,WAAW,OAAO,iBAAiB,WAAW,QAC9C;AACA,UACE;AAAO,SAEH,MAGA;AAAA,QAEJ,MAAM;AACJ,UAAI,2BAA2B,SAAS,UAAU,OAAO;AACvD;AAAA;AAAA;AAAA;AAMR,YAAU,MAAM;AACd,aAAS,MAAM;AAAA;AAGjB,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA;AAAA;;;;"}