Skip to content

Commit

Permalink
Merge pull request #220 from CBIIT/amattu2/CRDCDH-619-V2
Browse files Browse the repository at this point in the history
CRDCDH-619 Sync sessionStorage data between tabs
  • Loading branch information
mtangmt authored Nov 22, 2023
2 parents e7b8e53 + 829ff79 commit 9a95c8d
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 2 deletions.
2 changes: 1 addition & 1 deletion .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module.exports = {
}
},
root: true,
ignorePatterns: ["injectEnv.js"],
ignorePatterns: ["public/injectEnv.js", "public/js/session.js"],
rules: {
// Note: you must disable the base rule as it can report incorrect errors
"react/jsx-filename-extension": [1, { extensions: [".js", ".jsx", ".tsx", ".ts"] }],
Expand Down
1 change: 1 addition & 0 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,5 @@
-->
</body>
<script src="%PUBLIC_URL%/injectEnv.js"></script>
<script src="%PUBLIC_URL%/js/session.js"></script>
</html>
1 change: 0 additions & 1 deletion public/injectEnv.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
/* eslint-disable */
window.injectedEnv = {
NIH_AUTHORIZE_URL: '',
NIH_CLIENT_ID: '',
Expand Down
34 changes: 34 additions & 0 deletions public/js/session.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const sessionStorageTransfer = (event) => {
let $event = event;
if (!$event) {
$event = window.event;
} // ie suq
if (!$event.newValue) return; // do nothing if no value to work with
if ($event.key === 'getSessionStorage') {
// another tab asked for the sessionStorage -> send it
localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));
// the other tab should now have it, so we're done with it.
localStorage.removeItem('sessionStorage'); // <- could do short timeout as well.
} else if ($event.key === 'sessionStorage' && !sessionStorage.length) {
// another tab sent data <- get it
const data = JSON.parse($event.newValue);
Object.keys(data).forEach((key) => {
sessionStorage.setItem(key, data[key]);
});
} else if ($event.key === 'logout') {
sessionStorage.clear();
}
};

// listen for changes to localStorage
if (window.addEventListener) {
window.addEventListener('storage', sessionStorageTransfer, false);
} else {
window.addEventListener('onstorage', sessionStorageTransfer);
}

// Ask other tabs for session storage (this is ONLY to trigger 'storage' event)
if (!sessionStorage.length) {
localStorage.setItem('getSessionStorage', 'true');
localStorage.removeItem('getSessionStorage');
}

0 comments on commit 9a95c8d

Please sign in to comment.