mirror of
https://github.com/louislam/uptime-kuma.git
synced 2025-01-18 10:28:05 +00:00
Refactored: Improved search functionality in MonitorList.vue
- Enhanced the search logic to support regular expressions with case-insensitive matching. - Escaped special characters in the search text to prevent invalid regex patterns. - Expanded search coverage to include `monitor.url`, `monitor.hostname`, and `monitor.dns_resolve_server`. - Added error handling to catch and log invalid regex patterns, ensuring robustness. - Maintained compatibility with existing search fields, such as monitor name and tags. modified: src/components/MonitorList.vue Co-authored-by: Ionys <Ionys320@users.noreply.github.com>
This commit is contained in:
parent
be2faf64ce
commit
488e542ad8
1 changed files with 27 additions and 7 deletions
|
@ -320,15 +320,35 @@ export default {
|
|||
}
|
||||
}
|
||||
|
||||
// filter by search text
|
||||
// finds monitor name, tag name or tag value
|
||||
// Filter monitors based on the search text
|
||||
// Matches monitor name, URL, hostname, DNS resolve server, or tag names and values
|
||||
let searchTextMatch = true;
|
||||
if (this.searchText !== "") {
|
||||
const loweredSearchText = this.searchText.toLowerCase();
|
||||
searchTextMatch =
|
||||
monitor.name.toLowerCase().includes(loweredSearchText)
|
||||
|| monitor.tags.find(tag => tag.name.toLowerCase().includes(loweredSearchText)
|
||||
|| tag.value?.toLowerCase().includes(loweredSearchText));
|
||||
try {
|
||||
// Escape special characters for use in the regular expression
|
||||
const escapeRegExp = (string) => {
|
||||
return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
||||
};
|
||||
|
||||
// Create a case-insensitive regex for the search text
|
||||
const escapedSearchText = escapeRegExp(this.searchText);
|
||||
const regex = new RegExp(escapedSearchText, "i");
|
||||
|
||||
// Test the regex against strings safely
|
||||
const safeRegexTest = (str) => str && regex.test(str);
|
||||
|
||||
// Check if any relevant fields match the search text
|
||||
searchTextMatch =
|
||||
regex.test(monitor.name) ||
|
||||
safeRegexTest(monitor.url) ||
|
||||
safeRegexTest(monitor.hostname) ||
|
||||
safeRegexTest(monitor.dns_resolve_server) ||
|
||||
monitor.tags.some(tag => regex.test(tag.name) || safeRegexTest(tag.value));
|
||||
} catch (e) {
|
||||
// Log error if the regex pattern is invalid
|
||||
console.error("Invalid regex pattern:", e);
|
||||
searchTextMatch = false;
|
||||
}
|
||||
}
|
||||
|
||||
// filter by status
|
||||
|
|
Loading…
Reference in a new issue