@happy-table/vue3
Version:
A high-performance Vue 3 table component for B2B systems with TypeScript support
93 lines (92 loc) • 3.21 kB
TypeScript
import { TableRow, TableColumn } from '../types';
import { getNestedValue } from './common';
export { getNestedValue };
export type FilterOperator = 'equals' | 'notEquals' | 'contains' | 'notContains' | 'startsWith' | 'endsWith' | 'greaterThan' | 'lessThan' | 'greaterThanOrEqual' | 'lessThanOrEqual' | 'between' | 'in' | 'notIn' | 'isEmpty' | 'isNotEmpty' | 'regex';
export interface FilterCondition {
column: string;
operator: FilterOperator;
value: unknown;
caseSensitive?: boolean;
}
export interface FilterGroup {
conditions: (FilterCondition | FilterGroup)[];
operator: 'and' | 'or';
}
export interface SearchConfig {
text: string;
columns?: string[];
caseSensitive?: boolean;
regex?: boolean;
highlight?: boolean;
}
export interface FilterResult {
data: TableRow[];
highlightInfo?: Map<string, HighlightInfo[]>;
}
export interface HighlightInfo {
column: string;
matches: Array<{
start: number;
end: number;
text: string;
}>;
}
/**
* Get value from nested object path
*/
/**
* Convert value to string for comparison
*/
export declare function valueToString(value: any): string;
/**
* Apply a single filter condition to a row
*/
export declare function applyFilterCondition(row: TableRow, condition: FilterCondition): boolean;
/**
* Apply filter group (complex filtering with AND/OR logic)
*/
export declare function applyFilterGroup(row: TableRow, group: FilterGroup): boolean;
/**
* Simple text search across multiple columns
*/
export declare function applyTextSearch(data: TableRow[], searchConfig: SearchConfig, columns: TableColumn[]): FilterResult;
/**
* Apply complex filtering with conditions and groups
*/
export declare function applyComplexFilter(data: TableRow[], filterGroup: FilterGroup): TableRow[];
/**
* Combine multiple filters (search + complex filters)
*/
export declare function applyAllFilters(data: TableRow[], searchConfig?: SearchConfig, filterGroup?: FilterGroup, columns?: TableColumn[]): FilterResult;
/**
* Create a simple filter condition
*/
export declare function createFilterCondition(column: string, operator: FilterOperator, value: any, caseSensitive?: boolean): FilterCondition;
/**
* Create a filter group
*/
export declare function createFilterGroup(conditions: (FilterCondition | FilterGroup)[], operator?: 'and' | 'or'): FilterGroup;
/**
* Validate filter condition
*/
export declare function validateFilterCondition(condition: FilterCondition, columns: TableColumn[]): boolean;
/**
* Validate filter group recursively
*/
export declare function validateFilterGroup(group: FilterGroup, columns: TableColumn[]): boolean;
/**
* Get filterable columns from column configuration
*/
export declare function getFilterableColumns(columns: TableColumn[]): TableColumn[];
/**
* Extract unique values from a column for filter options
*/
export declare function getColumnUniqueValues(data: TableRow[], columnKey: string, limit?: number): any[];
/**
* Highlight text matches in a string
*/
export declare function highlightMatches(text: string, matches: Array<{
start: number;
end: number;
text: string;
}>, highlightClass?: string): string;