@limetech/lime-crm-building-blocks 1.97.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 +14 -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 +90 -174
- 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 +60 -24
- 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 +96 -184
- 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 +89 -173
- 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 +19 -2
- package/dist/types/components/lime-query-builder/lime-query.types.d.ts +2 -1
- package/dist/types/components.d.ts +209 -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-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-b7c72179.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
|
};
|
|
@@ -704,10 +608,6 @@ const LimeQueryBuilder = class {
|
|
|
704
608
|
this.limit = value ? Number.parseInt(value, 10) : undefined;
|
|
705
609
|
this.emitChange();
|
|
706
610
|
};
|
|
707
|
-
this.handleActiveLimetypeChange = (event) => {
|
|
708
|
-
event.stopPropagation();
|
|
709
|
-
this.activeLimetype = event.detail || undefined;
|
|
710
|
-
};
|
|
711
611
|
this.switchToGui = () => {
|
|
712
612
|
// Validate JSON before switching
|
|
713
613
|
try {
|
|
@@ -720,7 +620,7 @@ const LimeQueryBuilder = class {
|
|
|
720
620
|
}
|
|
721
621
|
// Update internal state from parsed query
|
|
722
622
|
this.limetype = parsed.limetype || '';
|
|
723
|
-
this.filter =
|
|
623
|
+
this.filter = this.normalizeFilter(parsed.filter);
|
|
724
624
|
this.internalResponseFormat = parsed.responseFormat;
|
|
725
625
|
this.limit = parsed.limit;
|
|
726
626
|
this.mode = 'gui';
|
|
@@ -761,7 +661,7 @@ const LimeQueryBuilder = class {
|
|
|
761
661
|
}
|
|
762
662
|
if (this.value) {
|
|
763
663
|
this.limetype = this.value.limetype || '';
|
|
764
|
-
this.filter =
|
|
664
|
+
this.filter = this.normalizeFilter(this.value.filter);
|
|
765
665
|
this.internalResponseFormat = this.value.responseFormat;
|
|
766
666
|
this.limit = this.value.limit;
|
|
767
667
|
}
|
|
@@ -776,10 +676,26 @@ const LimeQueryBuilder = class {
|
|
|
776
676
|
render() {
|
|
777
677
|
const guiSupported = this.checkGuiSupport();
|
|
778
678
|
const showCodeMode = !this.guiModeEnabled || this.mode === 'code';
|
|
779
|
-
return (index.h("div", { key: '
|
|
679
|
+
return (index.h("div", { key: '5ff70a352e3e57ff4c51d44627bd4b5ed367fff4', class: "lime-query-builder" }, this.renderLabel(), this.renderModeControls(guiSupported), showCodeMode
|
|
780
680
|
? this.renderCodeMode(guiSupported)
|
|
781
681
|
: this.renderGuiMode()));
|
|
782
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
|
+
}
|
|
783
699
|
emitChange() {
|
|
784
700
|
// Only emit in GUI mode
|
|
785
701
|
if (this.mode === 'code') {
|
|
@@ -797,7 +713,7 @@ const LimeQueryBuilder = class {
|
|
|
797
713
|
const limeQuery = {
|
|
798
714
|
limetype: this.limetype,
|
|
799
715
|
responseFormat: responseFormat,
|
|
800
|
-
filter:
|
|
716
|
+
filter: this.filter,
|
|
801
717
|
};
|
|
802
718
|
if (this.limit !== undefined && this.limit > 0) {
|
|
803
719
|
limeQuery.limit = this.limit;
|
|
@@ -818,7 +734,7 @@ const LimeQueryBuilder = class {
|
|
|
818
734
|
const limeQuery = {
|
|
819
735
|
limetype: this.limetype,
|
|
820
736
|
responseFormat: responseFormat,
|
|
821
|
-
filter:
|
|
737
|
+
filter: this.filter,
|
|
822
738
|
};
|
|
823
739
|
if (this.limit !== undefined && this.limit > 0) {
|
|
824
740
|
limeQuery.limit = this.limit;
|
|
@@ -869,7 +785,7 @@ const LimeQueryBuilder = class {
|
|
|
869
785
|
queryToCheck = {
|
|
870
786
|
limetype: this.limetype,
|
|
871
787
|
responseFormat: responseFormat,
|
|
872
|
-
filter:
|
|
788
|
+
filter: this.filter,
|
|
873
789
|
};
|
|
874
790
|
if (this.limit !== undefined && this.limit > 0) {
|
|
875
791
|
queryToCheck.limit = this.limit;
|
|
@@ -908,7 +824,7 @@ const LimeQueryBuilder = class {
|
|
|
908
824
|
if (!this.limetype) {
|
|
909
825
|
return;
|
|
910
826
|
}
|
|
911
|
-
return (index.h("div", { class: "query-options-section" }, index.h("h4", { class: "section-label" }, "Query Options"), index.h("div", { class: "query-options-controls" }, index.h("
|
|
827
|
+
return (index.h("div", { class: "query-options-section" }, index.h("h4", { class: "section-label" }, "Query Options"), index.h("div", { class: "query-options-controls" }, index.h("limel-input-field", { label: "Limit", type: "number", value: ((_a = this.limit) === null || _a === void 0 ? void 0 : _a.toString()) || '', placeholder: "No limit", helperText: "Maximum number of results", onChange: this.handleLimitChange }))));
|
|
912
828
|
}
|
|
913
829
|
renderGuiMode() {
|
|
914
830
|
return (index.h("div", { class: "gui-mode" }, this.renderLimetypeSection(), this.renderResponseFormatSection(), this.renderFilterSection(), this.renderQueryOptionsSection()));
|
|
@@ -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;
|