@@ -91,9 +91,7 @@ it("Doesn't call `onChange` when user changes a hue of a grayscale color", () =>
91
91
const { container } = render ( < HexColorPicker color = "#000" onChange = { handleChange } /> ) ;
92
92
const hue = container . querySelector ( ".react-colorful__hue .react-colorful__interactive" ) ;
93
93
94
- fireEvent . touchStart ( hue , {
95
- touches : [ { pageX : 0 , pageY : 0 } ] ,
96
- } ) ;
94
+ fireEvent . touchStart ( hue , { touches : [ { pageX : 0 , pageY : 0 } ] } ) ;
97
95
fireEvent . touchMove ( hue , { touches : [ { pageX : 100 , pageY : 0 } ] } ) ;
98
96
99
97
expect ( handleChange ) . not . toHaveBeenCalled ( ) ;
@@ -113,20 +111,51 @@ it("Triggers `onChange` after a mouse interaction", async () => {
113
111
} ) ;
114
112
115
113
it ( "Triggers `onChange` after a touch interaction" , async ( ) => {
116
- const handleChange = jest . fn ( ( hex ) => hex ) ;
114
+ const handleChange = jest . fn ( ( hsv ) => hsv ) ;
117
115
const initialValue = { h : 0 , s : 100 , v : 100 } ;
118
116
const result = render ( < HsvColorPicker color = { initialValue } onChange = { handleChange } /> ) ;
119
117
const hue = result . container . querySelector ( ".react-colorful__hue .react-colorful__interactive" ) ;
120
118
121
- fireEvent . touchStart ( hue , {
122
- changedTouches : [ { pageX : 0 , pageY : 0 } ] ,
123
- touches : [ { pageX : 0 , pageY : 0 , bubbles : true } ] ,
124
- } ) ;
119
+ fireEvent . touchStart ( hue , { touches : [ { pageX : 0 , pageY : 0 , bubbles : true } ] } ) ;
125
120
fireEvent . touchMove ( hue , { touches : [ { pageX : 55 , pageY : 0 , bubbles : true } ] } ) ;
126
121
127
122
expect ( handleChange ) . toHaveReturnedWith ( { h : 180 , s : 100 , v : 100 } ) ;
128
123
} ) ;
129
124
125
+ it ( "Supports multitouch" , async ( ) => {
126
+ const handleChange = jest . fn ( ( hsva ) => hsva ) ;
127
+ const initialValue = { h : 0 , s : 100 , v : 100 , a : 0 } ;
128
+ const result = render ( < HsvaColorPicker color = { initialValue } onChange = { handleChange } /> ) ;
129
+ const hue = result . container . querySelector ( ".react-colorful__hue .react-colorful__interactive" ) ;
130
+ const alpha = result . container . querySelector (
131
+ ".react-colorful__alpha .react-colorful__interactive"
132
+ ) ;
133
+
134
+ const firstFingerBefore = { pageX : 0 , pageY : 0 , identifier : 0 , bubbles : true } ;
135
+ const firstFingerAfter = { pageX : 55 , pageY : 0 , identifier : 0 , bubbles : true } ;
136
+
137
+ const secondFingerBefore = { pageX : 0 , pageY : 0 , identifier : 1 , bubbles : true } ;
138
+ const secondFingerAfter = { pageX : 200 , pageY : 0 , identifier : 1 , bubbles : true } ;
139
+
140
+ const extraTouch = { pageX : 10 , pageY : 10 , identifier : 2 , bubbles : true } ;
141
+
142
+ fireEvent . touchStart ( hue , {
143
+ changedTouches : [ firstFingerBefore ] ,
144
+ touches : [ firstFingerBefore ] ,
145
+ } ) ;
146
+
147
+ fireEvent . touchStart ( alpha , {
148
+ changedTouches : [ secondFingerBefore ] ,
149
+ touches : [ firstFingerBefore , secondFingerBefore ] ,
150
+ } ) ;
151
+
152
+ fireEvent . touchMove ( hue , { touches : [ firstFingerAfter , secondFingerAfter ] } ) ;
153
+ fireEvent . touchMove ( alpha , { touches : [ extraTouch ] } ) ; // test touch fallback
154
+ fireEvent . touchMove ( alpha , { touches : [ firstFingerAfter , secondFingerAfter ] } ) ;
155
+
156
+ expect ( handleChange ) . toHaveReturnedWith ( { h : 180 , s : 100 , v : 100 , a : 1 } ) ;
157
+ } ) ;
158
+
130
159
it ( "Pointer doesn't follow the mouse if it was released outside of the document bounds" , async ( ) => {
131
160
const handleChange = jest . fn ( ) ;
132
161
const result = render ( < RgbaColorPicker onChange = { handleChange } /> ) ;
@@ -166,10 +195,7 @@ it("Doesn't react on mouse events after a touch interaction", () => {
166
195
const result = render ( < HslStringColorPicker color = "hsl(100, 0%, 0%)" onChange = { handleChange } /> ) ;
167
196
const hue = result . container . querySelector ( ".react-colorful__hue .react-colorful__interactive" ) ;
168
197
169
- fireEvent . touchStart ( hue , {
170
- changedTouches : [ { pageX : 0 , pageY : 0 } ] ,
171
- touches : [ { pageX : 0 , pageY : 0 , bubbles : true } ] ,
172
- } ) ; // 1
198
+ fireEvent . touchStart ( hue , { touches : [ { pageX : 0 , pageY : 0 , bubbles : true } ] } ) ; // 1
173
199
fireEvent . touchMove ( hue , { touches : [ { pageX : 55 , pageY : 0 , bubbles : true } ] } ) ; // 2
174
200
175
201
// Should be skipped
0 commit comments