| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import { Component, inject } from '@angular/core';
- import {
- FormBuilder,
- FormGroup,
- FormControl,
- FormArray,
- ReactiveFormsModule,
- Validators,
- } from '@angular/forms';
- import { ActivatedRoute, Router, RouterLink } from '@angular/router';
- import { AppHeader } from '../../share/header/app-header';
- import { AppSideMenu } from '../../share/side-menu/app-side-menu';
- import { DankaService } from '../../services/dankaService';
- import { Danka } from '../../models/danka';
-
- @Component({
- selector: 'app-danka-edit',
- imports: [AppHeader, AppSideMenu, ReactiveFormsModule, RouterLink],
- templateUrl: './danka-edit.html',
- styleUrl: './danka-edit.scss',
- })
- export class DankaEdit {
- danka: Danka | undefined;
-
- dankaForm = new FormGroup({
- householdName: new FormControl('', [Validators.required]),
- householder: new FormControl('', [Validators.required]),
- postalCode: new FormControl('', Validators.pattern(/^\d{3}-\d{4}$/)),
- address: new FormControl(''),
- phones: new FormArray([this.createPhoneForm('', '')]),
- });
-
- constructor(
- private dankaService: DankaService,
- private route: ActivatedRoute,
- private router: Router,
- ) {
- const id = this.route.snapshot.params['id'];
- if (id) {
- this.danka = this.dankaService.getDankaById(id);
-
- if (this.danka) {
- this.dankaForm.patchValue({
- householdName: this.danka.householdName,
- householder: this.danka.householder,
- postalCode: this.danka.postalCode,
- address: this.danka.address,
- });
-
- this.phones.clear();
-
- for (const phone of this.danka.phones) {
- this.phones.push(this.createPhoneForm(phone.tel, phone.note));
- }
- }
- }
- console.log(this.danka);
- }
-
- get phones() {
- return this.dankaForm.get('phones') as FormArray;
- }
-
- createPhoneForm(tel = '', note = '') {
- return new FormGroup({
- tel: new FormControl(tel, [Validators.pattern(/^[0-9-]+$/)]),
- note: new FormControl(note),
- });
- }
-
- addPhone() {
- this.phones.push(this.createPhoneForm());
- }
-
- removePhone(index: number) {
- if(this.phones.length > 1) {
- this.phones.removeAt(index);
- }
- }
-
- //保存の処理
- saveDanka() {
- if (this.dankaForm.invalid) {
- this.dankaForm.markAllAsTouched();
- return;
- }
- const formValue = this.dankaForm.value;
- const isEdit = !!this.danka;
- const dankaId = isEdit ? this.danka!.id : Date.now().toString();
- const updatedDanka: Danka = {
- id: dankaId,
- householdName: formValue.householdName?.trim() ?? '',
- householder: formValue.householder?.trim() ?? '',
- postalCode: formValue.postalCode?.trim() ?? '',
- address: formValue.address?.trim() ?? '',
- updatedAt: this.formatDateForSave(new Date()),
- phones: (formValue.phones ?? [])
- .map((phone) => ({
- tel: phone.tel?.trim() ?? '',
- note: phone.note?.trim() ?? '',
- }))
- .filter((phone) => phone.tel !== '' || phone.note !== ''),
- };
-
- this.dankaService.saveDanka(updatedDanka);
-
- if (isEdit) {
- this.router.navigate(['/danka-detail', dankaId]);
- } else {
- this.router.navigateByUrl('/danka-list');
- }
- }
-
- private formatDateForSave(date: Date): string {
- const year = date.getFullYear();
- const month = String(date.getMonth() + 1).padStart(2, '0');
- const day = String(date.getDate()).padStart(2, '0');
- return `${year}-${month}-${day}`;
- }
-
- //削除の処理
- deleteDanka() {
- if (!this.danka) {
- return;
- }
-
- const deleteDankaId = this.danka.id;
- this.dankaService.deleteDanka(deleteDankaId);
- console.log(this.dankaService.getDankaById(this.danka.id));
- this.router.navigateByUrl('/danka-list');
- }
- }
|