All files / lib/dynamic-form-action dynamic-form-action.ts

100% Statements 30/30
90.9% Branches 10/11
100% Functions 23/23
100% Lines 30/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101                                          37x 37x                     37x     2x   2x   23x 7x   38x 4x   73x 4x 4x 4x     19x 19x       8x       8x       4x       19x       19x       19x       19x       19x 11x 11x         37x 37x 1x 1x   37x      
import { BehaviorSubject, Observable } from 'rxjs';
import { DynamicFormClassType } from '../dynamic-form-config/dynamic-form-class-type';
import { DynamicFormElement } from '../dynamic-form-element/dynamic-form-element';
import { assignExpressionData } from '../dynamic-form-expression/dynamic-form-expression-helpers';
import { DynamicForm } from '../dynamic-form/dynamic-form';
import { DynamicFormDefinition } from '../dynamic-form/dynamic-form-definition';
import { DynamicFormTemplate } from '../dynamic-form/dynamic-form-template';
import { DynamicFormBuilder } from '../dynamic-form/dynamic-form.builder';
import { DynamicFormActionDefinition } from './dynamic-form-action-definition';
import { DynamicFormActionExpressionData } from './dynamic-form-action-expression-data';
import { DynamicFormActionExpressions } from './dynamic-form-action-expressions';
import { DynamicFormActionTemplate } from './dynamic-form-action-template';
import { DynamicFormActionType } from './dynamic-form-action-type';
import { DynamicFormDialog } from './dynamic-form-dialog';
 
export class DynamicFormAction<
  Template extends DynamicFormActionTemplate = DynamicFormActionTemplate,
  Definition extends DynamicFormActionDefinition<Template> = DynamicFormActionDefinition<Template>,
  Type extends DynamicFormActionType = DynamicFormActionType
> extends DynamicFormElement<Template, Definition, undefined, DynamicFormActionExpressionData, DynamicFormActionExpressions, Type> {
 
  private readonly _dialogOpenSubject = new BehaviorSubject(false);
  private readonly _dialogOpenChanges = this._dialogOpenSubject.asObservable();
 
  protected _dialog: DynamicFormDialog;
 
  constructor(
    builder: DynamicFormBuilder,
    root: DynamicForm,
    parent: DynamicFormElement,
    definition: Definition,
    type: Type,
  ) {
    super(builder, root, parent, definition, type);
  }
 
  override get classType(): DynamicFormClassType { return 'action'; }
 
  get disabled(): boolean { return this.template.disabled; }
 
  get dialogOpen(): boolean { return this._dialogOpenSubject.value; }
  get dialogOpenChanges(): Observable<boolean> { return this._dialogOpenChanges; }
 
  get dialogDefinition(): DynamicFormDefinition { return this.definition.dialogDefinition; }
  get dialogTemplate(): DynamicFormTemplate { return this.dialogDefinition.template; }
 
  get dialog(): DynamicFormDialog { return this._dialog; }
  get dialogChildren(): DynamicFormElement[] { return this._dialog.children; }
  get dialogHeaderActions(): DynamicFormAction[] { return this._dialog.headerActions; }
  get dialogFooterActions(): DynamicFormAction[] { return this._dialog.footerActions; }
 
  override init(): void {
    super.init();
    this.initDialog();
  }
 
  openDialog(): void {
    return this.dialog && !this.dialogOpen && this._dialogOpenSubject.next(true);
  }
 
  closeDialog(): void {
    return this.dialog && this.dialogOpen && this._dialogOpenSubject.next(false);
  }
 
  toggleDialog(): void {
    return this.dialog && this._dialogOpenSubject.next(!this.dialogOpen);
  }
 
  protected getId(): string {
    return this._builder.getActionId(this);
  }
 
  protected override initId(): void {
    this.definition.id = this.getId();
  }
 
  protected override getExpressions(): DynamicFormActionExpressions {
    return this._builder.createActionExpressions(this);
  }
 
  protected override getChildren(): any[] {
    return undefined;
  }
 
  protected initDialog(): void {
    if (this.dialogDefinition) {
      this._dialog = new DynamicFormDialog(this._builder, this, this.dialogDefinition, {});
      this._dialog.init();
    }
  }
 
  protected override createExpressionData(): DynamicFormActionExpressionData {
    const expressionData = super.createExpressionData() as DynamicFormActionExpressionData;
    assignExpressionData(expressionData, {
      dialog: () => this.dialog ? this.dialog.expressionData : undefined,
      disabled: () => this.disabled,
    });
    return expressionData;
  }
}