99 lines
2.4 KiB
TypeScript
99 lines
2.4 KiB
TypeScript
// angular
|
|
import { Component } from '@angular/core';
|
|
import { HttpClient } from '@angular/common/http';
|
|
|
|
// libs
|
|
import Swal from 'sweetalert2';
|
|
import { MatDialog } from '@angular/material/dialog';
|
|
|
|
// app
|
|
import { ApiRoutes } from '../../../api-routes';
|
|
import { SettingsMotionEditComponent } from './edit.motion.component';
|
|
import { MotionService } from '../../../services/motion.service';
|
|
import { MotionModel } from '../../../model/motion.model';
|
|
import { MotionCategoryModel } from '../../../model/motion.category.model';
|
|
|
|
@Component({
|
|
templateUrl: './motion.component.html',
|
|
styleUrls: ['./motion.component.scss'],
|
|
})
|
|
export class SettingsMotionComponent {
|
|
public motions?: MotionModel[];
|
|
public categories?: MotionCategoryModel[];
|
|
public selectedCategory?: MotionCategoryModel;
|
|
|
|
constructor(
|
|
private dialogModel: MatDialog,
|
|
private httpClient: HttpClient,
|
|
private motionService: MotionService,
|
|
) {
|
|
}
|
|
|
|
ngOnInit(): void {
|
|
this.load();
|
|
}
|
|
|
|
private load(categoryId?: string) {
|
|
this.motionService.getCategories()
|
|
.subscribe(data => {
|
|
this.categories = data;
|
|
var selected = data[0];
|
|
if (categoryId) {
|
|
var categories = this.categories.filter(x => x.id === categoryId);
|
|
selected = categories.length === 0
|
|
? selected
|
|
: categories[0];
|
|
}
|
|
|
|
this.selectCategory(selected);
|
|
});
|
|
}
|
|
|
|
public selectCategory(category: MotionCategoryModel) {
|
|
this.selectedCategory = category;
|
|
this.motionService.getMotions(category.id)
|
|
.subscribe(data => {
|
|
this.motions = data;
|
|
});
|
|
}
|
|
|
|
public edit(motion: MotionModel) {
|
|
this.dialogModel.open(SettingsMotionEditComponent, {
|
|
width: '640px',
|
|
disableClose: true,
|
|
data: motion,
|
|
}).afterClosed().subscribe(x => {
|
|
if (x && x.refresh) {
|
|
console.log(x.motion.categoryId);
|
|
this.load(x.motion.categoryId);
|
|
}
|
|
});
|
|
}
|
|
|
|
public remove(category: MotionModel) {
|
|
Swal.fire({
|
|
title: 'Remove motion ' + category.name,
|
|
showCancelButton: true,
|
|
confirmButtonText: 'Delete',
|
|
showLoaderOnConfirm: true,
|
|
preConfirm: (name) => {
|
|
return new Promise((resolve, reject) => {
|
|
this.httpClient.delete(ApiRoutes.SettingsMotionCategory.replace(':id', category.id!))
|
|
.subscribe(data => {
|
|
resolve(data);
|
|
}, error => {
|
|
Swal.showValidationMessage(error.detail);
|
|
reject();
|
|
});
|
|
|
|
}).catch(x => {
|
|
return false;
|
|
});
|
|
},
|
|
allowOutsideClick: () => !Swal.isLoading(),
|
|
}).then((result) => {
|
|
this.load();
|
|
});
|
|
}
|
|
}
|