2021-05-03 18:10:17 +02:00

110 lines
3.4 KiB
TypeScript

import {Component, OnInit} from '@angular/core';
import {ActivatedRoute} from '@angular/router';
import {FormGroup, FormBuilder, AbstractControl} from '@angular/forms';
import {FileInput, FileValidator} from 'ngx-material-file-input';
import {HttpClient} from '@angular/common/http';
import {environment} from '../../../../environments/environment';
import {throwError} from 'rxjs';
import {NGXLogger} from 'ngx-logger';
import {MatSnackBar} from '@angular/material/snack-bar';
import {DialogComponent} from '../../dialog/dialog.component';
import {MatDialog} from '@angular/material/dialog';
import {URLFormatValidator} from '../../../validators/url.validator';
import {keywordsValidator} from '../../../validators/keywords.validator';
@Component({
selector: 'app-editieren',
templateUrl: './editieren.component.html',
styleUrls: ['./editieren.component.css']
})
export class EditierenComponent implements OnInit {
id;
feedForm: FormGroup;
url: String;
active = true;
match_all_keywords = false;
icon: File;
keywords: String;
readonly maxSize = 10240;
private currentLocation = environment.location;
constructor(private route: ActivatedRoute,
private formBuilder: FormBuilder,
private http: HttpClient,
private _snackbar: MatSnackBar,
private _logger: NGXLogger,
) {
this.route.paramMap.subscribe(paramMap => {
this.id = paramMap.get('id');
if (this.id) {
this.loadFeed(this.id);
}
});
}
ngOnInit(): void {
this.feedForm = this.formBuilder.group({
url: [this.url, [URLFormatValidator]],
active: this.active,
icon: [undefined, [FileValidator.maxContentSize(this.maxSize)]],
keywords: [this.keywords, [keywordsValidator]],
match_all_keywords: this.match_all_keywords
});
}
public loadFeed(id) {
this.http.get('http://127.0.0.1:8000/feeds/' + id + '/').subscribe(
(data: any) => {
this.url = data.url;
this.active = data.active;
this.icon = data.icon;
this.keywords = data.keywords;
this.match_all_keywords = data.match_all_keywords;
this.feedForm.patchValue({
url: data.url,
active: data.active,
keywords: data.keywords,
match_all_keywords: data.match_all_keywords
});
},
err => this._logger.error(err),
);
}
public saveFeed(feedData) {
const form: FormData = new FormData();
form.append('url', feedData.url);
form.append('active', feedData.active);
form.append('match_all_keywords', feedData.match_all_keywords);
if (feedData.keywords != null) {
form.append('keywords', feedData.keywords);
}
if (feedData.icon != null) {
form.append('icon', feedData.icon._files['0']);
}
if (this.id == null) {
this.http.post('http://127.0.0.1:8000/feeds/', form).subscribe(
() => {
this._snackbar.open('Feed erfolgreich gespeichert!', 'Schließen', {duration: 3000});
},
err => {
this._logger.error(err);
return throwError(err);
}
);
} else {
this.http.put('http://127.0.0.1:8000/feeds/' + this.id + '/', form).subscribe(
() => {
this._snackbar.open('Feed erfolgreich gespeichert!', 'Schließen', {duration: 3000});
},
err => {
this._logger.error(err);
return throwError(err);
}
);
}
}
}