Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 45 additions & 13 deletions src/components/Logs.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,37 @@
disable-sort
dense
:search="search"
:custom-filter="customFilter"
>
<template v-slot:top>
<v-container>
<v-row>
<v-col>
<v-select
label="Log"
:items="log_names"
v-model="filterValue"
></v-select>
</v-col>
<v-flex class="d-flex align-center pl-4 pr-4">
<v-select
label="Log"
:items="log_names"
v-model="filterValue"
></v-select>
<v-spacer></v-spacer>
<v-col>
<v-spacer></v-spacer>
<v-flex class="d-flex align-center">
<v-text-field
prepend-icon="mdi-magnify"
label="Search"
v-model="search"
></v-text-field>
</v-col>
</v-row>
</v-container>
<v-btn
icon
@click="caseSensitive = !caseSensitive"
title="Aa">
<v-icon :disabled="!caseSensitive" color="primary">mdi-format-letter-case</v-icon>
</v-btn>
<v-btn
icon
@click="searchRegex = !searchRegex"
title=".*">
<v-icon :disabled="!searchRegex" color="primary">mdi-regex</v-icon>
</v-btn>
</v-flex>
</v-flex>
</template>

</v-data-table>
Expand All @@ -45,6 +55,8 @@ export default {
data: function () {
return {
search: null,
searchRegex: false,
caseSensitive: false,
headers:
[
{text: "Log Entry", value: "line"},
Expand Down Expand Up @@ -83,6 +95,26 @@ export default {
this.items.unshift(data)
}
},
customFilter(value, queryText, item) {
if (this.searchRegex) {
try {
const flags = this.caseSensitive ? '' : 'i'; // 'i' for case-insensitive
const regex = new RegExp(queryText, flags);
// filter items by regex
return regex.test(item.line);
} catch (e) {
console.error("Invalid regex:", e);
return false; // If regex is invalid, don't match
}
} else {
// Fallback to simple substring search
if (!this.caseSensitive) {
return item.line.toLowerCase().includes(queryText.toLowerCase());
} else {
return item.line.includes(queryText);
}
}
}
}
}
</script>