fixed scrolling conflict on description editor

This commit is contained in:
Sofia Papacharalampous 2024-05-20 17:55:33 +03:00
parent 9e7559b078
commit df0f5c7a87
4 changed files with 47 additions and 7 deletions

View File

@ -9,7 +9,7 @@
<ng-container >
<span class="table-entry"
(click)="toggleExpand(idx);navigateToFieldSet(entry, $event); onEntrySelected(entry)"
(click)="onScrollStarted(entry); toggleExpand(idx);navigateToFieldSet(entry, $event); onEntrySelected(entry);"
[ngStyle]="calculateStyle(entry)"
[ngClass]="calculateClass(entry)"
>
@ -41,6 +41,8 @@
[propertiesFormGroup]="propertiesFormGroup"
[parentId]="entry.id"
[parentMap]="updatedMap"
(scrollFinished)="onScrollFinished($event)"
(scrollStarted)="onScrollStarted($event)"
>
</table-of-contents-internal>

View File

@ -19,6 +19,8 @@ export class TableOfContentsInternal implements OnInit, OnDestroy {
@Input() selected: ToCEntry = null;
// @Input() visibilityRules:Rule[] = [];
@Output() entrySelected = new EventEmitter<ToCEntry>();
@Output() scrollStarted = new EventEmitter<ToCEntry>();
@Output() scrollFinished = new EventEmitter<ToCEntry>();
@Input() propertiesFormGroup: UntypedFormGroup;
expandChildren: boolean[];
@ -162,18 +164,28 @@ export class TableOfContentsInternal implements OnInit, OnDestroy {
const element = document.getElementById(fieldSetId);
if (element) {
element.scrollIntoView({ behavior: 'smooth' });
// element.focus({preventScroll: true});
setTimeout(() => {
this.scrollFinished.emit(entry);
}, 1000);
}
}, 300);
}
}
}
onEntrySelected(entry: ToCEntry) {
this.entrySelected.emit(entry);
}
onScrollStarted(entry: ToCEntry) {
this.scrollStarted.emit(entry);
}
onScrollFinished(entry: ToCEntry) {
this.scrollFinished.emit(entry);
}
calculateStyle(entry: ToCEntry) {
const style = {};

View File

@ -17,6 +17,8 @@
[visibilityRulesService]="visibilityRulesService"
[propertiesFormGroup]="formGroup"
[parentMap]="pageToFieldSetMap"
(scrollFinished)="onScrollFinished($event)"
(scrollStarted)="onScrollStarted($event)"
>
</table-of-contents-internal>

View File

@ -55,6 +55,7 @@ export class TableOfContentsComponent extends BaseComponent implements OnInit, O
private _tocentrySelected: ToCEntry = null;
private isSelecting: boolean = false;
private isScrolling: boolean = false;
private _intersectionObserver: IntersectionObserver;
private _actOnObservation: boolean = true;
public hiddenEntries: string[] = [];
@ -219,15 +220,30 @@ export class TableOfContentsComponent extends BaseComponent implements OnInit, O
}
entries.forEach(ie => {
if (this.isScrolling) return;
if (ie.isIntersecting) {
try {
const target_id = ie.target.id;
if (this.visibilityRulesService.isVisibleMap[target_id] ?? true) {
this.onToCentrySelected(this._findTocEntryById(target_id, this.tocentries));
if(!this.isScrolling) {
const target_id = ie.target.id;
if (this.visibilityRulesService.isVisibleMap[target_id] ?? true) {
this.onToCentrySelected(this._findTocEntryById(target_id, this.tocentries));
}
}
} catch {
}
// setTimeout(() => {
// try {
// if(!this.isSelecting) {
// const target_id = ie.target.id;
// if (this.visibilityRulesService.isVisibleMap[target_id] ?? true) {
// this.onToCentrySelected(this._findTocEntryById(target_id, this.tocentries));
// }
// }
// } catch {
// }
// }, 1000)
}
})
}, options);
@ -428,6 +444,14 @@ export class TableOfContentsComponent extends BaseComponent implements OnInit, O
}
}
onScrollStarted(entry: ToCEntry) {
this.isScrolling = true;
}
onScrollFinished(entry: ToCEntry) {
this.isScrolling = false;
}
private _findTocEntryById(id: string, tocentries: ToCEntry[]): ToCEntry {
if (!tocentries || !tocentries.length) {
return null;