From c594dff9413a18615be661edb271b343aeeb69a0 Mon Sep 17 00:00:00 2001 From: Sarah Edwards Date: Tue, 15 Jun 2021 15:44:02 -0700 Subject: [PATCH] fix ts bug (#19945) --- javascripts/display-tool-specific-content.ts | 8 ++++++-- javascripts/scroll-anchoring.d.ts | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 javascripts/scroll-anchoring.d.ts diff --git a/javascripts/display-tool-specific-content.ts b/javascripts/display-tool-specific-content.ts index 7f69193dd5..92c8fb1a2e 100644 --- a/javascripts/display-tool-specific-content.ts +++ b/javascripts/display-tool-specific-content.ts @@ -1,4 +1,5 @@ import Cookies from 'js-cookie' +import { preserveAnchorNodePosition } from 'scroll-anchoring' import { sendEvent, EventType } from './events' @@ -29,7 +30,9 @@ export default function displayToolSpecificContent() { event.preventDefault() const target = event.target as HTMLElement highlightTabForTool(target.dataset.tool || '') - showToolSpecificContent(target.dataset.tool || '', toolElements) + preserveAnchorNodePosition(document, () => { + showToolSpecificContent(target.dataset.tool || '', toolElements) + }) // Save this preference as a cookie. Cookies.set('toolPreferred', target.dataset.tool || '', { sameSite: 'strict', secure: true }) @@ -76,7 +79,8 @@ function getDefaultTool(detectedTools: Array): string { // If there is a default tool and the tool is present on this page const defaultToolEl = document.querySelector('[data-default-tool]') as HTMLElement - const defaultToolValue = defaultToolEl.dataset.defaultTool + + const defaultToolValue = defaultToolEl ? defaultToolEl.dataset.defaultTool : '' if (defaultToolValue && detectedTools.includes(defaultToolValue)) { return defaultToolValue } diff --git a/javascripts/scroll-anchoring.d.ts b/javascripts/scroll-anchoring.d.ts new file mode 100644 index 0000000000..8ec46667fe --- /dev/null +++ b/javascripts/scroll-anchoring.d.ts @@ -0,0 +1,5 @@ +declare module 'scroll-anchoring' { + export function findAnchorNode(document: Document): Node | undefined + export function preserveAnchorNodePosition(document: Document, callback: () => Promise | T): Promise + export function preservePosition(anchorNode: Node, callback: () => Promise | T): Promise +}