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 4848 },
4949 "devDependencies" : {
5050 "@types/classnames" : " ^2.2.9" ,
51+ "@types/enzyme" : " ^3.10.8" ,
52+ "@types/jest" : " ^26.0.18" ,
5153 "@types/react" : " ^16.14.2" ,
5254 "@types/react-dom" : " ^16.9.10" ,
5355 "@umijs/fabric" : " ^2.0.8" ,
Original file line number Diff line number Diff line change @@ -9,7 +9,7 @@ export interface ItemProps<ItemType> {
99 renderItem ?: ( item : ItemType ) => React . ReactNode ;
1010 responsive ?: boolean ;
1111 itemKey ?: React . Key ;
12- registerSize : ( key : React . Key , width : number ) => void ;
12+ registerSize : ( key : React . Key , width : number | null ) => void ;
1313 children ?: React . ReactNode ;
1414 display : boolean ;
1515 order : number ;
@@ -32,13 +32,13 @@ export default function Item<ItemType>(props: ItemProps<ItemType>) {
3232 const mergedHidden = responsive && ! display ;
3333
3434 // ================================ Effect ================================
35- function internalRegisterSize ( width : number ) {
35+ function internalRegisterSize ( width : number | null ) {
3636 registerSize ( itemKey ! , width ) ;
3737 }
3838
3939 React . useEffect (
4040 ( ) => ( ) => {
41- internalRegisterSize ( 0 ) ;
41+ internalRegisterSize ( null ) ;
4242 } ,
4343 [ ] ,
4444 ) ;
Original file line number Diff line number Diff line change @@ -112,11 +112,11 @@ function Overflow<ItemType = any>(
112112 setContainerWidth ( element . clientWidth ) ;
113113 }
114114
115- function registerSize ( key : React . Key , width : number ) {
115+ function registerSize ( key : React . Key , width : number | null ) {
116116 setItemWidths ( ( origin ) => {
117117 const clone = new Map ( origin ) ;
118118
119- if ( ! width ) {
119+ if ( width === null ) {
120120 clone . delete ( key ) ;
121121 } else {
122122 clone . set ( key , width ) ;
@@ -125,8 +125,8 @@ function Overflow<ItemType = any>(
125125 } ) ;
126126 }
127127
128- function registerOverflowSize ( _ : React . Key , width : number ) {
129- setRestWidth ( width ) ;
128+ function registerOverflowSize ( _ : React . Key , width : number | null ) {
129+ setRestWidth ( width || 0 ) ;
130130 setPrevRestWidth ( restWidth ) ;
131131 }
132132
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) => {
1010Enzyme . configure ( { adapter : new Adapter ( ) } ) ;
1111
1212Object . 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 ) {
2114 act ( ( ) => {
22- const element = this . find ( 'CSSMotion' ) . getDOMNode ( ) ;
23- element . dispatchEvent ( motionEvent ) ;
24- this . update ( ) ;
15+ this . find ( 'ResizeObserver' ) . first ( ) . props ( ) . onResize ( { offsetWidth } ) ;
2516 } ) ;
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' ) ;
2833 } ,
2934} ) ;
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