Skip to content

Commit 1532617

Browse files
authored
feat(scroll): upgrade scroll in to view if needed (#1200)
BREAKING CHANGE: Major version upgrade for scroll-into-view-if-needed.
1 parent 757d09e commit 1532617

File tree

5 files changed

+32
-27
lines changed

5 files changed

+32
-27
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@
242242
"sass-lint": "^1.12.1",
243243
"sass-loader": "^7.1.0",
244244
"sass-variable-parser": "^1.2.2",
245-
"scroll-into-view-if-needed": "^1.5.0",
245+
"scroll-into-view-if-needed": "^2.2.20",
246246
"semantic-release": "^16.0.0-beta.19",
247247
"sinon": "^2.3.7",
248248
"string-replace-loader": "^2.1.1",
@@ -289,7 +289,7 @@
289289
"react-textarea-autosize": "^7.1.0",
290290
"react-virtualized": "^9.21.0",
291291
"regenerator-runtime": "^0.13.2",
292-
"scroll-into-view-if-needed": "^1.5.0",
292+
"scroll-into-view-if-needed": "^2.2.20",
293293
"tabbable": "^1.1.2",
294294
"uuid": "^3.3.2"
295295
}

src/features/metadata-instance-editor/Instance.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import { FormattedMessage } from 'react-intl';
44
import classNames from 'classnames';
55
import isEqual from 'lodash/isEqual';
66
import cloneDeep from 'lodash/cloneDeep';
7-
import scrollIntoViewIfNeeded from 'scroll-into-view-if-needed';
87

98
import Collapsible from '../../components/collapsible/Collapsible';
109
import LoadingIndicatorWrapper from '../../components/loading-indicator/LoadingIndicatorWrapper';
@@ -14,6 +13,7 @@ import IconMetadataColored from '../../icons/general/IconMetadataColored';
1413
import IconAlertCircle from '../../icons/general/IconAlertCircle';
1514
import IconEdit from '../../icons/general/IconEdit';
1615
import { kingCrimson } from '../../styles/variables';
16+
import { scrollIntoView } from '../../utils/dom';
1717

