|
| 1 | +import { Component, Inject, OnInit, ViewChild } from '@angular/core'; |
| 2 | +import { MatTableDataSource } from '@angular/material/table'; |
| 3 | +import { MatSort } from '@angular/material/sort'; |
| 4 | +import { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog'; |
| 5 | +import { |
| 6 | + ApplicationDecisionConditionDto, |
| 7 | + CreateApplicationDecisionConditionCardDto, |
| 8 | +} from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.dto'; |
| 9 | +import { ApplicationDecisionConditionDto as OriginalApplicationDecisionConditionDto } from '../../../../../services/application/decision/application-decision-v2/application-decision-v2.dto'; |
| 10 | +import { ApplicationDecisionConditionCardService } from '../../../../../services/application/decision/application-decision-v2/application-decision-condition/application-decision-condition-card/application-decision-condition-card.service'; |
| 11 | +import { BOARD_TYPE_CODES, BoardService } from '../../../../../services/board/board.service'; |
| 12 | +import { BoardDto, BoardStatusDto } from '../../../../../services/board/board.dto'; |
| 13 | +import { ToastService } from '../../../../../services/toast/toast.service'; |
| 14 | + |
| 15 | +@Component({ |
| 16 | + selector: 'app-condition-card-dialog', |
| 17 | + templateUrl: './condition-card-dialog.component.html', |
| 18 | + styleUrl: './condition-card-dialog.component.scss', |
| 19 | +}) |
| 20 | +export class ConditionCardDialogComponent implements OnInit { |
| 21 | + displayColumns: string[] = ['select', 'index', 'type', 'description']; |
| 22 | + conditionBoard: BoardDto | undefined; |
| 23 | + selectedStatus = ''; |
| 24 | + |
| 25 | + @ViewChild(MatSort) sort!: MatSort; |
| 26 | + dataSource: MatTableDataSource<{ condition: ApplicationDecisionConditionDto; index: number; selected: boolean }> = |
| 27 | + new MatTableDataSource(); |
| 28 | + |
| 29 | + constructor( |
| 30 | + @Inject(MAT_DIALOG_DATA) |
| 31 | + public data: { conditions: { condition: ApplicationDecisionConditionDto; index: number }[]; decision: string }, |
| 32 | + private dialogRef: MatDialogRef<ConditionCardDialogComponent>, |
| 33 | + private decisionConditionCardService: ApplicationDecisionConditionCardService, |
| 34 | + private boardService: BoardService, |
| 35 | + private toastService: ToastService, |
| 36 | + ) {} |
| 37 | + |
| 38 | + async ngOnInit() { |
| 39 | + this.dataSource.data = this.data.conditions.map((item) => ({ |
| 40 | + condition: item.condition, |
| 41 | + selected: false, |
| 42 | + index: item.index + 1, |
| 43 | + })); |
| 44 | + |
| 45 | + this.conditionBoard = await this.boardService.fetchBoardDetail(BOARD_TYPE_CODES.APPCON); |
| 46 | + } |
| 47 | + |
| 48 | + onStatusSelected(applicationStatus: BoardStatusDto) { |
| 49 | + this.selectedStatus = applicationStatus.statusCode; |
| 50 | + } |
| 51 | + |
| 52 | + isConditionCardNotNull(element: any): boolean { |
| 53 | + return element.condition.conditionCard !== null; |
| 54 | + } |
| 55 | + |
| 56 | + isSaveDisabled(): boolean { |
| 57 | + const isStatusSelected = !!this.selectedStatus; |
| 58 | + const isAnyRowSelected = this.dataSource.data.some((item) => item.selected); |
| 59 | + return !(isStatusSelected && isAnyRowSelected); |
| 60 | + } |
| 61 | + |
| 62 | + onCancel(): void { |
| 63 | + this.dialogRef.close({ action: 'cancel' }); |
| 64 | + } |
| 65 | + |
| 66 | + async onSave() { |
| 67 | + const selectedStatusCode = this.conditionBoard?.statuses.find( |
| 68 | + (status) => status.label === this.selectedStatus, |
| 69 | + )?.statusCode; |
| 70 | + const selectedConditions = this.dataSource.data.filter((item) => item.selected).map((item) => item.condition.uuid); |
| 71 | + const createDto: CreateApplicationDecisionConditionCardDto = { |
| 72 | + conditionsUuids: selectedConditions, |
| 73 | + decisionUuid: this.data.decision, |
| 74 | + cardStatusCode: this.selectedStatus, |
| 75 | + }; |
| 76 | + const res = await this.decisionConditionCardService.create(createDto); |
| 77 | + if (res) { |
| 78 | + this.toastService.showSuccessToast('Condition card created successfully'); |
| 79 | + this.dialogRef.close({ action: 'save', result: true }); |
| 80 | + } else { |
| 81 | + this.toastService.showErrorToast('Failed to create condition card'); |
| 82 | + this.dialogRef.close({ action: 'save', result: false }); |
| 83 | + } |
| 84 | + } |
| 85 | +} |
0 commit comments