Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix scrolling issues #3633

Closed
wants to merge 33 commits into from
Closed
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
7ab6de0
simplify code
vadimka123 Dec 4, 2018
3e1bb36
fix isValidNewOption when value is null
vadimka123 Dec 4, 2018
71b8a37
big perfomance issue: buildMenuOptions only when menu is opened
vadimka123 Dec 4, 2018
57396de
update part of tests
vadimka123 Dec 4, 2018
3e326c8
fix duplicate declaration
vadimka123 Dec 4, 2018
a482a6d
Option component optimization
vadimka123 Dec 4, 2018
a1eb8b7
update tests for latest changes
vadimka123 Dec 4, 2018
802817c
fix warnings
vadimka123 Dec 4, 2018
e7de150
hotfix for check (see https://github.com/prettier/prettier/issues/187)
vadimka123 Dec 4, 2018
843a6b5
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Jan 8, 2019
0cb46a7
Fix for working with React-DND
vadimka123 Jan 8, 2019
b98aef2
update tests
vadimka123 Jan 9, 2019
ba5b373
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Jan 18, 2019
9d0655a
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Feb 4, 2019
d3c17e7
small update
vadimka123 Feb 4, 2019
cba1b68
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Feb 15, 2019
b2244ba
cleanup not need
vadimka123 Feb 22, 2019
e4f0a9c
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Feb 22, 2019
7944636
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Mar 28, 2019
21b0f66
small cleanup
vadimka123 Mar 28, 2019
db66882
Merge branch 'master' of github.com:JedWatson/react-select
vadimka123 Jun 18, 2019
9da7179
t
vadimka123 Jun 18, 2019
8cc8868
fix scrolling issues
vadimka123 Jun 18, 2019
5b9ee1e
Merge branch 'master' of github.com:vadimka123/react-select into fix-…
vadimka123 Sep 3, 2019
02cacfd
Revert "Merge branch 'master' of github.com:vadimka123/react-select i…
vadimka123 Sep 3, 2019
7742237
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Sep 3, 2019
ed124fa
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Oct 8, 2019
ad96cf5
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Mar 27, 2020
b3e30e9
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Jun 16, 2020
c94f1d4
small fix
vadimka123 Sep 23, 2020
479676a
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Sep 23, 2020
29c5743
Missing semicolon semi
vadimka123 Oct 7, 2020
ff36fb4
Merge branch 'master' of github.com:JedWatson/react-select into fix-s…
vadimka123 Dec 28, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions packages/react-select/src/internal/ScrollCaptor.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,23 @@ export type CaptorProps = {
class ScrollCaptor extends Component<CaptorProps> {
isBottom: boolean = false;
isTop: boolean = false;
isListened: boolean = false;
scrollTarget: HTMLElement;
touchStart: number;
mouseStart: number;

componentDidMount() {
this.startListening(this.scrollTarget);
}
componentDidUpdate() {
if (!this.scrollTarget) return;

if (!this.isListened && (this.scrollTarget.scrollHeight > this.scrollTarget.clientHeight)) {
this.startListening(this.scrollTarget);
} else if (this.isListened && (this.scrollTarget.scrollHeight <= this.scrollTarget.clientHeight)) {
this.stopListening(this.scrollTarget);
}
};
componentWillUnmount() {
this.stopListening(this.scrollTarget);
}
Expand All @@ -32,12 +43,20 @@ class ScrollCaptor extends Component<CaptorProps> {
if (typeof el.addEventListener === 'function') {
el.addEventListener('wheel', this.onWheel, false);
}
if (typeof el.addEventListener === 'function') {
el.addEventListener('mousedown', this.onMouseDown, false);
}
if (typeof el.addEventListener === 'function') {
el.addEventListener('mouseup', this.onMouseUp, false);
}
if (typeof el.addEventListener === 'function') {
el.addEventListener('touchstart', this.onTouchStart, false);
}
if (typeof el.addEventListener === 'function') {
el.addEventListener('touchmove', this.onTouchMove, false);
}

this.isListened = true;
}
stopListening(el: HTMLElement) {
if (!el) return;
Expand All @@ -46,12 +65,20 @@ class ScrollCaptor extends Component<CaptorProps> {
if (typeof el.removeEventListener === 'function') {
el.removeEventListener('wheel', this.onWheel, false);
}
if (typeof el.removeEventListener === 'function') {
el.removeEventListener('mousedown', this.onMouseDown, false);
}
if (typeof el.removeEventListener === 'function') {
el.removeEventListener('mouseup', this.onMouseUp, false);
}
if (typeof el.removeEventListener === 'function') {
el.removeEventListener('touchstart', this.onTouchStart, false);
}
if (typeof el.removeEventListener === 'function') {
el.removeEventListener('touchmove', this.onTouchMove, false);
}

this.isListened = false;
}

cancelScroll = (event: SyntheticEvent<HTMLElement>) => {
Expand Down Expand Up @@ -109,6 +136,15 @@ class ScrollCaptor extends Component<CaptorProps> {
onWheel = (event: SyntheticWheelEvent<HTMLElement>) => {
this.handleEventDelta(event, event.deltaY);
};
onMouseDown = (event: SyntheticMouseEvent<HTMLElement>) => {
// set mouse start so we can calculate mousemove delta
this.mouseStart = event.clientY;
this.handleEventDelta(event, 1);
};
onMouseUp = (event: SyntheticMouseEvent<HTMLElement>) => {
const deltaY = event.clientY - this.mouseStart;
this.handleEventDelta(event, deltaY);
};
onTouchStart = (event: SyntheticTouchEvent<HTMLElement>) => {
// set touch start so we can calculate touchmove delta
this.touchStart = event.changedTouches[0].clientY;
Expand Down