diff --git a/src/Frontend/package-lock.json b/src/Frontend/package-lock.json
index 5d6608797..38a02e0a9 100644
--- a/src/Frontend/package-lock.json
+++ b/src/Frontend/package-lock.json
@@ -15,6 +15,7 @@
"@tinyhttp/content-disposition": "^2.2.2",
"@vue-flow/controls": "^1.1.2",
"@vue-flow/core": "^1.42.5",
+ "@vuepic/vue-datepicker": "^11.0.2",
"bootstrap": "^5.3.5",
"bootstrap-icons": "^1.11.3",
"codemirror": "^6.0.1",
@@ -2663,6 +2664,21 @@
}
}
},
+ "node_modules/@vuepic/vue-datepicker": {
+ "version": "11.0.2",
+ "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.2.tgz",
+ "integrity": "sha512-uHh78mVBXCEjam1uVfTzZ/HkyDwut/H6b2djSN9YTF+l/EA+XONfdCnOVSi1g+qVGSy65DcQAwyBNidAssnudQ==",
+ "license": "MIT",
+ "dependencies": {
+ "date-fns": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=18.12.0"
+ },
+ "peerDependencies": {
+ "vue": ">=3.3.0"
+ }
+ },
"node_modules/@vueuse/core": {
"version": "10.11.1",
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz",
@@ -3478,6 +3494,16 @@
"node": ">=18"
}
},
+ "node_modules/date-fns": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
+ "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
+ "license": "MIT",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/kossnocorp"
+ }
+ },
"node_modules/de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
diff --git a/src/Frontend/package.json b/src/Frontend/package.json
index 6e11d0376..b2fea93c5 100644
--- a/src/Frontend/package.json
+++ b/src/Frontend/package.json
@@ -24,6 +24,7 @@
"@tinyhttp/content-disposition": "^2.2.2",
"@vue-flow/controls": "^1.1.2",
"@vue-flow/core": "^1.42.5",
+ "@vuepic/vue-datepicker": "^11.0.2",
"bootstrap": "^5.3.5",
"bootstrap-icons": "^1.11.3",
"codemirror": "^6.0.1",
diff --git a/src/Frontend/src/assets/status_archived.svg b/src/Frontend/src/assets/status_archived.svg
new file mode 100644
index 000000000..3ee4db593
--- /dev/null
+++ b/src/Frontend/src/assets/status_archived.svg
@@ -0,0 +1,8 @@
+
+
+
diff --git a/src/Frontend/src/assets/status_failed.svg b/src/Frontend/src/assets/status_failed.svg
new file mode 100644
index 000000000..ff5a79e20
--- /dev/null
+++ b/src/Frontend/src/assets/status_failed.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/Frontend/src/assets/status_repeated_failed.svg b/src/Frontend/src/assets/status_repeated_failed.svg
new file mode 100644
index 000000000..c80647d75
--- /dev/null
+++ b/src/Frontend/src/assets/status_repeated_failed.svg
@@ -0,0 +1,7 @@
+
+
+
diff --git a/src/Frontend/src/assets/status_resolved.svg b/src/Frontend/src/assets/status_resolved.svg
new file mode 100644
index 000000000..b7ab8c1f6
--- /dev/null
+++ b/src/Frontend/src/assets/status_resolved.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/Frontend/src/assets/status_retry_issued.svg b/src/Frontend/src/assets/status_retry_issued.svg
new file mode 100644
index 000000000..f64c7dc97
--- /dev/null
+++ b/src/Frontend/src/assets/status_retry_issued.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/Frontend/src/assets/status_successful.svg b/src/Frontend/src/assets/status_successful.svg
new file mode 100644
index 000000000..340e02ac4
--- /dev/null
+++ b/src/Frontend/src/assets/status_successful.svg
@@ -0,0 +1,6 @@
+
+
+
diff --git a/src/Frontend/src/components/FilterInput.vue b/src/Frontend/src/components/FilterInput.vue
index 41d124f28..7c06247ae 100644
--- a/src/Frontend/src/components/FilterInput.vue
+++ b/src/Frontend/src/components/FilterInput.vue
@@ -3,13 +3,17 @@ import { ref, watch } from "vue";
import debounce from "lodash/debounce";
const model = defineModel({ required: true });
-const props = withDefaults(defineProps<{ placeholder?: string; ariaLabel?: string }>(), { placeholder: "Filter by name...", ariaLabel: "filter by name" });
+const props = withDefaults(defineProps<{ placeholder?: string; ariaLabel?: string }>(), { placeholder: "Filter by name...", ariaLabel: "Filter by name" });
const localInput = ref(model.value);
const debounceUpdateModel = debounce((value: string) => {
model.value = value;
}, 600);
+watch(model, (newValue) => {
+ localInput.value = newValue;
+});
+
watch(localInput, (newValue) => {
debounceUpdateModel(newValue);
});
@@ -17,7 +21,7 @@ watch(localInput, (newValue) => {
-
+
@@ -34,7 +38,6 @@ watch(localInput, (newValue) => {
div.filter-input {
position: relative;
- width: 280px;
height: 36px;
}
diff --git a/src/Frontend/src/components/audit/AuditList.vue b/src/Frontend/src/components/audit/AuditList.vue
index 67b0ab47c..bdd31ccef 100644
--- a/src/Frontend/src/components/audit/AuditList.vue
+++ b/src/Frontend/src/components/audit/AuditList.vue
@@ -1,19 +1,20 @@
-