element-plus
Version:
A Component Library for Vue 3
1 lines • 7.19 kB
Source Map (JSON)
{"version":3,"file":"use-global-config.mjs","sources":["../../../../../../../packages/components/config-provider/src/hooks/use-global-config.ts"],"sourcesContent":["import { computed, getCurrentInstance, inject, provide, ref, unref } from 'vue'\nimport { debugWarn, keysOf } from '@element-plus/utils'\nimport {\n SIZE_INJECTION_KEY,\n defaultInitialZIndex,\n defaultNamespace,\n emptyValuesContextKey,\n localeContextKey,\n namespaceContextKey,\n useLocale,\n useNamespace,\n useZIndex,\n zIndexContextKey,\n} from '@element-plus/hooks'\nimport { configProviderContextKey } from '../constants'\n\nimport type { MaybeRef } from '@vueuse/core'\nimport type { App, Ref } from 'vue'\nimport type { ConfigProviderContext } from '../constants'\n\n// this is meant to fix global methods like `ElMessage(opts)`, this way we can inject current locale\n// into the component as default injection value.\n// refer to: https://github.com/element-plus/element-plus/issues/2610#issuecomment-887965266\nconst globalConfig = ref<ConfigProviderContext>()\n\nexport function useGlobalConfig<\n K extends keyof ConfigProviderContext,\n D extends ConfigProviderContext[K],\n>(\n key: K,\n defaultValue?: D\n): Ref<Exclude<ConfigProviderContext[K], undefined> | D>\nexport function useGlobalConfig(): Ref<ConfigProviderContext>\nexport function useGlobalConfig(\n key?: keyof ConfigProviderContext,\n defaultValue = undefined\n) {\n const config = getCurrentInstance()\n ? inject(configProviderContextKey, globalConfig)\n : globalConfig\n if (key) {\n return computed(() => config.value?.[key] ?? defaultValue)\n } else {\n return config\n }\n}\n\n// for components like `ElMessage` `ElNotification` `ElMessageBox`.\nexport function useGlobalComponentSettings(\n block: string,\n sizeFallback?: MaybeRef<ConfigProviderContext['size']>\n) {\n const config = useGlobalConfig()\n\n const ns = useNamespace(\n block,\n computed(() => config.value?.namespace || defaultNamespace)\n )\n\n const locale = useLocale(computed(() => config.value?.locale))\n const zIndex = useZIndex(\n computed(() => config.value?.zIndex || defaultInitialZIndex)\n )\n const size = computed(() => unref(sizeFallback) || config.value?.size || '')\n provideGlobalConfig(computed(() => unref(config) || {}))\n\n return {\n ns,\n locale,\n zIndex,\n size,\n }\n}\n\nexport const provideGlobalConfig = (\n config: MaybeRef<ConfigProviderContext>,\n app?: App,\n global = false\n) => {\n const inSetup = !!getCurrentInstance()\n const oldConfig = inSetup ? useGlobalConfig() : undefined\n\n const provideFn = app?.provide ?? (inSetup ? provide : undefined)\n if (!provideFn) {\n debugWarn(\n 'provideGlobalConfig',\n 'provideGlobalConfig() can only be used inside setup().'\n )\n return\n }\n\n const context = computed(() => {\n const cfg = unref(config)\n if (!oldConfig?.value) return cfg\n return mergeConfig(oldConfig.value, cfg)\n })\n provideFn(configProviderContextKey, context)\n provideFn(\n localeContextKey,\n computed(() => context.value.locale)\n )\n provideFn(\n namespaceContextKey,\n computed(() => context.value.namespace)\n )\n provideFn(\n zIndexContextKey,\n computed(() => context.value.zIndex)\n )\n\n provideFn(SIZE_INJECTION_KEY, {\n size: computed(() => context.value.size || ''),\n })\n\n provideFn(\n emptyValuesContextKey,\n computed(() => ({\n emptyValues: context.value.emptyValues,\n valueOnClear: context.value.valueOnClear,\n }))\n )\n\n if (global || !globalConfig.value) {\n globalConfig.value = context.value\n }\n return context\n}\n\nconst mergeConfig = (\n a: ConfigProviderContext,\n b: ConfigProviderContext\n): ConfigProviderContext => {\n const keys = [...new Set([...keysOf(a), ...keysOf(b)])]\n const obj: Record<string, any> = {}\n for (const key of keys) {\n obj[key] = b[key] !== undefined ? b[key] : a[key]\n }\n return obj\n}\n"],"names":[],"mappings":"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"}