Skip to content

Commit

Permalink
chore: use framework's debounce method
Browse files Browse the repository at this point in the history
  • Loading branch information
dobrinyonkov committed Feb 5, 2024
1 parent cfbd2c9 commit 66a3441
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 67 deletions.
74 changes: 28 additions & 46 deletions packages/fiori/src/DynamicPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import announce from "@ui5/webcomponents-base/dist/util/InvisibleMessage.js";
import InvisibleMessageMode from "@ui5/webcomponents-base/dist/types/InvisibleMessageMode.js";
import { getI18nBundle } from "@ui5/webcomponents-base/dist/i18nBundle.js";
import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js";
import type { Timeout } from "@ui5/webcomponents-base/dist/types.js";

import debounce from "@ui5/webcomponents-base/dist/util/debounce.js";

// Template
import DynamicPageTemplate from "./generated/templates/DynamicPageTemplate.lit.js";
Expand All @@ -29,7 +30,7 @@ import {
DYNAMIC_PAGE_ARIA_LABEL_SNAPPED_HEADER,
} from "./generated/i18n/i18n-defaults.js";

const SCROLL_DEBOUNCE_RATE = 0; // ms
const SCROLL_DEBOUNCE_RATE = 25; // ms

/**
* @class
Expand Down Expand Up @@ -186,9 +187,7 @@ class DynamicPage extends UI5Element {
@slot({ type: HTMLElement })
footer!: HTMLElement[];

isExpanding = false;
iPreviousScrollAmount = 0;
_debounceInterval?: Timeout | null;
skipSnapOnScroll = false;
showHeaderInStickArea = false;
_updateMediaRange: ResizeObserverCallback;

Expand Down Expand Up @@ -275,36 +274,29 @@ class DynamicPage extends UI5Element {
}

snapOnScroll() {
this._debounce(() => {
if (!this.dynamicPageTitle || !this.dynamicPageHeader) {
return;
}

const scrollTop = this.scrollContainer!.scrollTop;

if (this.iPreviousScrollAmount === scrollTop) {
return;
}

this.iPreviousScrollAmount = scrollTop;

if (this.headerPinned) {
return;
}

if (this.isExpanding) {
this.isExpanding = false;
return;
}

if (scrollTop > this.dynamicPageHeader.getBoundingClientRect().height) {
this.headerSnapped = true;
this.showHeaderInStickArea = false;
} else {
this.headerSnapped = false;
}
this.dynamicPageTitle.snapped = this.headerSnapped;
}, SCROLL_DEBOUNCE_RATE);
debounce(() => this.snapTitleByScroll(), SCROLL_DEBOUNCE_RATE);
}

snapTitleByScroll() {
if (!this.dynamicPageTitle || !this.dynamicPageHeader || this.headerPinned) {
return;
}

const scrollTop = this.scrollContainer!.scrollTop;

if (this.skipSnapOnScroll) {
this.skipSnapOnScroll = false;
return;
}

if (scrollTop > this.dynamicPageHeader.getBoundingClientRect().height) {
this.headerSnapped = true;
this.showHeaderInStickArea = false;
} else {
this.headerSnapped = false;
}

this.dynamicPageTitle.snapped = this.headerSnapped;
}

async onExpandClick() {
Expand All @@ -330,20 +322,10 @@ class DynamicPage extends UI5Element {
this.showHeaderInStickArea = !this.showHeaderInStickArea;
this.headerSnapped = !this.headerSnapped;

this.isExpanding = true;
this.skipSnapOnScroll = true;
this.headerPinned = false;
}

///

_debounce(fn: () => void, delay: number) {
clearTimeout(this._debounceInterval!);
this._debounceInterval = setTimeout(() => {
this._debounceInterval = null;
fn();
}, delay);
}

updateMediaRange() {
this.mediaRange = MediaRange.getCurrentRange(MediaRange.RANGESETS.RANGE_4STEPS, this.getDomRef()!.offsetWidth);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/fiori/src/DynamicPageHeaderActions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class DynamicPageHeaderActions extends UI5Element {
* @default {}
*/
@property({ type: Object })
accessibilityAttributes!: {controls: string};
accessibilityAttributes!: { controls: string };

get classes() {
return {
Expand Down
12 changes: 4 additions & 8 deletions packages/fiori/src/DynamicPageTitle.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,18 @@
role="button"
aria-expanded="{{_headerExpanded}}"
aria-labelledby="{{_ariaLabelledBy}}"
aria-describedby="toggle-description">
aria-describedby="{{_id}}-toggle-description">
</span>
<div class="{{classes.topArea}}">
{{#if hasBreadcrumb}}
<div class="{{classes.breadcrumbs}}">
<slot name="breadcrumbs"></slot>
</div>
{{/if}}
<slot name="breadcrumbs"></slot>

{{#if mobileNavigationActions}}
<slot name="navigationActions"></slot>
{{/if}}
</div>

<div class="{{classes.wrapper}}"
@ui5-_min-content-width-change={{onMinContentWidthChange}}>
@ui5-_min-content-width-change={{onMinContentWidthChange}}>
<div id="{{_id}}-heading" class="{{classes.heading}}">
<slot name="{{headingSlotName}}"></slot>
</div>
Expand All @@ -47,5 +43,5 @@
</div>

<slot name="{{contentSlotName}}"></slot>
<span id="toggle-description" class="ui5-hidden-text">{{_ariaDescribedbyText}}</span>
<span id="{{_id}}-toggle-description" class="ui5-hidden-text">{{_ariaDescribedbyText}}</span>
</div>
10 changes: 2 additions & 8 deletions packages/fiori/src/DynamicPageTitle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import type { ResizeObserverCallback } from "@ui5/webcomponents-base/dist/delega
import { isEnter, isSpace } from "@ui5/webcomponents-base/dist/Keys.js";
import type Toolbar from "@ui5/webcomponents/dist/Toolbar.js";
import type { ToolbarMinWidthChangeEventDetail } from "@ui5/webcomponents/dist/Toolbar.js";
import ToolbarItemOverflowBehavior from "@ui5/webcomponents/dist/types/ToolbarItemOverflowBehavior.js";

// Template
import DynamicPageTitleTemplate from "./generated/templates/DynamicPageTitleTemplate.lit.js";
Expand Down Expand Up @@ -174,10 +175,6 @@ class DynamicPageTitle extends UI5Element {
this._handleResize = this.handleResize.bind(this);
}

get hasBreadcrumb() {
return !!this.breadcrumbs.length;
}

get hasContent() {
return !!this.content.length;
}
Expand Down Expand Up @@ -226,9 +223,6 @@ class DynamicPageTitle extends UI5Element {
topArea: {
"ui5-dynamic-page-title--top-area": true,
},
breadcrumbs: {
"ui5-dynamic-page-title--breadcrumbs": true,
},
wrapper: {
"ui5-dynamic-page-title--wrapper": true,
},
Expand Down Expand Up @@ -277,7 +271,7 @@ class DynamicPageTitle extends UI5Element {
return;
}
navigationActions.items.forEach(action => {
action.overflowPriority = "NeverOverflow";
action.overflowPriority = ToolbarItemOverflowBehavior.NeverOverflow;
});
}

Expand Down
4 changes: 0 additions & 4 deletions packages/fiori/src/themes/DynamicPageTitle.css
Original file line number Diff line number Diff line change
Expand Up @@ -129,10 +129,6 @@
align-items: center;
}

.ui5-dynamic-page-title--breadcrumbs {
width: 100%;
}

/* focus */
:host([focused]) {
/* separate change adds proper parameters */
Expand Down

0 comments on commit 66a3441

Please sign in to comment.