Replace BlazeComponent mixins with standalone utility modules

Delete the old Mixins global and BlazeComponent-based InfiniteScrolling
mixin. Add standalone replacements:
- client/lib/infiniteScrolling.js: plain scroll-based pagination helper
- client/lib/currentCard.js: centralized current card resolution
- client/components/forms/datepicker.js: extracted date picker logic
This commit is contained in:
Harry Adel 2026-03-08 10:56:50 +02:00
parent 2848b1a38a
commit 3b6f6fa80a
5 changed files with 180 additions and 35 deletions

View file

@ -0,0 +1,47 @@
const PEAK_ANTICIPATION = 200;
/**
* Infinite scrolling utility to replace the BlazeComponent mixin.
*
* Usage in a Template:
* Template.myTemplate.onCreated(function () {
* this.infiniteScrolling = new InfiniteScrolling();
* });
*
* The scroll event must be wired in Template.events:
* 'scroll .my-container'(event, tpl) {
* tpl.infiniteScrolling.checkScrollPosition(event.currentTarget, () => {
* tpl.loadNextPage();
* });
* },
*
* Or for components that delegate to a child for loading:
* tpl.infiniteScrolling.checkScrollPosition(event.currentTarget, () => {
* activitiesComponent.loadNextPage();
* });
*/
export class InfiniteScrolling {
constructor() {
this._nextPeak = Infinity;
}
setNextPeak(v) {
this._nextPeak = v;
}
getNextPeak() {
return this._nextPeak;
}
resetNextPeak() {
this._nextPeak = Infinity;
}
checkScrollPosition(domElement, reachNextPeakCallback) {
let altitude = domElement.scrollTop + domElement.offsetHeight;
altitude += PEAK_ANTICIPATION;
if (altitude >= this._nextPeak) {
reachNextPeakCallback();
}
}
}