# @memberjunction/ng-filter-builder A modern, intuitive Angular filter builder component for creating complex boolean filter expressions. Outputs portable, Kendo-compatible `CompositeFilterDescriptor` JSON for seamless integration with MemberJunction views and grids. ## Installation ```bash npm install @memberjunction/ng-filter-builder ``` ## Overview The Filter Builder provides a visual interface for constructing nested AND/OR filter expressions against entity fields. It supports multiple field types (string, number, boolean, date, lookup), nested groups up to a configurable depth, and generates a human-readable summary of the active filter. ```mermaid graph TD A["FilterBuilderComponent"] --> B["FilterGroupComponent"] B --> C["FilterRuleComponent"] B --> D["FilterRuleComponent"] B --> E["Nested FilterGroupComponent"] E --> F["FilterRuleComponent"] A --> G["CompositeFilterDescriptor JSON"] style A fill:#2d6a9f,stroke:#1a4971,color:#fff style B fill:#7c5295,stroke:#563a6b,color:#fff style C fill:#2d8659,stroke:#1a5c3a,color:#fff style D fill:#2d8659,stroke:#1a5c3a,color:#fff style E fill:#7c5295,stroke:#563a6b,color:#fff style F fill:#2d8659,stroke:#1a5c3a,color:#fff style G fill:#b8762f,stroke:#8a5722,color:#fff ``` ## Usage ### Module Import ```typescript import { FilterBuilderModule } from '@memberjunction/ng-filter-builder'; @NgModule({ imports: [FilterBuilderModule] }) export class YourModule {} ``` ### Basic Usage ```html ``` ### Defining Fields ```typescript import { FilterFieldInfo } from '@memberjunction/ng-filter-builder'; filterFields: FilterFieldInfo[] = [ { name: 'Name', displayName: 'Name', type: 'string' }, { name: 'Age', displayName: 'Age', type: 'number' }, { name: 'IsActive', displayName: 'Active', type: 'boolean' }, { name: 'CreatedAt', displayName: 'Created Date', type: 'date' }, { name: 'CategoryID', displayName: 'Category', type: 'lookup', lookupEntityName: 'Categories' } ]; ``` ### Configuration Options ```html ``` ## Components | Component | Selector | Purpose | |-----------|----------|---------| | `FilterBuilderComponent` | `mj-filter-builder` | Top-level container with config, summary, and clear/apply buttons | | `FilterGroupComponent` | internal | Renders a group of rules combined by AND/OR logic | | `FilterRuleComponent` | internal | Renders a single filter rule (field, operator, value) | ## Supported Operators by Field Type | Type | Operators | |------|-----------| | String | contains, does not contain, equals, not equals, starts with, ends with, is empty, is not empty | | Number | equals, not equals, greater than, greater/equal, less than, less/equal, is empty, is not empty | | Boolean | is, is not, is empty, is not empty | | Date | equals, not equals, is after, is on or after, is before, is on or before, is empty, is not empty | | Lookup | equals, not equals, contains, does not contain, starts with, ends with, is empty, is not empty | ## Exported Types - `FilterOperator` -- Union type of all operator strings - `FilterLogic` -- `'and' | 'or'` - `FilterDescriptor` -- Single filter condition - `CompositeFilterDescriptor` -- Group of filters with AND/OR logic - `FilterFieldInfo` -- Field metadata for the builder - `FilterBuilderConfig` -- Configuration options - `FilterValueOption` -- Value option for dropdown fields ## Utility Functions - `createEmptyFilter()` -- Creates a new empty `CompositeFilterDescriptor` - `createFilterRule(field, type)` -- Creates a new filter rule with defaults - `isCompositeFilter(filter)` -- Type guard for composite filters - `isSimpleFilter(filter)` -- Type guard for simple filter descriptors - `getOperatorsForType(type)` -- Returns available operators for a field type - `operatorRequiresValue(operator)` -- Checks if an operator needs a value input