ant-design/components/_util/hooks/useVariants.ts
MadCcc 4a07e13685
feat: Select variant (#46379)
* feat: Select variant

* chore: clean

* chore: add test

* chore: update demo
2023-12-11 14:55:58 +08:00

28 lines
794 B
TypeScript

type DefaultVariant = 'outlined' | 'borderless';
/**
* Compatible for legacy `bordered` prop, safe to remove after `bordered` is removed.
* @param variant
* @param legacyBordered
* @param variants
*/
const useVariant = <T extends string>(
variant: T | undefined,
legacyBordered: boolean | undefined,
variants: readonly (T | DefaultVariant)[],
): [T | DefaultVariant, boolean] => {
let mergedVariant: T | DefaultVariant;
if (typeof variant !== 'undefined') {
mergedVariant = variant;
} else if (legacyBordered === false) {
mergedVariant = 'borderless';
} else {
mergedVariant = 'outlined';
}
const enableVariantCls = variants.includes(mergedVariant) && mergedVariant !== 'outlined';
return [mergedVariant, enableVariantCls];
};
export default useVariant;