Нема описа
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

danka-edit.ts 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { Component, inject } from '@angular/core';
  2. import {
  3. FormBuilder,
  4. FormGroup,
  5. FormControl,
  6. FormArray,
  7. ReactiveFormsModule,
  8. Validators,
  9. } from '@angular/forms';
  10. import { ActivatedRoute, Router, RouterLink } from '@angular/router';
  11. import { AppHeader } from '../../share/header/app-header';
  12. import { AppSideMenu } from '../../share/side-menu/app-side-menu';
  13. import { DankaService } from '../../services/dankaService';
  14. import { Danka } from '../../models/danka';
  15. @Component({
  16. selector: 'app-danka-edit',
  17. imports: [AppHeader, AppSideMenu, ReactiveFormsModule, RouterLink],
  18. templateUrl: './danka-edit.html',
  19. styleUrl: './danka-edit.scss',
  20. })
  21. export class DankaEdit {
  22. danka: Danka | undefined;
  23. dankaForm = new FormGroup({
  24. householdName: new FormControl('', [Validators.required]),
  25. householder: new FormControl('', [Validators.required]),
  26. postalCode: new FormControl('', Validators.pattern(/^\d{3}-\d{4}$/)),
  27. address: new FormControl(''),
  28. phones: new FormArray([this.createPhoneForm('', '')]),
  29. });
  30. constructor(
  31. private dankaService: DankaService,
  32. private route: ActivatedRoute,
  33. private router: Router,
  34. ) {
  35. const id = this.route.snapshot.params['id'];
  36. if (id) {
  37. this.danka = this.dankaService.getDankaById(id);
  38. if (this.danka) {
  39. this.dankaForm.patchValue({
  40. householdName: this.danka.householdName,
  41. householder: this.danka.householder,
  42. postalCode: this.danka.postalCode,
  43. address: this.danka.address,
  44. });
  45. this.phones.clear();
  46. for (const phone of this.danka.phones) {
  47. this.phones.push(this.createPhoneForm(phone.tel, phone.note));
  48. }
  49. }
  50. }
  51. console.log(this.danka);
  52. }
  53. get phones() {
  54. return this.dankaForm.get('phones') as FormArray;
  55. }
  56. createPhoneForm(tel = '', note = '') {
  57. return new FormGroup({
  58. tel: new FormControl(tel, [Validators.pattern(/^[0-9-]+$/)]),
  59. note: new FormControl(note),
  60. });
  61. }
  62. addPhone() {
  63. this.phones.push(this.createPhoneForm());
  64. }
  65. removePhone(index: number) {
  66. if(this.phones.length > 1) {
  67. this.phones.removeAt(index);
  68. }
  69. }
  70. //保存の処理
  71. saveDanka() {
  72. if (this.dankaForm.invalid) {
  73. this.dankaForm.markAllAsTouched();
  74. return;
  75. }
  76. const formValue = this.dankaForm.value;
  77. const isEdit = !!this.danka;
  78. const dankaId = isEdit ? this.danka!.id : Date.now().toString();
  79. const updatedDanka: Danka = {
  80. id: dankaId,
  81. householdName: formValue.householdName?.trim() ?? '',
  82. householder: formValue.householder?.trim() ?? '',
  83. postalCode: formValue.postalCode?.trim() ?? '',
  84. address: formValue.address?.trim() ?? '',
  85. updatedAt: this.formatDateForSave(new Date()),
  86. phones: (formValue.phones ?? [])
  87. .map((phone) => ({
  88. tel: phone.tel?.trim() ?? '',
  89. note: phone.note?.trim() ?? '',
  90. }))
  91. .filter((phone) => phone.tel !== '' || phone.note !== ''),
  92. };
  93. this.dankaService.saveDanka(updatedDanka);
  94. if (isEdit) {
  95. this.router.navigate(['/danka-detail', dankaId]);
  96. } else {
  97. this.router.navigateByUrl('/danka-list');
  98. }
  99. }
  100. private formatDateForSave(date: Date): string {
  101. const year = date.getFullYear();
  102. const month = String(date.getMonth() + 1).padStart(2, '0');
  103. const day = String(date.getDate()).padStart(2, '0');
  104. return `${year}-${month}-${day}`;
  105. }
  106. //削除の処理
  107. deleteDanka() {
  108. if (!this.danka) {
  109. return;
  110. }
  111. const deleteDankaId = this.danka.id;
  112. this.dankaService.deleteDanka(deleteDankaId);
  113. console.log(this.dankaService.getDankaById(this.danka.id));
  114. this.router.navigateByUrl('/danka-list');
  115. }
  116. }