mirror of
https://github.com/SigNoz/signoz.git
synced 2025-12-18 07:56:56 +00:00
4.9 KiB
4.9 KiB
QuerySearch Component Documentation
Overview
The QuerySearch component is a sophisticated query builder interface that allows users to construct complex search queries with real-time validation and autocomplete functionality.
Dependencies
// Core UI
import { Card, Collapse, Space, Tag, Typography } from 'antd';
// Code Editor
import {
autocompletion,
CompletionContext,
CompletionResult,
startCompletion,
} from '@codemirror/autocomplete';
import { javascript } from '@codemirror/lang-javascript';
import { ViewPlugin, ViewUpdate } from '@codemirror/view';
import { copilot } from '@uiw/codemirror-theme-copilot';
import CodeMirror, { EditorView, Extension } from '@uiw/react-codemirror';
// Custom Hooks and Utilities
import { useGetQueryKeySuggestions } from 'hooks/querySuggestions/useGetQueryKeySuggestions';
import { getValueSuggestions } from 'api/querySuggestions/getValueSuggestion';
import { queryOperatorSuggestions, validateQuery } from 'utils/antlrQueryUtils';
import { getQueryContextAtCursor } from 'utils/queryContextUtils';
Key Features
- Real-time query validation
- Context-aware autocompletion
- Support for various query operators (=, !=, IN, LIKE, etc.)
- Support for complex conditions with AND/OR operators
- Support for functions (HAS, HASANY, HASALL)
- Support for parentheses and nested conditions
- Query examples for common use cases
State Management
const [query, setQuery] = useState<string>('');
const [valueSuggestions, setValueSuggestions] = useState<any[]>([]);
const [activeKey, setActiveKey] = useState<string>('');
const [isLoadingSuggestions, setIsLoadingSuggestions] = useState(false);
const [queryContext, setQueryContext] = useState<IQueryContext | null>(null);
const [validation, setValidation] = useState<IValidationResult>({...});
const [editingMode, setEditingMode] = useState<'key' | 'operator' | 'value' | 'conjunction' | 'function' | 'parenthesis' | 'bracketList' | null>(null);
Core Functions
1. Autocomplete Handler
function myCompletions(context: CompletionContext): CompletionResult | null {
// Handles autocomplete suggestions based on context
// Supports different contexts: key, operator, value, function, etc.
}
2. Value Suggestions Fetcher
const fetchValueSuggestions = useCallback(
async (key: string): Promise<void> => {
// Fetches value suggestions for a given key
// Handles loading states and error cases
},
[activeKey, isLoadingSuggestions],
);
3. Query Change Handler
const handleQueryChange = useCallback(async (newQuery: string) => {
// Updates query and validates it
// Handles validation errors
}, []);
Query Context Types
- Key context: When editing a field name
- Operator context: When selecting an operator
- Value context: When entering a value
- Conjunction context: When using AND/OR
- Function context: When using functions
- Parenthesis context: When using parentheses
- Bracket list context: When using IN operator
Example Queries
const queryExamples = [
{ label: 'Basic Query', query: "status = 'error'" },
{ label: 'Multiple Conditions', query: "status = 'error' AND service = 'frontend'" },
{ label: 'IN Operator', query: "status IN ['error', 'warning']" },
{ label: 'Function Usage', query: "HAS(service, 'frontend')" },
{ label: 'Numeric Comparison', query: 'duration > 1000' },
// ... more examples
];
Performance Optimizations
- Uses
useCallbackfor memoized functions - Tracks component mount state to prevent updates after unmount
- Debounces suggestion fetching
- Caches key suggestions
Error Handling
try {
const validationResponse = validateQuery(newQuery);
setValidation(validationResponse);
} catch (error) {
setValidation({
isValid: false,
message: 'Failed to process query',
errors: [error as IDetailedError],
});
}
Usage Example
<QuerySearch />
Styling
- Uses SCSS for styling
- Custom classes for different components
- Theme integration with CodeMirror
Best Practices
- Always validate queries before submission
- Handle loading states appropriately
- Provide clear error messages
- Use appropriate operators for different data types
- Consider performance implications of complex queries
Common Issues and Solutions
- Query validation errors
- Check syntax and operator usage
- Verify data types match operator requirements
- Performance issues
- Optimize suggestion fetching
- Cache frequently used values
- UI/UX issues
- Ensure clear error messages
- Provide helpful suggestions
- Show appropriate loading states
Future Improvements
- Add more query examples
- Enhance error messages
- Improve performance for large datasets
- Add more operator support
- Enhance UI/UX features