fix: theme reactive not work #7180
							parent
							
								
									509ec682f2
								
							
						
					
					
						commit
						a9198e44df
					
				|  | @ -21,8 +21,16 @@ import statisticToken, { merge as mergeToken, statistic } from './util/statistic | |||
| import type { VueNode } from '../_util/type'; | ||||
| import { objectType } from '../_util/type'; | ||||
| import type { ComputedRef, InjectionKey, Ref } from 'vue'; | ||||
| import { unref, defineComponent, provide, computed, inject, watchEffect, ref } from 'vue'; | ||||
| import { toReactive } from '../_util/toReactive'; | ||||
| import { | ||||
|   triggerRef, | ||||
|   unref, | ||||
|   defineComponent, | ||||
|   provide, | ||||
|   computed, | ||||
|   inject, | ||||
|   watch, | ||||
|   shallowRef, | ||||
| } from 'vue'; | ||||
| 
 | ||||
| const defaultTheme = createTheme(defaultDerivative); | ||||
| 
 | ||||
|  | @ -64,13 +72,18 @@ export interface DesignTokenContext { | |||
| const DesignTokenContextKey: InjectionKey<ComputedRef<DesignTokenContext>> = | ||||
|   Symbol('DesignTokenContext'); | ||||
| 
 | ||||
| export const globalDesignTokenApi = ref<DesignTokenContext>(); | ||||
| export const globalDesignTokenApi = shallowRef<DesignTokenContext>(); | ||||
| 
 | ||||
| export const useDesignTokenProvider = (value: ComputedRef<DesignTokenContext>) => { | ||||
|   provide(DesignTokenContextKey, value); | ||||
|   watchEffect(() => { | ||||
|     globalDesignTokenApi.value = toReactive(value); | ||||
|   }); | ||||
|   watch( | ||||
|     value, | ||||
|     () => { | ||||
|       globalDesignTokenApi.value = unref(value); | ||||
|       triggerRef(globalDesignTokenApi); | ||||
|     }, | ||||
|     { immediate: true, deep: true }, | ||||
|   ); | ||||
| }; | ||||
| 
 | ||||
| export const useDesignTokenInject = () => { | ||||
|  | @ -96,23 +109,24 @@ export function useToken(): [ | |||
|   ComputedRef<GlobalToken>, | ||||
|   ComputedRef<string>, | ||||
| ] { | ||||
|   const designTokenContext = unref( | ||||
|     inject<ComputedRef<DesignTokenContext>>( | ||||
|       DesignTokenContextKey, | ||||
|       computed(() => globalDesignTokenApi.value || defaultConfig), | ||||
|     ), | ||||
|   const designTokenContext = inject<ComputedRef<DesignTokenContext>>( | ||||
|     DesignTokenContextKey, | ||||
|     computed(() => globalDesignTokenApi.value || defaultConfig), | ||||
|   ); | ||||
| 
 | ||||
|   const salt = computed(() => `${version}-${designTokenContext.hashed || ''}`); | ||||
|   const salt = computed(() => `${version}-${designTokenContext.value.hashed || ''}`); | ||||
| 
 | ||||
|   const mergedTheme = computed(() => designTokenContext.theme || defaultTheme); | ||||
|   const mergedTheme = computed(() => designTokenContext.value.theme || defaultTheme); | ||||
| 
 | ||||
|   const cacheToken = useCacheToken<GlobalToken, SeedToken>( | ||||
|     mergedTheme, | ||||
|     computed(() => [defaultSeedToken, designTokenContext.token]), | ||||
|     computed(() => [defaultSeedToken, designTokenContext.value.token]), | ||||
|     computed(() => ({ | ||||
|       salt: salt.value, | ||||
|       override: { override: designTokenContext.token, ...designTokenContext.components }, | ||||
|       override: { | ||||
|         override: designTokenContext.value.token, | ||||
|         ...designTokenContext.value.components, | ||||
|       }, | ||||
|       formatToken, | ||||
|     })), | ||||
|   ); | ||||
|  | @ -120,7 +134,7 @@ export function useToken(): [ | |||
|   return [ | ||||
|     mergedTheme, | ||||
|     computed(() => cacheToken.value[0]), | ||||
|     computed(() => (designTokenContext.hashed ? cacheToken.value[1] : '')), | ||||
|     computed(() => (designTokenContext.value.hashed ? cacheToken.value[1] : '')), | ||||
|   ]; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 tangjinzhou
						tangjinzhou