@limetech/lime-crm-building-blocks 1.139.1 → 1.140.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 +9 -0
- package/dist/cjs/{filter-condition-icons-HypsDn6x.js → filter-condition-icons-QK5stWj6.js} +142 -0
- package/dist/cjs/filter-operators-BTWvpD6A.js +61 -0
- package/dist/cjs/index.cjs.js +8 -1
- package/dist/cjs/lime-crm-building-blocks.cjs.js +1 -1
- package/dist/cjs/limebb-alert-dialog.cjs.entry.js +1 -1
- package/dist/cjs/limebb-browser.cjs.entry.js +2 -2
- package/dist/cjs/limebb-chat-icon-list_3.cjs.entry.js +4 -4
- package/dist/cjs/limebb-chat-list.cjs.entry.js +1 -1
- package/dist/cjs/limebb-color-palette-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-color-palette-swatches.cjs.entry.js +1 -1
- package/dist/cjs/limebb-composer-toolbar.cjs.entry.js +2 -2
- package/dist/cjs/limebb-currency-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-dashboard-widget.cjs.entry.js +1 -1
- package/dist/cjs/limebb-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-date-range.cjs.entry.js +1 -1
- package/dist/cjs/limebb-document-chips.cjs.entry.js +1 -1
- package/dist/cjs/limebb-document-item.cjs.entry.js +2 -2
- package/dist/cjs/limebb-document-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-feed-item-thumbnail-file-info.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-filter-chip_5.cjs.entry.js → limebb-filter-chip_6.cjs.entry.js} +115 -81
- package/dist/cjs/limebb-icon-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-info-tile-format.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 +1 -1
- package/dist/cjs/limebb-lime-query-filter-comparison_2.cjs.entry.js +7 -24
- package/dist/cjs/limebb-lime-query-order-by-editor_2.cjs.entry.js +2 -2
- package/dist/cjs/limebb-lime-query-order-by-item.cjs.entry.js +2 -2
- package/dist/cjs/limebb-lime-query-response-format-builder.cjs.entry.js +1 -1
- package/dist/cjs/limebb-lime-query-response-format-editor_2.cjs.entry.js +1 -1
- package/dist/cjs/limebb-live-docs-info.cjs.entry.js +2 -2
- package/dist/cjs/limebb-locale-picker.cjs.entry.js +1 -1
- package/dist/cjs/limebb-mention-group-counter.cjs.entry.js +2 -2
- package/dist/cjs/limebb-navigation-button_2.cjs.entry.js +2 -2
- package/dist/cjs/limebb-notification-item.cjs.entry.js +1 -1
- package/dist/cjs/limebb-percentage-visualizer.cjs.entry.js +2 -2
- package/dist/cjs/limebb-rule-chip-popover.cjs.entry.js +1 -1
- package/dist/cjs/limebb-rule-editor.cjs.entry.js +1 -1
- package/dist/cjs/limebb-rule-gate.cjs.entry.js +1 -1
- package/dist/cjs/limebb-text-editor.cjs.entry.js +1 -1
- package/dist/cjs/limebb-trend-indicator.cjs.entry.js +1 -1
- package/dist/cjs/limebb-value-comparison-editor.cjs.entry.js +37 -35
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/alert-dialog/alert-dialog.js +1 -1
- package/dist/collection/components/browser/browser.js +2 -2
- package/dist/collection/components/chat-list/chat-icon-list/chat-icon-list.js +1 -1
- package/dist/collection/components/chat-list/chat-item/chat-item.js +2 -2
- package/dist/collection/components/chat-list/chat-list.js +1 -1
- package/dist/collection/components/chat-list/typing-indicator/typing-indicator.js +1 -1
- package/dist/collection/components/color-palette-picker/color-palette-picker.js +1 -1
- package/dist/collection/components/color-palette-picker/color-palette-swatches/color-palette-swatches.js +1 -1
- package/dist/collection/components/composer-toolbar/composer-toolbar.js +2 -2
- package/dist/collection/components/currency-picker/currency-picker.js +1 -1
- package/dist/collection/components/dashboard-widget/dashboard-widget.js +1 -1
- package/dist/collection/components/date-picker/date-picker.js +1 -1
- package/dist/collection/components/date-range/date-range.js +1 -1
- package/dist/collection/components/document-chips/document-chips.js +1 -1
- package/dist/collection/components/document-picker/document-item/document-item.js +2 -2
- package/dist/collection/components/document-picker/document-picker.js +1 -1
- package/dist/collection/components/feed/feed-item/feed-timeline-item.js +1 -1
- package/dist/collection/components/feed/feed-item-thumbnail-file-info/feed-item-thumbnail-file-info.js +1 -1
- package/dist/collection/components/feed/feed.js +1 -1
- package/dist/collection/components/filter-chip/filter-chip.js +2 -2
- package/dist/collection/components/filter-chip/filter-condition-icons.js +141 -0
- package/dist/collection/components/filter-chip/filter-operators.js +54 -0
- package/dist/collection/components/filter-condition-picker/filter-condition-picker.css +7 -0
- package/dist/collection/components/filter-condition-picker/filter-condition-picker.js +256 -0
- package/dist/collection/components/icon-picker/icon-picker.js +1 -1
- package/dist/collection/components/info-tile/format/config/info-tile-format.js +1 -1
- package/dist/collection/components/info-tile/info-tile.js +1 -1
- package/dist/collection/components/kanban/kanban-group/kanban-group.js +1 -1
- package/dist/collection/components/kanban/kanban-item/kanban-item.js +1 -1
- package/dist/collection/components/lime-query-builder/expressions/compound-leaf.js +6 -6
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison-editor.js +37 -20
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-comparison.js +8 -25
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-group.js +2 -2
- package/dist/collection/components/lime-query-builder/expressions/lime-query-filter-not.js +1 -1
- package/dist/collection/components/lime-query-builder/expressions/lime-query-operators.js +23 -57
- package/dist/collection/components/lime-query-builder/lime-query-builder.js +1 -1
- package/dist/collection/components/lime-query-builder/lime-query-response-format-builder.js +1 -1
- package/dist/collection/components/lime-query-builder/limetype-field/limetype-field.js +1 -1
- package/dist/collection/components/lime-query-builder/order-by/order-by-editor.js +1 -1
- package/dist/collection/components/lime-query-builder/order-by/order-by-item.js +2 -2
- package/dist/collection/components/lime-query-builder/response-format/response-format-item.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/rule-editor/rule-chip-popover/rule-chip-popover.js +1 -1
- package/dist/collection/components/rule-editor/rule-editor.js +1 -1
- package/dist/collection/components/rule-editor/value-comparison-editor/value-comparison-editor.js +62 -36
- package/dist/collection/components/rule-gate/rule-gate.js +1 -1
- package/dist/collection/components/summary-popover/summary-popover.js +2 -2
- 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/collection/index.js +1 -0
- package/dist/components/chat-icon-list.js +1 -1
- package/dist/components/chat-item.js +1 -1
- package/dist/components/currency-picker.js +1 -1
- package/dist/components/date-picker.js +1 -1
- package/dist/components/document-item.js +1 -1
- package/dist/components/feed-item-thumbnail-file-info.js +1 -1
- package/dist/components/feed-timeline-item.js +1 -1
- package/dist/components/filter-chip.js +1 -1
- package/dist/components/filter-condition-icons.js +1 -1
- package/dist/components/filter-condition-picker.js +1 -0
- package/dist/components/filter-operators.js +1 -0
- package/dist/components/index.js +1 -1
- package/dist/components/kanban-group.js +1 -1
- package/dist/components/kanban-item.js +1 -1
- package/dist/components/lime-query-filter-builder.js +1 -1
- package/dist/components/lime-query-filter-comparison-editor.js +1 -1
- package/dist/components/lime-query-filter-comparison.js +1 -1
- package/dist/components/lime-query-filter-expression.js +1 -1
- package/dist/components/limebb-alert-dialog.js +1 -1
- package/dist/components/limebb-browser.js +1 -1
- package/dist/components/limebb-chat-list.js +1 -1
- package/dist/components/limebb-color-palette-picker.js +1 -1
- package/dist/components/limebb-color-palette-swatches.js +1 -1
- package/dist/components/limebb-composer-toolbar.js +1 -1
- package/dist/components/limebb-dashboard-widget.js +1 -1
- package/dist/components/limebb-date-range.js +1 -1
- package/dist/components/limebb-document-chips.js +1 -1
- package/dist/components/limebb-document-picker.js +1 -1
- package/dist/components/limebb-feed.js +1 -1
- package/dist/components/limebb-filter-condition-picker.d.ts +11 -0
- package/dist/components/limebb-filter-condition-picker.js +1 -0
- package/dist/components/limebb-icon-picker.js +1 -1
- package/dist/components/limebb-info-tile-format.js +1 -1
- package/dist/components/limebb-info-tile.js +1 -1
- package/dist/components/limebb-lime-query-builder.js +1 -1
- package/dist/components/limebb-lime-query-response-format-builder.js +1 -1
- package/dist/components/limebb-locale-picker.js +1 -1
- package/dist/components/limebb-mention-group-counter.js +1 -1
- package/dist/components/limebb-rule-arg-filter-editor.js +1 -1
- package/dist/components/limebb-rule-editor.js +1 -1
- package/dist/components/limebb-rule-gate.js +1 -1
- package/dist/components/limebb-text-editor.js +1 -1
- package/dist/components/limebb-trend-indicator.js +1 -1
- package/dist/components/limebb-value-comparison-editor.js +1 -1
- package/dist/components/limetype-field.js +1 -1
- package/dist/components/live-docs-info.js +1 -1
- package/dist/components/notification-item.js +1 -1
- package/dist/components/order-by-editor.js +1 -1
- package/dist/components/order-by-item.js +1 -1
- package/dist/components/percentage-visualizer.js +1 -1
- package/dist/components/response-format-item.js +1 -1
- package/dist/components/rule-chip-popover.js +1 -1
- package/dist/components/summary-popover.js +1 -1
- package/dist/components/typing-indicator.js +1 -1
- package/dist/esm/{filter-condition-icons-D8CJOcfs.js → filter-condition-icons-C_y3-T4Q.js} +142 -1
- package/dist/esm/filter-operators-Lw-ccmxQ.js +57 -0
- package/dist/esm/index.js +4 -1
- package/dist/esm/lime-crm-building-blocks.js +1 -1
- package/dist/esm/limebb-alert-dialog.entry.js +1 -1
- package/dist/esm/limebb-browser.entry.js +2 -2
- package/dist/esm/limebb-chat-icon-list_3.entry.js +4 -4
- package/dist/esm/limebb-chat-list.entry.js +1 -1
- package/dist/esm/limebb-color-palette-picker.entry.js +1 -1
- package/dist/esm/limebb-color-palette-swatches.entry.js +1 -1
- package/dist/esm/limebb-composer-toolbar.entry.js +2 -2
- package/dist/esm/limebb-currency-picker.entry.js +1 -1
- package/dist/esm/limebb-dashboard-widget.entry.js +1 -1
- package/dist/esm/limebb-date-picker.entry.js +1 -1
- package/dist/esm/limebb-date-range.entry.js +1 -1
- package/dist/esm/limebb-document-chips.entry.js +1 -1
- package/dist/esm/limebb-document-item.entry.js +2 -2
- package/dist/esm/limebb-document-picker.entry.js +1 -1
- package/dist/esm/limebb-feed-item-thumbnail-file-info.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-filter-chip_5.entry.js → limebb-filter-chip_6.entry.js} +115 -82
- package/dist/esm/limebb-icon-picker.entry.js +1 -1
- package/dist/esm/limebb-info-tile-format.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 +1 -1
- package/dist/esm/limebb-lime-query-filter-comparison_2.entry.js +7 -24
- package/dist/esm/limebb-lime-query-order-by-editor_2.entry.js +2 -2
- package/dist/esm/limebb-lime-query-order-by-item.entry.js +2 -2
- package/dist/esm/limebb-lime-query-response-format-builder.entry.js +1 -1
- package/dist/esm/limebb-lime-query-response-format-editor_2.entry.js +1 -1
- package/dist/esm/limebb-live-docs-info.entry.js +2 -2
- package/dist/esm/limebb-locale-picker.entry.js +1 -1
- package/dist/esm/limebb-mention-group-counter.entry.js +2 -2
- package/dist/esm/limebb-navigation-button_2.entry.js +2 -2
- package/dist/esm/limebb-notification-item.entry.js +1 -1
- package/dist/esm/limebb-percentage-visualizer.entry.js +2 -2
- package/dist/esm/limebb-rule-chip-popover.entry.js +1 -1
- package/dist/esm/limebb-rule-editor.entry.js +1 -1
- package/dist/esm/limebb-rule-gate.entry.js +1 -1
- package/dist/esm/limebb-text-editor.entry.js +1 -1
- package/dist/esm/limebb-trend-indicator.entry.js +1 -1
- package/dist/esm/limebb-value-comparison-editor.entry.js +37 -35
- package/dist/esm/loader.js +1 -1
- package/dist/lime-crm-building-blocks/index.esm.js +1 -1
- package/dist/lime-crm-building-blocks/lime-crm-building-blocks.esm.js +1 -1
- package/dist/lime-crm-building-blocks/{p-0579d006.entry.js → p-05a1762a.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-e4cef02f.entry.js → p-19dc7242.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-96ea4550.entry.js → p-1f97e235.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-0f821315.entry.js → p-22e68812.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-3fc9866a.entry.js → p-251aca46.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-39009b47.entry.js → p-2dab7d4b.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-46dc34a6.entry.js → p-3f537135.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-f73e3da0.entry.js → p-430e3d11.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-817e2952.entry.js → p-43bdd66b.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-58f18819.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-302e6e3e.entry.js → p-6fe4c1cd.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-bf4b2a91.entry.js → p-7033d408.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-fce1a282.entry.js → p-73b71080.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-de785fee.entry.js → p-7b6c9cbf.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-be5c43bb.entry.js → p-863f456c.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-1cd148e2.entry.js → p-896e77b9.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-dacd1df3.entry.js → p-8986f27b.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-5b1ccfe1.entry.js → p-92bf5318.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-fd38bf57.entry.js → p-9452fb56.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-41ddbdde.entry.js → p-964b066d.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-D8CJOcfs.js → p-C_y3-T4Q.js} +1 -1
- package/dist/lime-crm-building-blocks/p-D1RJ1y7s.js +1 -0
- package/dist/lime-crm-building-blocks/p-a157233b.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-13a35953.entry.js → p-a4e676a6.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-b0ec4121.entry.js → p-aafead4e.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-b7e5a10e.entry.js → p-b34817df.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-8d592755.entry.js → p-c0fa239a.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-c4e2dca5.entry.js +1 -0
- package/dist/lime-crm-building-blocks/p-cac2a49f.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-d95f66c8.entry.js → p-cd7106f7.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-bde3e779.entry.js → p-d40f53a5.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-e618ccd3.entry.js → p-d78370be.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-6cdefdc9.entry.js → p-d7d21bad.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-994296b0.entry.js → p-dba6f583.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/p-dbbc5ba7.entry.js +1 -0
- package/dist/lime-crm-building-blocks/{p-69a3038b.entry.js → p-dec2b87d.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-9033acb5.entry.js → p-e242b955.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-5bc41701.entry.js → p-e29c27b8.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-d7d6d21b.entry.js → p-edeb359f.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-bd0a30d7.entry.js → p-f1090436.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-0f9a680c.entry.js → p-f3cb68d6.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-558915e4.entry.js → p-f4214745.entry.js} +1 -1
- package/dist/lime-crm-building-blocks/{p-e2420cde.entry.js → p-fb050628.entry.js} +1 -1
- package/dist/types/components/filter-chip/filter-condition-icons.d.ts +8 -0
- package/dist/types/components/filter-chip/filter-operators.d.ts +22 -0
- package/dist/types/components/filter-condition-picker/filter-condition-picker.d.ts +60 -0
- package/dist/types/components/lime-query-builder/expressions/lime-query-filter-comparison-editor.d.ts +8 -4
- package/dist/types/components/lime-query-builder/expressions/lime-query-operators.d.ts +16 -9
- package/dist/types/components/rule-editor/value-comparison-editor/value-comparison-editor.d.ts +7 -2
- package/dist/types/components.d.ts +164 -0
- package/dist/types/index.d.ts +1 -0
- package/package.json +5 -5
- package/dist/lime-crm-building-blocks/p-0843b50b.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-5b819d10.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-7a158104.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-92679e20.entry.js +0 -1
- package/dist/lime-crm-building-blocks/p-927e446d.entry.js +0 -1
|
@@ -197,3 +197,144 @@ export function getFilterConditionLabelKey(condition, propertyType) {
|
|
|
197
197
|
}
|
|
198
198
|
return undefined;
|
|
199
199
|
}
|
|
200
|
+
/**
|
|
201
|
+
* Conditions for text-like properties (`string`, `text`, `phone`, `link`):
|
|
202
|
+
* "Contains … Matches", with equality reading as "Is" / "Is not".
|
|
203
|
+
*/
|
|
204
|
+
const TEXT_CONDITIONS = [
|
|
205
|
+
'contains',
|
|
206
|
+
'not-contains',
|
|
207
|
+
'equals',
|
|
208
|
+
'not-equals',
|
|
209
|
+
'begins-with',
|
|
210
|
+
'not-begins-with',
|
|
211
|
+
'ends-with',
|
|
212
|
+
'not-ends-with',
|
|
213
|
+
'between',
|
|
214
|
+
'not-between',
|
|
215
|
+
'empty',
|
|
216
|
+
'not-empty',
|
|
217
|
+
'matches',
|
|
218
|
+
];
|
|
219
|
+
/**
|
|
220
|
+
* Conditions for numeric properties (`integer`, `decimal`, `percent`).
|
|
221
|
+
*/
|
|
222
|
+
const NUMBER_CONDITIONS = [
|
|
223
|
+
'equals',
|
|
224
|
+
'not-equals',
|
|
225
|
+
'greater-than',
|
|
226
|
+
'greater-than-or-equal',
|
|
227
|
+
'less-than',
|
|
228
|
+
'less-than-or-equal',
|
|
229
|
+
'between',
|
|
230
|
+
'not-between',
|
|
231
|
+
'empty',
|
|
232
|
+
'not-empty',
|
|
233
|
+
'matches',
|
|
234
|
+
];
|
|
235
|
+
/**
|
|
236
|
+
* Conditions for date/time properties. Comparisons read as "After" / "Before" /
|
|
237
|
+
* "On"; there is intentionally no `greater-than-or-equal` / `less-than-or-equal`
|
|
238
|
+
* — an inclusive bound is expressed in the date value editor, not as a separate
|
|
239
|
+
* condition.
|
|
240
|
+
*/
|
|
241
|
+
const DATE_CONDITIONS = [
|
|
242
|
+
'greater-than',
|
|
243
|
+
'less-than',
|
|
244
|
+
'between',
|
|
245
|
+
'not-between',
|
|
246
|
+
'equals',
|
|
247
|
+
'previous',
|
|
248
|
+
'current',
|
|
249
|
+
'next',
|
|
250
|
+
'empty',
|
|
251
|
+
'not-empty',
|
|
252
|
+
'matches',
|
|
253
|
+
];
|
|
254
|
+
/**
|
|
255
|
+
* Conditions for choice properties (`option`, `set`): "Is" / "Is not" (the
|
|
256
|
+
* latter was missing from the older CRM option popovers), plus "Matches".
|
|
257
|
+
*/
|
|
258
|
+
const OPTION_CONDITIONS = [
|
|
259
|
+
'equals',
|
|
260
|
+
'not-equals',
|
|
261
|
+
'matches',
|
|
262
|
+
];
|
|
263
|
+
/**
|
|
264
|
+
* Conditions for boolean (`yesno`) properties: "Is" / "Is not", plus "Empty" /
|
|
265
|
+
* "Not empty" and "Matches".
|
|
266
|
+
*
|
|
267
|
+
* A yes/no value is effectively three-state — Yes, No, or *unset* (never
|
|
268
|
+
* answered) when the property is nullable, i.e. not required and without a
|
|
269
|
+
* default. "Empty" / "Not empty" filter on that third state — whether the value
|
|
270
|
+
* was ever set — which is distinct from filtering on Yes vs No. Consumers whose
|
|
271
|
+
* booleans are always populated can narrow this list via the picker's
|
|
272
|
+
* `conditions` prop. See the "Boolean (yes/no)" example.
|
|
273
|
+
*/
|
|
274
|
+
const YESNO_CONDITIONS = [
|
|
275
|
+
'equals',
|
|
276
|
+
'not-equals',
|
|
277
|
+
'empty',
|
|
278
|
+
'not-empty',
|
|
279
|
+
'matches',
|
|
280
|
+
];
|
|
281
|
+
/**
|
|
282
|
+
* Conditions for relation properties (`belongsto`, `hasone`, `hasmany`,
|
|
283
|
+
* `hasandbelongstomany`): connected / not connected, filter-set membership,
|
|
284
|
+
* empty / not empty, and "Matches".
|
|
285
|
+
*/
|
|
286
|
+
const RELATION_CONDITIONS = [
|
|
287
|
+
'connected-to',
|
|
288
|
+
'not-connected-to',
|
|
289
|
+
'in-filter-set',
|
|
290
|
+
'not-in-filter-set',
|
|
291
|
+
'empty',
|
|
292
|
+
'not-empty',
|
|
293
|
+
'matches',
|
|
294
|
+
];
|
|
295
|
+
/** Types with no filter catalog (`user`, `xml`, `file`, `system`). */
|
|
296
|
+
const NO_CONDITIONS = [];
|
|
297
|
+
/**
|
|
298
|
+
* Per-property-type catalogs, in the order a condition picker should list them.
|
|
299
|
+
* An exhaustive map, so a property type added upstream is a compile error here
|
|
300
|
+
* rather than a silent fall-through to no conditions.
|
|
301
|
+
*/
|
|
302
|
+
const CONDITIONS_BY_PROPERTY_TYPE = {
|
|
303
|
+
string: TEXT_CONDITIONS,
|
|
304
|
+
text: TEXT_CONDITIONS,
|
|
305
|
+
phone: TEXT_CONDITIONS,
|
|
306
|
+
link: TEXT_CONDITIONS,
|
|
307
|
+
integer: NUMBER_CONDITIONS,
|
|
308
|
+
decimal: NUMBER_CONDITIONS,
|
|
309
|
+
percent: NUMBER_CONDITIONS,
|
|
310
|
+
date: DATE_CONDITIONS,
|
|
311
|
+
year: DATE_CONDITIONS,
|
|
312
|
+
quarter: DATE_CONDITIONS,
|
|
313
|
+
month: DATE_CONDITIONS,
|
|
314
|
+
time: DATE_CONDITIONS,
|
|
315
|
+
timeofday: DATE_CONDITIONS,
|
|
316
|
+
option: OPTION_CONDITIONS,
|
|
317
|
+
set: OPTION_CONDITIONS,
|
|
318
|
+
yesno: YESNO_CONDITIONS,
|
|
319
|
+
belongsto: RELATION_CONDITIONS,
|
|
320
|
+
hasone: RELATION_CONDITIONS,
|
|
321
|
+
hasmany: RELATION_CONDITIONS,
|
|
322
|
+
hasandbelongstomany: RELATION_CONDITIONS,
|
|
323
|
+
user: NO_CONDITIONS,
|
|
324
|
+
xml: NO_CONDITIONS,
|
|
325
|
+
file: NO_CONDITIONS,
|
|
326
|
+
system: NO_CONDITIONS,
|
|
327
|
+
};
|
|
328
|
+
/**
|
|
329
|
+
* The filter conditions a property of the given type can be filtered by, in the
|
|
330
|
+
* order `limebb-filter-condition-picker` should list them, or an empty array for
|
|
331
|
+
* a type without a catalog. A consumer that supports only a subset passes its
|
|
332
|
+
* own list to the picker instead.
|
|
333
|
+
* @param propertyType
|
|
334
|
+
*/
|
|
335
|
+
export function getConditionsForPropertyType(propertyType) {
|
|
336
|
+
if (!propertyType) {
|
|
337
|
+
return [];
|
|
338
|
+
}
|
|
339
|
+
return CONDITIONS_BY_PROPERTY_TYPE[propertyType];
|
|
340
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Operator } from "@limetech/lime-web-components";
|
|
2
|
+
/**
|
|
3
|
+
* The canonical operator↔condition translation for the *authoring* (write)
|
|
4
|
+
* direction, so consumers (the query builder, the rule editor, the CRM property
|
|
5
|
+
* filters) keep the mapping in one place instead of repeating it.
|
|
6
|
+
*
|
|
7
|
+
* Intentionally separate from the structural read-side map in `compound-leaf.ts`,
|
|
8
|
+
* which interprets *existing* expressions and maps some operators differently
|
|
9
|
+
* (a bare `NOT` reads as `not-equals`, a bare `IN` as `equals`). Do not merge
|
|
10
|
+
* the two.
|
|
11
|
+
*/
|
|
12
|
+
const OPERATOR_CONDITION_PAIRS = [
|
|
13
|
+
[Operator.EQUALS, 'equals'],
|
|
14
|
+
[Operator.NOT_EQUALS, 'not-equals'],
|
|
15
|
+
[Operator.GREATER, 'greater-than'],
|
|
16
|
+
[Operator.GREATER_OR_EQUAL, 'greater-than-or-equal'],
|
|
17
|
+
[Operator.LESS, 'less-than'],
|
|
18
|
+
[Operator.LESS_OR_EQUAL, 'less-than-or-equal'],
|
|
19
|
+
[Operator.IN, 'in-filter-set'],
|
|
20
|
+
[Operator.LIKE, 'contains'],
|
|
21
|
+
[Operator.BEGINS, 'begins-with'],
|
|
22
|
+
[Operator.ENDS, 'ends-with'],
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* The {@link Operator} that authors a condition, or `undefined` for a condition
|
|
26
|
+
* with no single operator (e.g. `between`, `empty`, `previous`).
|
|
27
|
+
* @param condition
|
|
28
|
+
*/
|
|
29
|
+
export function conditionToOperator(condition) {
|
|
30
|
+
var _a;
|
|
31
|
+
return (_a = OPERATOR_CONDITION_PAIRS.find(([, mapped]) => mapped === condition)) === null || _a === void 0 ? void 0 : _a[0];
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The conditions a list of operators authors, in order, dropping any operator
|
|
35
|
+
* with no authoring condition. Lets a consumer declare which operators it offers
|
|
36
|
+
* and hand the matching conditions to `limebb-filter-condition-picker`.
|
|
37
|
+
* @param operators
|
|
38
|
+
*/
|
|
39
|
+
export function operatorsToConditions(operators) {
|
|
40
|
+
return operators
|
|
41
|
+
.map((operator) => { var _a; return (_a = OPERATOR_CONDITION_PAIRS.find(([op]) => op === operator)) === null || _a === void 0 ? void 0 : _a[1]; })
|
|
42
|
+
.filter((condition) => condition !== undefined);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The {@link FilterCondition} an operator authors, or `undefined` for an
|
|
46
|
+
* operator with no authoring condition (e.g. the structural `AND`/`OR`/`NOT`).
|
|
47
|
+
* @param operator
|
|
48
|
+
*/
|
|
49
|
+
export function operatorToCondition(operator) {
|
|
50
|
+
if (!operator) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
return operatorsToConditions([operator])[0];
|
|
54
|
+
}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { Host, h } from "@stencil/core";
|
|
2
|
+
import { PlatformServiceName, } from "@limetech/lime-web-components";
|
|
3
|
+
import { getConditionsForPropertyType, getFilterConditionIcon, getFilterConditionLabelKey, } from "../filter-chip/filter-condition-icons";
|
|
4
|
+
/**
|
|
5
|
+
* Accessible label for the control: set for screen readers but hidden visually
|
|
6
|
+
* (see the stylesheet). Reuses the shared, localized "Operator" label.
|
|
7
|
+
*/
|
|
8
|
+
const LABEL_KEY = 'webclient.operator';
|
|
9
|
+
/**
|
|
10
|
+
* Filter condition picker
|
|
11
|
+
*
|
|
12
|
+
* A dropdown for choosing a single filter condition, such as Is / Is not /
|
|
13
|
+
* Greater than / Contains / Between / After / Empty / …
|
|
14
|
+
*
|
|
15
|
+
* It is presentational and speaks the shared filter vocabulary: give it a
|
|
16
|
+
* `propertyType` and it lists the right conditions for that data type, each with
|
|
17
|
+
* the correct icon and localized wording (e.g. `greater-than` reads "Greater
|
|
18
|
+
* than" for a number but "After" for a date, and `equals` reads "Is" for an
|
|
19
|
+
* option).
|
|
20
|
+
*
|
|
21
|
+
* A consumer that supports only a subset of conditions passes its own
|
|
22
|
+
* list via `conditions`; the consumer maps its domain operators to and from the
|
|
23
|
+
* `FilterCondition` values itself.
|
|
24
|
+
*
|
|
25
|
+
* @exampleComponent limebb-example-filter-condition-picker-basic
|
|
26
|
+
* @exampleComponent limebb-example-filter-condition-picker-property-types
|
|
27
|
+
* @exampleComponent limebb-example-filter-condition-picker-boolean
|
|
28
|
+
* @exampleComponent limebb-example-filter-condition-picker-custom
|
|
29
|
+
*/
|
|
30
|
+
export class FilterConditionPicker {
|
|
31
|
+
constructor() {
|
|
32
|
+
/**
|
|
33
|
+
* Whether the picker is disabled.
|
|
34
|
+
*/
|
|
35
|
+
this.disabled = false;
|
|
36
|
+
this.handleChange = (event) => {
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
if (event.detail) {
|
|
39
|
+
this.change.emit(event.detail.value);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
render() {
|
|
44
|
+
const items = this.buildItems();
|
|
45
|
+
const selected = this.selectedOption(items);
|
|
46
|
+
return (h(Host, { key: 'ca926963d368460db20fa8961f49825d19ae2c07' }, h("limel-select", { key: '5571b580b7da63d1a95fef6cb9b204ed3b32cf75', class: "condition", label: this.accessibleLabel, disabled: this.disabled, options: items, value: selected, onChange: this.handleChange })));
|
|
47
|
+
}
|
|
48
|
+
buildItems() {
|
|
49
|
+
var _a;
|
|
50
|
+
const conditions = (_a = this.conditions) !== null && _a !== void 0 ? _a : getConditionsForPropertyType(this.propertyType);
|
|
51
|
+
// Divider before the empty / not-empty group and before "matches".
|
|
52
|
+
const emptyGroupStart = conditions.findIndex((condition) => condition === 'empty' || condition === 'not-empty');
|
|
53
|
+
const matchesIndex = conditions.indexOf('matches');
|
|
54
|
+
const items = [];
|
|
55
|
+
for (const [index, condition] of conditions.entries()) {
|
|
56
|
+
if (index > 0 &&
|
|
57
|
+
(index === emptyGroupStart || index === matchesIndex)) {
|
|
58
|
+
items.push({ separator: true });
|
|
59
|
+
}
|
|
60
|
+
items.push({
|
|
61
|
+
value: condition,
|
|
62
|
+
text: this.conditionLabel(condition),
|
|
63
|
+
icon: getFilterConditionIcon(condition, this.propertyType),
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return items;
|
|
67
|
+
}
|
|
68
|
+
selectedOption(items) {
|
|
69
|
+
const options = items.filter((item) => !('separator' in item));
|
|
70
|
+
return options.find((option) => option.value === this.value);
|
|
71
|
+
}
|
|
72
|
+
get accessibleLabel() {
|
|
73
|
+
var _a;
|
|
74
|
+
return (_a = this.translate(LABEL_KEY)) !== null && _a !== void 0 ? _a : 'Operator';
|
|
75
|
+
}
|
|
76
|
+
conditionLabel(condition) {
|
|
77
|
+
var _a;
|
|
78
|
+
const key = getFilterConditionLabelKey(condition, this.propertyType);
|
|
79
|
+
return (_a = (key ? this.translate(key) : undefined)) !== null && _a !== void 0 ? _a : condition;
|
|
80
|
+
}
|
|
81
|
+
translate(key) {
|
|
82
|
+
var _a;
|
|
83
|
+
const translated = (_a = this.translator) === null || _a === void 0 ? void 0 : _a.get(key);
|
|
84
|
+
return translated && translated !== key ? translated : undefined;
|
|
85
|
+
}
|
|
86
|
+
get translator() {
|
|
87
|
+
var _a;
|
|
88
|
+
try {
|
|
89
|
+
return (_a = this.platform) === null || _a === void 0 ? void 0 : _a.get(PlatformServiceName.Translate);
|
|
90
|
+
}
|
|
91
|
+
catch (_b) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
static get is() { return "limebb-filter-condition-picker"; }
|
|
96
|
+
static get encapsulation() { return "shadow"; }
|
|
97
|
+
static get originalStyleUrls() {
|
|
98
|
+
return {
|
|
99
|
+
"$": ["filter-condition-picker.scss"]
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
static get styleUrls() {
|
|
103
|
+
return {
|
|
104
|
+
"$": ["filter-condition-picker.css"]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
static get properties() {
|
|
108
|
+
return {
|
|
109
|
+
"platform": {
|
|
110
|
+
"type": "unknown",
|
|
111
|
+
"mutable": false,
|
|
112
|
+
"complexType": {
|
|
113
|
+
"original": "LimeWebComponentPlatform",
|
|
114
|
+
"resolved": "LimeWebComponentPlatform | undefined",
|
|
115
|
+
"references": {
|
|
116
|
+
"LimeWebComponentPlatform": {
|
|
117
|
+
"location": "import",
|
|
118
|
+
"path": "@limetech/lime-web-components",
|
|
119
|
+
"id": "node_modules::LimeWebComponentPlatform",
|
|
120
|
+
"referenceLocation": "LimeWebComponentPlatform"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
"required": false,
|
|
125
|
+
"optional": true,
|
|
126
|
+
"docs": {
|
|
127
|
+
"tags": [],
|
|
128
|
+
"text": "Platform service provider"
|
|
129
|
+
},
|
|
130
|
+
"getter": false,
|
|
131
|
+
"setter": false
|
|
132
|
+
},
|
|
133
|
+
"value": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"mutable": false,
|
|
136
|
+
"complexType": {
|
|
137
|
+
"original": "FilterCondition",
|
|
138
|
+
"resolved": "\"begins-with\" | \"between\" | \"connected-to\" | \"contains\" | \"current\" | \"empty\" | \"ends-with\" | \"equals\" | \"greater-than\" | \"greater-than-or-equal\" | \"in-filter-set\" | \"less-than\" | \"less-than-or-equal\" | \"matches\" | \"next\" | \"not-begins-with\" | \"not-between\" | \"not-connected-to\" | \"not-contains\" | \"not-empty\" | \"not-ends-with\" | \"not-equals\" | \"not-in-filter-set\" | \"previous\" | undefined",
|
|
139
|
+
"references": {
|
|
140
|
+
"FilterCondition": {
|
|
141
|
+
"location": "import",
|
|
142
|
+
"path": "../filter-chip/filter-chip.types",
|
|
143
|
+
"id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
|
|
144
|
+
"referenceLocation": "FilterCondition"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
},
|
|
148
|
+
"required": false,
|
|
149
|
+
"optional": true,
|
|
150
|
+
"docs": {
|
|
151
|
+
"tags": [],
|
|
152
|
+
"text": "The currently selected condition."
|
|
153
|
+
},
|
|
154
|
+
"getter": false,
|
|
155
|
+
"setter": false,
|
|
156
|
+
"reflect": false,
|
|
157
|
+
"attribute": "value"
|
|
158
|
+
},
|
|
159
|
+
"propertyType": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"mutable": false,
|
|
162
|
+
"complexType": {
|
|
163
|
+
"original": "PropertyType",
|
|
164
|
+
"resolved": "\"belongsto\" | \"date\" | \"decimal\" | \"file\" | \"hasandbelongstomany\" | \"hasmany\" | \"hasone\" | \"integer\" | \"link\" | \"month\" | \"option\" | \"percent\" | \"phone\" | \"quarter\" | \"set\" | \"string\" | \"system\" | \"text\" | \"time\" | \"timeofday\" | \"user\" | \"xml\" | \"year\" | \"yesno\" | undefined",
|
|
165
|
+
"references": {
|
|
166
|
+
"PropertyType": {
|
|
167
|
+
"location": "import",
|
|
168
|
+
"path": "@limetech/lime-web-components",
|
|
169
|
+
"id": "node_modules::PropertyType",
|
|
170
|
+
"referenceLocation": "PropertyType"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"required": false,
|
|
175
|
+
"optional": true,
|
|
176
|
+
"docs": {
|
|
177
|
+
"tags": [],
|
|
178
|
+
"text": "Data type of the filtered property; selects which conditions are listed\nand their type-specific wording and icons."
|
|
179
|
+
},
|
|
180
|
+
"getter": false,
|
|
181
|
+
"setter": false,
|
|
182
|
+
"reflect": false,
|
|
183
|
+
"attribute": "property-type"
|
|
184
|
+
},
|
|
185
|
+
"conditions": {
|
|
186
|
+
"type": "unknown",
|
|
187
|
+
"mutable": false,
|
|
188
|
+
"complexType": {
|
|
189
|
+
"original": "FilterCondition[]",
|
|
190
|
+
"resolved": "FilterCondition[] | undefined",
|
|
191
|
+
"references": {
|
|
192
|
+
"FilterCondition": {
|
|
193
|
+
"location": "import",
|
|
194
|
+
"path": "../filter-chip/filter-chip.types",
|
|
195
|
+
"id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
|
|
196
|
+
"referenceLocation": "FilterCondition"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
"required": false,
|
|
201
|
+
"optional": true,
|
|
202
|
+
"docs": {
|
|
203
|
+
"tags": [],
|
|
204
|
+
"text": "Explicit conditions to offer, overriding the per-type catalog."
|
|
205
|
+
},
|
|
206
|
+
"getter": false,
|
|
207
|
+
"setter": false
|
|
208
|
+
},
|
|
209
|
+
"disabled": {
|
|
210
|
+
"type": "boolean",
|
|
211
|
+
"mutable": false,
|
|
212
|
+
"complexType": {
|
|
213
|
+
"original": "boolean",
|
|
214
|
+
"resolved": "boolean",
|
|
215
|
+
"references": {}
|
|
216
|
+
},
|
|
217
|
+
"required": false,
|
|
218
|
+
"optional": false,
|
|
219
|
+
"docs": {
|
|
220
|
+
"tags": [],
|
|
221
|
+
"text": "Whether the picker is disabled."
|
|
222
|
+
},
|
|
223
|
+
"getter": false,
|
|
224
|
+
"setter": false,
|
|
225
|
+
"reflect": true,
|
|
226
|
+
"attribute": "disabled",
|
|
227
|
+
"defaultValue": "false"
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
static get events() {
|
|
232
|
+
return [{
|
|
233
|
+
"method": "change",
|
|
234
|
+
"name": "change",
|
|
235
|
+
"bubbles": true,
|
|
236
|
+
"cancelable": true,
|
|
237
|
+
"composed": true,
|
|
238
|
+
"docs": {
|
|
239
|
+
"tags": [],
|
|
240
|
+
"text": "Emitted when the user selects a condition."
|
|
241
|
+
},
|
|
242
|
+
"complexType": {
|
|
243
|
+
"original": "FilterCondition",
|
|
244
|
+
"resolved": "\"begins-with\" | \"between\" | \"connected-to\" | \"contains\" | \"current\" | \"empty\" | \"ends-with\" | \"equals\" | \"greater-than\" | \"greater-than-or-equal\" | \"in-filter-set\" | \"less-than\" | \"less-than-or-equal\" | \"matches\" | \"next\" | \"not-begins-with\" | \"not-between\" | \"not-connected-to\" | \"not-contains\" | \"not-empty\" | \"not-ends-with\" | \"not-equals\" | \"not-in-filter-set\" | \"previous\"",
|
|
245
|
+
"references": {
|
|
246
|
+
"FilterCondition": {
|
|
247
|
+
"location": "import",
|
|
248
|
+
"path": "../filter-chip/filter-chip.types",
|
|
249
|
+
"id": "src/components/filter-chip/filter-chip.types.ts::FilterCondition",
|
|
250
|
+
"referenceLocation": "FilterCondition"
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
@@ -35,7 +35,7 @@ export class IconPicker {
|
|
|
35
35
|
icon: this.value,
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
|
-
return (h("limel-picker", { key: '
|
|
38
|
+
return (h("limel-picker", { key: 'bf6b76bbcea838150261e9e0037b1d7ca1ee08d1', label: this.label, helperText: this.helperText, disabled: this.disabled, readonly: this.readonly, invalid: this.invalid, required: this.required, value: value, searcher: this.search, onChange: this.handleChange, badgeIcons: false, leadingIcon: "search", searchLabel: "Start typing to find the right icon" }));
|
|
39
39
|
}
|
|
40
40
|
static get is() { return "limebb-icon-picker"; }
|
|
41
41
|
static get encapsulation() { return "shadow"; }
|
|
@@ -92,7 +92,7 @@ export class InfoTileAdminConfig {
|
|
|
92
92
|
},
|
|
93
93
|
];
|
|
94
94
|
return [
|
|
95
|
-
h("limel-button-group", { key: '
|
|
95
|
+
h("limel-button-group", { key: '68999f607fd66a5a451929d6720200734c6505ea', value: buttons.filter(this.isValidButton), onChange: this.handleChangeType }),
|
|
96
96
|
this.renderFormatConfig(),
|
|
97
97
|
];
|
|
98
98
|
}
|
|
@@ -116,7 +116,7 @@ export class InfoTile {
|
|
|
116
116
|
const errorProps = Object.assign(Object.assign({}, baseProps), { icon: 'error', prefix: 'ERROR', loading: true, label: this.getLabel(filter) });
|
|
117
117
|
const normalProps = Object.assign(Object.assign({}, baseProps), { label: this.getLabel(filter), link: this.getLink(filter), loading: this.loading, value: value === null || value === void 0 ? void 0 : value.value.trim() });
|
|
118
118
|
const props = !filter || this.error ? errorProps : normalProps;
|
|
119
|
-
return (h("limel-info-tile", Object.assign({ key: '
|
|
119
|
+
return (h("limel-info-tile", Object.assign({ key: '802c93fade2b3aff10e53c1a970798b994bff2d2', class: { error: !filter || this.error } }, props)));
|
|
120
120
|
}
|
|
121
121
|
/**
|
|
122
122
|
* Effective `reducedPresence` for this render. The boolean prop
|
|
@@ -27,7 +27,7 @@ export class KanbanGroup {
|
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
29
|
render() {
|
|
30
|
-
return (h(Host, { key: '
|
|
30
|
+
return (h(Host, { key: '5c0675c4edff236ac8b4d90c93d418e3b0c18a9c' }, this.renderHelp(), this.renderGroupHeading(), this.renderGroupSummary(), this.renderItems()));
|
|
31
31
|
}
|
|
32
32
|
renderGroupSummary() {
|
|
33
33
|
if (!this.summary || !this.totalCount) {
|
|
@@ -55,7 +55,7 @@ export class KanbanItemComponent {
|
|
|
55
55
|
}
|
|
56
56
|
render() {
|
|
57
57
|
var _a, _b;
|
|
58
|
-
return (h(Host, { key: '
|
|
58
|
+
return (h(Host, { key: '282342e6a11234154e4cbcc8df113aafd5cd9cd2', id: this.item.id.toString(), class: {
|
|
59
59
|
'has-unpromoted-actions': !!((_a = this.item.unpromotedActions) === null || _a === void 0 ? void 0 : _a.length),
|
|
60
60
|
'is-selected': !!((_b = this.item) === null || _b === void 0 ? void 0 : _b.selected),
|
|
61
61
|
}, style: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { Operator, } from "@limetech/lime-web-components";
|
|
2
|
-
// Intentionally diverges from the
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
2
|
+
// Intentionally diverges from the write-side map in `filter-operators.ts` (the
|
|
3
|
+
// operator vocabulary the query builder and rule editor author with): that map
|
|
4
|
+
// has no `NOT` entry and maps `IN` to `'in-filter-set'`, whereas here a keyed
|
|
5
|
+
// bare `NOT` reads as `not-equals` and a bare `IN` set reads as `equals` (see
|
|
6
|
+
// `describeKeyed`). They are deliberately not the same table — do not reconcile
|
|
7
|
+
// them into one.
|
|
8
8
|
// Prototype-free (`Object.create(null)`): a junk `op` such as `'__proto__'` or
|
|
9
9
|
// `'constructor'` resolves to `undefined` rather than an inherited
|
|
10
10
|
// `Object.prototype` member, so a malformed expression falls through to "stays
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Operator,
|
|
1
|
+
import { Operator, } from "@limetech/lime-web-components";
|
|
2
2
|
import { Host, h } from "@stencil/core";
|
|
3
|
-
import {
|
|
3
|
+
import { conditionToOperator, operatorToCondition, } from "../../filter-chip/filter-operators";
|
|
4
|
+
import { LIME_QUERY_CONDITIONS, } from "./lime-query-operators";
|
|
4
5
|
/**
|
|
5
6
|
* Inline editor for a single comparison expression. `shadow: true` so
|
|
6
7
|
* its stylesheet travels with the host when `limel-popover` portals it
|
|
@@ -14,9 +15,12 @@ export class LimeQueryFilterComparisonEditorComponent {
|
|
|
14
15
|
event.stopPropagation();
|
|
15
16
|
this.expressionChange.emit(Object.assign(Object.assign({}, this.expression), { key: event.detail }));
|
|
16
17
|
};
|
|
17
|
-
this.
|
|
18
|
+
this.handleConditionChange = (event) => {
|
|
18
19
|
event.stopPropagation();
|
|
19
|
-
const newOperator = event.detail
|
|
20
|
+
const newOperator = conditionToOperator(event.detail);
|
|
21
|
+
if (!newOperator) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
20
24
|
const oldOperator = this.expression.op;
|
|
21
25
|
let convertedValue = this.expression.exp;
|
|
22
26
|
// IN expects an array; other operators expect a single value.
|
|
@@ -48,23 +52,14 @@ export class LimeQueryFilterComparisonEditorComponent {
|
|
|
48
52
|
(_a = this.propertySelectorEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
49
53
|
}
|
|
50
54
|
render() {
|
|
51
|
-
return (h(Host, { key: '
|
|
55
|
+
return (h(Host, { key: '528f313843bb6e8e779fc3a5603c10769cbd183b' }, this.renderPropertySelector(), this.renderConditionPicker(), this.renderValueInput()));
|
|
52
56
|
}
|
|
53
57
|
renderPropertySelector() {
|
|
54
58
|
return (h("limebb-property-selector", { ref: (el) => (this.propertySelectorEl = el), class: "property", label: "Property", platform: this.platform, context: this.context, limetype: this.limetype, value: this.expression.key, required: true, onChange: this.handlePropertyChange }));
|
|
55
59
|
}
|
|
56
|
-
|
|
60
|
+
renderConditionPicker() {
|
|
57
61
|
const operatorHasBeenSet = !!this.expression.op;
|
|
58
|
-
|
|
59
|
-
var _a, _b;
|
|
60
|
-
return ({
|
|
61
|
-
text: (_b = (_a = this.translator) === null || _a === void 0 ? void 0 : _a.get(op.label)) !== null && _b !== void 0 ? _b : op.label,
|
|
62
|
-
value: op.value,
|
|
63
|
-
icon: op.icon ? { name: op.icon } : undefined,
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
const selectedOption = options.find((o) => o.value === this.expression.op);
|
|
67
|
-
return (h("limel-select", { class: "operator", label: "Operator", value: selectedOption, options: options, disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleOperatorChange }));
|
|
62
|
+
return (h("limebb-filter-condition-picker", { class: "operator", platform: this.platform, propertyType: this.propertyType, conditions: LIME_QUERY_CONDITIONS, value: operatorToCondition(this.expression.op), disabled: !operatorHasBeenSet && !this.expression.key, onChange: this.handleConditionChange }));
|
|
68
63
|
}
|
|
69
64
|
renderValueInput() {
|
|
70
65
|
if (!this.expression.op) {
|
|
@@ -72,10 +67,6 @@ export class LimeQueryFilterComparisonEditorComponent {
|
|
|
72
67
|
}
|
|
73
68
|
return (h("limebb-lime-query-value-input", { class: "value", label: "Value", 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 }));
|
|
74
69
|
}
|
|
75
|
-
get translator() {
|
|
76
|
-
var _a;
|
|
77
|
-
return (_a = this.platform) === null || _a === void 0 ? void 0 : _a.get(PlatformServiceName.Translate);
|
|
78
|
-
}
|
|
79
70
|
static get is() { return "limebb-lime-query-filter-comparison-editor"; }
|
|
80
71
|
static get encapsulation() { return "shadow"; }
|
|
81
72
|
static get delegatesFocus() { return true; }
|
|
@@ -200,6 +191,32 @@ export class LimeQueryFilterComparisonEditorComponent {
|
|
|
200
191
|
},
|
|
201
192
|
"getter": false,
|
|
202
193
|
"setter": false
|
|
194
|
+
},
|
|
195
|
+
"propertyType": {
|
|
196
|
+
"type": "string",
|
|
197
|
+
"mutable": false,
|
|
198
|
+
"complexType": {
|
|
199
|
+
"original": "PropertyType",
|
|
200
|
+
"resolved": "\"belongsto\" | \"date\" | \"decimal\" | \"file\" | \"hasandbelongstomany\" | \"hasmany\" | \"hasone\" | \"integer\" | \"link\" | \"month\" | \"option\" | \"percent\" | \"phone\" | \"quarter\" | \"set\" | \"string\" | \"system\" | \"text\" | \"time\" | \"timeofday\" | \"user\" | \"xml\" | \"year\" | \"yesno\" | undefined",
|
|
201
|
+
"references": {
|
|
202
|
+
"PropertyType": {
|
|
203
|
+
"location": "import",
|
|
204
|
+
"path": "@limetech/lime-web-components",
|
|
205
|
+
"id": "node_modules::PropertyType",
|
|
206
|
+
"referenceLocation": "PropertyType"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
"required": false,
|
|
211
|
+
"optional": true,
|
|
212
|
+
"docs": {
|
|
213
|
+
"tags": [],
|
|
214
|
+
"text": "Data type of the selected property; lets the picker pick type-specific\nwording and icons."
|
|
215
|
+
},
|
|
216
|
+
"getter": false,
|
|
217
|
+
"setter": false,
|
|
218
|
+
"reflect": false,
|
|
219
|
+
"attribute": "property-type"
|
|
203
220
|
}
|
|
204
221
|
};
|
|
205
222
|
}
|