From 684a937af07486c59ab04e0f75a627c0c115127b Mon Sep 17 00:00:00 2001 From: Pranav Deshmukh <113667044+pranav-deshmukh@users.noreply.github.com> Date: Sun, 23 Mar 2025 22:28:35 +0530 Subject: [PATCH] fix: Manage hooks functionality; Create hook, Edit Hook (#2346) --- .../create-hook/create-hook.component.html | 23 +++++++++----- .../create-hook/create-hook.component.scss | 8 +++++ .../edit-hook/edit-hook.component.html | 31 ++++++++++++++----- .../edit-hook/edit-hook.component.scss | 23 ++++++++++++++ .../edit-hook/edit-hook.component.ts | 26 +++++++++++++++- 5 files changed, 95 insertions(+), 16 deletions(-) diff --git a/src/app/system/manage-hooks/create-hook/create-hook.component.html b/src/app/system/manage-hooks/create-hook/create-hook.component.html index e0b74b8fd..02c97bc10 100644 --- a/src/app/system/manage-hooks/create-hook/create-hook.component.html +++ b/src/app/system/manage-hooks/create-hook/create-hook.component.html @@ -33,7 +33,7 @@
- + {{ 'labels.inputs.Content Type' | translate }} @@ -49,7 +49,7 @@ - + {{ 'labels.inputs.Phone Number' | translate }} {{ input.value?.length || 0 }}/10 @@ -59,7 +59,7 @@ - + {{ 'labels.inputs.Payload URL' | translate }} @@ -105,14 +105,23 @@
- +
-
-

{{ 'labels.inputs.Events' | translate }}

+
+

+ {{ 'labels.inputs.Events' | translate }}* +

- diff --git a/src/app/system/manage-hooks/create-hook/create-hook.component.scss b/src/app/system/manage-hooks/create-hook/create-hook.component.scss index 73bce4f80..d5b9784c9 100644 --- a/src/app/system/manage-hooks/create-hook/create-hook.component.scss +++ b/src/app/system/manage-hooks/create-hook/create-hook.component.scss @@ -11,6 +11,14 @@ } } +mat-divider { + margin: 0 0 0.5em; +} + table { width: 100%; } + +.AddEventButton { + margin-bottom: 10px; +} diff --git a/src/app/system/manage-hooks/edit-hook/edit-hook.component.html b/src/app/system/manage-hooks/edit-hook/edit-hook.component.html index 33d6ec3a6..166903ca5 100644 --- a/src/app/system/manage-hooks/edit-hook/edit-hook.component.html +++ b/src/app/system/manage-hooks/edit-hook/edit-hook.component.html @@ -33,7 +33,7 @@
- + {{ 'labels.inputs.Content Type' | translate }} @@ -49,7 +49,7 @@ - + {{ 'labels.inputs.Phone Number' | translate }} {{ input.value?.length || 0 }}/10 @@ -59,7 +59,7 @@ - + {{ 'labels.inputs.Payload URL' | translate }} @@ -109,10 +109,19 @@
-
-

{{ 'labels.inputs.Events' | translate }}

+
+

+ {{ 'labels.inputs.Events' | translate }} * +

- @@ -131,6 +140,10 @@ {{ event.actionName }} +
+

At least one event is required. Cannot delete the last event.

+
+ {{ 'labels.inputs.Actions' | translate }} @@ -146,14 +159,16 @@ - + diff --git a/src/app/system/manage-hooks/edit-hook/edit-hook.component.scss b/src/app/system/manage-hooks/edit-hook/edit-hook.component.scss index 73bce4f80..2841cace0 100644 --- a/src/app/system/manage-hooks/edit-hook/edit-hook.component.scss +++ b/src/app/system/manage-hooks/edit-hook/edit-hook.component.scss @@ -14,3 +14,26 @@ table { width: 100%; } + +.AddEventButton { + margin-bottom: 10px; +} + +.error-message { + color: red; + font-weight: bold; + margin-top: 10px; + padding: 5px; + background-color: #ffe6e6; + border: 1px solid red; + border-radius: 5px; +} + +.error-snackbar { + background-color: #f44336; + color: white; +} + +.error-snackbar .mat-simple-snackbar-action { + color: white; +} diff --git a/src/app/system/manage-hooks/edit-hook/edit-hook.component.ts b/src/app/system/manage-hooks/edit-hook/edit-hook.component.ts index d986bc7aa..ac4ab9aef 100644 --- a/src/app/system/manage-hooks/edit-hook/edit-hook.component.ts +++ b/src/app/system/manage-hooks/edit-hook/edit-hook.component.ts @@ -5,6 +5,11 @@ import { MatDialog } from '@angular/material/dialog'; import { MatSort } from '@angular/material/sort'; import { MatTableDataSource } from '@angular/material/table'; import { ActivatedRoute, Router } from '@angular/router'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { NgModule } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; + +import { ChangeDetectorRef } from '@angular/core'; /** Custom Services */ import { SystemService } from '../../system.service'; @@ -17,12 +22,18 @@ import { AddEventDialogComponent } from '../add-event-dialog/add-event-dialog.co /** * Edit Hook Component. */ + @Component({ selector: 'mifosx-edit-hook', templateUrl: './edit-hook.component.html', styleUrls: ['./edit-hook.component.scss'] }) export class EditHookComponent implements OnInit { + @NgModule({ + imports: [ + MatSnackBarModule + ] + }) /** Hooks Template Data. */ hooksTemplateData: any; /** Hook Data. */ @@ -39,6 +50,7 @@ export class EditHookComponent implements OnInit { dataSource: MatTableDataSource; /** Events Data. */ eventsData: any[] = []; + cannotDeleteLastEvent: boolean = false; /** Boolean to check if events data is changed or not. */ eventsDataChanged: Boolean = false; /** Sorter for events table. */ @@ -59,7 +71,9 @@ export class EditHookComponent implements OnInit { private router: Router, private formBuilder: UntypedFormBuilder, private dialog: MatDialog, - private translateService: TranslateService + private translateService: TranslateService, + private snackBar: MatSnackBar, + private cdr: ChangeDetectorRef ) { this.route.data.subscribe((data: { hooksTemplate: any; hook: any }) => { this.hooksTemplateData = data.hooksTemplate; @@ -169,6 +183,14 @@ export class EditHookComponent implements OnInit { * @param {number} index Array index from where event form needs to be removed. */ deleteEvent(index: number) { + if (this.eventsData.length === 1) { + this.snackBar.open('At least one event is required. Cannot delete the last event.', 'Close', { + duration: 3000, + panelClass: ['error-snackbar'] + }); + return; + } + const deleteEventDialogRef = this.dialog.open(DeleteDialogComponent, { data: { deleteContext: @@ -177,11 +199,13 @@ export class EditHookComponent implements OnInit { this.eventsData[index].entityName } }); + deleteEventDialogRef.afterClosed().subscribe((response: any) => { if (response.delete) { this.eventsData.splice(index, 1); this.dataSource.connect().next(this.eventsData); this.eventsDataChanged = true; + this.cdr.detectChanges(); } }); }