From 29ebad2fcf0b302dd1c3959c8afc683e773feb28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8F=8E=EF=B8=8F=20Yumo?= <yumo.imer@gmail.com> Date: Fri, 23 Aug 2024 16:17:37 +0800 Subject: [PATCH] fix: genStyleUtils doesn't work when realToken is undefined fix: getCompUnitless type error --- src/hooks/useToken.ts | 10 ++++++++-- src/util/genStyleUtils.tsx | 37 +++++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/hooks/useToken.ts b/src/hooks/useToken.ts index 1349eae..eaf8c89 100644 --- a/src/hooks/useToken.ts +++ b/src/hooks/useToken.ts @@ -21,11 +21,17 @@ export interface UseTokenReturn< DesignToken extends TokenType, > { token: GlobalToken<CompTokenMap, AliasToken>; - realToken?: GlobalToken<CompTokenMap, AliasToken>; theme?: Theme<DesignToken, AliasToken>; - components?: TokenMapWithTheme<CompTokenMap, DesignToken, AliasToken>; hashId?: string; + components?: TokenMapWithTheme<CompTokenMap, DesignToken, AliasToken>; hashed?: string | boolean; + /** + * @warring dev only: css var token object. If you use `useToken` in production, you should use `token` instead. + */ + realToken?: GlobalToken<CompTokenMap, AliasToken>; + /** + * @warring dev only: css var options object. If you use `useToken` in production, do not use it. + */ cssVar?: { prefix?: string; key?: string; diff --git a/src/util/genStyleUtils.tsx b/src/util/genStyleUtils.tsx index fcf0833..9379b9f 100644 --- a/src/util/genStyleUtils.tsx +++ b/src/util/genStyleUtils.tsx @@ -10,6 +10,7 @@ import type { TokenMap, TokenMapKey, UseComponentStyleResult, + GlobalToken, } from '../interface'; import type AbstractCalculator from './calc/calculator'; @@ -91,12 +92,10 @@ export type CSSVarRegisterProps = { export type GetResetStyles<AliasToken extends TokenType> = (token: AliasToken) => CSSInterpolation; -export type GetCompUnitless<CompTokenMap extends TokenMap, AliasToken extends TokenType> = < - C extends TokenMapKey<CompTokenMap>, ->( - component: C | [C, string], +export type GetCompUnitless<CompTokenMap extends TokenMap, AliasToken extends TokenType> = ( + component?: TokenMapKey<CompTokenMap> | [TokenMapKey<CompTokenMap>, string], ) => { - [key in ComponentTokenKey<CompTokenMap, AliasToken, C>]: boolean; + [key in keyof AliasToken]?: boolean; }; function genStyleUtils< @@ -221,7 +220,12 @@ function genStyleUtils< const { unitless: compUnitless, injectStyle = true, prefixToken, ignore } = options; const CSSVarRegister: React.FC<Readonly<CSSVarRegisterProps>> = ({ rootCls, cssVar = {} }) => { - const { realToken } = useToken(); + const { + /** + * @warring dev only, detail see {@link UseTokenReturn.realToken} + */ + realToken = {} as GlobalToken<CompTokenMap, AliasToken>, + } = useToken(); useCSSVarRegister( { path: [component], @@ -257,7 +261,12 @@ function genStyleUtils< }; const useCSSVar = (rootCls: string) => { - const { cssVar } = useToken(); + const { + /** + * @warring dev only, detail see {@link UseTokenReturn.cssVar} + */ + cssVar, + } = useToken(); return [ (node: React.ReactElement): React.ReactElement => @@ -311,7 +320,19 @@ function genStyleUtils< // Return new style hook return (prefixCls: string, rootCls: string = prefixCls): UseComponentStyleResult => { - const { theme, realToken, hashId, token, cssVar } = useToken(); + const { + theme, + hashId, + token, + /** + * @warring dev only, detail see {@link UseTokenReturn.realToken} + */ + realToken = {} as GlobalToken<CompTokenMap, AliasToken>, + /** + * @warring dev only, detail see {@link UseTokenReturn.cssVar} + */ + cssVar, + } = useToken(); const { rootPrefixCls, iconPrefixCls } = usePrefix(); const csp = useCSP();