1818
import CascadePolicy from './CascadePolicy';
1919
import TemplatedInstance from './TemplatedInstance';
@@ -134,10 +134,9 @@ class Instance extends React.PureComponent<Props, State> {
134134
componentDidUpdate() {
135135
const element = this.collapsibleRef.current;
136136
if (element && this.state.shouldConfirmRemove) {
137-
scrollIntoViewIfNeeded(element, false, {
138-
centerIfNeeded: false,
139-
duration: 320,
140-
easing: 'easeInOut',
137+
scrollIntoView(element, {
138+
block: 'start',
139+
behavior: 'smooth',
141140
});
142141
}
143142
}

src/utils/__tests__/dom-test.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,10 @@ describe('util/dom', () => {
4747
const itemEl = document.querySelector('.button');
4848
const parentEl = document.querySelector('.modal');
4949
scrollIntoView(itemEl);
50-
expect(scrollIntoViewIfNeeded).toHaveBeenCalledWith(itemEl, false, undefined, parentEl);
50+
expect(scrollIntoViewIfNeeded).toHaveBeenCalledWith(itemEl, {
51+
boundary: parentEl,
52+
scrollMode: 'if-needed',
53+
});
5154
});
5255

5356
test('should not call scrollIntoViewIfNeeded when parent element is evaluated as null', () => {

src/utils/dom.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,22 @@ export function focus(root: ?HTMLElement, selector?: string, focusRoot: boolean
106106
* Scrolls the container / modal / wrapper instead of the body
107107
*
108108
* @param {HTMLElement} itemEl - the base dom element to search
109+
* @param {Object} options - scroll into view options to override
109110
* @return {void}
110111
*/
111-
export function scrollIntoView(itemEl: ?HTMLElement): void {
112+
export function scrollIntoView(itemEl: ?HTMLElement, options?: Object = {}): void {
112113
// @NOTE: breaks encapsulation but alternative is unknown child ref
113114
if (itemEl) {
114115
const parentEl = itemEl.closest(`.body, .modal, .${OVERLAY_WRAPPER_CLASS}`);
115-
scrollIntoViewIfNeeded(itemEl, false, undefined, parentEl);
116+
scrollIntoViewIfNeeded(
117+
itemEl,
118+
Object.assign(
119+
{
120+
scrollMode: 'if-needed',
121+
boundary: parentEl,
122+
},
123+
options,
124+
),
125+
);
116126
}
117127
}

yarn.lock

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2242,13 +2242,6 @@ alphanum-sort@^1.0.0:
22422242
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
22432243
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
22442244

2245-
amator@1.0.1:
2246-
version "1.0.1"
2247-
resolved "https://registry.yarnpkg.com/amator/-/amator-1.0.1.tgz#0fd3663fef5f3334d088cf68a70ba74398aa0e26"
2248-
integrity sha1-D9NmP+9fMzTQiM9opwunQ5iqDiY=
2249-
dependencies:
2250-
bezier-easing "^2.0.3"
2251-
22522245
amdefine@>=0.0.4:
22532246
version "1.0.1"
22542247
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
@@ -3073,11 +3066,6 @@ before-after-hook@^1.2.0:
30733066
resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b"
30743067
integrity sha512-zyPgY5dgbf99c0uGUjhY4w+mxqEGxPKg9RQDl34VvrVh2bM31lFN+mwR1ZHepq/KA3VCPk1gwJZL6IIJqjLy2w==
30753068

3076-
bezier-easing@^2.0.3:
3077-
version "2.0.3"
3078-
resolved "https://registry.yarnpkg.com/bezier-easing/-/bezier-easing-2.0.3.tgz#cb493fddb7f8920ecca00973344ce0518885f17e"
3079-
integrity sha1-y0k/3bf4kg7MoAlzNEzgUYiF8X4=
3080-
30813069
bfj@^6.1.1:
30823070
version "6.1.1"
30833071
resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.1.tgz#05a3b7784fbd72cfa3c22e56002ef99336516c48"
@@ -4318,6 +4306,11 @@ compression@^1.5.2:
43184306
safe-buffer "5.1.2"
43194307
vary "~1.1.2"
43204308

4309+
compute-scroll-into-view@1.0.11:
4310+
version "1.0.11"
4311+
resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.11.tgz#7ff0a57f9aeda6314132d8994cce7aeca794fecf"
4312+
integrity sha512-uUnglJowSe0IPmWOdDtrlHXof5CTIJitfJEyITHBW6zDVOGu9Pjk5puaLM73SLcwak0L4hEjO7Td88/a6P5i7A==
4313+
43214314
concat-map@0.0.1:
43224315
version "0.0.1"
43234316
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -15186,12 +15179,12 @@ schema-utils@^1.0.0:
1518615179
ajv-errors "^1.0.0"
1518715180
ajv-keywords "^3.1.0"
1518815181

15189-
scroll-into-view-if-needed@^1.5.0:
15190-
version "1.5.0"
15191-
resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-1.5.0.tgz#39e8ce15cb74348a897ee96110e848fed50aaf95"
15192-
integrity sha512-6vTXm++xyIDkQ+O+gcmu9rp3NW61SWUdtIRhKh4uYuhcGZgClc1NJSz2C6HRNVIcL4VXIKAaOYq06cwK7Nx9Ag==
15182+
scroll-into-view-if-needed@^2.2.20:
15183+
version "2.2.20"
15184+
resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.20.tgz#3a46847a72233a3af9770e55df450f2a7f2e2a0e"
15185+
integrity sha512-P9kYMrhi9f6dvWwTGpO5I3HgjSU/8Mts7xL3lkoH5xlewK7O9Obdc5WmMCzppln7bCVGNmf3qfoZXrpCeyNJXw==
1519315186
dependencies:
15194-
amator "1.0.1"
15187+
compute-scroll-into-view "1.0.11"
1519515188

1519615189
scss-tokenizer@^0.2.3:
1519715190
version "0.2.3"

0 commit comments

Comments
 (0)