This commit is contained in:
Chris Chen
2026-06-24 18:45:22 -07:00
parent e908e35530
commit 9dbb1d38d8
14 changed files with 312 additions and 0 deletions
@@ -0,0 +1,75 @@
import { Component, OnInit } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { GridModule } from '@progress/kendo-angular-grid';
import { InputsModule } from '@progress/kendo-angular-inputs';
import { ButtonsModule } from '@progress/kendo-angular-buttons';
import { DialogsModule } from '@progress/kendo-angular-dialog';
import { MinistryApiService } from '../../services/ministry-api.service';
import {
MinistryDto, CreateMinistryRequest, UpdateMinistryRequest,
} from '../../models/ministry.model';
import { PageHeaderActionsDirective } from '../../../../shared/directives/page-header-actions.directive';
@Component({
selector: 'app-ministries-page',
standalone: true,
imports: [CommonModule, FormsModule, GridModule, InputsModule, ButtonsModule, DialogsModule, PageHeaderActionsDirective],
templateUrl: './ministries-page.component.html',
styleUrls: ['./ministries-page.component.scss'],
})
export class MinistriesPageComponent implements OnInit {
data: MinistryDto[] = [];
isLoading = false;
includeInactive = false;
showDialog = false;
editing: MinistryDto | null = null;
form: UpdateMinistryRequest = this.blankForm();
constructor(private api: MinistryApiService) {}
ngOnInit(): void { this.load(); }
load(): void {
this.isLoading = true;
this.api.getAll(this.includeInactive).subscribe({
next: rows => { this.data = rows; this.isLoading = false; },
error: () => { this.isLoading = false; },
});
}
openAdd(): void { this.editing = null; this.form = this.blankForm(); this.showDialog = true; }
openEdit(m: MinistryDto): void {
this.editing = m;
this.form = {
name_en: m.name_en, name_zh: m.name_zh,
description_en: m.description_en, description_zh: m.description_zh,
isActive: m.isActive, sortOrder: m.sortOrder,
};
this.showDialog = true;
}
save(): void {
if (this.editing) {
this.api.update(this.editing.id, this.form).subscribe(() => { this.showDialog = false; this.load(); });
} else {
const create: CreateMinistryRequest = {
name_en: this.form.name_en, name_zh: this.form.name_zh,
description_en: this.form.description_en, description_zh: this.form.description_zh,
sortOrder: this.form.sortOrder,
};
this.api.create(create).subscribe(() => { this.showDialog = false; this.load(); });
}
}
deactivate(m: MinistryDto): void {
if (!confirm(`Deactivate "${m.name_en}"?`)) return;
this.api.deactivate(m.id).subscribe(() => this.load());
}
private blankForm(): UpdateMinistryRequest {
return { name_en: '', name_zh: null, description_en: null, description_zh: null, isActive: true, sortOrder: 0 };
}
}