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">
<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
[cdkDropListDisabled]="false"
[cdkDropListData]="items"
@ -10,6 +10,7 @@
cdkDragLockAxis="y">
<sqx-array-item
[canUnset]="canUnset"
(clone)="addCopy(itemForm)"
[form]="form"
[formContext]="formContext"
[formLevel]="formLevel + 1"
@ -19,20 +20,20 @@
[isDisabled]="isDisabled | async"
[isFirst]="isFirst"
[isLast]="isLast"
[language]="language"
[languages]="languages"
(clone)="addCopy(itemForm)"
(itemRemove)="removeItem(i)"
(itemMove)="move(itemForm, $event)" >
(itemMove)="move(itemForm, $event)"
[language]="language"
[languages]="languages">
<i cdkDragHandle class="icon-drag2"></i>
</sqx-array-item>
</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">
<sqx-array-item
[canUnset]="canUnset"
(clone)="addCopy(itemForm)"
[form]="form"
[formContext]="formContext"
[formLevel]="formLevel + 1"
@ -42,11 +43,11 @@
[isDisabled]="isDisabled | async"
[isFirst]="isFirst"
[isLast]="isLast"
[language]="language"
[languages]="languages"
(clone)="addCopy(itemForm)"
(itemExpanded)="onExpanded()"
(itemRemove)="removeItem(i)"
(itemMove)="move(itemForm, $event)" >
(itemMove)="move(itemForm, $event)"
[language]="language"
[languages]="languages">
</sqx-array-item>
</div>
</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 { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, QueryList, SimpleChanges, ViewChildren } from '@angular/core';
import { combineLatest, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
@ -43,6 +44,9 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
@ViewChildren(ArrayItemComponent)
public children!: QueryList<ArrayItemComponent>;
@ViewChildren(CdkVirtualScrollViewport)
public viewport?: QueryList<CdkVirtualScrollViewport>;
public isArray = false;
public schemasDropdown = new ModalModel();
@ -123,6 +127,10 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
this.reset();
}
public onExpanded() {
this.viewport?.first?.checkViewportSize();
}
public collapseAll() {
this.children.forEach(child => {
child.collapse();
@ -131,6 +139,8 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
if (this.formLevel === 0) {
this.localStore.setBoolean(this.expandedKey(), true);
}
this.onExpanded();
}
public expandAll() {
@ -141,6 +151,8 @@ export class ArrayEditorComponent implements OnChanges, OnInit {
if (this.formLevel === 0) {
this.localStore.setBoolean(this.expandedKey(), false);
}
this.onExpanded();
}
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()
public itemMove = new EventEmitter<number>();
@Output()
public itemExpanded = new EventEmitter<number>();
@Output()
public clone = new EventEmitter();
@ -110,10 +113,14 @@ export class ArrayItemComponent extends StatefulComponent<State> implements OnCh
public collapse() {
this.next({ isExpanded: false });
this.itemExpanded.emit();
}
public expand() {
this.next({ isExpanded: true, isExpandedOnce: true });
this.itemExpanded.emit();
}
public moveTop() {

Loading…
Cancel
Save