Skip to content

Commit e9fa1e7

Browse files
committed
perf: uninstall classnames, install clsx
1 parent 26fe158 commit e9fa1e7

File tree

3 files changed

+37
-24
lines changed

3 files changed

+37
-24
lines changed

src/UniqueProvider/UniqueContainer.tsx

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react';
22
import useOffsetStyle from '../hooks/useOffsetStyle';
3-
import classNames from 'classnames';
3+
import { clsx } from 'clsx';
44
import CSSMotion from '@rc-component/motion';
55
import type { CSSMotionProps } from '@rc-component/motion';
66
import type { AlignType, ArrowPos } from '../interface';
@@ -86,9 +86,12 @@ const UniqueContainer = (props: UniqueContainerProps) => {
8686
}}
8787
>
8888
{({ className: motionClassName, style: motionStyle }) => {
89-
const cls = classNames(containerCls, motionClassName, uniqueContainerClassName, {
90-
[`${containerCls}-visible`]: motionVisible,
91-
});
89+
const cls = clsx(
90+
containerCls,
91+
motionClassName,
92+
uniqueContainerClassName,
93+
{ [`${containerCls}-visible`]: motionVisible },
94+
);
9295

9396
return (
9497
<div

src/UniqueProvider/index.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { useEvent } from '@rc-component/util';
1313
import useTargetState from './useTargetState';
1414
import { isDOM } from '@rc-component/util/lib/Dom/findDOMNode';
1515
import UniqueContainer from './UniqueContainer';
16-
import classNames from 'classnames';
16+
import { clsx } from 'clsx';
1717
import { getAlignPopupClassName } from '../util';
1818

1919
export interface UniqueProviderProps {
@@ -128,7 +128,7 @@ const UniqueProvider = ({
128128
false, // alignPoint is false for UniqueProvider
129129
);
130130

131-
return classNames(
131+
return clsx(
132132
baseClassName,
133133
mergedOptions.getPopupClassNameFromAlign?.(alignInfo),
134134
);
@@ -186,7 +186,7 @@ const UniqueProvider = ({
186186
portal={Portal}
187187
prefixCls={prefixCls}
188188
popup={mergedOptions.popup}
189-
className={classNames(
189+
className={clsx(
190190
mergedOptions.popupClassName,
191191
alignedClassName,
192192
`${prefixCls}-unique-controlled`,
@@ -239,7 +239,7 @@ const UniqueProvider = ({
239239
}}
240240
popupSize={popupSize}
241241
motion={mergedOptions.popupMotion}
242-
uniqueContainerClassName={classNames(
242+
uniqueContainerClassName={clsx(
243243
mergedOptions.uniqueContainerClassName,
244244
alignedClassName,
245245
)}

tests/unique.test.tsx

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import React from 'react';
33
import Trigger, { UniqueProvider, type UniqueProviderProps } from '../src';
44
import { awaitFakeTimer } from './util';
55
import type { TriggerProps } from '../src';
6-
import classNames from 'classnames';
6+
import { clsx } from 'clsx';
77

88
// Mock UniqueContainer to check if open props changed
99
global.openChangeLog = [];
@@ -185,21 +185,30 @@ describe('Trigger.Unique', () => {
185185
});
186186

187187
it('should apply uniqueContainerClassName to UniqueContainer component', async () => {
188-
await setupAndOpenPopup({ uniqueContainerClassName: 'custom-container-class' });
188+
await setupAndOpenPopup({
189+
uniqueContainerClassName: 'custom-container-class',
190+
});
189191

190192
// Check that UniqueContainer has the custom container className
191-
const uniqueContainer = document.querySelector('.rc-trigger-popup-unique-container');
193+
const uniqueContainer = document.querySelector(
194+
'.rc-trigger-popup-unique-container',
195+
);
192196
expect(uniqueContainer).toBeTruthy();
193197
expect(uniqueContainer.className).toContain('custom-container-class');
194198
});
195199

196200
it('should apply uniqueContainerStyle to UniqueContainer component', async () => {
197201
await setupAndOpenPopup({
198-
uniqueContainerStyle: { backgroundColor: 'red', border: '1px solid blue' },
202+
uniqueContainerStyle: {
203+
backgroundColor: 'red',
204+
border: '1px solid blue',
205+
},
199206
});
200207

201208
// Check that UniqueContainer has the custom container style
202-
const uniqueContainer = document.querySelector('.rc-trigger-popup-unique-container');
209+
const uniqueContainer = document.querySelector(
210+
'.rc-trigger-popup-unique-container',
211+
);
203212
expect(uniqueContainer).toBeTruthy();
204213
expect(uniqueContainer).toHaveStyle({
205214
backgroundColor: 'red',
@@ -211,7 +220,9 @@ describe('Trigger.Unique', () => {
211220
await setupAndOpenPopup();
212221

213222
// Check that UniqueContainer exists but does not have custom container className
214-
const uniqueContainer = document.querySelector('.rc-trigger-popup-unique-container');
223+
const uniqueContainer = document.querySelector(
224+
'.rc-trigger-popup-unique-container',
225+
);
215226
expect(uniqueContainer).toBeTruthy();
216227
expect(uniqueContainer.className).not.toContain('undefined');
217228
});
@@ -246,12 +257,14 @@ describe('Trigger.Unique', () => {
246257
);
247258

248259
expect(document.querySelector('.rc-trigger-popup')).toHaveClass('bamboo');
249-
expect(document.querySelector('.rc-trigger-popup-unique-container')).toHaveClass(
250-
'bamboo',
251-
);
260+
expect(
261+
document.querySelector('.rc-trigger-popup-unique-container'),
262+
).toHaveClass('bamboo');
252263

253264
// Check that arrow position CSS variables are set
254-
const uniqueContainer = document.querySelector('.rc-trigger-popup-unique-container');
265+
const uniqueContainer = document.querySelector(
266+
'.rc-trigger-popup-unique-container',
267+
);
255268
const computedStyle = getComputedStyle(uniqueContainer);
256269
expect(computedStyle.getPropertyValue('--arrow-x')).not.toBe('');
257270
expect(computedStyle.getPropertyValue('--arrow-y')).not.toBe('');
@@ -262,10 +275,7 @@ describe('Trigger.Unique', () => {
262275
options,
263276
) => ({
264277
...options,
265-
popupClassName: classNames(
266-
options.popupClassName,
267-
'custom-post-options-class',
268-
),
278+
popupClassName: clsx(options.popupClassName, 'custom-post-options-class'),
269279
});
270280

271281
render(
@@ -293,7 +303,7 @@ describe('Trigger.Unique', () => {
293303
// Mock useAlign to return our mock onAlign function
294304
const useAlignModule = require('../src/hooks/useAlign');
295305
const originalUseAlign = useAlignModule.default;
296-
306+
297307
jest.spyOn(useAlignModule, 'default').mockImplementation((...args) => {
298308
const originalResult = originalUseAlign(...args);
299309
// Replace onAlign with our mock
@@ -319,7 +329,7 @@ describe('Trigger.Unique', () => {
319329

320330
return (
321331
<div>
322-
<button
332+
<button
323333
className="switch-trigger-btn"
324334
onClick={() => {
325335
// Switch which trigger is open - this changes the target

0 commit comments

Comments
 (0)