11<script setup lang="ts">
22import { ExtendedFailedMessage } from " @/resources/FailedMessage" ;
33import CopyToClipboard from " @/components/CopyToClipboard.vue" ;
4- import { ref } from " vue" ;
4+ import { computed , ref } from " vue" ;
55const props = defineProps <{
66 message: ExtendedFailedMessage ;
77}>();
88
99const hoverStates = ref <Record <number , boolean >>({});
10-
10+ const searchTerm = ref < string >( " " );
1111const toggleHover = (index : number , state : boolean ) => {
1212 hoverStates .value [index ] = state ;
1313};
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+ }
1424 </script >
1525
1626<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+
1732 <table class =" table" v-if =" !props.message.headersNotFound" >
1833 <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" >
2035 <td nowrap =" nowrap" >{{ header.key }}</td >
2136 <td >
2237 <div class =" headercopy" @mouseover =" toggleHover(index, true)" @mouseleave =" toggleHover(index, false)" >
@@ -36,4 +51,28 @@ const toggleHover = (index: number, state: boolean) => {
3651 align-items : top ;
3752 gap : 10px ;
3853}
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+ }
3978 </style >
0 commit comments