Skip to content

Commit 9a81aba

Browse files
author
committed
feat: styles prop
1 parent 8e9bd3b commit 9a81aba

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

src/Cascader.tsx

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export interface DefaultOptionType extends BaseOptionType {
5757
disableCheckbox?: boolean;
5858
}
5959

60-
interface BaseCascaderProps<OptionType extends BaseOptionType = DefaultOptionType>
60+
export interface BaseCascaderProps<OptionType extends BaseOptionType = DefaultOptionType>
6161
extends Omit<
6262
BaseSelectPropsWithoutPrivate,
6363
'tokenSeparators' | 'labelInValue' | 'mode' | 'showSearch'
@@ -97,8 +97,15 @@ interface BaseCascaderProps<OptionType extends BaseOptionType = DefaultOptionTyp
9797
/** @deprecated Use `dropdownClassName` instead */
9898
popupClassName?: string;
9999
dropdownClassName?: string;
100+
/** @deprecated Use `styles.dropdownMenuColumn` instead */
100101
dropdownMenuColumnStyle?: React.CSSProperties;
101102

103+
// styles
104+
styles?: {
105+
dropdown?: React.CSSProperties;
106+
dropdownMenuColumn?: React.CSSProperties;
107+
};
108+
102109
/** @deprecated Use `placement` instead */
103110
popupPlacement?: Placement;
104111
placement?: Placement;
@@ -197,6 +204,8 @@ const Cascader = React.forwardRef<CascaderRef, InternalCascaderProps>((props, re
197204
popupVisible,
198205
open,
199206

207+
styles,
208+
200209
popupClassName,
201210
dropdownClassName,
202211
dropdownStyle,
@@ -449,7 +458,7 @@ const Cascader = React.forwardRef<CascaderRef, InternalCascaderProps>((props, re
449458
expandTrigger,
450459
expandIcon,
451460
loadingIcon,
452-
dropdownMenuColumnStyle,
461+
dropdownMenuColumnStyle: styles?.dropdownMenuColumn ?? dropdownMenuColumnStyle,
453462
}),
454463
[
455464
mergedOptions,
@@ -466,6 +475,7 @@ const Cascader = React.forwardRef<CascaderRef, InternalCascaderProps>((props, re
466475
expandIcon,
467476
loadingIcon,
468477
dropdownMenuColumnStyle,
478+
styles?.dropdownMenuColumn,
469479
],
470480
);
471481

@@ -476,13 +486,18 @@ const Cascader = React.forwardRef<CascaderRef, InternalCascaderProps>((props, re
476486

477487
const mergedDropdownStyle: React.CSSProperties =
478488
// Search to match width
479-
dropdownStyle ?? (mergedSearchValue && searchConfig.matchInputWidth) ?? emptyOptions
489+
styles?.dropdown ??
490+
dropdownStyle ??
491+
(mergedSearchValue && searchConfig.matchInputWidth) ??
492+
emptyOptions
480493
? // Empty keep the width
481494
{
495+
...styles?.dropdown,
482496
...dropdownStyle,
483497
}
484498
: {
485499
minWidth: 'auto',
500+
...styles?.dropdown,
486501
...dropdownStyle,
487502
};
488503

src/utils/warningPropsUtil.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import warning from 'rc-util/lib/warning';
2-
import type { DefaultOptionType, FieldNames, InternalCascaderProps } from '../Cascader';
2+
import type { DefaultOptionType, FieldNames, BaseCascaderProps } from '../Cascader';
33

4-
function warningProps(props: InternalCascaderProps) {
5-
const { onPopupVisibleChange, popupVisible, popupClassName, popupPlacement } = props;
4+
function warningProps(props: BaseCascaderProps) {
5+
const { onPopupVisibleChange, popupVisible, popupClassName, popupPlacement,dropdownMenuColumnStyle} = props;
66

77
warning(
88
!onPopupVisibleChange,
@@ -17,6 +17,10 @@ function warningProps(props: InternalCascaderProps) {
1717
popupPlacement === undefined,
1818
'`popupPlacement` is deprecated. Please use `placement` instead.',
1919
);
20+
warning(
21+
dropdownMenuColumnStyle === undefined,
22+
'`dropdownMenuColumnStyle` is deprecated. Please use `styles.dropdownMenuColumn` instead.',
23+
);
2024
}
2125

2226
// value in Cascader options should not be null

tests/index.spec.tsx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { spyElementPrototypes } from 'rc-util/lib/test/domHook';
44
import { resetWarned } from 'rc-util/lib/warning';
55
import React from 'react';
66
import Cascader from '../src';
7-
import { addressOptions, addressOptionsForUneven, optionsForActiveMenuItems } from './demoOptions';
7+
import { addressOptions,addressOptionsForUneven,optionsForActiveMenuItems } from './demoOptions';
88
import { mount } from './enzyme';
99

1010
describe('Cascader.Basic', () => {
@@ -655,7 +655,8 @@ describe('Cascader.Basic', () => {
655655
changeOnSelect
656656
expandTrigger="hover"
657657
options={addressOptionsForUneven}
658-
onChange={onChange}>
658+
onChange={onChange}
659+
>
659660
<input readOnly />
660661
</Cascader>,
661662
);
@@ -684,7 +685,7 @@ describe('Cascader.Basic', () => {
684685
wrapper.update();
685686
expect(selectedValue).toBeFalsy();
686687
expect(wrapper.isOpen()).toBeTruthy();
687-
})
688+
});
688689

689690
describe('focus test', () => {
690691
let domSpy;
@@ -803,9 +804,8 @@ describe('Cascader.Basic', () => {
803804
expect(activeItems).toHaveLength(2);
804805
expect(activeItems.last().text()).toEqual('高雄');
805806
});
806-
})
807+
});
807808
});
808-
809809
});
810810

811811
it('defaultValue not exist', () => {
@@ -1063,4 +1063,19 @@ describe('Cascader.Basic', () => {
10631063
);
10641064
errorSpy.mockReset();
10651065
});
1066+
1067+
it('``in Cascader options should throw a warning', () => {
1068+
const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => null);
1069+
mount(
1070+
<Cascader
1071+
dropdownMenuColumnStyle={{}}
1072+
options={[]}
1073+
/>,
1074+
);
1075+
1076+
expect(errorSpy).toHaveBeenCalledWith(
1077+
'Warning: `dropdownMenuColumnStyle` is deprecated. Please use `styles.dropdownMenuColumn` instead.',
1078+
);
1079+
errorSpy.mockReset();
1080+
});
10661081
});

0 commit comments

Comments
 (0)