OpenSlides/client/src/app/shared/components/attachment-control/attachment-control.component.ts

108 lines
3.1 KiB
TypeScript
Raw Normal View History

import { Component, OnInit, TemplateRef, Output, EventEmitter, Input } from '@angular/core';
import { MatDialog } from '@angular/material';
import { FormControl, ControlValueAccessor } from '@angular/forms';
import { BehaviorSubject } from 'rxjs';
import { MediafileRepositoryService } from 'app/core/repositories/mediafiles/mediafile-repository.service';
import { ViewMediafile } from 'app/site/mediafiles/models/view-mediafile';
@Component({
selector: 'os-attachment-control',
templateUrl: './attachment-control.component.html',
styleUrls: ['./attachment-control.component.scss']
})
export class AttachmentControlComponent implements OnInit, ControlValueAccessor {
/**
* Output for an error handler
*/
@Output()
public errorHandler: EventEmitter<string> = new EventEmitter();
/**
* The form-control name to access the value for the form-control
*/
@Input()
public controlName: FormControl;
/**
* The file list that is necessary for the `SearchValueSelector`
*/
public mediaFileList: BehaviorSubject<ViewMediafile[]> = new BehaviorSubject([]);
/**
* Default constructor
*
* @param dialogService Reference to the `MatDialog`
* @param mediaService Reference for the `MediaFileRepositoryService`
*/
public constructor(private dialogService: MatDialog, private mediaService: MediafileRepositoryService) {}
/**
* On init method
*/
public ngOnInit(): void {
this.mediaFileList = this.mediaService.getViewModelListBehaviorSubject();
}
/**
* Function to open a given dialog
*
* @param dialog the dialog to open
*/
public openUploadDialog(dialog: TemplateRef<string>): void {
this.dialogService.open(dialog, {
width: '750px',
maxWidth: '90vw',
maxHeight: '90vh'
});
}
/**
* Function to set the value for the `SearchValueSelector` after successful upload
*
* @param fileIDs a list with the ids of the uploaded files
*/
public uploadSuccess(fileIDs: number[]): void {
if (this.controlName) {
const newValues = [...this.controlName.value, ...fileIDs];
this.controlName.setValue(newValues);
this.dialogService.closeAll();
}
}
/**
* Function to emit an occurring error.
*
* @param error The occurring error
*/
public uploadError(error: string): void {
this.errorHandler.emit(error);
}
/**
* Function to write a new value to the form.
* Satisfy the interface.
*
* @param value The new value for this form.
*/
public writeValue(value: any): void {
if (value && this.controlName) {
this.controlName.setValue(value);
}
}
/**
* Function executed when the control's value changed.
*
* @param fn the function that is executed.
*/
public registerOnChange(fn: any): void {}
/**
* To satisfy the interface
*
* @param fn the registered callback function for onBlur-events.
*/
public registerOnTouched(fn: any): void {}
}