From 5da57f536ff3d0c1c995f5e76d16993d570ec5f3 Mon Sep 17 00:00:00 2001
From: Florent Poittevin <florent.poittevin@unige.ch>
Date: Tue, 26 Nov 2019 09:50:22 +0100
Subject: [PATCH] fix: preservation job delete

---
 .../dialogs/job-delete/job-delete.dialog.ts   | 37 +++++++++++++++++++
 .../routables/job-list/job-list.routable.ts   |  2 +-
 .../job/preservation-job.module.ts            |  2 +
 src/app/shared/utils/store-dialog.util.ts     |  4 ++
 src/assets/i18n/de.json                       |  8 ++++
 src/assets/i18n/en.json                       | 12 +++++-
 src/assets/i18n/fr.json                       |  8 ++++
 7 files changed, 70 insertions(+), 3 deletions(-)
 create mode 100644 src/app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog.ts

diff --git a/src/app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog.ts b/src/app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog.ts
new file mode 100644
index 000000000..6de54c0be
--- /dev/null
+++ b/src/app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog.ts
@@ -0,0 +1,37 @@
+import {
+  ChangeDetectionStrategy,
+  Component,
+  Inject,
+} from "@angular/core";
+import {
+  MAT_DIALOG_DATA,
+  MatDialogRef,
+} from "@angular/material";
+import {preservationJobActionNameSpace} from "@app/features/preservation/job/stores/preservation-job.action";
+import {PreservationJobStateModel} from "@app/features/preservation/job/stores/preservation-job.state";
+import {PreservationJob} from "@app/generated-api";
+import {Store} from "@ngxs/store";
+import {SharedAbstractDeleteDialog} from "@shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog";
+import {LocalStateEnum} from "@shared/enums/local-state.enum";
+import {DeleteDialog} from "@shared/models/delete-dialog.model";
+import {TRANSLATE} from "solidify-frontend";
+
+@Component({
+  selector: "dlcm-job-delete-dialog",
+  templateUrl: "../../../../../../shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog.html",
+  styleUrls: ["../../../../../../shared/components/dialogs/shared-abstract-delete/shared-abstract-delete.dialog.scss"],
+  changeDetection: ChangeDetectionStrategy.OnPush,
+})
+export class JobDeleteDialog extends SharedAbstractDeleteDialog<PreservationJob, PreservationJobStateModel> {
+  public readonly KEY_TITLE: string = TRANSLATE("preservation.job.dialog.delete.title");
+  public readonly KEY_MESSAGE: string = TRANSLATE("preservation.job.dialog.delete.message");
+  public readonly KEY_CONFIRM_BUTTON: string = TRANSLATE("preservation.job.dialog.delete.confirm");
+  public readonly KEY_CANCEL_BUTTON: string = TRANSLATE("preservation.job.dialog.delete.cancel");
+
+  constructor(protected store: Store,
+              protected dialogRef: MatDialogRef<JobDeleteDialog>,
+              @Inject(MAT_DIALOG_DATA) public data: DeleteDialog) {
+    super(store, dialogRef, data, LocalStateEnum.preservation_job, preservationJobActionNameSpace);
+  }
+
+}
diff --git a/src/app/features/preservation/job/components/routables/job-list/job-list.routable.ts b/src/app/features/preservation/job/components/routables/job-list/job-list.routable.ts
index 898a85fff..3f3d7c4f4 100644
--- a/src/app/features/preservation/job/components/routables/job-list/job-list.routable.ts
+++ b/src/app/features/preservation/job/components/routables/job-list/job-list.routable.ts
@@ -128,7 +128,7 @@ export class JobListRoutable extends SharedAbstractListRoutable<PreservationJob,
         field: "lastUpdate.when" as any,
         header: TRANSLATE("preservation.job.table.header.when"),
         type: FieldTypeEnum.datetime,
-        order: OrderEnum.none,
+        order: OrderEnum.descending,
         isFilterable: true,
         isSortable: true,
       },
diff --git a/src/app/features/preservation/job/preservation-job.module.ts b/src/app/features/preservation/job/preservation-job.module.ts
index 15e0eb27c..efd8ca744 100644
--- a/src/app/features/preservation/job/preservation-job.module.ts
+++ b/src/app/features/preservation/job/preservation-job.module.ts
@@ -1,5 +1,6 @@
 import {NgModule} from "@angular/core";
 import {JobExecutionListContainer} from "@app/features/preservation/job/components/containers/job-execution-list/job-execution-list.container";
