Skip to content

Commit 0d4d417

Browse files
Refactor AuditList component to use MessageStatusIcon for message status display
1 parent 2864dcb commit 0d4d417

File tree

2 files changed

+98
-96
lines changed

2 files changed

+98
-96
lines changed

src/Frontend/src/components/audit/AuditList.vue

Lines changed: 3 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import { storeToRefs } from "pinia";
55
import Message, { MessageStatus } from "@/resources/Message";
66
import { useRoute, useRouter } from "vue-router";
77
import ResultsCount from "@/components/ResultsCount.vue";
8-
import { dotNetTimespanToMilliseconds, formatDotNetTimespan } from "@/composables/formatUtils";
8+
import { formatDotNetTimespan } from "@/composables/formatUtils";
99
import FiltersPanel from "@/components/audit/FiltersPanel.vue";
10+
import MessageStatusIcon from "@/components/audit/MessageStatusIcon.vue";
1011
import { onBeforeMount, onUnmounted, ref, watch } from "vue";
1112
import RefreshConfig from "../RefreshConfig.vue";
1213
import useAutoRefresh from "@/composables/autoRefresh";
@@ -36,49 +37,6 @@ onUnmounted(() => {
3637
dataRetriever.updateTimeout(null);
3738
});
3839
39-
function statusToName(messageStatus: MessageStatus) {
40-
switch (messageStatus) {
41-
case MessageStatus.Successful:
42-
return "Successful";
43-
case MessageStatus.ResolvedSuccessfully:
44-
return "Successful after retries";
45-
case MessageStatus.Failed:
46-
return "Failed";
47-
case MessageStatus.ArchivedFailure:
48-
return "Failed message deleted";
49-
case MessageStatus.RepeatedFailure:
50-
return "Repeated Failures";
51-
case MessageStatus.RetryIssued:
52-
return "Retry requested";
53-
}
54-
}
55-
56-
function statusToIcon(messageStatus: MessageStatus) {
57-
switch (messageStatus) {
58-
case MessageStatus.Successful:
59-
return "fa successful";
60-
case MessageStatus.ResolvedSuccessfully:
61-
return "fa resolved-successfully";
62-
case MessageStatus.Failed:
63-
return "fa failed";
64-
case MessageStatus.ArchivedFailure:
65-
return "fa archived";
66-
case MessageStatus.RepeatedFailure:
67-
return "fa repeated-failure";
68-
case MessageStatus.RetryIssued:
69-
return "fa retry-issued";
70-
}
71-
}
72-
73-
function hasWarning(message: Message) {
74-
return (
75-
message.status === MessageStatus.ResolvedSuccessfully || //
76-
dotNetTimespanToMilliseconds(message.critical_time) < 0 ||
77-
dotNetTimespanToMilliseconds(message.processing_time) < 0 ||
78-
dotNetTimespanToMilliseconds(message.delivery_time) < 0
79-
);
80-
}
81-
8240
function navigateToMessage(message: Message) {
8341
const query = router.currentRoute.value.query;
8442
@@ -169,10 +127,7 @@ watch(autoRefreshValue, (newValue) => dataRetriever.updateTimeout(newValue));
169127
<template v-for="message in messages" :key="message.id">
170128
<div class="item" @click="navigateToMessage(message)">
171129
<div class="status">
172-
<div class="status-container" v-tippy="{ content: statusToName(message.status) }">
173-
<div class="status-icon" :class="statusToIcon(message.status)"></div>
174-
<div v-if="hasWarning(message)" class="warning"></div>
175-
</div>
130+
<MessageStatusIcon :message="message" />
176131
</div>
177132
<div class="message-id">{{ message.message_id }}</div>
178133
<div class="message-type">{{ message.message_type }}</div>
@@ -251,52 +206,4 @@ watch(autoRefreshValue, (newValue) => dataRetriever.updateTimeout(newValue));
251206
.delivery-time {
252207
grid-area: delivery-time;
253208
}
254-
.status-container {
255-
color: white;
256-
width: 1.4em;
257-
height: 1.4em;
258-
position: relative;
259-
}
260-
261-
.status-icon {
262-
background-position: center;
263-
background-repeat: no-repeat;
264-
height: 1.4em;
265-
width: 1.4em;
266-
}
267-
268-
.warning {
269-
background-image: url("@/assets/warning.svg");
270-
background-position: bottom;
271-
background-repeat: no-repeat;
272-
height: 0.93em;
273-
width: 0.93em;
274-
position: absolute;
275-
right: 0;
276-
bottom: 0;
277-
}
278-
279-
.successful {
280-
background-image: url("@/assets/status_successful.svg");
281-
}
282-
283-
.resolved-successfully {
284-
background-image: url("@/assets/status_resolved.svg");
285-
}
286-
287-
.failed {
288-
background-image: url("@/assets/status_failed.svg");
289-
}
290-
291-
.archived {
292-
background-image: url("@/assets/status_archived.svg");
293-
}
294-
295-
.repeated-failure {
296-
background-image: url("@/assets/status_repeated_failed.svg");
297-
}
298-
299-
.retry-issued {
300-
background-image: url("@/assets/status_retry_issued.svg");
301-
}
302209
</style>
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
<script setup lang="ts">
2+
import { dotNetTimespanToMilliseconds } from "@/composables/formatUtils";
3+
import Message, { MessageStatus } from "@/resources/Message";
4+
import { defineProps, computed } from "vue";
5+
6+
const props = defineProps<{
7+
message: Message;
8+
}>();
9+
10+
const hasWarning = computed(() => {
11+
return (
12+
props.message.status === MessageStatus.ResolvedSuccessfully ||
13+
dotNetTimespanToMilliseconds(props.message.critical_time) < 0 ||
14+
dotNetTimespanToMilliseconds(props.message.processing_time) < 0 ||
15+
dotNetTimespanToMilliseconds(props.message.delivery_time) < 0
16+
);
17+
});
18+
19+
const statusInfo = computed(() => {
20+
switch (props.message.status) {
21+
case MessageStatus.Successful:
22+
return { name: "Successful", icon: "fa successful" };
23+
case MessageStatus.ResolvedSuccessfully:
24+
return { name: "Successful after retries", icon: "fa resolved-successfully" };
25+
case MessageStatus.Failed:
26+
return { name: "Failed", icon: "fa failed" };
27+
case MessageStatus.ArchivedFailure:
28+
return { name: "Failed message deleted", icon: "fa archived" };
29+
case MessageStatus.RepeatedFailure:
30+
return { name: "Repeated failures", icon: "fa repeated-failure" };
31+
case MessageStatus.RetryIssued:
32+
return { name: "Retry requested", icon: "fa retry-issued" };
33+
default:
34+
return { name: "Unknown status", icon: "fa fa-question-circle" };
35+
}
36+
});
37+
</script>
38+
39+
<template>
40+
<div class="status-container" v-tippy="{ content: statusInfo.name }">
41+
<div class="status-icon" :class="statusInfo.icon"></div>
42+
<div v-if="hasWarning" class="warning"></div>
43+
</div>
44+
</template>
45+
46+
<style scoped>
47+
.status-container {
48+
color: white;
49+
width: 1.4em;
50+
height: 1.4em;
51+
position: relative;
52+
}
53+
54+
.status-icon {
55+
background-position: center;
56+
background-repeat: no-repeat;
57+
height: 1.4em;
58+
width: 1.4em;
59+
}
60+
61+
.warning {
62+
background-image: url("@/assets/warning.svg");
63+
background-position: bottom;
64+
background-repeat: no-repeat;
65+
height: 0.93em;
66+
width: 0.93em;
67+
position: absolute;
68+
right: 0;
69+
bottom: 0;
70+
}
71+
72+
.successful {
73+
background-image: url("@/assets/status_successful.svg");
74+
}
75+
76+
.resolved-successfully {
77+
background-image: url("@/assets/status_resolved.svg");
78+
}
79+
80+
.failed {
81+
background-image: url("@/assets/status_failed.svg");
82+
}
83+
84+
.archived {
85+
background-image: url("@/assets/status_archived.svg");
86+
}
87+
88+
.repeated-failure {
89+
background-image: url("@/assets/status_repeated_failed.svg");
90+
}
91+
92+
.retry-issued {
93+
background-image: url("@/assets/status_retry_issued.svg");
94+
}
95+
</style>

0 commit comments

Comments
 (0)