Browse Source

Fix virtual scroll.

pull/852/head
Sebastian 4 years ago
parent
commit
a8490e0439
  1. 21
      frontend/src/app/features/content/shared/forms/array-editor.component.html
  2. 12
      frontend/src/app/features/content/shared/forms/array-editor.component.ts
  3. 7
      frontend/src/app/features/content/shared/forms/array-item.component.ts

21
frontend/src/app/features/content/shared/forms/array-editor.component.html

@ -1,6 +1,6 @@
<ng-container *ngIf="formModel.itemChanges | async; let items"> <ng-container *ngIf="formModel.itemChanges | async; let items">
<div class="array-container" *ngIf="items.length > 0"> <div class="array-container" *ngIf="items.length > 0">
<div class="cdk-container" *ngIf="items.length <= 5;" <div class="cdk-container" *ngIf="items.length <= 20;"
cdkDropList cdkDropList
[cdkDropListDisabled]="false" [cdkDropListDisabled]="false"
[cdkDropListData]="items" [cdkDropListData]="items"
@ -10,6 +10,7 @@
cdkDragLockAxis="y"> cdkDragLockAxis="y">
<sqx-array-item <sqx-array-item
[canUnset]="canUnset" [canUnset]="canUnset"
(clone)="addCopy(itemForm)"
[form]="form" [form]="form"
[formContext]="formContext" [formContext]="formContext"
[formLevel]="formLevel + 1" [formLevel]="formLevel + 1"
@ -19,20 +20,20 @@
[isDisabled]="isDisabled | async" [isDisabled]="isDisabled | async"
[isFirst]="isFirst" [isFirst]="isFirst"
[isLast]="isLast" [isLast]="isLast"
[language]="language"
[languages]="languages"
(clone)="addCopy(itemForm)"
(itemRemove)="removeItem(i)" (itemRemove)="removeItem(i)"
(itemMove)="move(itemForm, $event)" > (itemMove)="move(itemForm, $event)"
[language]="language"
[languages]="languages">
<i cdkDragHandle class="icon-drag2"></i> <i cdkDragHandle class="icon-drag2"></i>
</sqx-array-item> </sqx-array-item>
</div> </div>
</div> </div>
<cdk-virtual-scroll-viewport autosize *ngIf="items.length > 5"> <cdk-virtual-scroll-viewport autosize *ngIf="items.length > 20" #viewport>
<div *cdkVirtualFor="let itemForm of items; index as i; last as isLast; first as isFirst" class="table-drag item"> <div *cdkVirtualFor="let itemForm of items; index as i; last as isLast; first as isFirst" class="table-drag item">
<sqx-array-item <sqx-array-item
[canUnset]="canUnset" [canUnset]="canUnset"
(clone)="addCopy(itemForm)"
[form]="form" [form]="form"
[formContext]="formContext" [formContext]="formContext"
[formLevel]="formLevel + 1" [formLevel]="formLevel + 1"
@ -42,11 +43,11 @@
[isDisabled]="isDisabled | async" [isDisabled]="isDisabled | async"
[isFirst]="isFirst" [isFirst]="isFirst"
[isLast]="isLast" [isLast]="isLast"
[language]="language" (itemExpanded)="onExpanded()"
[languages]="languages"
(clone)="addCopy(itemForm)"
(itemRemove)="removeItem(i)" (itemRemove)="removeItem(i)"
(itemMove)="move(itemForm, $event)" > (itemMove)="move(itemForm, $event)"
[language]="language"
[languages]="languages">
</sqx-array-item> </sqx-array-item>
</div> </div>
</cdk-virtual-scroll-viewport> </cdk-virtual-scroll-viewport>

12
frontend/src/app/features/content/shared/forms/array-editor.component.ts

@ -6,6 +6,7 @@
*/ */
import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { CdkDragDrop } from '@angular/cdk/drag-drop';
import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChildren } from '@angular/core'; import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChildren } from '@angular/core';
import { combineLatest, Observable } from 'rxjs'; import { combineLatest, Observable } from 'rxjs';
import { map } from 'rxjs/operators'; import { map } from 'rxjs/operators';
@ -43,6 +44,9 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
@ViewChildren(ArrayItemComponent) @ViewChildren(ArrayItemComponent)
public children!: QueryList<ArrayItemComponent>; public children!: QueryList<ArrayItemComponent>;
@ViewChildren(CdkVirtualScrollViewport)
public viewport?: QueryList<CdkVirtualScrollViewport>;
public isArray = false; public isArray = false;
public schemasDropdown = new ModalModel(); public schemasDropdown = new ModalModel();
@ -123,6 +127,10 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
this.reset(); this.reset();
} }
public onExpanded() {
this.viewport?.first?.checkViewportSize();
}
public collapseAll() { public collapseAll() {
this.children.forEach(child => { this.children.forEach(child => {
child.collapse(); child.collapse();
@ -131,6 +139,8 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
if (this.formLevel === 0) { if (this.formLevel === 0) {
this.localStore.setBoolean(this.expandedKey(), true); this.localStore.setBoolean(this.expandedKey(), true);
} }
this.onExpanded();
} }
public expandAll() { public expandAll() {
@ -141,6 +151,8 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
if (this.formLevel === 0) { if (this.formLevel === 0) {
this.localStore.setBoolean(this.expandedKey(), false); this.localStore.setBoolean(this.expandedKey(), false);
} }
this.onExpanded();
} }
private reset() { private reset() {

7
frontend/src/app/features/content/shared/forms/array-item.component.ts

@ -32,6 +32,9 @@ export class ArrayItemComponent extends StatefulComponent<State> implements OnCh
@Output() @Output()
public itemMove = new EventEmitter<number>(); public itemMove = new EventEmitter<number>();
@Output()
public itemExpanded = new EventEmitter<number>();
@Output() @Output()
public clone = new EventEmitter(); public clone = new EventEmitter();
@ -110,10 +113,14 @@ export class ArrayItemComponent extends StatefulComponent<State> implements OnCh
public collapse() { public collapse() {
this.next({ isExpanded: false }); this.next({ isExpanded: false });
this.itemExpanded.emit();
} }
public expand() { public expand() {
this.next({ isExpanded: true, isExpandedOnce: true }); this.next({ isExpanded: true, isExpandedOnce: true });
this.itemExpanded.emit();
} }
public moveTop() { public moveTop() {

Loading…
Cancel
Save