@limetech/lime-crm-building-blocks 1.98.0 → 1.99.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/cjs/{index.esm-a894ac76.js → index.esm-d785eb6e.js} +2 -0
- package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
- package/dist/cjs/limebb-browser.cjs.entry.js +1 -1
- package/dist/cjs/limebb-chat-item_2.cjs.entry.js +1 -1
- package/dist/cjs/limebb-chat-list.cjs.entry.js +1 -1
- package/dist/cjs/limebb-component-config.cjs.entry.js +1 -1
- package/dist/cjs/limebb-component-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-currency-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-feed-timeline-item.cjs.entry.js +1 -1
- package/dist/cjs/limebb-feed.cjs.entry.js +1 -1
- package/dist/cjs/limebb-info-tile.cjs.entry.js +1 -1
- package/dist/cjs/limebb-kanban-group.cjs.entry.js +1 -1
- package/dist/cjs/limebb-kanban-item.cjs.entry.js +1 -1
- package/dist/cjs/limebb-lime-query-builder.cjs.entry.js +89 -169
- package/dist/cjs/limebb-lime-query-filter-and.cjs.entry.js +80 -0
- package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +147 -0
- package/dist/cjs/limebb-lime-query-filter-group_4.cjs.entry.js +603 -0
- package/dist/cjs/limebb-lime-query-filter-or.cjs.entry.js +68 -0
- package/dist/cjs/limebb-limeobject-file-viewer.cjs.entry.js +1 -1
- package/dist/cjs/limebb-limetype-field_2.cjs.entry.js +37 -6
- package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
- package/dist/cjs/limebb-loader.cjs.entry.js +1 -1
- package/dist/cjs/limebb-locale-picker.cjs.entry.js +2 -2
- package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
- package/dist/cjs/limebb-mention.cjs.entry.js +1 -1
- package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +3 -3
- package/dist/cjs/limebb-notification-item.cjs.entry.js +2 -2
- package/dist/cjs/limebb-notification-list.cjs.entry.js +1 -1
- package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
- package/dist/cjs/limebb-text-editor.cjs.entry.js +3 -3
- package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
- package/dist/cjs/{limetype-1fe0207f.js → limetype-f2e4376e.js} +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-and.js +41 -49
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +77 -41
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-expression.js +35 -46
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.css +130 -0
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +269 -0
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +19 -25
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-or.js +34 -34
- package/dist/collection/components/lime-query-builder/lime-query-builder.js +32 -17
- package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
- package/dist/collection/components/limeobject/file-viewer/live-docs-info.js +2 -2
- package/dist/collection/components/locale-picker/locale-picker.js +1 -1
- package/dist/collection/components/notification-list/notification-item/notification-item.js +1 -1
- package/dist/collection/components/percentage-visualizer/percentage-visualizer.js +2 -2
- package/dist/collection/components/summary-popover/summary-popover.js +3 -3
- package/dist/collection/components/text-editor/mention-group-counter.js +2 -2
- package/dist/collection/components/text-editor/text-editor.js +1 -1
- package/dist/collection/components/trend-indicator/trend-indicator.js +1 -1
- package/dist/components/index.esm.js +2 -1
- package/dist/components/lime-query-filter-comparison.js +32 -45
- package/dist/components/lime-query-filter-expression.js +315 -0
- package/dist/components/limebb-lime-query-builder.js +93 -177
- package/dist/components/limebb-lime-query-filter-and.js +130 -1
- package/dist/components/limebb-lime-query-filter-comparison.js +1 -1
- package/dist/components/limebb-lime-query-filter-expression.js +1 -1
- package/dist/components/limebb-lime-query-filter-group.d.ts +11 -0
- package/dist/components/limebb-lime-query-filter-group.js +6 -0
- package/dist/components/limebb-lime-query-filter-not.js +1 -1
- package/dist/components/limebb-lime-query-filter-or.js +118 -1
- package/dist/components/limebb-locale-picker.js +1 -1
- package/dist/components/limebb-mention-group-counter.js +2 -2
- package/dist/components/limebb-percentage-visualizer.js +2 -2
- package/dist/components/limebb-text-editor.js +1 -1
- package/dist/components/limebb-trend-indicator.js +1 -1
- package/dist/components/limetype-field.js +34 -2
- package/dist/components/live-docs-info.js +2 -2
- package/dist/components/notification-item.js +1 -1
- package/dist/components/summary-popover.js +3 -3
- package/dist/esm/{index.esm-d8fdeb18.js → index.esm-bb569663.js} +2 -1
- package/dist/esm/lime-crm-building-blocks.js +1 -1
- package/dist/esm/limebb-browser.entry.js +1 -1
- package/dist/esm/limebb-chat-item_2.entry.js +1 -1
- package/dist/esm/limebb-chat-list.entry.js +1 -1
- package/dist/esm/limebb-component-config.entry.js +1 -1
- package/dist/esm/limebb-component-picker.entry.js +1 -1
- package/dist/esm/limebb-currency-picker.entry.js +1 -1
- package/dist/esm/limebb-date-picker.entry.js +1 -1
- package/dist/esm/limebb-feed-timeline-item.entry.js +1 -1
- package/dist/esm/limebb-feed.entry.js +1 -1
- package/dist/esm/limebb-info-tile.entry.js +1 -1
- package/dist/esm/limebb-kanban-group.entry.js +1 -1
- package/dist/esm/limebb-kanban-item.entry.js +1 -1
- package/dist/esm/limebb-lime-query-builder.entry.js +88 -168
- package/dist/esm/limebb-lime-query-filter-and.entry.js +76 -0
- package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +142 -0
- package/dist/esm/limebb-lime-query-filter-group_4.entry.js +596 -0
- package/dist/esm/limebb-lime-query-filter-or.entry.js +64 -0
- package/dist/esm/limebb-limeobject-file-viewer.entry.js +1 -1
- package/dist/esm/limebb-limetype-field_2.entry.js +36 -5
- package/dist/esm/limebb-live-docs-info.entry.js +2 -2
- package/dist/esm/limebb-loader.entry.js +1 -1
- package/dist/esm/limebb-locale-picker.entry.js +2 -2
- package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
- package/dist/esm/limebb-mention.entry.js +1 -1
- package/dist/esm/limebb-navigation-button_2.entry.js +3 -3
- package/dist/esm/limebb-notification-item.entry.js +2 -2
- package/dist/esm/limebb-notification-list.entry.js +1 -1
- package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
- package/dist/esm/limebb-text-editor.entry.js +3 -3
- package/dist/esm/limebb-trend-indicator.entry.js +1 -1
- package/dist/esm/{limetype-6e7552a7.js → limetype-c0e041f7.js} +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
- package/dist/lime-crm-building-blocks/p-03accd53.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-a1818969.entry.js → p-03af0e66.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-f402184f.entry.js → p-098ee6c1.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-42e52b50.entry.js → p-1be0eec7.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-2aa18c2b.entry.js → p-206575e4.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-20bfca36.js +1 -0
- package/dist/lime-crm-building-blocks/{p-82d33d43.entry.js → p-2faaacbc.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-d4016891.entry.js → p-2fdcb868.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-f52125a0.entry.js → p-3122ea05.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-baf4e428.entry.js → p-3175883d.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-8c8b7115.entry.js → p-32534eb7.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-6c1146ca.entry.js → p-36ea13c0.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-4715210d.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-1fba0ade.js → p-4838284a.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-5e4ba110.entry.js → p-5464f0de.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-e9d23ef7.entry.js → p-569c86b5.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-90e1716a.entry.js → p-5dc574a3.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-5f7644b5.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-00da9b24.entry.js → p-631ca5a5.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-67dbaa4c.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-beb0d164.entry.js → p-7271f47a.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-34357744.entry.js → p-9031f136.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-91732502.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-8c4eb49f.entry.js → p-93cadc1e.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-3932077b.entry.js → p-9cac4de2.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-79d4668a.entry.js → p-a200954f.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-aa646df7.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-d89c44ad.entry.js → p-b9b954d9.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-3a620226.entry.js → p-cfa1a4ad.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-ef8a5266.entry.js → p-e8946134.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-9d9f25da.entry.js → p-eb81bceb.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-50d3d61a.entry.js → p-ee1b00b9.entry.js} +1 -1
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-and.d.ts +5 -4
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-comparison.d.ts +6 -4
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-expression.d.ts +10 -14
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-group.d.ts +60 -0
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-not.d.ts +4 -4
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-or.d.ts +5 -4
- package/dist/types/components/lime-query-builder/lime-query-builder.d.ts +6 -0
- package/dist/types/components/lime-query-builder/lime-query.types.d.ts +2 -1
- package/dist/types/components.d.ts +177 -65
- package/package.json +1 -1
- package/dist/cjs/isEqual-e77cce75.js +0 -37
- package/dist/cjs/lime-query.types-bcb63a22.js +0 -61
- package/dist/cjs/limebb-lime-query-filter-and_5.cjs.entry.js +0 -278
- package/dist/cjs/limebb-lime-query-value-input.cjs.entry.js +0 -239
- package/dist/cjs/limebb-property-selector.cjs.entry.js +0 -234
- package/dist/components/isEqual.js +0 -35
- package/dist/components/lime-query-filter-and.js +0 -408
- package/dist/esm/isEqual-57d0c223.js +0 -35
- package/dist/esm/lime-query.types-f72355e1.js +0 -59
- package/dist/esm/limebb-lime-query-filter-and_5.entry.js +0 -270
- package/dist/esm/limebb-lime-query-value-input.entry.js +0 -235
- package/dist/esm/limebb-property-selector.entry.js +0 -230
- package/dist/lime-crm-building-blocks/p-02c0cc04.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-0957b2a6.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-3b0a15ec.js +0 -1
- package/dist/lime-crm-building-blocks/p-5a6d2e7f.js +0 -1
- package/dist/lime-crm-building-blocks/p-60971d64.js +0 -1
- package/dist/lime-crm-building-blocks/p-70a28b93.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-96beaabc.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-f99c611d.entry.js +0 -1
|
@@ -3,66 +3,67 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
const index = require('./index-ff255a0d.js');
|
|
6
|
-
const index_esm = require('./index.esm-
|
|
7
|
-
const limeQuery_types = require('./lime-query.types-bcb63a22.js');
|
|
6
|
+
const index_esm = require('./index.esm-d785eb6e.js');
|
|
8
7
|
const propertyResolution = require('./property-resolution-fb42a46b.js');
|
|
9
8
|
|
|
10
9
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* TypeScript type definitions for Lime Query DSL
|
|
11
|
+
*
|
|
12
|
+
* These types represent the structure of Lime Query as defined in:
|
|
13
|
+
* - lime-core/lime_query/schema.py
|
|
14
|
+
* - lime-core/lime_filter/schema.py
|
|
13
15
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
16
|
+
/**
|
|
17
|
+
* Available operators with display metadata
|
|
18
|
+
*/
|
|
19
|
+
const LIME_QUERY_OPERATORS = [
|
|
20
|
+
{ value: '=', label: 'Equals', icon: 'equals' },
|
|
21
|
+
{ value: '!=', label: 'Not Equals', icon: 'not-equal' },
|
|
22
|
+
{
|
|
23
|
+
value: '>',
|
|
24
|
+
label: 'Greater Than',
|
|
25
|
+
icon: 'greater-than',
|
|
26
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
value: '>=',
|
|
30
|
+
label: 'Greater or Equal',
|
|
31
|
+
icon: 'greater-or-equal',
|
|
32
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
value: '<',
|
|
36
|
+
label: 'Less Than',
|
|
37
|
+
icon: 'less-than',
|
|
38
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
value: '<=',
|
|
42
|
+
label: 'Less or Equal',
|
|
43
|
+
icon: 'less-or-equal',
|
|
44
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
45
|
+
},
|
|
46
|
+
{ value: 'IN', label: 'In List', icon: 'list' },
|
|
47
|
+
{
|
|
48
|
+
value: '?',
|
|
49
|
+
label: 'Contains',
|
|
50
|
+
icon: '-lime-filter-contain',
|
|
51
|
+
applicableTypes: ['string', 'text'],
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
value: '=?',
|
|
55
|
+
label: 'Begins With',
|
|
56
|
+
icon: '-lime-filter-begin',
|
|
57
|
+
applicableTypes: ['string', 'text'],
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
value: '=$',
|
|
61
|
+
label: 'Ends With',
|
|
62
|
+
icon: '-lime-filter-end',
|
|
63
|
+
applicableTypes: ['string', 'text'],
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
|
|
66
67
|
/**
|
|
67
68
|
* Validate and convert a FilterExpression (comparison filter)
|
|
68
69
|
* @param filter
|
|
@@ -73,7 +74,7 @@ function validateAndConvertFilterExpression(filter) {
|
|
|
73
74
|
throw new Error('Invalid filter: comparison must have key, op, and exp properties');
|
|
74
75
|
}
|
|
75
76
|
// Validate operator is supported
|
|
76
|
-
const supportedOps =
|
|
77
|
+
const supportedOps = LIME_QUERY_OPERATORS.map((o) => o.value);
|
|
77
78
|
if (!supportedOps.includes(filter.op)) {
|
|
78
79
|
throw new Error(`Unsupported filter operator: ${filter.op}`);
|
|
79
80
|
}
|
|
@@ -164,103 +165,6 @@ function limeQueryToGuiFilter(filter) {
|
|
|
164
165
|
// It's a FilterGroup
|
|
165
166
|
return validateAndConvertFilterGroup(filter);
|
|
166
167
|
}
|
|
167
|
-
/**
|
|
168
|
-
* Normalize filter for GUI mode by ensuring proper AND/OR wrapper structure.
|
|
169
|
-
* GUI mode requires filters to be wrapped in AND([OR(...)]) so users have
|
|
170
|
-
* access to add/remove buttons on the AND and OR components.
|
|
171
|
-
*
|
|
172
|
-
* This function ensures that:
|
|
173
|
-
* - Single comparisons are wrapped in AND([OR([comparison])])
|
|
174
|
-
* - OR groups are wrapped in AND([OR group])
|
|
175
|
-
* - AND groups have their comparison children wrapped in OR
|
|
176
|
-
* - Empty/undefined filters become AND([])
|
|
177
|
-
*
|
|
178
|
-
* When converting back to Lime Query JSON, limeQueryFilterToLimeQuery()
|
|
179
|
-
* automatically unwraps single-item AND/OR groups.
|
|
180
|
-
*
|
|
181
|
-
* @param filter The filter expression from limeQueryToLimeQueryFilter
|
|
182
|
-
* @returns Normalized filter suitable for GUI editing
|
|
183
|
-
*/
|
|
184
|
-
function normalizeLimeQueryFilterForGui(filter) {
|
|
185
|
-
// Empty AND is already correct for GUI
|
|
186
|
-
if (filter.filter_type === 'AND' && filter.expressions.length === 0) {
|
|
187
|
-
return filter;
|
|
188
|
-
}
|
|
189
|
-
// Single comparison needs wrapping
|
|
190
|
-
if (filter.filter_type === 'comparison') {
|
|
191
|
-
return {
|
|
192
|
-
filter_type: 'AND',
|
|
193
|
-
expressions: [
|
|
194
|
-
{
|
|
195
|
-
filter_type: 'OR',
|
|
196
|
-
expressions: [filter],
|
|
197
|
-
},
|
|
198
|
-
],
|
|
199
|
-
};
|
|
200
|
-
}
|
|
201
|
-
// OR needs wrapping in AND
|
|
202
|
-
if (filter.filter_type === 'OR') {
|
|
203
|
-
return {
|
|
204
|
-
filter_type: 'AND',
|
|
205
|
-
expressions: [filter],
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
// NOT needs wrapping
|
|
209
|
-
if (filter.filter_type === 'NOT') {
|
|
210
|
-
return {
|
|
211
|
-
filter_type: 'AND',
|
|
212
|
-
expressions: [
|
|
213
|
-
{
|
|
214
|
-
filter_type: 'OR',
|
|
215
|
-
expressions: [filter],
|
|
216
|
-
},
|
|
217
|
-
],
|
|
218
|
-
};
|
|
219
|
-
}
|
|
220
|
-
// AND group - check if children need OR wrappers
|
|
221
|
-
if (filter.filter_type === 'AND') {
|
|
222
|
-
const normalizedChildren = filter.expressions.map((child) => {
|
|
223
|
-
// If child is already OR, keep it
|
|
224
|
-
if (child.filter_type === 'OR') {
|
|
225
|
-
return child;
|
|
226
|
-
}
|
|
227
|
-
// If child is NOT, keep it (NOT can be a direct child of AND)
|
|
228
|
-
if (child.filter_type === 'NOT') {
|
|
229
|
-
return child;
|
|
230
|
-
}
|
|
231
|
-
// If child is comparison, wrap in OR
|
|
232
|
-
if (child.filter_type === 'comparison') {
|
|
233
|
-
return {
|
|
234
|
-
filter_type: 'OR',
|
|
235
|
-
expressions: [child],
|
|
236
|
-
};
|
|
237
|
-
}
|
|
238
|
-
// If child is nested AND, recursively normalize and wrap in OR
|
|
239
|
-
if (child.filter_type === 'AND') {
|
|
240
|
-
return {
|
|
241
|
-
filter_type: 'OR',
|
|
242
|
-
expressions: [normalizeLimeQueryFilterForGui(child)],
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
// Unknown filter type, keep as is
|
|
246
|
-
return child;
|
|
247
|
-
});
|
|
248
|
-
return {
|
|
249
|
-
filter_type: 'AND',
|
|
250
|
-
expressions: normalizedChildren,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
// Fallback: wrap in AND/OR structure
|
|
254
|
-
return {
|
|
255
|
-
filter_type: 'AND',
|
|
256
|
-
expressions: [
|
|
257
|
-
{
|
|
258
|
-
filter_type: 'OR',
|
|
259
|
-
expressions: [filter],
|
|
260
|
-
},
|
|
261
|
-
],
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
168
|
|
|
265
169
|
/**
|
|
266
170
|
* Dynamic filter values and placeholders that are valid in Lime Query
|
|
@@ -660,16 +564,16 @@ const LimeQueryBuilder = class {
|
|
|
660
564
|
this.codeValue = '';
|
|
661
565
|
this.limetype = '';
|
|
662
566
|
this.filter = {
|
|
663
|
-
|
|
664
|
-
|
|
567
|
+
op: index_esm.Zt.AND,
|
|
568
|
+
exp: [],
|
|
665
569
|
};
|
|
666
570
|
this.handleLimetypeChange = (event) => {
|
|
667
571
|
event.stopPropagation();
|
|
668
572
|
this.limetype = event.detail;
|
|
669
573
|
// Reset filter when limetype changes
|
|
670
574
|
this.filter = {
|
|
671
|
-
|
|
672
|
-
|
|
575
|
+
op: index_esm.Zt.AND,
|
|
576
|
+
exp: [],
|
|
673
577
|
};
|
|
674
578
|
// Reset response format when limetype changes
|
|
675
579
|
this.internalResponseFormat = {
|
|
@@ -681,15 +585,15 @@ const LimeQueryBuilder = class {
|
|
|
681
585
|
};
|
|
682
586
|
this.handleFilterChange = (event) => {
|
|
683
587
|
event.stopPropagation();
|
|
684
|
-
|
|
685
|
-
if (
|
|
588
|
+
const expression = event.detail;
|
|
589
|
+
if (expression === undefined) {
|
|
686
590
|
this.filter = {
|
|
687
|
-
|
|
688
|
-
|
|
591
|
+
op: index_esm.Zt.AND,
|
|
592
|
+
exp: [],
|
|
689
593
|
};
|
|
690
594
|
}
|
|
691
595
|
else {
|
|
692
|
-
this.filter =
|
|
596
|
+
this.filter = expression;
|
|
693
597
|
}
|
|
694
598
|
this.emitChange();
|
|
695
599
|
};
|
|
@@ -716,7 +620,7 @@ const LimeQueryBuilder = class {
|
|
|
716
620
|
}
|
|
717
621
|
// Update internal state from parsed query
|
|
718
622
|
this.limetype = parsed.limetype || '';
|
|
719
|
-
this.filter =
|
|
623
|
+
this.filter = this.normalizeFilter(parsed.filter);
|
|
720
624
|
this.internalResponseFormat = parsed.responseFormat;
|
|
721
625
|
this.limit = parsed.limit;
|
|
722
626
|
this.mode = 'gui';
|
|
@@ -757,7 +661,7 @@ const LimeQueryBuilder = class {
|
|
|
757
661
|
}
|
|
758
662
|
if (this.value) {
|
|
759
663
|
this.limetype = this.value.limetype || '';
|
|
760
|
-
this.filter =
|
|
664
|
+
this.filter = this.normalizeFilter(this.value.filter);
|
|
761
665
|
this.internalResponseFormat = this.value.responseFormat;
|
|
762
666
|
this.limit = this.value.limit;
|
|
763
667
|
}
|
|
@@ -772,10 +676,26 @@ const LimeQueryBuilder = class {
|
|
|
772
676
|
render() {
|
|
773
677
|
const guiSupported = this.checkGuiSupport();
|
|
774
678
|
const showCodeMode = !this.guiModeEnabled || this.mode === 'code';
|
|
775
|
-
return (index.h("div", { key: '
|
|
679
|
+
return (index.h("div", { key: '5ff70a352e3e57ff4c51d44627bd4b5ed367fff4', class: "lime-query-builder" }, this.renderLabel(), this.renderModeControls(guiSupported), showCodeMode
|
|
776
680
|
? this.renderCodeMode(guiSupported)
|
|
777
681
|
: this.renderGuiMode()));
|
|
778
682
|
}
|
|
683
|
+
/**
|
|
684
|
+
* Normalize filter to ensure top-level is an AND group.
|
|
685
|
+
* This ensures Add buttons are available in the UI.
|
|
686
|
+
* @param filter
|
|
687
|
+
*/
|
|
688
|
+
normalizeFilter(filter) {
|
|
689
|
+
if (!filter) {
|
|
690
|
+
return { op: index_esm.Zt.AND, exp: [] };
|
|
691
|
+
}
|
|
692
|
+
// If it's already an AND at the top level, keep it
|
|
693
|
+
if ('op' in filter && filter.op === index_esm.Zt.AND) {
|
|
694
|
+
return filter;
|
|
695
|
+
}
|
|
696
|
+
// Otherwise wrap in AND
|
|
697
|
+
return { op: index_esm.Zt.AND, exp: [filter] };
|
|
698
|
+
}
|
|
779
699
|
emitChange() {
|
|
780
700
|
// Only emit in GUI mode
|
|
781
701
|
if (this.mode === 'code') {
|
|
@@ -793,7 +713,7 @@ const LimeQueryBuilder = class {
|
|
|
793
713
|
const limeQuery = {
|
|
794
714
|
limetype: this.limetype,
|
|
795
715
|
responseFormat: responseFormat,
|
|
796
|
-
filter:
|
|
716
|
+
filter: this.filter,
|
|
797
717
|
};
|
|
798
718
|
if (this.limit !== undefined && this.limit > 0) {
|
|
799
719
|
limeQuery.limit = this.limit;
|
|
@@ -814,7 +734,7 @@ const LimeQueryBuilder = class {
|
|
|
814
734
|
const limeQuery = {
|
|
815
735
|
limetype: this.limetype,
|
|
816
736
|
responseFormat: responseFormat,
|
|
817
|
-
filter:
|
|
737
|
+
filter: this.filter,
|
|
818
738
|
};
|
|
819
739
|
if (this.limit !== undefined && this.limit > 0) {
|
|
820
740
|
limeQuery.limit = this.limit;
|
|
@@ -865,7 +785,7 @@ const LimeQueryBuilder = class {
|
|
|
865
785
|
queryToCheck = {
|
|
866
786
|
limetype: this.limetype,
|
|
867
787
|
responseFormat: responseFormat,
|
|
868
|
-
filter:
|
|
788
|
+
filter: this.filter,
|
|
869
789
|
};
|
|
870
790
|
if (this.limit !== undefined && this.limit > 0) {
|
|
871
791
|
queryToCheck.limit = this.limit;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const index = require('./index-ff255a0d.js');
|
|
6
|
+
const index_esm = require('./index.esm-d785eb6e.js');
|
|
7
|
+
|
|
8
|
+
const limeQueryFilterAndCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:0;background-color:rgb(var(--contrast-100));border:1px solid rgb(var(--contrast-500));border-radius:0.75rem}.expression>ul{margin-top:0;margin-right:1rem;margin-bottom:1rem;margin-left:1rem;padding-left:1rem;list-style:disc}.expression>ul li{margin-top:1rem}.expression>ul li.add-button{list-style:none}";
|
|
9
|
+
const LimebbLimeQueryFilterAndStyle0 = limeQueryFilterAndCss;
|
|
10
|
+
|
|
11
|
+
const LimeQueryFilterAndComponent = class {
|
|
12
|
+
constructor(hostRef) {
|
|
13
|
+
index.registerInstance(this, hostRef);
|
|
14
|
+
this.expressionChange = index.createEvent(this, "expressionChange", 7);
|
|
15
|
+
this.renderChildExpression = (expression, childIndex) => (index.h("li", null, index.h("limebb-lime-query-filter-expression", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, expression: expression, onExpressionChange: this.handleExpressionChange(childIndex) })));
|
|
16
|
+
this.handleAddChildExpression = () => {
|
|
17
|
+
const newOrGroup = {
|
|
18
|
+
op: index_esm.Zt.OR,
|
|
19
|
+
exp: [
|
|
20
|
+
{
|
|
21
|
+
key: '',
|
|
22
|
+
op: index_esm.Zt.EQUALS,
|
|
23
|
+
exp: '',
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
};
|
|
27
|
+
const updatedExpressionsList = [
|
|
28
|
+
...this.expression.exp,
|
|
29
|
+
newOrGroup,
|
|
30
|
+
];
|
|
31
|
+
this.expressionChange.emit({
|
|
32
|
+
op: index_esm.Zt.AND,
|
|
33
|
+
exp: updatedExpressionsList,
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
this.handleExpressionChange = (updatedChildIndex) => (event) => {
|
|
37
|
+
var _a;
|
|
38
|
+
event.stopPropagation();
|
|
39
|
+
const updatedExpression = (_a = event.detail) !== null && _a !== void 0 ? _a : undefined;
|
|
40
|
+
const expressions = [...this.expression.exp];
|
|
41
|
+
if (updatedExpression === undefined) {
|
|
42
|
+
expressions.splice(updatedChildIndex, 1);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
expressions[updatedChildIndex] = updatedExpression;
|
|
46
|
+
}
|
|
47
|
+
if (expressions.length === 0) {
|
|
48
|
+
this.expressionChange.emit(undefined);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (expressions.length === 1) {
|
|
52
|
+
this.expressionChange.emit(expressions[0]);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
this.expressionChange.emit({
|
|
56
|
+
op: index_esm.Zt.AND,
|
|
57
|
+
exp: expressions,
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
render() {
|
|
62
|
+
let subheading = 'All of these conditions are true';
|
|
63
|
+
if (this.expression.exp.length <= 1) {
|
|
64
|
+
subheading = '';
|
|
65
|
+
}
|
|
66
|
+
return (index.h("div", { key: 'f07c53808d6be8d846f5a45223abb5c94b1a0b16', class: "expression" }, (this.label || subheading) && (index.h("limel-header", { key: '229f0d58ff15743fbb12da53ad9c593bfba801d1', heading: this.label, subheading: subheading })), index.h("ul", { key: '2600c2bee2b958036ea606141bcfcac0e277114c' }, this.expression.exp.map(this.renderChildExpression), index.h("li", { key: '6395e605ee8f454a820ac73601da89b19686187a', class: "add-button" }, this.renderAddChildExpression()))));
|
|
67
|
+
}
|
|
68
|
+
renderAddChildExpression() {
|
|
69
|
+
return (index.h("limel-button", { label: this.getAddButtonLabel(), icon: "plus_math", onClick: this.handleAddChildExpression }));
|
|
70
|
+
}
|
|
71
|
+
getAddButtonLabel() {
|
|
72
|
+
if (this.expression.exp.length === 0) {
|
|
73
|
+
return 'Add a condition';
|
|
74
|
+
}
|
|
75
|
+
return 'Add another condition';
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
LimeQueryFilterAndComponent.style = LimebbLimeQueryFilterAndStyle0;
|
|
79
|
+
|
|
80
|
+
exports.limebb_lime_query_filter_and = LimeQueryFilterAndComponent;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
const index = require('./index-ff255a0d.js');
|
|
6
|
+
const index_esm = require('./index.esm-d785eb6e.js');
|
|
7
|
+
|
|
8
|
+
const limeQueryFilterComparisonCss = ".expression-container{display:flex;flex-direction:row;align-items:flex-start;gap:1rem;flex-wrap:wrap}.expression-container>*{flex-grow:2;width:30%;max-width:calc(100% - 3.25rem)}.expression-container>.operator{flex-grow:1;width:calc(30% + 1rem);min-width:4rem}.expression-container>.remove{flex-grow:0;width:auto;margin-left:auto}@media (max-width: 768px){.expression-container{flex-direction:column}.expression-container>*{width:100%;max-width:100%}.expression-container>.operator{width:100%}.expression-container>.remove{margin-left:0;align-self:flex-end}}";
|
|
9
|
+
const LimebbLimeQueryFilterComparisonStyle0 = limeQueryFilterComparisonCss;
|
|
10
|
+
|
|
11
|
+
const LIME_QUERY_OPERATORS = [
|
|
12
|
+
{ value: index_esm.Zt.EQUALS, label: 'Equals', icon: 'equals' },
|
|
13
|
+
{ value: index_esm.Zt.NOT_EQUALS, label: 'Not Equals', icon: 'not-equal' },
|
|
14
|
+
{
|
|
15
|
+
value: index_esm.Zt.GREATER,
|
|
16
|
+
label: 'Greater Than',
|
|
17
|
+
icon: 'greater-than',
|
|
18
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
value: index_esm.Zt.GREATER_OR_EQUAL,
|
|
22
|
+
label: 'Greater or Equal',
|
|
23
|
+
icon: 'greater-or-equal',
|
|
24
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
value: index_esm.Zt.LESS,
|
|
28
|
+
label: 'Less Than',
|
|
29
|
+
icon: 'less-than',
|
|
30
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
value: index_esm.Zt.LESS_OR_EQUAL,
|
|
34
|
+
label: 'Less or Equal',
|
|
35
|
+
icon: 'less-or-equal',
|
|
36
|
+
applicableTypes: ['integer', 'decimal', 'date', 'time'],
|
|
37
|
+
},
|
|
38
|
+
{ value: index_esm.Zt.IN, label: 'In List', icon: 'list' },
|
|
39
|
+
{
|
|
40
|
+
value: index_esm.Zt.LIKE,
|
|
41
|
+
label: 'Contains',
|
|
42
|
+
icon: '-lime-filter-contain',
|
|
43
|
+
applicableTypes: ['string', 'text'],
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: index_esm.Zt.BEGINS,
|
|
47
|
+
label: 'Begins With',
|
|
48
|
+
icon: '-lime-filter-begin',
|
|
49
|
+
applicableTypes: ['string', 'text'],
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
value: index_esm.Zt.ENDS,
|
|
53
|
+
label: 'Ends With',
|
|
54
|
+
icon: '-lime-filter-end',
|
|
55
|
+
applicableTypes: ['string', 'text'],
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
const LimeQueryFilterComparisonComponent = class {
|
|
59
|
+
constructor(hostRef) {
|
|
60
|
+
index.registerInstance(this, hostRef);
|
|
61
|
+
this.expressionChange = index.createEvent(this, "expressionChange", 7);
|
|
62
|
+
this.handlePropertyChange = (event) => {
|
|
63
|
+
event.stopPropagation();
|
|
64
|
+
this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { key: event.detail }));
|
|
65
|
+
};
|
|
66
|
+
this.handleOperatorChange = (event) => {
|
|
67
|
+
event.stopPropagation();
|
|
68
|
+
// TODO: Clear value when switching between IN and other operators
|
|
69
|
+
// since array values are incompatible with single-value operators
|
|
70
|
+
this.expressionChange.emit({
|
|
71
|
+
key: this.expression.key,
|
|
72
|
+
op: event.detail.value,
|
|
73
|
+
exp: this.expression.exp,
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
this.handleValueChange = (event) => {
|
|
77
|
+
event.stopPropagation();
|
|
78
|
+
this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { exp: event.detail }));
|
|
79
|
+
};
|
|
80
|
+
this.removeExpression = () => {
|
|
81
|
+
this.expressionChange.emit(undefined);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
render() {
|
|
85
|
+
return (index.h("div", { key: '668e0f05bdb1fb25ffd652ea650c34e5431a3332', class: "expression" }, this.label && index.h("limel-header", { key: '5034070b58afe31cf90699dd2a27f884e647f540', heading: this.label }), index.h("div", { key: '14a2b1270e5e6d7e158e29ebc5f61051e5670e80', class: "expression-container" }, this.renderPropertySelector(), this.renderOperator(), this.renderValueInput(), index.h("limel-icon-button", { key: 'b69bde6e88c40d2623ef015794db28cec3676c73', class: "remove", icon: "trash", label: "Remove condition", onClick: this.removeExpression }))));
|
|
86
|
+
}
|
|
87
|
+
renderPropertySelector() {
|
|
88
|
+
return (index.h("limebb-property-selector", { platform: this.platform, context: this.context, label: "Property", limetype: this.limetype, value: this.expression.key, required: true, onChange: this.handlePropertyChange }));
|
|
89
|
+
}
|
|
90
|
+
renderOperator() {
|
|
91
|
+
const operatorHasBeenSet = !!this.expression.op;
|
|
92
|
+
const options = LIME_QUERY_OPERATORS.map((op) => ({
|
|
93
|
+
text: op.label,
|
|
94
|
+
value: op.value,
|
|
95
|
+
icon: op.icon ? { name: op.icon } : undefined,
|
|
96
|
+
}));
|
|
97
|
+
const selectedOption = options.find((o) => o.value === this.expression.op);
|
|
98
|
+
return (index.h("limel-select", { class: "operator", label: "Operator", value: selectedOption, options: options, disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleOperatorChange }));
|
|
99
|
+
}
|
|
100
|
+
renderValueInput() {
|
|
101
|
+
if (!this.expression.op) {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
return (index.h("limebb-lime-query-value-input", { platform: this.platform, context: this.context, limetype: this.limetype, activeLimetype: this.activeLimetype, propertyPath: this.expression.key, operator: this.expression.op, value: this.expression.exp, onChange: this.handleValueChange }));
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
LimeQueryFilterComparisonComponent.style = LimebbLimeQueryFilterComparisonStyle0;
|
|
108
|
+
|
|
109
|
+
const limeQueryFilterExpressionCss = "@charset \"UTF-8\";.expression{display:flex;flex-direction:column;margin-bottom:1rem;gap:1rem}";
|
|
110
|
+
const LimebbLimeQueryFilterExpressionStyle0 = limeQueryFilterExpressionCss;
|
|
111
|
+
|
|
112
|
+
const LimeQueryFilterExpressionComponent = class {
|
|
113
|
+
constructor(hostRef) {
|
|
114
|
+
index.registerInstance(this, hostRef);
|
|
115
|
+
this.expressionChange = index.createEvent(this, "expressionChange", 7);
|
|
116
|
+
this.handleExpressionChange = (event) => {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
this.expressionChange.emit(event.detail);
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
render() {
|
|
122
|
+
if (!this.expression) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const props = {
|
|
126
|
+
platform: this.platform,
|
|
127
|
+
context: this.context,
|
|
128
|
+
label: this.label,
|
|
129
|
+
limetype: this.limetype,
|
|
130
|
+
activeLimetype: this.activeLimetype,
|
|
131
|
+
};
|
|
132
|
+
if ('key' in this.expression) {
|
|
133
|
+
return (index.h("limebb-lime-query-filter-comparison", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
|
|
134
|
+
}
|
|
135
|
+
if (this.expression.op === index_esm.Zt.AND ||
|
|
136
|
+
this.expression.op === index_esm.Zt.OR) {
|
|
137
|
+
return (index.h("limebb-lime-query-filter-group", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
|
|
138
|
+
}
|
|
139
|
+
if (this.expression.op === index_esm.Zt.NOT) {
|
|
140
|
+
return (index.h("limebb-lime-query-filter-not", Object.assign({}, props, { expression: this.expression, onExpressionChange: this.handleExpressionChange })));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
LimeQueryFilterExpressionComponent.style = LimebbLimeQueryFilterExpressionStyle0;
|
|
145
|
+
|
|
146
|
+
exports.limebb_lime_query_filter_comparison = LimeQueryFilterComparisonComponent;
|
|
147
|
+
exports.limebb_lime_query_filter_expression = LimeQueryFilterExpressionComponent;
|