+import {JobDeleteDialog} from "@app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog";
 import {JobExecutionDetailDialog} from "@app/features/preservation/job/components/dialogs/job-execution-detail/job-execution-detail.dialog";
 import {JobFormPresentational} from "@app/features/preservation/job/components/presentationals/job-form/job-form.presentational";
 import {JobCreateRoutable} from "@app/features/preservation/job/components/routables/job-create/job-create.routable";
@@ -22,6 +23,7 @@ const containers = [
 ];
 const dialogs = [
   JobExecutionDetailDialog,
+  JobDeleteDialog,
 ];
 const presentationals = [
   JobFormPresentational,
diff --git a/src/app/shared/utils/store-dialog.util.ts b/src/app/shared/utils/store-dialog.util.ts
index d3b3d3ad9..25ed17285 100644
--- a/src/app/shared/utils/store-dialog.util.ts
+++ b/src/app/shared/utils/store-dialog.util.ts
@@ -10,6 +10,7 @@ import {AdminPreservationPolicyDeleteDialog} from "@admin/preservation-policy/co
 import {AdminSubmissionPolicyDeleteDialog} from "@admin/submission-policy/components/dialogs/admin-submission-policy-delete/admin-submission-policy-delete.dialog";
 import {AdminUserDeleteDialog} from "@admin/user/components/dialogs/admin-user-delete/admin-user-delete.dialog";
 import {Component} from "@angular/core";
+import {JobDeleteDialog} from "@app/features/preservation/job/components/dialogs/job-delete/job-delete.dialog";
 import {LocalStateEnum} from "@app/shared/enums/local-state.enum";
 import {DepositDeleteDialog} from "@deposit/components/dialogs/deposit-delete/deposit-delete.dialog";
 import {StringUtil} from "solidify-frontend";
@@ -54,6 +55,9 @@ export class StoreDialogUtil {
     if (state === LocalStateEnum.admin_fundingAgencies) {
       return AdminFundingAgencyDeleteDialog as Component;
     }
+    if (state === LocalStateEnum.preservation_job) {
+      return JobDeleteDialog as Component;
+    }
     throw Error(StringUtil.format(StoreDialogUtil.messageNotFound, "Delete", state));
   }
 }
diff --git a/src/assets/i18n/de.json b/src/assets/i18n/de.json
index 0afb078b6..339ab17de 100644
--- a/src/assets/i18n/de.json
+++ b/src/assets/i18n/de.json
@@ -1221,6 +1221,14 @@
         "new": "Create",
         "refresh": "Refresh"
       },
+      "dialog": {
+        "delete": {
+          "cancel": "Cancel",
+          "confirm": "Yes",
+          "message": "Are you sure you want to delete this job?",
+          "title": "Confirm deletion"
+        }
+      },
       "form": {
         "enable": "Enabled",
         "jobRecurrence": "Job recurrence",
diff --git a/src/assets/i18n/en.json b/src/assets/i18n/en.json
index 0afb078b6..333990996 100644
--- a/src/assets/i18n/en.json
+++ b/src/assets/i18n/en.json
@@ -1221,6 +1221,14 @@
         "new": "Create",
         "refresh": "Refresh"
       },
+      "dialog": {
+        "delete": {
+          "cancel": "Cancel",
+          "confirm": "Yes",
+          "message": "Are you sure you want to delete this job?",
+          "title": "Confirm deletion"
+        }
+      },
       "form": {
         "enable": "Enabled",
         "jobRecurrence": "Job recurrence",
@@ -1259,11 +1267,11 @@
         },
         "resume": {
           "fail": "Unable to resume the job",
-          "success": "Job resumed with success"
+          "success": "Job resumed successfully"
         },
         "start": {
           "fail": "Unable to start the job",
-          "success": "Job started with success"
+          "success": "Job started successfully"
         }
       },
       "state": {
diff --git a/src/assets/i18n/fr.json b/src/assets/i18n/fr.json
index ddeedd3d4..d548e45c1 100644
--- a/src/assets/i18n/fr.json
+++ b/src/assets/i18n/fr.json
@@ -1221,6 +1221,14 @@
         "new": "Créer",
         "refresh": "Rafraichir"
       },
+      "dialog": {
+        "delete": {
+          "cancel": "Annuler",
+          "confirm": "Oui",
+          "message": "Êtes-vous sûr de vouloir supprimer ce job ?",
+          "title": "Confirmation de suppression"
+        }
+      },
       "form": {
         "enable": "Actif",
         "jobRecurrence": "Récurrence du job",
-- 
GitLab