Add better segmenting

This commit is contained in:
Dries Augustyns
2025-12-02 09:03:05 +01:00
parent b521a405bb
commit fe2e038037
23 changed files with 2285 additions and 855 deletions
+33 -14
View File
@@ -1,33 +1,52 @@
// Segment filter types
export type SegmentFilterOperator =
// Standard operators (for contact fields)
| 'equals'
| 'notEquals'
| 'contains'
| 'notContains'
| 'greaterThan'
| 'lessThan'
| 'greaterThanOrEqual'
| 'lessThanOrEqual'
| 'exists'
| 'notExists'
| 'within'
// Event-based operators
| 'triggered' // Event/email activity occurred (any time)
| 'triggeredWithin' // Event/email activity occurred within timeframe
| 'notTriggered'; // Event/email activity never occurred
export type SegmentFilterLogic = 'AND' | 'OR';
export interface SegmentFilter {
field: string;
operator:
| 'equals'
| 'notEquals'
| 'contains'
| 'notContains'
| 'greaterThan'
| 'lessThan'
| 'greaterThanOrEqual'
| 'lessThanOrEqual'
| 'exists'
| 'notExists'
| 'within';
operator: SegmentFilterOperator;
value?: any;
unit?: 'days' | 'hours' | 'minutes';
}
export interface FilterGroup {
filters: SegmentFilter[];
conditions?: FilterCondition;
}
export interface FilterCondition {
logic: SegmentFilterLogic;
groups: FilterGroup[];
}
export interface CreateSegmentData {
name: string;
description?: string;
filters: SegmentFilter[];
condition: FilterCondition;
trackMembership?: boolean;
}
export interface UpdateSegmentData {
name?: string;
description?: string;
filters?: SegmentFilter[];
condition?: FilterCondition;
trackMembership?: boolean;
}