@@ -4,15 +4,16 @@ import { useAuditStore } from "@/stores/AuditStore";
4
4
import { storeToRefs } from " pinia" ;
5
5
import Message , { MessageStatus } from " @/resources/Message" ;
6
6
import moment from " moment" ;
7
- import { useRoute } from " vue-router" ;
7
+ import { useRoute , useRouter } from " vue-router" ;
8
8
import ResultsCount from " @/components/ResultsCount.vue" ;
9
- import { dotNetTimespanToMilliseconds , formatDotNetTimespan , formatTypeName } from " @/composables/formatUtils.ts" ;
9
+ import { dotNetTimespanToMilliseconds , formatDotNetTimespan } from " @/composables/formatUtils.ts" ;
10
10
import " @vuepic/vue-datepicker/dist/main.css" ;
11
11
import FiltersPanel from " @/components/audit/FiltersPanel.vue" ;
12
12
13
13
const store = useAuditStore ();
14
14
const { messages, totalCount } = storeToRefs (store );
15
15
const route = useRoute ();
16
+ const router = useRouter ();
16
17
17
18
function statusToName(messageStatus : MessageStatus ) {
18
19
switch (messageStatus ) {
@@ -67,6 +68,19 @@ function hasWarning(message: Message) {
67
68
68
69
return false ;
69
70
}
71
+
72
+ function navigateToMessage(message : Message ) {
73
+ const query = router .currentRoute .value .query ;
74
+
75
+ if (message .status === MessageStatus .Successful ) {
76
+ router .push ({
77
+ path: routeLinks .messages .successMessage .link (message .message_id , message .id ),
78
+ query: { ... query , ... { back: route .path } },
79
+ });
80
+ } else {
81
+ router .push ({ path: routeLinks .messages .failedMessage .link (message .id ), query: { ... query , ... { back: route .path } } });
82
+ }
83
+ }
70
84
</script >
71
85
72
86
<template >
@@ -78,39 +92,23 @@ function hasWarning(message: Message) {
78
92
<ResultsCount :displayed =" messages.length" :total =" totalCount" />
79
93
</div >
80
94
<div class =" row results-table" >
81
- <section role =" table" aria-label =" endpoint-instances" >
82
- <!-- Table rows-->
83
- <!-- NOTE: currently the DataView pages on the client only: we need to make it server data aware (i.e. the total will be the count from the server, not the length of the data we have locally)-->
84
- <div role =" rowgroup" aria-label =" messages" >
85
- <div role =" row" :aria-label =" message.message_id" class =" row grid-row" v-for =" message in messages" :key =" message.id" >
86
- <div role =" cell" aria-label =" status" class =" status" :title =" statusToName(message.status)" >
87
- <div class =" status-container" >
88
- <div class =" status-icon" :class =" statusToIcon(message.status)" ></div >
89
- <div v-if =" hasWarning(message)" class =" warning" ></div >
90
- </div >
91
- </div >
92
- <div role =" cell" aria-label =" message-id" class =" col-3 message-id" >
93
- <div class =" box-header" >
94
- <RouterLink v-if =" message.status === MessageStatus.Successful" aria-label =" details-link" :to =" { path: routeLinks.messages.successMessage.link(message.message_id, message.id), query: { back: route.path } }" >
95
- {{ message.message_id }}
96
- </RouterLink >
97
- <RouterLink v-else aria-label =" details-link" :to =" { path: routeLinks.messages.failedMessage.link(message.id), query: { back: route.path } }" >
98
- {{ message.message_id }}
99
- </RouterLink >
100
- </div >
101
- </div >
102
- <div role =" cell" aria-label =" message-type" class =" col-3 message-type" >
103
- {{ formatTypeName(message.message_type) }}
104
- </div >
105
- <div role =" cell" aria-label =" time-sent" class =" col-2 time-sent" >
106
- {{ moment(message.time_sent).local().format("LLLL") }}
107
- </div >
108
- <div role =" cell" aria-label =" processing-time" class =" col-2 processing-time" >
109
- {{ formatDotNetTimespan(message.processing_time) }}
95
+ <template v-for =" message in messages " :key =" message .id " >
96
+ <div class =" item" @click =" navigateToMessage(message)" >
97
+ <div class =" status" >
98
+ <div class =" status-container" v-tippy =" { content: statusToName(message.status) }" >
99
+ <div class =" status-icon" :class =" statusToIcon(message.status)" ></div >
100
+ <div v-if =" hasWarning(message)" class =" warning" ></div >
110
101
</div >
111
102
</div >
103
+ <div class =" message-id" >{{ message.message_id }}</div >
104
+ <div class =" message-type" >{{ message.message_type }}</div >
105
+ <div class =" time-sent" ><span class =" label-name" >Time Sent:</span >{{ moment(message.time_sent).local().format("LLLL") }}</div >
106
+ <div class =" critical-time" ><span class =" label-name" >Critical Time:</span >{{ formatDotNetTimespan(message.critical_time) }}</div >
107
+ <div class =" processing-time" ><span class =" label-name" >Processing Time:</span >{{ formatDotNetTimespan(message.processing_time) }}</div >
108
+ <div class =" delivery-time" ><span class =" label-name" >Delivery Time:</span >{{ formatDotNetTimespan(message.delivery_time) }}</div >
112
109
</div >
113
- </section >
110
+ <div class =" spacer" ></div >
111
+ </template >
114
112
</div >
115
113
</div >
116
114
</template >
@@ -120,13 +118,56 @@ function hasWarning(message: Message) {
120
118
.results-table {
121
119
margin-top : 1rem ;
122
120
margin-bottom : 5rem ;
121
+ padding : 10px 0 ;
122
+ background-color : #ffffff ;
123
+ }
124
+ .spacer {
125
+ border-bottom : 1px solid #b1afaf ;
126
+ margin-top : 0.1rem ;
127
+ margin-bottom : 0.1rem ;
128
+ }
129
+ .item {
130
+ padding : 3px ;
131
+ border : 1px solid #ffffff ;
132
+ display : grid ;
133
+ grid-template-columns : 25px 1fr 1fr 1fr 1fr ;
134
+ grid-template-rows : 1fr 1fr ;
135
+ gap : 6px ;
136
+ grid-template-areas :
137
+ " status message-type message-type message-type time-sent"
138
+ " status message-id processing-time critical-time delivery-time" ;
139
+ }
140
+ .item :hover {
141
+ border : 1px solid #00a3c4 ;
142
+ background-color : #edf6f7 ;
143
+ cursor : pointer ;
144
+ }
145
+ .label-name {
146
+ margin-right : 4px ;
147
+ color : #777f7f ;
123
148
}
124
-
125
149
.status {
126
- width : 5em ;
127
- text-align : center ;
150
+ grid-area : status;
151
+ }
152
+ .message-id {
153
+ grid-area : message-id;
154
+ }
155
+ .time-sent {
156
+ grid-area : time-sent;
157
+ }
158
+ .message-type {
159
+ grid-area : message-type;
160
+ font-weight : bold ;
161
+ }
162
+ .processing-time {
163
+ grid-area : processing-time;
164
+ }
165
+ .critical-time {
166
+ grid-area : critical-time;
167
+ }
168
+ .delivery-time {
169
+ grid-area : delivery-time;
128
170
}
129
-
130
171
.status-container {
131
172
color : white ;
132
173
width : 20px ;
0 commit comments