Skip to content

Commit ec78482

Browse files
committed
add search input to message headers view
1 parent 996fa77 commit ec78482

File tree

1 file changed

+42
-3
lines changed

1 file changed

+42
-3
lines changed

src/Frontend/src/components/messages/HeadersView.vue

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,37 @@
11
<script setup lang="ts">
22
import { ExtendedFailedMessage } from "@/resources/FailedMessage";
33
import CopyToClipboard from "@/components/CopyToClipboard.vue";
4-
import { ref } from "vue";
4+
import { computed, ref } from "vue";
55
const props = defineProps<{
66
message: ExtendedFailedMessage;
77
}>();
88
99
const hoverStates = ref<Record<number, boolean>>({});
10-
10+
const searchTerm = ref<string>("");
1111
const 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

Comments
 (0)