File tree Expand file tree Collapse file tree 7 files changed +97
-26
lines changed Expand file tree Collapse file tree 7 files changed +97
-26
lines changed Original file line number Diff line number Diff line change 48
48
},
49
49
"devDependencies" : {
50
50
"@types/classnames" : " ^2.2.9" ,
51
+ "@types/enzyme" : " ^3.10.8" ,
52
+ "@types/jest" : " ^26.0.18" ,
51
53
"@types/react" : " ^16.14.2" ,
52
54
"@types/react-dom" : " ^16.9.10" ,
53
55
"@umijs/fabric" : " ^2.0.8" ,
Original file line number Diff line number Diff line change @@ -9,7 +9,7 @@ export interface ItemProps<ItemType> {
9
9
renderItem ?: ( item : ItemType ) => React . ReactNode ;
10
10
responsive ?: boolean ;
11
11
itemKey ?: React . Key ;
12
- registerSize : ( key : React . Key , width : number ) => void ;
12
+ registerSize : ( key : React . Key , width : number | null ) => void ;
13
13
children ?: React . ReactNode ;
14
14
display : boolean ;
15
15
order : number ;
@@ -32,13 +32,13 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
32
32
const mergedHidden = responsive && ! display ;
33
33
34
34
// ================================ Effect ================================
35
- function internalRegisterSize ( width : number ) {
35
+ function internalRegisterSize ( width : number | null ) {
36
36
registerSize ( itemKey ! , width ) ;
37
37
}
38
38
39
39
React . useEffect (
40
40
( ) => ( ) => {
41
- internalRegisterSize ( 0 ) ;
41
+ internalRegisterSize ( null ) ;
42
42
} ,
43
43
[ ] ,
44
44
) ;
Original file line number Diff line number Diff line change @@ -112,11 +112,11 @@ function Overflow<ItemType = any>(
112
112
setContainerWidth ( element . clientWidth ) ;
113
113
}
114
114
115
- function registerSize ( key : React . Key , width : number ) {
115
+ function registerSize ( key : React . Key , width : number | null ) {
116
116
setItemWidths ( ( origin ) => {
117
117
const clone = new Map ( origin ) ;
118
118
119
- if ( ! width ) {
119
+ if ( width === null ) {
120
120
clone . delete ( key ) ;
121
121
} else {
122
122
clone . set ( key , width ) ;
@@ -125,8 +125,8 @@ function Overflow<ItemType = any>(
125
125
} ) ;
126
126
}
127
127
128
- function registerOverflowSize ( _ : React . Key , width : number ) {
129
- setRestWidth ( width ) ;
128
+ function registerOverflowSize ( _ : React . Key , width : number | null ) {
129
+ setRestWidth ( width || 0 ) ;
130
130
setPrevRestWidth ( restWidth ) ;
131
131
}
132
132
Load Diff This file was deleted.
Original file line number Diff line number Diff line change
1
+ import React from 'react' ;
2
+ import Overflow from '../src' ;
3
+ import { mount } from './wrapper' ;
4
+
5
+ interface ItemType {
6
+ label : string ;
7
+ key : number ;
8
+ }
9
+
10
+ function renderItem ( item : ItemType ) {
11
+ return item . label ;
12
+ }
13
+
14
+ describe ( 'Overflow' , ( ) => {
15
+ function getData ( count : number ) {
16
+ return new Array ( count ) . fill ( undefined ) . map ( ( _ , index ) => ( {
17
+ label : `Label ${ index } ` ,
18
+ key : index ,
19
+ } ) ) ;
20
+ }
21
+
22
+ it ( 'no maxCount' , ( ) => {
23
+ const wrapper = mount (
24
+ < Overflow < ItemType > data = { getData ( 6 ) } renderItem = { renderItem } /> ,
25
+ ) ;
26
+ expect ( wrapper . find ( 'ResizeObserver' ) ) . toHaveLength ( 0 ) ;
27
+ expect ( wrapper . find ( 'div.rc-overflow-item' ) ) . toHaveLength ( 6 ) ;
28
+ expect ( wrapper . findRest ( ) ) . toHaveLength ( 0 ) ;
29
+ } ) ;
30
+
31
+ it ( 'number maxCount' , ( ) => {
32
+ const wrapper = mount (
33
+ < Overflow < ItemType >
34
+ data = { getData ( 6 ) }
35
+ renderItem = { renderItem }
36
+ maxCount = { 4 }
37
+ /> ,
38
+ ) ;
39
+ expect ( wrapper . find ( 'ResizeObserver' ) ) . toHaveLength ( 0 ) ;
40
+ expect ( wrapper . find ( 'div.rc-overflow-item' ) ) . toHaveLength ( 4 + 1 ) ;
41
+ expect ( wrapper . findRest ( ) ) . toHaveLength ( 1 ) ;
42
+ } ) ;
43
+
44
+ it ( 'renderRest' , ( ) => {
45
+ const wrapper = mount (
46
+ < Overflow
47
+ data = { getData ( 6 ) }
48
+ renderItem = { renderItem }
49
+ renderRest = { ( omittedItems ) => `Bamboo: ${ omittedItems . length } ` }
50
+ maxCount = { 3 }
51
+ /> ,
52
+ ) ;
53
+
54
+ expect ( wrapper . findRest ( ) . text ( ) ) . toEqual ( 'Bamboo: 3' ) ;
55
+ } ) ;
56
+ } ) ;
Original file line number Diff line number Diff line change @@ -10,20 +10,25 @@ window.requestAnimationFrame = (func) => {
10
10
Enzyme . configure ( { adapter : new Adapter ( ) } ) ;
11
11
12
12
Object . assign ( Enzyme . ReactWrapper . prototype , {
13
- triggerMotionEvent ( target ) {
14
- const motionEvent = new Event ( 'transitionend' ) ;
15
- if ( target ) {
16
- Object . defineProperty ( motionEvent , 'target' , {
17
- get : ( ) => target . getDOMNode ( ) ,
18
- } ) ;
19
- }
20
-
13
+ triggerResize ( offsetWidth ) {
21
14
act ( ( ) => {
22
- const element = this . find ( 'CSSMotion' ) . getDOMNode ( ) ;
23
- element . dispatchEvent ( motionEvent ) ;
24
- this . update ( ) ;
15
+ this . find ( 'ResizeObserver' ) . first ( ) . props ( ) . onResize ( { offsetWidth } ) ;
25
16
} ) ;
26
-
27
- return this ;
17
+ } ,
18
+ triggerItemResize ( index , offsetWidth ) {
19
+ act ( ( ) => {
20
+ this . find ( 'Item' )
21
+ . at ( index )
22
+ . find ( 'ResizeObserver' )
23
+ . props ( )
24
+ . onResize ( { offsetWidth } ) ;
25
+ } ) ;
26
+ } ,
27
+ initSize ( width , itemWidth ) {
28
+ this . triggerResize ( width ) ;
29
+ this . triggerItemResize ( itemWidth ) ;
30
+ } ,
31
+ findRest ( ) {
32
+ return this . find ( 'div.rc-overflow-item-rest' ) ;
28
33
} ,
29
34
} ) ;
Original file line number Diff line number Diff line change
1
+ import { mount as enzymeMount , ReactWrapper } from 'enzyme' ;
2
+
3
+ export type MountParam = Parameters < typeof enzymeMount > ;
4
+
5
+ export interface WrapperType extends ReactWrapper {
6
+ triggerResize : ( offsetWidth : number ) => WrapperType ;
7
+ triggerItemResize : ( index : number , offsetWidth : number ) => WrapperType ;
8
+ initSize : ( width : number , itemWidth : number ) => WrapperType ;
9
+ findRest : ( ) => WrapperType ;
10
+ }
11
+
12
+ export function mount ( ...args : MountParam ) {
13
+ return enzymeMount ( ...args ) as WrapperType ;
14
+ }
You can’t perform that action at this time.
0 commit comments