diff --git a/.gitignore b/.gitignore index ef13c79..352c177 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,6 @@ # artifacts coverage/ public/ -pages/ # installs node_modules/ diff --git a/changelog.md b/changelog.md index 28ccc8b..a5dd719 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2025-06-26 - 1.0.101 - fix(wcc-dashboard) +Improve scroll listener management and add new test pages + +- Removed the pages/ directory entry from .gitignore to allow test pages to be tracked +- Added new test pages: page1 and pageLongScroll for enhanced scroll and navigation testing +- Refactored wcc-dashboard: changed scroll position properties to private variables and added a flag to prevent duplicate scroll listener attachment + ## 2025-06-26 - 1.0.100 - fix(wcc-dashboard) Prevent duplicate application of scroll positions in dashboard to avoid interfering with user scrolling diff --git a/test/pages/index.ts b/test/pages/index.ts new file mode 100644 index 0000000..d79a554 --- /dev/null +++ b/test/pages/index.ts @@ -0,0 +1,2 @@ +export * from './page1.js'; +export * from './pageLongScroll.js'; diff --git a/test/pages/page1.ts b/test/pages/page1.ts new file mode 100644 index 0000000..ed77b75 --- /dev/null +++ b/test/pages/page1.ts @@ -0,0 +1,3 @@ +import { html } from '@design.estate/dees-element'; + +export const page1 = () => html` `; diff --git a/test/pages/pageLongScroll.ts b/test/pages/pageLongScroll.ts new file mode 100644 index 0000000..30a69ae --- /dev/null +++ b/test/pages/pageLongScroll.ts @@ -0,0 +1,138 @@ +import { html } from '@design.estate/dees-element'; + +export const pageLongScroll = () => html` + + +
+

Long Scroll Test Page

+ +
+

Section 1: Introduction

+

This is a long page designed to test scroll position preservation. Scroll down to see more content and then reload the page to verify that the scroll position is restored correctly.

+

The URL should update with scroll position parameters as you scroll, and when you reload the page, it should automatically scroll to the last position.

+
+ +
+ Placeholder Content Block 1 +
+ +
+

Section 2: Testing Scroll Behavior

+

As you scroll through this page, the dashboard should track your scroll position and update the URL accordingly. The updates should be debounced to avoid excessive URL changes.

+

Try scrolling quickly and slowly to see how the debouncing works. The URL should update smoothly without interfering with your scrolling experience.

+
+ +
+ Placeholder Content Block 2 +
+ +
+

Section 3: Reload Testing

+

Once you've scrolled to this section, try reloading the page. The page should automatically scroll back to this position after the content loads.

+

This demonstrates that the scroll position is being preserved across page reloads using URL parameters.

+
+ +
+ Placeholder Content Block 3 +
+ +
+

Section 4: Navigation Testing

+

Try navigating to a different element or page in the sidebar, then use the browser's back button to return here. The scroll position should be preserved.

+

This tests that the browser history correctly maintains scroll state for each navigation entry.

+
+ +
+ Placeholder Content Block 4 +
+ +
+

Section 5: Deep Scroll Testing

+

Keep scrolling! This page has plenty of content to ensure we can test scroll positions at various depths.

+

The scroll tracking should work reliably regardless of how far down the page you scroll.

+
+ +
+ Placeholder Content Block 5 +
+ +
+

Section 6: Performance Testing

+

Even with continuous scroll tracking, the page should remain responsive and smooth. The debouncing mechanism ensures that URL updates don't impact scrolling performance.

+

Try scrolling rapidly up and down to verify that the scrolling remains smooth.

+
+ +
+ Placeholder Content Block 6 +
+ +
+

Section 7: Sidebar Scroll Testing

+

Don't forget to test the sidebar scrolling as well! If the sidebar has enough items to scroll, its position should also be tracked and restored.

+

Both the main content and sidebar scroll positions should be preserved independently.

+
+ +
+ Placeholder Content Block 7 +
+ +
+

Section 8: Edge Cases

+

This section tests edge cases like scrolling to the very bottom of the page, then reloading.

+

The scroll restoration should handle these cases gracefully without any visual glitches or errors.

+
+ +
+ Placeholder Content Block 8 +
+ +
+

Section 9: Final Section

+

You've reached the end of the scroll test page! Try reloading from here to ensure that even the bottom-most scroll positions are correctly preserved.

+

The scroll position tracking has been successfully implemented if you can reload and return to this exact position.

+
+
+`; \ No newline at end of file diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 94d0b56..782b736 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@design.estate/dees-wcctools', - version: '1.0.100', + version: '1.0.101', description: 'A set of web component tools for creating element catalogues, enabling the structured development and documentation of custom elements and pages.' } diff --git a/ts_web/elements/wcc-dashboard.ts b/ts_web/elements/wcc-dashboard.ts index 8c32a60..54a1abd 100644 --- a/ts_web/elements/wcc-dashboard.ts +++ b/ts_web/elements/wcc-dashboard.ts @@ -38,12 +38,8 @@ export class WccDashboard extends DeesElement { @property() public warning: string = null; - @property() - public frameScrollY: number = 0; - - @property() - public sidebarScrollY: number = 0; - + private frameScrollY: number = 0; + private sidebarScrollY: number = 0; private scrollPositionsApplied: boolean = false; @queryAsync('wcc-frame') @@ -222,8 +218,14 @@ export class WccDashboard extends DeesElement { } private scrollUpdateTimeout: NodeJS.Timeout; + private scrollListenersAttached: boolean = false; public async setupScrollListeners() { + // Prevent duplicate listeners + if (this.scrollListenersAttached) { + return; + } + const wccFrame = await this.wccFrame; const wccSidebar = this.shadowRoot.querySelector('wcc-sidebar'); @@ -233,6 +235,7 @@ export class WccDashboard extends DeesElement { this.frameScrollY = wccFrame.scrollTop; this.debouncedScrollUpdate(); }); + this.scrollListenersAttached = true; } if (wccSidebar) { diff --git a/ts_web/pages/index.ts b/ts_web/pages/index.ts new file mode 100644 index 0000000..7e3ab78 --- /dev/null +++ b/ts_web/pages/index.ts @@ -0,0 +1 @@ +export const page1 = null; \ No newline at end of file