1 | import { storageAvailable } from './dom-utils';
|
2 | const createScrollHistory = (win, applicationScrollKey = 'scrollPositions') => {
|
3 | let scrollPositions = new Map();
|
4 | const set = (key, value) => {
|
5 | scrollPositions.set(key, value);
|
6 | if (storageAvailable(win, 'sessionStorage')) {
|
7 | const arrayData = [];
|
8 | scrollPositions.forEach((value, key) => {
|
9 | arrayData.push([key, value]);
|
10 | });
|
11 | win.sessionStorage.setItem('scrollPositions', JSON.stringify(arrayData));
|
12 | }
|
13 | };
|
14 | const get = (key) => {
|
15 | return scrollPositions.get(key);
|
16 | };
|
17 | const has = (key) => {
|
18 | return scrollPositions.has(key);
|
19 | };
|
20 | const capture = (key) => {
|
21 | set(key, [win.scrollX, win.scrollY]);
|
22 | };
|
23 | if (storageAvailable(win, 'sessionStorage')) {
|
24 | const scrollData = win.sessionStorage.getItem(applicationScrollKey);
|
25 | scrollPositions = scrollData ?
|
26 | new Map(JSON.parse(scrollData)) :
|
27 | scrollPositions;
|
28 | }
|
29 | if ('scrollRestoration' in win.history) {
|
30 | history.scrollRestoration = 'manual';
|
31 | }
|
32 | return {
|
33 | set,
|
34 | get,
|
35 | has,
|
36 | capture
|
37 | };
|
38 | };
|
39 | export default createScrollHistory;
|