All files / lib/dynamic-form-input/dynamic-form-file dynamic-form-file-base.ts

100% Statements 14/14
100% Branches 4/4
100% Functions 6/6
100% Lines 13/13

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                          1x               8x                 8x 1x 4x     8x 8x       8x       8x 8x       8x     8x 8x      
import { Directive, OnInit, ViewChild } from '@angular/core';
import { DynamicFormAction } from '../../dynamic-form-action/dynamic-form-action';
import { DynamicFormActionDefinition } from '../../dynamic-form-action/dynamic-form-action-definition';
import { DynamicFormActionTemplate } from '../../dynamic-form-action/dynamic-form-action-template';
import { DynamicFormIconDefinition } from '../../dynamic-form-action/dynamic-form-icon/dynamic-form-icon-definition';
import { DynamicFormValidationService } from '../../dynamic-form-validation/dynamic-form-validation.service';
import { mergeObject } from '../../dynamic-form/dynamic-form-helpers';
import { DynamicFormBuilder } from '../../dynamic-form/dynamic-form.builder';
import { DynamicFormInputBase } from '../dynamic-form-input-base';
import { DynamicFormFile, DynamicFormFileDefinition, DynamicFormFileTemplate } from './dynamic-form-file';
import { DynamicFormFileDirective } from './dynamic-form-file.directive';
 
@Directive()
export abstract class DynamicFormFileBase extends DynamicFormInputBase<DynamicFormFile, DynamicFormFileTemplate, DynamicFormFileDefinition>
  implements OnInit {
 
  private _uploadAction: DynamicFormAction;
 
  @ViewChild(DynamicFormFileDirective)
  protected _fileInput: DynamicFormFileDirective;
 
  readonly defaultUploadActionDefinition: DynamicFormActionDefinition = {
    type: 'icon',
    template: {
      type: 'button',
      icon: 'attach_file',
      color: 'inputAction',
    },
  } as DynamicFormIconDefinition;
 
  readonly requiredUploadActionDefinition: Partial<DynamicFormActionDefinition> = {
    template: { action: () => this._fileInput.openFileExplorer() } as DynamicFormActionTemplate,
    expressions: { disabled: _ => this.field.control.disabled || this.field.readonly },
  };
 
  constructor(protected builder: DynamicFormBuilder, protected override validationService: DynamicFormValidationService) {
    super(validationService);
  }
 
  get uploadAction(): DynamicFormAction {
    return this._uploadAction;
  }
 
  ngOnInit(): void {
    const definition = this.getDefinition();
    this._uploadAction = this.builder.createFormAction(this.field.root, this.field, definition);
  }
 
  private getDefinition(): DynamicFormActionDefinition {
    const definitionBase = this.definition.uploadActionDefinition
      ? mergeObject(this.defaultUploadActionDefinition, this.definition.uploadActionDefinition)
      : this.defaultUploadActionDefinition;
    const definition = this.builder.getDefinition(definitionBase, this.field.root);
    return mergeObject(definition, this.requiredUploadActionDefinition);
  }
}