1
1
<script setup lang="ts">
2
2
import { ExtendedFailedMessage } from " @/resources/FailedMessage" ;
3
3
import CopyToClipboard from " @/components/CopyToClipboard.vue" ;
4
- import { ref } from " vue" ;
4
+ import { computed , ref } from " vue" ;
5
5
const props = defineProps <{
6
6
message: ExtendedFailedMessage ;
7
7
}>();
8
8
9
9
const hoverStates = ref <Record <number , boolean >>({});
10
-
10
+ const searchTerm = ref < string >( " " );
11
11
const toggleHover = (index : number , state : boolean ) => {
12
12
hoverStates .value [index ] = state ;
13
13
};
14
+ // Computed property to filter headers based on search term
15
+ const filteredHeaders = computed (() => {
16
+ if (! searchTerm .value ) {
17
+ return props .message .headers ;
18
+ }
19
+ return props .message .headers .filter ((header ) => header .key .toLowerCase ().includes (searchTerm .value .toLowerCase ()));
20
+ });
21
+ function clearSearch() {
22
+ searchTerm .value = " " ; // Clears the search term
23
+ }
14
24
</script >
15
25
16
26
<template >
27
+ <div class =" searchheader" >
28
+ <input v-model =" searchTerm" type =" text" placeholder =" Search for a header key" class =" search-input" />
29
+ <button v-if =" searchTerm" title =" Clear" @click =" clearSearch" class =" clear-btn" >X</button >
30
+ </div >
31
+
17
32
<table class =" table" v-if =" !props.message.headersNotFound" >
18
33
<tbody >
19
- <tr class =" interactiveList" v-for =" (header, index) in props.message.headers " :key =" index" >
34
+ <tr class =" interactiveList" v-for =" (header, index) in filteredHeaders " :key =" index" >
20
35
<td nowrap =" nowrap" >{{ header.key }}</td >
21
36
<td >
22
37
<div class =" headercopy" @mouseover =" toggleHover(index, true)" @mouseleave =" toggleHover(index, false)" >
@@ -36,4 +51,28 @@ const toggleHover = (index: number, state: boolean) => {
36
51
align-items : top ;
37
52
gap : 10px ;
38
53
}
54
+ .searchheader {
55
+ display : flex ;
56
+ /* justify-content: flex-end;*/
57
+ align-items : center ;
58
+ margin-bottom : 10px ;
59
+ }
60
+
61
+ /* Style for the search input */
62
+ .search-input {
63
+ padding : 5px ;
64
+ margin-right : 10px ;
65
+ }
66
+
67
+ /* Style for the clear button */
68
+ .clear-btn {
69
+ background : none ;
70
+ border : none ;
71
+ color : #888 ;
72
+ font-size : 16px ;
73
+ cursor : pointer ;
74
+ padding : 0 ;
75
+ margin : 0 ;
76
+ font-weight : bold ;
77
+ }
39
78
</style >
0 commit comments