UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 4.88 kB
{"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;;;;"}