RED-3687 - reverted table-content component updates
This commit is contained in:
parent
63616184b5
commit
f785646dbe
@ -1,20 +1,20 @@
|
|||||||
<div class="display-contents" *ngIf="componentContext$ | async as ctx">
|
<div class="display-contents">
|
||||||
<cdk-virtual-scroll-viewport
|
<cdk-virtual-scroll-viewport
|
||||||
[class.no-data]="ctx.noContent"
|
[class.no-data]="listingComponent.noContent$ | async"
|
||||||
[itemSize]="itemSize"
|
[itemSize]="itemSize"
|
||||||
[maxBufferPx]="3000"
|
[maxBufferPx]="3000"
|
||||||
[minBufferPx]="1000"
|
[minBufferPx]="1000"
|
||||||
id="virtual-scroll"
|
id="virtual-scroll"
|
||||||
iqserHasScrollbar
|
iqserHasScrollbar
|
||||||
>
|
>
|
||||||
<ng-container *cdkVirtualFor="let entity of ctx.sortedDisplayedEntities; trackBy: trackBy">
|
<ng-container *cdkVirtualFor="let entity of listingComponent.sortedDisplayedEntities$ | async; trackBy: trackBy">
|
||||||
<!-- mouseenter and mouseleave triggers change detection event if itemMouse functions are undefined -->
|
<!-- mouseenter and mouseleave triggers change detection event if itemMouse functions are undefined -->
|
||||||
<!-- this little hack below ensures that change detection won't be triggered if functions are undefined -->
|
<!-- this little hack below ensures that change detection won't be triggered if functions are undefined -->
|
||||||
<div
|
<div
|
||||||
(mouseenter)="itemMouseEnterFn && itemMouseEnterFn(entity)"
|
(mouseenter)="itemMouseEnterFn && itemMouseEnterFn(entity)"
|
||||||
(mouseleave)="itemMouseLeaveFn && itemMouseLeaveFn(entity)"
|
(mouseleave)="itemMouseLeaveFn && itemMouseLeaveFn(entity)"
|
||||||
*ngIf="itemMouseEnterFn || itemMouseLeaveFn; else withoutMouseEvents"
|
*ngIf="itemMouseEnterFn || itemMouseLeaveFn; else withoutMouseEvents"
|
||||||
[class.help-mode]="ctx.isHelpModeActive"
|
[class.help-mode]="helpModeService.isHelpModeActive$ | async"
|
||||||
[id]="'item-' + entity.id"
|
[id]="'item-' + entity.id"
|
||||||
[ngClass]="getTableItemClasses(entity)"
|
[ngClass]="getTableItemClasses(entity)"
|
||||||
[routerLink]="entity.routerLink"
|
[routerLink]="entity.routerLink"
|
||||||
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<ng-template #withoutMouseEvents>
|
<ng-template #withoutMouseEvents>
|
||||||
<div
|
<div
|
||||||
[class.help-mode]="ctx.isHelpModeActive"
|
[class.help-mode]="helpModeService.isHelpModeActive$ | async"
|
||||||
[id]="'item-' + entity.id"
|
[id]="'item-' + entity.id"
|
||||||
[ngClass]="getTableItemClasses(entity)"
|
[ngClass]="getTableItemClasses(entity)"
|
||||||
[routerLink]="entity.routerLink"
|
[routerLink]="entity.routerLink"
|
||||||
|
|||||||
@ -1,29 +1,20 @@
|
|||||||
/* eslint-disable @angular-eslint/prefer-on-push-component-change-detection */
|
/* eslint-disable @angular-eslint/prefer-on-push-component-change-detection */
|
||||||
import { AfterViewInit, Component, forwardRef, HostListener, Inject, Input, ViewChild } from '@angular/core';
|
import { AfterViewInit, Component, forwardRef, HostListener, Inject, Input, OnDestroy, ViewChild } from '@angular/core';
|
||||||
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
|
||||||
import { delay, tap } from 'rxjs/operators';
|
import { delay, tap } from 'rxjs/operators';
|
||||||
import { trackByFactory, ContextComponent } from '../../utils';
|
import { AutoUnsubscribe, trackByFactory } from '../../utils';
|
||||||
import { IListable } from '../models';
|
import { IListable } from '../models';
|
||||||
import { ListingComponent, ListingService } from '../index';
|
import { ListingComponent, ListingService } from '../index';
|
||||||
import { HasScrollbarDirective } from '../../scrollbar';
|
import { HasScrollbarDirective } from '../../scrollbar';
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
import { HelpModeService } from '../../help-mode';
|
import { HelpModeService } from '../../help-mode';
|
||||||
|
|
||||||
interface TableContentTemplate {
|
|
||||||
checkViewportSize: () => void,
|
|
||||||
lastScrolledIndex: number,
|
|
||||||
hasScrollbarDirective: () => void,
|
|
||||||
noContent: boolean,
|
|
||||||
sortedDisplayedEntities: any[],
|
|
||||||
isHelpModeActive: boolean,
|
|
||||||
}
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'iqser-table-content',
|
selector: 'iqser-table-content',
|
||||||
templateUrl: './table-content.component.html',
|
templateUrl: './table-content.component.html',
|
||||||
styleUrls: ['./table-content.component.scss'],
|
styleUrls: ['./table-content.component.scss'],
|
||||||
})
|
})
|
||||||
export class TableContentComponent<T extends IListable> extends ContextComponent<TableContentTemplate> implements AfterViewInit {
|
export class TableContentComponent<T extends IListable> extends AutoUnsubscribe implements OnDestroy, AfterViewInit {
|
||||||
@Input() itemSize!: number;
|
@Input() itemSize!: number;
|
||||||
@Input() itemMouseEnterFn?: (entity: T) => void;
|
@Input() itemMouseEnterFn?: (entity: T) => void;
|
||||||
@Input() itemMouseLeaveFn?: (entity: T) => void;
|
@Input() itemMouseLeaveFn?: (entity: T) => void;
|
||||||
@ -37,18 +28,17 @@ export class TableContentComponent<T extends IListable> extends ContextComponent
|
|||||||
private _lastScrolledIndex = 0;
|
private _lastScrolledIndex = 0;
|
||||||
private _multiSelectActive$ = new BehaviorSubject(false);
|
private _multiSelectActive$ = new BehaviorSubject(false);
|
||||||
|
|
||||||
readonly #checkViewportSize$ = this.listingComponent.noContent$.pipe(tap(() => {
|
|
||||||
setTimeout(() => {
|
|
||||||
this.scrollViewport?.checkViewportSize();
|
|
||||||
}, 0);
|
|
||||||
}));
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(forwardRef(() => ListingComponent)) readonly listingComponent: ListingComponent<T>,
|
@Inject(forwardRef(() => ListingComponent)) readonly listingComponent: ListingComponent<T>,
|
||||||
readonly listingService: ListingService<T>,
|
readonly listingService: ListingService<T>,
|
||||||
readonly helpModeService: HelpModeService,
|
readonly helpModeService: HelpModeService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
|
this.addSubscription = this.listingComponent.noContent$.subscribe(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.scrollViewport?.checkViewportSize();
|
||||||
|
}, 0);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
multiSelect(entity: T, $event: MouseEvent): void {
|
multiSelect(entity: T, $event: MouseEvent): void {
|
||||||
@ -59,21 +49,13 @@ export class TableContentComponent<T extends IListable> extends ContextComponent
|
|||||||
}
|
}
|
||||||
|
|
||||||
ngAfterViewInit(): void {
|
ngAfterViewInit(): void {
|
||||||
const lastScrolledIndex$ = this.scrollViewport.scrolledIndexChange.pipe(tap(index => (this._lastScrolledIndex = index)))
|
this.addSubscription = this.scrollViewport.scrolledIndexChange.pipe(tap(index => (this._lastScrolledIndex = index))).subscribe();
|
||||||
const hasScrollbarDirective$ = this.listingService.displayedLength$
|
this.addSubscription = this.listingService.displayedLength$
|
||||||
.pipe(
|
.pipe(
|
||||||
delay(100),
|
delay(100),
|
||||||
tap(() => this.hasScrollbarDirective.process()),
|
tap(() => this.hasScrollbarDirective.process()),
|
||||||
)
|
)
|
||||||
|
.subscribe();
|
||||||
super._initContext({
|
|
||||||
checkViewportSize: this.#checkViewportSize$,
|
|
||||||
lastScrolledIndex: lastScrolledIndex$,
|
|
||||||
hasScrollbarDirective: hasScrollbarDirective$,
|
|
||||||
noContent: this.listingComponent.noContent$,
|
|
||||||
sortedDisplayedEntities: this.listingComponent.sortedDisplayedEntities$,
|
|
||||||
isHelpModeActive: this.helpModeService.isHelpModeActive$,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollToLastIndex(): void {
|
scrollToLastIndex(): void {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user