novo-elements 10.10.0-next.1 → 10.10.0-next.2
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/elements/query-builder/condition-builder/condition-builder.component.d.ts +10 -0
- package/esm2022/elements/query-builder/condition-builder/condition-builder.component.mjs +16 -1
- package/fesm2022/novo-elements-elements-query-builder.mjs +15 -0
- package/fesm2022/novo-elements-elements-query-builder.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -69,6 +69,16 @@ export declare class ConditionBuilderComponent implements OnInit, OnChanges, Aft
|
|
|
69
69
|
* @param fieldConfig
|
|
70
70
|
*/
|
|
71
71
|
changeFieldOptions(fieldConfig: FieldConfig<BaseFieldDef>): void;
|
|
72
|
+
/**
|
|
73
|
+
* Resets the input and operator view containers, regenerates the field templates,
|
|
74
|
+
* and marks the component for change detection.
|
|
75
|
+
*
|
|
76
|
+
* Use this method after updating form controls to reinitialize the input and
|
|
77
|
+
* operator fields so that the view reflects the latest form control changes.
|
|
78
|
+
*
|
|
79
|
+
* @returns void
|
|
80
|
+
*/
|
|
81
|
+
resetInputAndOperator(): void;
|
|
72
82
|
getField(): BaseFieldDef;
|
|
73
83
|
getDefaultField(): string;
|
|
74
84
|
updateFieldSelection(): void;
|
|
@@ -140,6 +140,21 @@ export class ConditionBuilderComponent {
|
|
|
140
140
|
this.searchTerm.setValue('');
|
|
141
141
|
this.results$ = Promise.resolve(this.fieldConfig.options);
|
|
142
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Resets the input and operator view containers, regenerates the field templates,
|
|
145
|
+
* and marks the component for change detection.
|
|
146
|
+
*
|
|
147
|
+
* Use this method after updating form controls to reinitialize the input and
|
|
148
|
+
* operator fields so that the view reflects the latest form control changes.
|
|
149
|
+
*
|
|
150
|
+
* @returns void
|
|
151
|
+
*/
|
|
152
|
+
resetInputAndOperator() {
|
|
153
|
+
this._inputOutlet.viewContainer.clear();
|
|
154
|
+
this._operatorOutlet.viewContainer.clear();
|
|
155
|
+
this.createFieldTemplates();
|
|
156
|
+
this.cdr.markForCheck();
|
|
157
|
+
}
|
|
143
158
|
getField() {
|
|
144
159
|
const field = this.parentForm?.value?.field;
|
|
145
160
|
if (!field)
|
|
@@ -262,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
262
277
|
type: HostBinding,
|
|
263
278
|
args: ['class.condition-host']
|
|
264
279
|
}] } });
|
|
265
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBSUwsUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixLQUFLLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFHakU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFtQixhQUErQixFQUFTLFVBQXNCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxD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QVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQWlDQyxlQUFlO3NCQURyQixXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGNvbXB1dGVkLFxuICBpbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOb3ZvTGFiZWxTZXJ2aWNlIH0gZnJvbSAnbm92by1lbGVtZW50cy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlQ29uZGl0aW9uRmllbGREZWYgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29uZmlnLCBRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5PVk9fQ09ORElUSU9OX0JVSUxERVIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnRva2Vucyc7XG5pbXBvcnQgeyBBZGRyZXNzQ3JpdGVyaWFDb25maWcsIEJhc2VGaWVsZERlZiwgRmllbGRDb25maWcsIFF1ZXJ5RmlsdGVyT3V0bGV0IH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uSW5wdXRPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbklucHV0T3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uT3BlcmF0b3JPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk9wZXJhdG9yT3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tY29uZGl0aW9uLWJ1aWxkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5PVk9fQ09ORElUSU9OX0JVSUxERVIsIHVzZUV4aXN0aW5nOiBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUXVlcnlCdWlsZGVyU2VydmljZSxcbiAgICAgIGRlcHM6IFtOb3ZvTGFiZWxTZXJ2aWNlLCBbbmV3IFNraXBTZWxmKCksIG5ldyBPcHRpb25hbCgpLCBRdWVyeUJ1aWxkZXJTZXJ2aWNlXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobGFiZWxTZXJ2aWNlOiBOb3ZvTGFiZWxTZXJ2aWNlLCBxdWVyeUJ1aWxkZXJTZXJ2aWNlPzogUXVlcnlCdWlsZGVyU2VydmljZSkgPT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UpIHtcbiAgICAgICAgICBxdWVyeUJ1aWxkZXJTZXJ2aWNlID0gbmV3IFF1ZXJ5QnVpbGRlclNlcnZpY2UobGFiZWxTZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnlCdWlsZGVyU2VydmljZTtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9vcGVyYXRvck91dGxldDogQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQ7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uSW5wdXRPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dE91dGxldDogQ29uZGl0aW9uSW5wdXRPdXRsZXQ7XG5cbiAgQElucHV0KCkgbGFiZWw6IGFueTtcbiAgQElucHV0KCkgc2NvcGU6IHN0cmluZztcbiAgQElucHV0KCkgYW5kSW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgZ3JvdXBJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBhZGRyZXNzQ29uZmlnOiBBZGRyZXNzQ3JpdGVyaWFDb25maWc7XG4gIGhpZGVPcGVyYXRvciA9IGlucHV0KHRydWUpO1xuICBjb25kaXRpb25UeXBlID0gaW5wdXQoKTtcblxuICAvLyBUaGlzIGNvbXBvbmVudCBjYW4gZWl0aGVyIGJlIGRpcmVjdGx5IGhvc3RlZCBhcyBhIGhvc3QgdG8gYSBjb25kaXRpb24sIG9yIGl0IGNhbiBiZSBwYXJ0IG9mIGEgY29uZGl0aW9uIGdyb3VwIHdpdGhpbiBhIGNyaXRlcmlhIGJ1aWxkZXIuXG4gIC8vIEluIHRoZSBmb3JtZXIgY2FzZSwgY29uZmlnIHdpbGwgY29tZSBmcm9tIGlucHV0cywgYW5kIHdlIHdpbGwgaW5zdGFudGlhdGUgb3VyIG93biBRdWVyeUJ1aWxkZXJTZXJ2aWNlLiBJbiB0aGUgbGF0dGVyLCBpdCBjb21lcyBmcm9tXG4gIC8vIHRoZSBRdWVyeUJ1aWxkZXJTZXJ2aWNlLlxuICBpbnB1dENvbmZpZyA9IGlucHV0PFF1ZXJ5QnVpbGRlckNvbmZpZz4obnVsbCwgeyBhbGlhczogJ2NvbmZpZyd9KTtcbiAgaW5wdXRFZGl0VHlwZUZuID0gaW5wdXQ8KGZpZWxkOiBCYXNlRmllbGREZWYpID0+IHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2VkaXRUeXBlRm4nfSk7XG4gIHByaXZhdGUgY29uZmlnID0gY29tcHV0ZWQ8UXVlcnlCdWlsZGVyQ29uZmlnPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNDb25kaXRpb25Ib3N0KSB7XG4gICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuY29uZmlnID0gdGhpcy5pbnB1dENvbmZpZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmNvbmZpZztcbiAgfSk7XG4gIHByaXZhdGUgZWRpdFR5cGVGbiA9IGNvbXB1dGVkPChmaWVsZDogQmFzZUZpZWxkRGVmKSA9PiBzdHJpbmc+KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0NvbmRpdGlvbkhvc3QpIHtcbiAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5lZGl0VHlwZUZuID0gdGhpcy5pbnB1dEVkaXRUeXBlRm4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5lZGl0VHlwZUZuO1xuICB9KTtcblxuICBwdWJsaWMgcGFyZW50Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmllbGRDb25maWc6IEZpZWxkQ29uZmlnPEJhc2VGaWVsZERlZj47XG4gIHB1YmxpYyBzZWFyY2hlcyE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHJlc3VsdHMkOiBQcm9taXNlPGFueVtdPjtcbiAgcHVibGljIHNlYXJjaFRlcm06IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIHB1YmxpYyBmaWVsZERpc3BsYXlXaXRoO1xuICBwdWJsaWMgZGlzcGxheUljb246IHN0cmluZztcblxuICBwdWJsaWMgc3RhdGljRmllbGRTZWxlY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKTtcbiAgcHJpdmF0ZSBfbGFzdENvbnRleHQ6IGFueSA9IHt9O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbmRpdGlvbi1ob3N0JylcbiAgcHVibGljIGlzQ29uZGl0aW9uSG9zdCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBncmlkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0aWNGaWVsZFNlbGVjdGlvbigpKSB7XG4gICAgICByZXR1cm4gJzEzcmVtIDFmcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0Q29sdW1uV2lkdGggPSB0aGlzLmhpZGVPcGVyYXRvcigpID8gJzIwcmVtJyA6ICcxNnJlbSc7XG4gICAgICByZXR1cm4gYCR7Zmlyc3RDb2x1bW5XaWR0aH0gMTNyZW0gMWZyYDtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICApIHtcbiAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UuY29tcG9uZW50SG9zdCkge1xuICAgICAgcXVlcnlCdWlsZGVyU2VydmljZS5jb21wb25lbnRIb3N0ID0gdGhpcztcbiAgICAgIHRoaXMuaXNDb25kaXRpb25Ib3N0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ3JvdXBJbmRleCA9IDA7XG4gICAgICB0aGlzLmFuZEluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5wYXJlbnRGb3JtLmNvbnRyb2xzLmZpZWxkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMudXBkYXRlRmllbGRTZWxlY3Rpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRDb25maWc/LnByZXZpb3VzVmFsdWU/LnN0YXRpY0ZpZWxkU2VsZWN0aW9uICYmXG4gICAgICBjaGFuZ2VzLmlucHV0Q29uZmlnLnByZXZpb3VzVmFsdWUuc3RhdGljRmllbGRTZWxlY3Rpb24gIT09IGNoYW5nZXMuaW5wdXRDb25maWcuY3VycmVudFZhbHVlLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5jb250cm9scy5maWVsZC5zZXRWYWx1ZShjaGFuZ2VzLmlucHV0Q29uZmlnLmN1cnJlbnRWYWx1ZS5zdGF0aWNGaWVsZFNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IHRoaXMuY29uZmlnKCk/LmZpZWxkcyB8fCBbXTtcbiAgICBjb25zdCBzY29wZWRGaWVsZHMgPSB0aGlzLnNjb3BlID8gYWxsRmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC52YWx1ZSA9PT0gdGhpcy5zY29wZSkgOiBhbGxGaWVsZHNbMF07XG4gICAgYWxsRmllbGRzLmxlbmd0aCAmJiB0aGlzLmNoYW5nZUZpZWxkT3B0aW9ucyhzY29wZWRGaWVsZHMpO1xuICAgIHRoaXMuc2VhcmNoZXMgPSB0aGlzLnNlYXJjaFRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodGVybSkgPT4ge1xuICAgICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgdGhpcy5maWVsZENvbmZpZy5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSB8fCBmLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybS52YWx1ZT8uZmllbGQgIT09IG51bGwpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy51cGRhdGVGaWVsZFNlbGVjdGlvbigpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlYXJjaGVzLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gQ2xlYXIgYWxsIG91dGxldHMgYW5kIE1hcHNcbiAgICBbdGhpcy5fb3BlcmF0b3JPdXRsZXQudmlld0NvbnRhaW5lciwgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lcl0uZm9yRWFjaCgoZGVmKSA9PiB7XG4gICAgICBkZWYuY2xlYXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIENvbmRpdGlvbnMgXCJGaWVsZFwiIE9wdGlvbnMgdG8gQ2hhbmdlIGJhc2Ugb24gbmV3IFNjb3BlXG4gICAqIEBwYXJhbSBmaWVsZENvbmZpZ1xuICAgKi9cbiAgY2hhbmdlRmllbGRPcHRpb25zKGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZzxCYXNlRmllbGREZWY+KSB7XG4gICAgdGhpcy5maWVsZENvbmZpZyA9IGZpZWxkQ29uZmlnO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZSh0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnMpO1xuICB9XG5cbiAgZ2V0RmllbGQoKSB7XG4gICAgY29uc3QgZmllbGQgPSB0aGlzLnBhcmVudEZvcm0/LnZhbHVlPy5maWVsZDtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5maWVsZENvbmZpZy5maW5kKGZpZWxkKTtcbiAgfVxuXG4gIGdldERlZmF1bHRGaWVsZCgpIHtcbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnM7XG4gICAgaWYgKGZpZWxkcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmllbGRzWzBdLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdXBkYXRlRmllbGRTZWxlY3Rpb24oKSB7XG4gICAgY29uc3QgZmllbGRDb25mID0gdGhpcy5nZXRGaWVsZCgpO1xuICAgIGlmICghZmllbGRDb25mKSB7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCdmaWVsZCcpLnNldFZhbHVlKHRoaXMuZ2V0RGVmYXVsdEZpZWxkKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpZWxkRGlzcGxheVdpdGggPSAoKSA9PiBmaWVsZENvbmYubGFiZWwgfHwgZmllbGRDb25mLm5hbWU7XG4gICAgICB0aGlzLmRpc3BsYXlJY29uID0gZmllbGRDb25mLmljb24gfHwgbnVsbDtcbiAgICB9XG4gICAgY29uc3QgeyBmaWVsZCB9ID0gdGhpcy5wYXJlbnRGb3JtLnZhbHVlO1xuXG4gICAgaWYgKHRoaXMuX2xhc3RDb250ZXh0LmZpZWxkICE9PSBmaWVsZCkge1xuICAgICAgaWYgKHRoaXMuX2xhc3RDb250ZXh0LmZpZWxkKSB7XG4gICAgICAgIC8vIG9ubHkgY2xlYXJpbmcgb3BlcmF0b3IvdmFsdWUgaWYgZmllbGQgd2FzIHByZXZpb3VzbHkgZGVmaW5lZCBzbyB3ZSBjYW4gcHJlbG9hZCB2YWx1ZXMgb250byB0aGUgZm9ybVxuICAgICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCd2YWx1ZScpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5jcmVhdGVGaWVsZFRlbXBsYXRlcygpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlQ29uZGl0aW9uVHlwZSgpKTtcblxuICAgIHRoaXMuX2xhc3RDb250ZXh0ID0geyAuLi50aGlzLnBhcmVudEZvcm0udmFsdWUgfTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbmRpdGlvblR5cGUoKSB7XG4gICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnY29uZGl0aW9uVHlwZScpPy5zZXRWYWx1ZSh0aGlzLmNvbmRpdGlvblR5cGUoKSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmREZWZpbml0aW9uRm9yRmllbGQoZmllbGQpIHtcbiAgICBpZiAoIWZpZWxkKSByZXR1cm47XG4gICAgY29uc3QgZWRpdFR5cGUgPSB0aGlzLmVkaXRUeXBlRm4oKShmaWVsZCk7XG4gICAgLy8gRG9uJ3QgbG9vayBhdCBkYXRhU3BlY2lhbGl6YXRpb24gaXQgaXMgbm8gZ29vZCwgdGhpcyBtaXNzZXMgY3VycmVuY3ksIGFuZCBwZXJjZW50XG4gICAgY29uc3QgeyBuYW1lIH0gPSBmaWVsZDtcbiAgICBjb25zdCBmaWVsZERlZnNCeU5hbWUgPSB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuZ2V0RmllbGREZWZzQnlOYW1lKCk7XG4gICAgLy8gQ2hlY2sgRmllbGRzIGJ5IHByaW9yaXR5IGZvciBtYXRjaCBGaWVsZCBEZWZpbml0aW9uXG4gICAgY29uc3Qga2V5ID0gW25hbWUsIGVkaXRUeXBlPy50b1VwcGVyQ2FzZSgpLCAnREVGQVVMVCddLmZpbmQoKGl0KSA9PiBmaWVsZERlZnNCeU5hbWUuaGFzKGl0KSk7XG4gICAgcmV0dXJuIGZpZWxkRGVmc0J5TmFtZS5nZXQoa2V5KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRUZW1wbGF0ZXMoKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuZmluZERlZmluaXRpb25Gb3JGaWVsZCh0aGlzLmdldEZpZWxkKCkpO1xuXG4gICAgaWYgKCF0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudEZvcm0uZ2V0KCdvcGVyYXRvcicpLnNldFZhbHVlKGRlZmluaXRpb24uZGVmYXVsdE9wZXJhdG9yKTtcbiAgICB9XG5cbiAgICB0aGlzLmNyZWF0ZUZpZWxkT3BlcmF0b3JzKGRlZmluaXRpb24pO1xuICAgIHRoaXMuY3JlYXRlRmllbGRJbnB1dChkZWZpbml0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRPcGVyYXRvcnMoZGVmaW5pdGlvbjogQmFzZUNvbmRpdGlvbkZpZWxkRGVmKSB7XG4gICAgdGhpcy5fb3BlcmF0b3JPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMucGFyZW50Rm9ybSwgZmllbGRNZXRhOiB0aGlzLmdldEZpZWxkKCkgfTtcbiAgICAgIHRoaXMuX29wZXJhdG9yT3V0bGV0LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGRlZmluaXRpb24uZmllbGRPcGVyYXRvcnMudGVtcGxhdGUsIGNvbnRleHQpO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRmllbGRJbnB1dChkZWZpbml0aW9uOiBCYXNlQ29uZGl0aW9uRmllbGREZWYpIHtcbiAgICB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgaWYgKGRlZmluaXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB7ICRpbXBsaWNpdDogdGhpcy5wYXJlbnRGb3JtLCBmaWVsZE1ldGE6IHRoaXMuZ2V0RmllbGQoKSwgdmlld0luZGV4OiB0aGlzLmdyb3VwSW5kZXgudG9TdHJpbmcoKSArIHRoaXMuYW5kSW5kZXgudG9TdHJpbmcoKSB9O1xuICAgICAgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoZGVmaW5pdGlvbi5maWVsZElucHV0LnRlbXBsYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwicGFyZW50Rm9ybVwiPlxuICA8bm92by1ncmlkIGdhcD1cIjFyZW1cIiBbY29sdW1uc109XCJncmlkQ29sdW1ucygpXCIgYWxpZ249XCJlbmRcIj5cbiAgICA8bm92by1maWVsZCBjbGFzcz1cImNvbmRpdGlvbi1maWVsZFwiICpuZ0lmPVwiIXN0YXRpY0ZpZWxkU2VsZWN0aW9uKClcIj5cbiAgICAgIDxub3ZvLXNlbGVjdFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxzLmNob29zZUFGaWVsZFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZpZWxkXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cInVwZGF0ZUZpZWxkU2VsZWN0aW9uKClcIlxuICAgICAgICBvdmVybGF5V2lkdGg9XCIyNHJlbVwiXG4gICAgICAgIG92ZXJsYXlIZWlnaHQ9XCIyMHJlbVwiXG4gICAgICAgIFtkaXNwbGF5V2l0aF09XCJmaWVsZERpc3BsYXlXaXRoXCJcbiAgICAgICAgW3N0eWxlLm1pbldpZHRoLnB4XT1cIjE2MFwiXG4gICAgICAgIFtzdHlsZS5tYXhXaWR0aC5weF09XCIoaGlkZU9wZXJhdG9yKCkgfHwgaXNDb25kaXRpb25Ib3N0KSA/IDIwMCA6IDE2MFwiXG4gICAgICAgIFtkaXNwbGF5SWNvbl09XCJkaXNwbGF5SWNvblwiPlxuICAgICAgICA8bm92by1vcHRncm91cCBjbGFzcz1cImZpbHRlci1zZWFyY2gtcmVzdWx0c1wiPlxuICAgICAgICAgIDxub3ZvLW9wdGlvbj5cbiAgICAgICAgICAgIDxub3ZvLXNlbGVjdC1zZWFyY2ggW2Zvcm1Db250cm9sXT1cInNlYXJjaFRlcm1cIiBbY2xlYXJTZWFyY2hJbnB1dF09XCJmYWxzZVwiPjwvbm92by1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgIDwvbm92by1vcHRpb24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3VsdHMkIHwgYXN5bmMgYXMgcmVzdWx0czsgZWxzZSBsb2FkaW5nXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicmVzdWx0cy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPG5vdm8tb3B0aW9uICpuZ0Zvcj1cImxldCBmaWVsZCBvZiByZXN1bHRzXCIgdmFsdWU9XCJ7eyBmaWVsZC5uYW1lIH19XCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWF1dG9tYXRpb24taWRdPVwiZmllbGQubmFtZVwiPlxuICAgICAgICAgICAgICAgIHt7IGZpZWxkLmxhYmVsIHx8IGZpZWxkLm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9ub3ZvLW9wdGlvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25vdm8tb3B0Z3JvdXA+XG4gICAgICA8L25vdm8tc2VsZWN0PlxuICAgIDwvbm92by1maWVsZD5cblxuICAgIDxkaXYgY2xhc3M9XCJjb25kaXRpb24tb3BlcmF0b3JcIj5cbiAgICAgIDxuZy1jb250YWluZXIgY29uZGl0aW9uT3BlcmF0b3JPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLWlucHV0XCI+XG4gICAgICA8bmctY29udGFpbmVyIGNvbmRpdGlvbklucHV0T3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25vdm8tZ3JpZD5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9mb3JtPlxuXG48bm92by1jb25kaXRpb24tdGVtcGxhdGVzICpuZ0lmPVwiaXNDb25kaXRpb25Ib3N0XCIgW2FkZHJlc3NDb25maWddPVwiYWRkcmVzc0NvbmZpZ1wiLz5cblxuPCEtLSBMT0FESU5HIFRFTVBMQVRFIC0tPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nPlxuICA8bm92by1sb2FkaW5nPjwvbm92by1sb2FkaW5nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
280
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92by1lbGVtZW50cy9zcmMvZWxlbWVudHMvcXVlcnktYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ub3ZvLWVsZW1lbnRzL3NyYy9lbGVtZW50cy9xdWVyeS1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyL2NvbmRpdGlvbi1idWlsZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBSUwsUUFBUSxFQUVSLFFBQVEsRUFDUixTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUixLQUFLLEVBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRSxPQUFPLEVBQXNCLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFHakU7OztHQUdHO0FBRUgsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFtQixhQUErQixFQUFTLFVBQXNCO1FBQTlELGtCQUFhLEdBQWIsYUFBYSxD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O3FCQUNGLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3NMQUdPLGVBQWU7c0JBQXBFLFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNELFlBQVk7c0JBQTlELFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUV4QyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQWlDQyxlQUFlO3NCQURyQixXQUFXO3VCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFNraXBTZWxmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIGNvbXB1dGVkLFxuICBpbnB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOb3ZvTGFiZWxTZXJ2aWNlIH0gZnJvbSAnbm92by1lbGVtZW50cy9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCYXNlQ29uZGl0aW9uRmllbGREZWYgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLmRpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29uZmlnLCBRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE5PVk9fQ09ORElUSU9OX0JVSUxERVIgfSBmcm9tICcuLi9xdWVyeS1idWlsZGVyLnRva2Vucyc7XG5pbXBvcnQgeyBBZGRyZXNzQ3JpdGVyaWFDb25maWcsIEJhc2VGaWVsZERlZiwgRmllbGRDb25maWcsIFF1ZXJ5RmlsdGVyT3V0bGV0IH0gZnJvbSAnLi4vcXVlcnktYnVpbGRlci50eXBlcyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uSW5wdXRPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbklucHV0T3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBoYW5kbGUgZm9yIHRoZSB0YWJsZSB0byBncmFiIHRoZSB2aWV3IGNvbnRhaW5lcidzIG5nLWNvbnRhaW5lciB0byBpbnNlcnQgZGF0YSByb3dzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbY29uZGl0aW9uT3BlcmF0b3JPdXRsZXRdJyB9KVxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk9wZXJhdG9yT3V0bGV0IGltcGxlbWVudHMgUXVlcnlGaWx0ZXJPdXRsZXQge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25vdm8tY29uZGl0aW9uLWJ1aWxkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vY29uZGl0aW9uLWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb25kaXRpb24tYnVpbGRlci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5PVk9fQ09ORElUSU9OX0JVSUxERVIsIHVzZUV4aXN0aW5nOiBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUXVlcnlCdWlsZGVyU2VydmljZSxcbiAgICAgIGRlcHM6IFtOb3ZvTGFiZWxTZXJ2aWNlLCBbbmV3IFNraXBTZWxmKCksIG5ldyBPcHRpb25hbCgpLCBRdWVyeUJ1aWxkZXJTZXJ2aWNlXV0sXG4gICAgICB1c2VGYWN0b3J5OiAobGFiZWxTZXJ2aWNlOiBOb3ZvTGFiZWxTZXJ2aWNlLCBxdWVyeUJ1aWxkZXJTZXJ2aWNlPzogUXVlcnlCdWlsZGVyU2VydmljZSkgPT4ge1xuICAgICAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UpIHtcbiAgICAgICAgICBxdWVyeUJ1aWxkZXJTZXJ2aWNlID0gbmV3IFF1ZXJ5QnVpbGRlclNlcnZpY2UobGFiZWxTZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnlCdWlsZGVyU2VydmljZTtcbiAgICAgIH1cbiAgICB9XG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb25kaXRpb25CdWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9vcGVyYXRvck91dGxldDogQ29uZGl0aW9uT3BlcmF0b3JPdXRsZXQ7XG4gIEBWaWV3Q2hpbGQoQ29uZGl0aW9uSW5wdXRPdXRsZXQsIHsgc3RhdGljOiB0cnVlIH0pIF9pbnB1dE91dGxldDogQ29uZGl0aW9uSW5wdXRPdXRsZXQ7XG5cbiAgQElucHV0KCkgbGFiZWw6IGFueTtcbiAgQElucHV0KCkgc2NvcGU6IHN0cmluZztcbiAgQElucHV0KCkgYW5kSW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgZ3JvdXBJbmRleDogbnVtYmVyO1xuICBASW5wdXQoKSBhZGRyZXNzQ29uZmlnOiBBZGRyZXNzQ3JpdGVyaWFDb25maWc7XG4gIGhpZGVPcGVyYXRvciA9IGlucHV0KHRydWUpO1xuICBjb25kaXRpb25UeXBlID0gaW5wdXQoKTtcblxuICAvLyBUaGlzIGNvbXBvbmVudCBjYW4gZWl0aGVyIGJlIGRpcmVjdGx5IGhvc3RlZCBhcyBhIGhvc3QgdG8gYSBjb25kaXRpb24sIG9yIGl0IGNhbiBiZSBwYXJ0IG9mIGEgY29uZGl0aW9uIGdyb3VwIHdpdGhpbiBhIGNyaXRlcmlhIGJ1aWxkZXIuXG4gIC8vIEluIHRoZSBmb3JtZXIgY2FzZSwgY29uZmlnIHdpbGwgY29tZSBmcm9tIGlucHV0cywgYW5kIHdlIHdpbGwgaW5zdGFudGlhdGUgb3VyIG93biBRdWVyeUJ1aWxkZXJTZXJ2aWNlLiBJbiB0aGUgbGF0dGVyLCBpdCBjb21lcyBmcm9tXG4gIC8vIHRoZSBRdWVyeUJ1aWxkZXJTZXJ2aWNlLlxuICBpbnB1dENvbmZpZyA9IGlucHV0PFF1ZXJ5QnVpbGRlckNvbmZpZz4obnVsbCwgeyBhbGlhczogJ2NvbmZpZyd9KTtcbiAgaW5wdXRFZGl0VHlwZUZuID0gaW5wdXQ8KGZpZWxkOiBCYXNlRmllbGREZWYpID0+IHN0cmluZz4obnVsbCwgeyBhbGlhczogJ2VkaXRUeXBlRm4nfSk7XG4gIHByaXZhdGUgY29uZmlnID0gY29tcHV0ZWQ8UXVlcnlCdWlsZGVyQ29uZmlnPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuaXNDb25kaXRpb25Ib3N0KSB7XG4gICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuY29uZmlnID0gdGhpcy5pbnB1dENvbmZpZygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmNvbmZpZztcbiAgfSk7XG4gIHByaXZhdGUgZWRpdFR5cGVGbiA9IGNvbXB1dGVkPChmaWVsZDogQmFzZUZpZWxkRGVmKSA9PiBzdHJpbmc+KCgpID0+IHtcbiAgICBpZiAodGhpcy5pc0NvbmRpdGlvbkhvc3QpIHtcbiAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5lZGl0VHlwZUZuID0gdGhpcy5pbnB1dEVkaXRUeXBlRm4oKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5lZGl0VHlwZUZuO1xuICB9KTtcblxuICBwdWJsaWMgcGFyZW50Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMgZmllbGRDb25maWc6IEZpZWxkQ29uZmlnPEJhc2VGaWVsZERlZj47XG4gIHB1YmxpYyBzZWFyY2hlcyE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHJlc3VsdHMkOiBQcm9taXNlPGFueVtdPjtcbiAgcHVibGljIHNlYXJjaFRlcm06IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gIHB1YmxpYyBmaWVsZERpc3BsYXlXaXRoO1xuICBwdWJsaWMgZGlzcGxheUljb246IHN0cmluZztcblxuICBwdWJsaWMgc3RhdGljRmllbGRTZWxlY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKTtcbiAgcHJpdmF0ZSBfbGFzdENvbnRleHQ6IGFueSA9IHt9O1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmNvbmRpdGlvbi1ob3N0JylcbiAgcHVibGljIGlzQ29uZGl0aW9uSG9zdCA9IGZhbHNlO1xuXG4gIHB1YmxpYyBncmlkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0aWNGaWVsZFNlbGVjdGlvbigpKSB7XG4gICAgICByZXR1cm4gJzEzcmVtIDFmcic7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0Q29sdW1uV2lkdGggPSB0aGlzLmhpZGVPcGVyYXRvcigpID8gJzIwcmVtJyA6ICcxNnJlbSc7XG4gICAgICByZXR1cm4gYCR7Zmlyc3RDb2x1bW5XaWR0aH0gMTNyZW0gMWZyYDtcbiAgICB9XG4gIH0pO1xuXG4gIC8qKiBTdWJqZWN0IHRoYXQgZW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbGFiZWxzOiBOb3ZvTGFiZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICApIHtcbiAgICBpZiAoIXF1ZXJ5QnVpbGRlclNlcnZpY2UuY29tcG9uZW50SG9zdCkge1xuICAgICAgcXVlcnlCdWlsZGVyU2VydmljZS5jb21wb25lbnRIb3N0ID0gdGhpcztcbiAgICAgIHRoaXMuaXNDb25kaXRpb25Ib3N0ID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ3JvdXBJbmRleCA9IDA7XG4gICAgICB0aGlzLmFuZEluZGV4ID0gMDtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnBhcmVudEZvcm0gPSB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5wYXJlbnRGb3JtLmNvbnRyb2xzLmZpZWxkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMudXBkYXRlRmllbGRTZWxlY3Rpb24oKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRDb25maWc/LnByZXZpb3VzVmFsdWU/LnN0YXRpY0ZpZWxkU2VsZWN0aW9uICYmXG4gICAgICBjaGFuZ2VzLmlucHV0Q29uZmlnLnByZXZpb3VzVmFsdWUuc3RhdGljRmllbGRTZWxlY3Rpb24gIT09IGNoYW5nZXMuaW5wdXRDb25maWcuY3VycmVudFZhbHVlLnN0YXRpY0ZpZWxkU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMucGFyZW50Rm9ybS5jb250cm9scy5maWVsZC5zZXRWYWx1ZShjaGFuZ2VzLmlucHV0Q29uZmlnLmN1cnJlbnRWYWx1ZS5zdGF0aWNGaWVsZFNlbGVjdGlvbik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGNvbnN0IGFsbEZpZWxkcyA9IHRoaXMuY29uZmlnKCk/LmZpZWxkcyB8fCBbXTtcbiAgICBjb25zdCBzY29wZWRGaWVsZHMgPSB0aGlzLnNjb3BlID8gYWxsRmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC52YWx1ZSA9PT0gdGhpcy5zY29wZSkgOiBhbGxGaWVsZHNbMF07XG4gICAgYWxsRmllbGRzLmxlbmd0aCAmJiB0aGlzLmNoYW5nZUZpZWxkT3B0aW9ucyhzY29wZWRGaWVsZHMpO1xuICAgIHRoaXMuc2VhcmNoZXMgPSB0aGlzLnNlYXJjaFRlcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodGVybSkgPT4ge1xuICAgICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgdGhpcy5maWVsZENvbmZpZy5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAoZikgPT4gZi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS50b0xvd2VyQ2FzZSgpKSB8fCBmLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0udG9Mb3dlckNhc2UoKSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMucGFyZW50Rm9ybS52YWx1ZT8uZmllbGQgIT09IG51bGwpIHtcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy51cGRhdGVGaWVsZFNlbGVjdGlvbigpKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlYXJjaGVzLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gQ2xlYXIgYWxsIG91dGxldHMgYW5kIE1hcHNcbiAgICBbdGhpcy5fb3BlcmF0b3JPdXRsZXQudmlld0NvbnRhaW5lciwgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lcl0uZm9yRWFjaCgoZGVmKSA9PiB7XG4gICAgICBkZWYuY2xlYXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIENvbmRpdGlvbnMgXCJGaWVsZFwiIE9wdGlvbnMgdG8gQ2hhbmdlIGJhc2Ugb24gbmV3IFNjb3BlXG4gICAqIEBwYXJhbSBmaWVsZENvbmZpZ1xuICAgKi9cbiAgY2hhbmdlRmllbGRPcHRpb25zKGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZzxCYXNlRmllbGREZWY+KSB7XG4gICAgdGhpcy5maWVsZENvbmZpZyA9IGZpZWxkQ29uZmlnO1xuICAgIHRoaXMuc2VhcmNoVGVybS5zZXRWYWx1ZSgnJyk7XG4gICAgdGhpcy5yZXN1bHRzJCA9IFByb21pc2UucmVzb2x2ZSh0aGlzLmZpZWxkQ29uZmlnLm9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgaW5wdXQgYW5kIG9wZXJhdG9yIHZpZXcgY29udGFpbmVycywgcmVnZW5lcmF0ZXMgdGhlIGZpZWxkIHRlbXBsYXRlcyxcbiAgICogYW5kIG1hcmtzIHRoZSBjb21wb25lbnQgZm9yIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIG1ldGhvZCBhZnRlciB1cGRhdGluZyBmb3JtIGNvbnRyb2xzIHRvIHJlaW5pdGlhbGl6ZSB0aGUgaW5wdXQgYW5kXG4gICAqIG9wZXJhdG9yIGZpZWxkcyBzbyB0aGF0IHRoZSB2aWV3IHJlZmxlY3RzIHRoZSBsYXRlc3QgZm9ybSBjb250cm9sIGNoYW5nZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHJlc2V0SW5wdXRBbmRPcGVyYXRvcigpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnB1dE91dGxldC52aWV3Q29udGFpbmVyLmNsZWFyKCk7XG4gICAgdGhpcy5fb3BlcmF0b3JPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIHRoaXMuY3JlYXRlRmllbGRUZW1wbGF0ZXMoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldEZpZWxkKCkge1xuICAgIGNvbnN0IGZpZWxkID0gdGhpcy5wYXJlbnRGb3JtPy52YWx1ZT8uZmllbGQ7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRDb25maWcuZmluZChmaWVsZCk7XG4gIH1cblxuICBnZXREZWZhdWx0RmllbGQoKSB7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5maWVsZENvbmZpZy5vcHRpb25zO1xuICAgIGlmIChmaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZpZWxkc1swXS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHVwZGF0ZUZpZWxkU2VsZWN0aW9uKCkge1xuICAgIGNvbnN0IGZpZWxkQ29uZiA9IHRoaXMuZ2V0RmllbGQoKTtcbiAgICBpZiAoIWZpZWxkQ29uZikge1xuICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnZmllbGQnKS5zZXRWYWx1ZSh0aGlzLmdldERlZmF1bHRGaWVsZCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWVsZERpc3BsYXlXaXRoID0gKCkgPT4gZmllbGRDb25mLmxhYmVsIHx8IGZpZWxkQ29uZi5uYW1lO1xuICAgICAgdGhpcy5kaXNwbGF5SWNvbiA9IGZpZWxkQ29uZi5pY29uIHx8IG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHsgZmllbGQgfSA9IHRoaXMucGFyZW50Rm9ybS52YWx1ZTtcblxuICAgIGlmICh0aGlzLl9sYXN0Q29udGV4dC5maWVsZCAhPT0gZmllbGQpIHtcbiAgICAgIGlmICh0aGlzLl9sYXN0Q29udGV4dC5maWVsZCkge1xuICAgICAgICAvLyBvbmx5IGNsZWFyaW5nIG9wZXJhdG9yL3ZhbHVlIGlmIGZpZWxkIHdhcyBwcmV2aW91c2x5IGRlZmluZWQgc28gd2UgY2FuIHByZWxvYWQgdmFsdWVzIG9udG8gdGhlIGZvcm1cbiAgICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgndmFsdWUnKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3JlYXRlRmllbGRUZW1wbGF0ZXMoKTtcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZUNvbmRpdGlvblR5cGUoKSk7XG5cbiAgICB0aGlzLl9sYXN0Q29udGV4dCA9IHsgLi4udGhpcy5wYXJlbnRGb3JtLnZhbHVlIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB1cGRhdGVDb25kaXRpb25UeXBlKCkge1xuICAgIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2NvbmRpdGlvblR5cGUnKT8uc2V0VmFsdWUodGhpcy5jb25kaXRpb25UeXBlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRGVmaW5pdGlvbkZvckZpZWxkKGZpZWxkKSB7XG4gICAgaWYgKCFmaWVsZCkgcmV0dXJuO1xuICAgIGNvbnN0IGVkaXRUeXBlID0gdGhpcy5lZGl0VHlwZUZuKCkoZmllbGQpO1xuICAgIC8vIERvbid0IGxvb2sgYXQgZGF0YVNwZWNpYWxpemF0aW9uIGl0IGlzIG5vIGdvb2QsIHRoaXMgbWlzc2VzIGN1cnJlbmN5LCBhbmQgcGVyY2VudFxuICAgIGNvbnN0IHsgbmFtZSB9ID0gZmllbGQ7XG4gICAgY29uc3QgZmllbGREZWZzQnlOYW1lID0gdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmdldEZpZWxkRGVmc0J5TmFtZSgpO1xuICAgIC8vIENoZWNrIEZpZWxkcyBieSBwcmlvcml0eSBmb3IgbWF0Y2ggRmllbGQgRGVmaW5pdGlvblxuICAgIGNvbnN0IGtleSA9IFtuYW1lLCBlZGl0VHlwZT8udG9VcHBlckNhc2UoKSwgJ0RFRkFVTFQnXS5maW5kKChpdCkgPT4gZmllbGREZWZzQnlOYW1lLmhhcyhpdCkpO1xuICAgIHJldHVybiBmaWVsZERlZnNCeU5hbWUuZ2V0KGtleSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkVGVtcGxhdGVzKCkge1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmZpbmREZWZpbml0aW9uRm9yRmllbGQodGhpcy5nZXRGaWVsZCgpKTtcblxuICAgIGlmICghdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS52YWx1ZSkge1xuICAgICAgdGhpcy5wYXJlbnRGb3JtLmdldCgnb3BlcmF0b3InKS5zZXRWYWx1ZShkZWZpbml0aW9uLmRlZmF1bHRPcGVyYXRvcik7XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVGaWVsZE9wZXJhdG9ycyhkZWZpbml0aW9uKTtcbiAgICB0aGlzLmNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkT3BlcmF0b3JzKGRlZmluaXRpb246IEJhc2VDb25kaXRpb25GaWVsZERlZikge1xuICAgIHRoaXMuX29wZXJhdG9yT3V0bGV0LnZpZXdDb250YWluZXIuY2xlYXIoKTtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgY29uc3QgY29udGV4dCA9IHsgJGltcGxpY2l0OiB0aGlzLnBhcmVudEZvcm0sIGZpZWxkTWV0YTogdGhpcy5nZXRGaWVsZCgpIH07XG4gICAgICB0aGlzLl9vcGVyYXRvck91dGxldC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkZWZpbml0aW9uLmZpZWxkT3BlcmF0b3JzLnRlbXBsYXRlLCBjb250ZXh0KTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZpZWxkSW5wdXQoZGVmaW5pdGlvbjogQmFzZUNvbmRpdGlvbkZpZWxkRGVmKSB7XG4gICAgdGhpcy5faW5wdXRPdXRsZXQudmlld0NvbnRhaW5lci5jbGVhcigpO1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0geyAkaW1wbGljaXQ6IHRoaXMucGFyZW50Rm9ybSwgZmllbGRNZXRhOiB0aGlzLmdldEZpZWxkKCksIHZpZXdJbmRleDogdGhpcy5ncm91cEluZGV4LnRvU3RyaW5nKCkgKyB0aGlzLmFuZEluZGV4LnRvU3RyaW5nKCkgfTtcbiAgICAgIHRoaXMuX2lucHV0T3V0bGV0LnZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGRlZmluaXRpb24uZmllbGRJbnB1dC50ZW1wbGF0ZSwgY29udGV4dCk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cInBhcmVudEZvcm1cIj5cbiAgPG5vdm8tZ3JpZCBnYXA9XCIxcmVtXCIgW2NvbHVtbnNdPVwiZ3JpZENvbHVtbnMoKVwiIGFsaWduPVwiZW5kXCI+XG4gICAgPG5vdm8tZmllbGQgY2xhc3M9XCJjb25kaXRpb24tZmllbGRcIiAqbmdJZj1cIiFzdGF0aWNGaWVsZFNlbGVjdGlvbigpXCI+XG4gICAgICA8bm92by1zZWxlY3RcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cImxhYmVscy5jaG9vc2VBRmllbGRcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWVsZFwiXG4gICAgICAgIChvblNlbGVjdCk9XCJ1cGRhdGVGaWVsZFNlbGVjdGlvbigpXCJcbiAgICAgICAgb3ZlcmxheVdpZHRoPVwiMjRyZW1cIlxuICAgICAgICBvdmVybGF5SGVpZ2h0PVwiMjByZW1cIlxuICAgICAgICBbZGlzcGxheVdpdGhdPVwiZmllbGREaXNwbGF5V2l0aFwiXG4gICAgICAgIFtzdHlsZS5taW5XaWR0aC5weF09XCIxNjBcIlxuICAgICAgICBbc3R5bGUubWF4V2lkdGgucHhdPVwiKGhpZGVPcGVyYXRvcigpIHx8IGlzQ29uZGl0aW9uSG9zdCkgPyAyMDAgOiAxNjBcIlxuICAgICAgICBbZGlzcGxheUljb25dPVwiZGlzcGxheUljb25cIj5cbiAgICAgICAgPG5vdm8tb3B0Z3JvdXAgY2xhc3M9XCJmaWx0ZXItc2VhcmNoLXJlc3VsdHNcIj5cbiAgICAgICAgICA8bm92by1vcHRpb24+XG4gICAgICAgICAgICA8bm92by1zZWxlY3Qtc2VhcmNoIFtmb3JtQ29udHJvbF09XCJzZWFyY2hUZXJtXCIgW2NsZWFyU2VhcmNoSW5wdXRdPVwiZmFsc2VcIj48L25vdm8tc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICA8L25vdm8tb3B0aW9uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZXN1bHRzJCB8IGFzeW5jIGFzIHJlc3VsdHM7IGVsc2UgbG9hZGluZ1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlc3VsdHMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxub3ZvLW9wdGlvbiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgcmVzdWx0c1wiIHZhbHVlPVwie3sgZmllbGQubmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1hdXRvbWF0aW9uLWlkXT1cImZpZWxkLm5hbWVcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWVsZC5sYWJlbCB8fCBmaWVsZC5uYW1lIH19XG4gICAgICAgICAgICAgIDwvbm92by1vcHRpb24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9ub3ZvLW9wdGdyb3VwPlxuICAgICAgPC9ub3ZvLXNlbGVjdD5cbiAgICA8L25vdm8tZmllbGQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY29uZGl0aW9uLW9wZXJhdG9yXCI+XG4gICAgICA8bmctY29udGFpbmVyIGNvbmRpdGlvbk9wZXJhdG9yT3V0bGV0PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbmRpdGlvbi1pbnB1dFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBjb25kaXRpb25JbnB1dE91dGxldD48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9ub3ZvLWdyaWQ+XG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZm9ybT5cblxuPG5vdm8tY29uZGl0aW9uLXRlbXBsYXRlcyAqbmdJZj1cImlzQ29uZGl0aW9uSG9zdFwiIFthZGRyZXNzQ29uZmlnXT1cImFkZHJlc3NDb25maWdcIi8+XG5cbjwhLS0gTE9BRElORyBURU1QTEFURSAtLT5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgPG5vdm8tbG9hZGluZz48L25vdm8tbG9hZGluZz5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -1361,6 +1361,21 @@ class ConditionBuilderComponent {
|
|
|
1361
1361
|
this.searchTerm.setValue('');
|
|
1362
1362
|
this.results$ = Promise.resolve(this.fieldConfig.options);
|
|
1363
1363
|
}
|
|
1364
|
+
/**
|
|
1365
|
+
* Resets the input and operator view containers, regenerates the field templates,
|
|
1366
|
+
* and marks the component for change detection.
|
|
1367
|
+
*
|
|
1368
|
+
* Use this method after updating form controls to reinitialize the input and
|
|
1369
|
+
* operator fields so that the view reflects the latest form control changes.
|
|
1370
|
+
*
|
|
1371
|
+
* @returns void
|
|
1372
|
+
*/
|
|
1373
|
+
resetInputAndOperator() {
|
|
1374
|
+
this._inputOutlet.viewContainer.clear();
|
|
1375
|
+
this._operatorOutlet.viewContainer.clear();
|
|
1376
|
+
this.createFieldTemplates();
|
|
1377
|
+
this.cdr.markForCheck();
|
|
1378
|
+
}
|
|
1364
1379
|
getField() {
|
|
1365
1380
|
const field = this.parentForm?.value?.field;
|
|
1366
1381
|
if (!field)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"novo-elements-elements-query-builder.mjs","sources":["../../../projects/novo-elements/src/elements/query-builder/query-builder.types.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.service.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.tokens.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.directives.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/abstract-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/address-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/boolean-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/date-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/date-time-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/string-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/number-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/id-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/picker-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-templates/condition-templates.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-templates/condition-templates.component.html","../../../projects/novo-elements/src/elements/query-builder/condition-builder/condition-builder.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-builder/condition-builder.component.html","../../../projects/novo-elements/src/elements/query-builder/condition-group/condition-group.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-group/condition-group.component.html","../../../projects/novo-elements/src/elements/query-builder/criteria-builder/criteria-builder.component.ts","../../../projects/novo-elements/src/elements/query-builder/criteria-builder/criteria-builder.component.html","../../../projects/novo-elements/src/elements/query-builder/query-builder.module.ts","../../../projects/novo-elements/src/elements/query-builder/novo-elements-elements-query-builder.ts"],"sourcesContent":["import { ViewContainerRef } from '@angular/core';\n\nexport enum Conjunction {\n AND = 'and',\n OR = 'or',\n NOT = 'not',\n}\n\nexport type ConditionType = '$and' | '$or' | '$not';\n\nexport type ConditionGroup = {\n [K in Conjunction as `$${K}`]?: Condition[];\n};\n\nexport type NestedConditionGroup = {\n [K in Conjunction as `$${K}`]?: ConditionOrConditionGroup[];\n};\n\nexport type ConditionOrConditionGroup = Condition | NestedConditionGroup;\n\nexport enum Operator {\n after = 'after',\n before = 'before',\n between = 'between',\n equalTo = 'equalTo',\n exclude = 'exclude',\n excludeAny = 'excludeAny',\n greaterThan = 'greaterThan',\n include = 'include',\n includeAll = 'includeAll',\n includeAny = 'includeAny',\n isEmpty = 'isEmpty',\n isNull = 'isNull',\n lessThan = 'lessThan',\n radius = 'radius',\n within = 'within',\n}\n\nexport type OperatorName = keyof typeof Operator;\n\nexport interface Condition {\n conditionType?: ConditionType;\n field: string;\n operator: OperatorName | string;\n scope?: string;\n value: any;\n}\n\nexport interface Criteria {\n criteria: ConditionGroup[];\n}\n\nexport interface NestedCriteria {\n criteria: NestedConditionGroup[];\n}\n\nexport interface BaseFieldDef {\n name: string;\n label?: string;\n type: string;\n dataSpecialization?: string;\n optional?: boolean;\n multiValue?: boolean;\n inputType?: string;\n options?: { value: string | number; label: string; readOnly?: boolean }[];\n optionsUrl?: string;\n optionsType?: string;\n dataType?: string;\n icon?: string;\n}\n\nexport interface FieldConfig<T extends BaseFieldDef> {\n value: string;\n label: string;\n options: T[];\n search: (term: string) => T[];\n find: (name: string) => T;\n}\n\nexport interface AddressData {\n address_components: AddressComponent[];\n formatted_address: string;\n geometry: AddressGeometry;\n name?: string;\n place_id: string;\n radius?: AddressRadius;\n types?: string[];\n}\n\nexport interface AddressRadius {\n value: number;\n units: AddressRadiusUnitsName;\n}\n\nexport interface AddressComponent {\n long_name: string;\n short_name: string;\n types: string[];\n}\n\nexport interface AddressGeometry {\n location: AddressGeometryLocation;\n viewport: AddressGeometryViewport;\n}\n\nexport interface AddressGeometryLocation {\n lat: number;\n lng: number;\n}\n\nexport interface AddressGeometryViewport {\n north: number;\n south: number;\n east: number;\n west: number;\n}\n\nexport enum RadiusUnits {\n miles = 'miles',\n km = 'km',\n}\n\nexport type AddressRadiusUnitsName = keyof typeof RadiusUnits;\n\n/** All options that can be used to override the defaults for the address criteria */\nexport type AddressCriteriaConfig = {\n radiusEnabled?: boolean;\n radiusUnits?: AddressRadiusUnitsName;\n}\n\n/** Interface used to provide an outlet for rows to be inserted into. */\nexport interface QueryFilterOutlet {\n viewContainer: ViewContainerRef;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { BaseConditionFieldDef } from './query-builder.directives';\nimport { BaseFieldDef, Conjunction, FieldConfig } from './query-builder.types';\n\nexport const defaultEditTypeFn = (field: BaseFieldDef) => {\n return field.inputType || field.dataType || field.type;\n};\n\nexport interface QueryBuilderConfig {\n fields: FieldConfig<BaseFieldDef>[];\n staticFieldSelection?: string;\n}\n\n@Injectable()\nexport class QueryBuilderService {\n private _customFieldDefs = new Set<BaseConditionFieldDef>();\n private _fieldDefsByName = new Map<string, BaseConditionFieldDef>();\n public scopes = signal([]);\n public hasMultipleScopes = computed(() => this.scopes()?.length > 1);\n /**\n * Will dispatch when properties changes, subscribe to this if component should\n * re-render when props are updated\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Function to determine operator and input templates for a field. Value passed\n * through the criteria builder Input.\n */\n public get editTypeFn(): (field: BaseFieldDef) => string {\n return this._editTypeFn;\n }\n public set editTypeFn(value: (field: BaseFieldDef) => string) {\n this._editTypeFn = value ?? defaultEditTypeFn;\n this.stateChanges.next();\n }\n private _editTypeFn: (field: BaseFieldDef) => string = defaultEditTypeFn;\n\n /**\n * The field configuration to control which types of fields are available to select\n * within the Condition Builder.\n */\n public get config(): QueryBuilderConfig {\n return this._config;\n }\n public set config(value: QueryBuilderConfig) {\n this._config = value;\n this.stateChanges.next();\n }\n private _config: QueryBuilderConfig = {\n fields: [],\n staticFieldSelection: null\n };\n\n /**\n * The configuration to control which types of conjuntions can be used in the query builder.\n * Value passed through the criteria builder Input\n * eg. and, or, not\n */\n public get allowedGroupings(): Conjunction[] {\n return this._allowedGroupings;\n }\n public set allowedGroupings(value: Conjunction[]) {\n this._allowedGroupings = value;\n this.stateChanges.next();\n }\n private _allowedGroupings: Conjunction[];\n\n public componentHost: any;\n\n constructor(private labels: NovoLabelService) {}\n\n /** Adds a field definition that was not included as part of the content children. */\n registerFieldDef(fieldDef: BaseConditionFieldDef) {\n this._customFieldDefs.add(fieldDef);\n this._fieldDefsByName.set(fieldDef.name, fieldDef);\n }\n\n /** Removes a field definition that was not included as part of the content children. */\n unregisterFieldDef(fieldDef: BaseConditionFieldDef) {\n this._customFieldDefs.delete(fieldDef);\n this._fieldDefsByName.delete(fieldDef.name);\n }\n\n getFieldDefsByName() {\n return this._fieldDefsByName;\n }\n\n getConjunctionLabel(conjunction: string) {\n switch (conjunction.replace('$', '').toLowerCase()) {\n case Conjunction.OR:\n return this.labels.or;\n case Conjunction.NOT:\n return this.labels.not;\n case Conjunction.AND:\n default:\n return this.labels.and;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const NOVO_QUERY_BUILDER = new InjectionToken<any>('NOVO_QUERY_BUILDER');\nexport const NOVO_CRITERIA_BUILDER = new InjectionToken<any>('NOVO_CRITERIA_BUILDER');\nexport const NOVO_CONDITION_BUILDER = new InjectionToken<any>('NOVO_CONDITION_BUILDER');\n","import { ContentChild, Directive, Input, TemplateRef } from '@angular/core';\nimport { QueryBuilderService } from './query-builder.service';\n\n/** Base interface for a condidation template directives. */\nexport interface ConditionDef {\n template: TemplateRef<any>;\n}\n\n/**\n * Contained within a novoConditionField definition describing what input should be\n * used to capture the compare value of the Condtion\n */\n@Directive({ selector: '[novoConditionInputDef]' })\nexport class NovoConditionInputDef implements ConditionDef {\n constructor(/** @docs-private */ public template: TemplateRef<any>) {}\n}\n\n/**\n * Contained within a novoConditionField definition describing what operators should be available.\n */\n@Directive({ selector: '[novoConditionOperatorsDef]' })\nexport class NovoConditionOperatorsDef implements ConditionDef {\n constructor(/** @docs-private */ public template: TemplateRef<any>) {}\n}\n\n/**\n * Field Field definition for the QueryBuilder.\n * Defines the inputType and operators to use for the query builder.\n */\n@Directive()\nexport class BaseConditionFieldDef {\n /** Unique name for this field. */\n @Input('novoFilterFieldDef')\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._setNameInput(name);\n }\n protected _name: string;\n\n @ContentChild(NovoConditionInputDef) fieldInput: NovoConditionInputDef;\n @ContentChild(NovoConditionOperatorsDef) fieldOperators: NovoConditionOperatorsDef;\n\n /**\n * Transformed version of the column name that can be used as part of a CSS classname. Excludes\n * all non-alphanumeric characters and the special characters '-' and '_'. Any characters that\n * do not match are replaced by the '-' character.\n */\n cssClassFriendlyName: string;\n _fieldCssClassName: string[];\n\n defaultOperator: string;\n\n constructor() {}\n\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n protected _updateFieldCssClassName() {\n this._fieldCssClassName = [`novo-filter-field-${this.cssClassFriendlyName}`];\n }\n\n protected _setNameInput(value: string) {\n // If the directive is set without a name (updated programmatically), then this setter will\n // trigger with an empty string and should not overwrite the programmatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n this._updateFieldCssClassName();\n }\n }\n}\n\n@Directive({\n selector: '[novoConditionFieldDef]',\n})\nexport class NovoConditionFieldDef extends BaseConditionFieldDef {\n constructor(private qbs: QueryBuilderService) {\n super();\n }\n register() {\n this.qbs.registerFieldDef(this);\n }\n unregister() {\n this.qbs.unregisterFieldDef(this);\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControlDirective, FormControlName, UntypedFormGroup } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoConditionFieldDef, NovoConditionOperatorsDef } from '../query-builder.directives';\nimport { Operator } from '../query-builder.types';\n\n@Directive()\nexport abstract class AbstractConditionFieldDef implements OnDestroy, OnInit, AfterViewInit {\n /** Column name that should be used to reference this column. */\n @Input()\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncFieldDefName();\n }\n _name: string;\n\n defaultOperator: Operator | string;\n protected _previousOperatorValue: Operator;\n\n protected operatorEditGroups: Set<Operator>[] = [];\n\n @ViewChild(NovoConditionFieldDef, { static: true }) fieldDef: NovoConditionFieldDef;\n @ViewChildren(FormControlName) formControlsByName: QueryList<FormControlName>;\n\n constructor(public labels: NovoLabelService) {}\n\n ngOnInit() {\n this._syncFieldDefName();\n this._syncFieldDefOperatorValue();\n this._previousOperatorValue = this.defaultOperator as Operator;\n // Need to add self to FilterBuilder because \"ContentChildren won't find it\"\n this.fieldDef?.register();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.frameAfterViewInit();\n });\n }\n\n frameAfterViewInit() {\n const operatorField = this.formControlsByName.find(formControlDirective => formControlDirective.name === 'operator')?.control;\n if (operatorField) {\n this._previousOperatorValue = operatorField.value;\n }\n }\n\n ngOnDestroy() {\n this.fieldDef?.unregister();\n }\n\n /**\n * Define an edit group of operators. Once defined, if the user switches from one of these operators to another,\n * then the condition value will not be cleared. This makes sense if both operators use the same UI controls for editing.\n * @param operators The set of Operator values intended to share UI controls.\n */\n protected defineOperatorEditGroup(...operators: Operator[]): void {\n this.operatorEditGroups.push(new Set(operators));\n }\n\n onOperatorSelect(formGroup: UntypedFormGroup): void {\n let clearVal = true;\n if (this._previousOperatorValue && this.operatorEditGroups?.length) {\n const previousOperatorGroupIndex = this.operatorEditGroups.findIndex(grp => grp.has(this._previousOperatorValue));\n const newOperatorValue = formGroup.get('operator').getRawValue();\n const newOperatorGroupIndex = this.operatorEditGroups.findIndex(grp => grp.has(newOperatorValue));\n if (previousOperatorGroupIndex !== -1 && newOperatorGroupIndex !== -1 && previousOperatorGroupIndex === newOperatorGroupIndex) {\n clearVal = false;\n }\n }\n this._previousOperatorValue = formGroup.get('operator').value;\n if (clearVal) {\n formGroup.get('value').setValue(null);\n }\n }\n\n /** Synchronizes the column definition name with the text column name. */\n private _syncFieldDefName() {\n if (this.fieldDef) {\n this.fieldDef.name = this.name;\n }\n }\n\n private _syncFieldDefOperatorValue() {\n if (this.fieldDef) {\n this.fieldDef.defaultOperator = this.defaultOperator;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\n OnDestroy,\n QueryList,\n Signal,\n signal,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { PlacesListComponent } from 'novo-elements/elements/places';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers, Key } from 'novo-elements/utils';\nimport { Subscription } from 'rxjs';\nimport { AddressCriteriaConfig, AddressData, AddressRadius, AddressRadiusUnitsName, Operator, RadiusUnits } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { NovoSelectElement } from 'novo-elements/elements/select';\n\n/**\n * Handle selection of field values when a list of options is provided.\n */\n@Component({\n selector: 'novo-address-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"radius\" *ngIf=\"radiusEnabled()\">{{ labels.radius }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex; fieldMeta as meta\" [formGroup]=\"formGroup\">\n <novo-flex justify=\"space-between\" align=\"end\">\n <novo-field #novoRadiusField *ngIf=\"formGroup.value.operator === 'radius'\" class=\"address-radius\">\n <novo-select\n #radiusSelect [placeholder]=\"labels.radius\"\n (onSelect)=\"onRadiusSelect(formGroup, $event.selected)\"\n [value]=\"radius()\"\n [options]=\"radiusOptions()\">\n </novo-select>\n </novo-field>\n <novo-field #novoField class=\"address-location\">\n <novo-chip-list [(ngModel)]=\"chipListModel\" [ngModelOptions]=\"{ standalone: true }\" (click)=\"openPlacesList(viewIndex)\">\n <novo-chip *ngFor=\"let item of formGroup.get('value').value\" (removed)=\"remove(item, formGroup, viewIndex)\">\n <novo-text ellipsis [tooltip]=\"item.formatted_address\" tooltipOnOverflow>{{ item.formatted_address }}</novo-text>\n <novo-icon novoChipRemove>close</novo-icon>\n </novo-chip>\n <input\n novoChipInput\n [id]=\"viewIndex\"\n [placeholder]=\"labels.location\"\n (keyup)=\"onKeyup($event, viewIndex)\"\n (keydown)=\"onKeydown($event, viewIndex)\"\n [picker]=\"placesPicker\"\n #addressInput/>\n </novo-chip-list>\n <novo-picker-toggle [overlayId]=\"viewIndex\" icon=\"location\" novoSuffix>\n <google-places-list\n [term]=\"term\"\n (select)=\"selectPlace($event, formGroup, viewIndex)\"\n formControlName=\"value\"\n #placesPicker/>\n </novo-picker-toggle>\n </novo-field>\n </novo-flex>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef implements OnDestroy {\n @ViewChildren(NovoPickerToggleElement) overlayChildren: QueryList<NovoPickerToggleElement>;\n @ViewChildren('addressInput') inputChildren: QueryList<ElementRef>;\n @ViewChild('placesPicker') placesPicker: PlacesListComponent;\n @ViewChildren(NovoSelectElement) addressSideTest: any;\n\n // Static defaults\n radiusValues: number[] = [5, 10, 20, 30, 40, 50, 100];\n defaultRadius: number = 30;\n\n // Overridable defaults\n defaults: AddressCriteriaConfig = {\n radiusEnabled: false,\n radiusUnits: 'miles',\n };\n config: InputSignal<AddressCriteriaConfig> = input();\n radiusUnits: Signal<AddressRadiusUnitsName> = computed(() =>\n this.config()?.radiusUnits || this.defaults.radiusUnits\n );\n radiusEnabled: Signal<boolean> = computed(() =>\n this.config()?.radiusEnabled || this.defaults.radiusEnabled\n );\n\n radius: WritableSignal<number> = signal(this.defaultRadius);\n radiusOptions: Signal<{ label: string; value: number; }[]> = computed(() => {\n const unitsLabel = this.radiusUnits() === RadiusUnits.miles ? this.labels.miles : this.labels.km;\n return this.radiusValues.map(value => ({\n label: `${value.toString()} ${unitsLabel}`,\n value,\n }));\n });\n\n defaultOperator = Operator.includeAny;\n chipListModel: any = '';\n term: string = '';\n\n private _addressChangesSubscription: Subscription = Subscription.EMPTY;\n\n public element = inject(ElementRef);\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.excludeAny, Operator.radius);\n }\n\n frameAfterViewInit(): void {\n super.frameAfterViewInit();\n // Initialize the radius value from existing data\n this.assignRadiusFromValue();\n\n // Update the radius on address value changes\n this._addressChangesSubscription = this.inputChildren.changes.subscribe(() => {\n this.assignRadiusFromValue();\n });\n }\n\n ngOnDestroy() {\n this._addressChangesSubscription.unsubscribe();\n }\n\n onKeyup(event, viewIndex) {\n if (![Key.Escape, Key.Enter].includes(event.key)) {\n this.openPlacesList(viewIndex);\n }\n this.term = event.target.value;\n }\n\n onKeydown(event, viewIndex) {\n if (!this.placesPicker.dropdownOpen) {\n this.openPlacesList(viewIndex);\n this.placesPicker.dropdownOpen = true;\n }\n if ([Key.Escape, Key.Tab].includes(event.key)) {\n this.closePlacesList(viewIndex);\n } else {\n this.placesPicker.onKeyDown(event);\n }\n }\n\n getValue(formGroup: AbstractControl): AddressData[] {\n return formGroup.value.value || [];\n }\n\n getCurrentOverlay(viewIndex: string): NovoPickerToggleElement {\n return this.overlayChildren?.find(item => item.overlayId === viewIndex);\n }\n\n getCurrentInput(viewIndex: string): ElementRef {\n return this.inputChildren?.find(item => (item as any).nativeElement.id === viewIndex);\n }\n\n openPlacesList(viewIndex) {\n this.getCurrentOverlay(viewIndex)?.openPanel();\n }\n\n closePlacesList(viewIndex) {\n this.getCurrentOverlay(viewIndex)?.closePanel();\n }\n\n selectPlace(event: any, formGroup: AbstractControl, viewIndex: string): void {\n const valueToAdd: AddressData = {\n address_components: event.address_components,\n formatted_address: event.formatted_address,\n geometry: event.geometry,\n name: event.name,\n place_id: event.place_id,\n types: event.types,\n };\n const current: AddressData | AddressData[] = this.getValue(formGroup);\n const updated: AddressData[] = Array.isArray(current) ? [...current, valueToAdd] : [valueToAdd];\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, updated));\n\n this.inputChildren.forEach(input => {\n input.nativeElement.value = '';\n })\n this.getCurrentInput(viewIndex)?.nativeElement.focus();\n this.closePlacesList(viewIndex);\n }\n\n remove(valueToRemove: AddressData, formGroup: AbstractControl, viewIndex: string): void {\n const current = this.getValue(formGroup);\n const index = current.indexOf(valueToRemove);\n if (index >= 0) {\n const oldValue = [...current]\n oldValue.splice(index, 1);\n formGroup.get('value').setValue(oldValue);\n }\n this.closePlacesList(viewIndex);\n }\n\n // Override abstract behavior - allow moving location from includeAny to radius, but when moving the opposite direction,\n // trim out radius information from the value\n onOperatorSelect(formGroup: UntypedFormGroup): void {\n const previousOperator = this._previousOperatorValue;\n super.onOperatorSelect(formGroup);\n if ([previousOperator, formGroup.get('operator').getRawValue()].indexOf(Operator.radius) !== -1 &&\n formGroup.get('value').getRawValue() != null) {\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, this.getValue(formGroup)));\n }\n }\n\n onRadiusSelect(formGroup: AbstractControl, radius: number): void {\n this.radius.set(radius);\n // We must dirty the form explicitly to show up as a user modification when it was done programmatically\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, this.getValue(formGroup)));\n formGroup.markAsDirty();\n }\n\n private assignRadiusFromValue() {\n if (this.placesPicker?.model?.length) {\n const addressData: AddressData = this.placesPicker.model[0];\n const initialRadius = addressData.radius?.value;\n if (initialRadius && Helpers.isNumber(initialRadius)) {\n this.radius.set(initialRadius);\n }\n }\n }\n\n private updateRadiusInValues(formGroup: AbstractControl, values: AddressData[]): AddressData[] {\n return values.map(val => ({\n ...val,\n radius: this.isRadiusOperatorSelected(formGroup) ? this.getRadiusData(formGroup) : undefined,\n }));\n }\n\n private getRadiusData(formGroup: AbstractControl): AddressRadius {\n return {\n value: this.getRadius(formGroup),\n units: this.radiusUnits(),\n };\n }\n\n private getRadius(formGroup: AbstractControl): number | undefined {\n return this.isRadiusOperatorSelected(formGroup) ? this.radius() : undefined;\n }\n\n private isRadiusOperatorSelected(formGroup: AbstractControl): boolean {\n return formGroup.get('operator').value === 'radius';\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * When constructing a query using a field that is a boolean with only true/false as possible values.\n */\n@Component({\n selector: 'novo-boolean-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"include\">{{ labels.equals }}</novo-option>\n <novo-option value=\"exclude\">{{ labels.doesNotEqual }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoConditionInputDef=\"let formGroup\" [style.width.px]=\"125\" [formGroup]=\"formGroup\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ formGroup.value.operator === 'isNull' ? labels.yes : labels.true }}</novo-radio>\n <novo-radio [value]=\"false\">{{ formGroup.value.operator === 'isNull' ? labels.no : labels.false }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultBooleanConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.include;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.include, Operator.exclude, Operator.isNull);\n }\n}\n","import { ChangeDetectionStrategy, Component, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * Most complicated of the default conditions defs, a date needs to provide a different\n * input type depending on the operator selected.\n */\n@Component({\n selector: 'novo-date-condition-def',\n template: `\n <ng-container novoConditionFieldDef=\"DATE\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"before\">{{ labels.before }}</novo-option>\n <novo-option value=\"after\">{{ labels.after }}</novo-option>\n <novo-option value=\"within\">{{ labels.within }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['before', 'after']\">\n <input novoInput dateFormat=\"iso8601\" [picker]=\"datepicker\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker (onSelect)=\"closePanel($event, viewIndex)\" #datepicker></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['between']\">\n <input novoInput dateRangeFormat=\"date\" [picker]=\"daterangepicker\" formControlName=\"value\"/>\n <novo-picker-toggle [for]=\"daterangepicker\" triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker #daterangepicker (onSelect)=\"closePanel($event, viewIndex)\" mode=\"range\" numberOfMonths=\"2\"></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['within']\">\n <novo-select [placeholder]=\"labels.selectDateRange\" formControlName=\"value\">\n <novo-option value=\"7\">{{ labels.next7Days }}</novo-option>\n <novo-option value=\"-7\">{{ labels.past7Days }}</novo-option>\n <novo-option value=\"-30\">{{ labels.past30Days }}</novo-option>\n <novo-option value=\"-90\">{{ labels.past90Days }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultDateConditionDef extends AbstractConditionFieldDef {\n @ViewChildren(NovoPickerToggleElement)\n overlayChildren: QueryList<NovoPickerToggleElement>;\n\n defaultOperator = Operator.within;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.before, Operator.after);\n }\n\n closePanel(event, viewIndex): void {\n const overlay = this.overlayChildren.find(item => item.overlayId === viewIndex);\n overlay.closePanel(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * Most complicated of the default conditions defs, a date needs to provide a different\n * input type depending on the operator selected.\n */\n@Component({\n selector: 'novo-date-time-condition-def',\n template: `\n <ng-container novoConditionFieldDef=\"DATE\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"before\">{{ labels.before }}</novo-option>\n <novo-option value=\"after\">{{ labels.after }}</novo-option>\n <novo-option value=\"within\">{{ labels.within }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['after']\">\n <input novoInput dateTimeFormat=\"iso8601\" [picker]=\"datetimepicker\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [width]=\"-1\" [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-time-picker defaultTime=\"end\" (onSelect)=\"closePanel($event, viewIndex)\" #datetimepicker></novo-date-time-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['before']\">\n <input novoInput dateTimeFormat=\"iso8601\" [picker]=\"datetimepickerbefore\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [width]=\"-1\" [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-time-picker defaultTime=\"start\" (onSelect)=\"closePanel($event, viewIndex)\" #datetimepickerbefore></novo-date-time-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['between']\">\n <input novoInput dateRangeFormat=\"date\" [picker]=\"daterangepicker\" formControlName=\"value\"/>\n <novo-picker-toggle [for]=\"daterangepicker\" triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker #daterangepicker (onSelect)=\"closePanel($event, viewIndex)\" mode=\"range\" numberOfMonths=\"2\"></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['within']\">\n <novo-select [placeholder]=\"labels.selectDateRange\" formControlName=\"value\">\n <novo-option value=\"7\">{{ labels.next7Days }}</novo-option>\n <novo-option value=\"-7\">{{ labels.past7Days }}</novo-option>\n <novo-option value=\"-30\">{{ labels.past30Days }}</novo-option>\n <novo-option value=\"-90\">{{ labels.past90Days }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultDateTimeConditionDef extends AbstractConditionFieldDef {\n @ViewChildren(NovoPickerToggleElement)\n overlayChildren: QueryList<NovoPickerToggleElement>;\n\n defaultOperator = Operator.within;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.before, Operator.after);\n }\n\n closePanel(event, viewIndex): void {\n const overlay = this.overlayChildren.find(item => item.overlayId === viewIndex);\n overlay.closePanel(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Operator } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\n\n/**\n * Constructing filters against String fields can be complex. Each \"chip\" added to the\n * condition can be independently used to query a database. Not all systems support\n * querying within a text column, ie sql unless LIKE is enabled. This could result in a\n * performance penalty.\n */\n@Component({\n selector: 'novo-string-condition-def',\n template: `\n <!-- fieldTypes should be UPPERCASE -->\n <ng-container novoConditionFieldDef=\"STRING\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"includeAll\">{{ labels.includeAll }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"isEmpty\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['includeAny', 'includeAll', 'excludeAny']\">\n <novo-chip-list #chipList aria-label=\"filter value\" formControlName=\"value\">\n <novo-chip *ngFor=\"let chip of formGroup.value?.value || []\" [value]=\"chip\" (removed)=\"remove(chip, formGroup)\">\n <novo-text ellipsis [tooltip]=\"chip\" tooltipOnOverflow>{{ chip }}</novo-text>\n <novo-icon novoChipRemove>close</novo-icon>\n </novo-chip>\n <input\n novoChipInput\n [placeholder]=\"labels.typeToAddChips\"\n autocomplete=\"off\"\n (novoChipInputTokenEnd)=\"add($event, formGroup)\"\n />\n </novo-chip-list>\n <novo-autocomplete></novo-autocomplete>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isEmpty']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // means the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultStringConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.includeAny;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.includeAll, Operator.excludeAny);\n }\n\n getValue(formGroup: AbstractControl): any[] {\n return formGroup.value?.value || [];\n }\n\n add(event: any, formGroup: AbstractControl): void {\n const input = event.input;\n input.value = '';\n const valueToAdd = event.value;\n if (valueToAdd !== '') {\n const current: any[] = this.getValue(formGroup);\n const newValue: any[] = Array.isArray(current) ? [...current, valueToAdd] : [valueToAdd];\n this.setFormValue(formGroup, newValue);\n }\n }\n\n remove(valueToRemove: string, formGroup: AbstractControl): void {\n const current = this.getValue(formGroup);\n const index = current.indexOf(valueToRemove);\n if (index >= 0) {\n const value = [...current]\n value.splice(index, 1);\n this.setFormValue(formGroup, value);\n }\n }\n\n private setFormValue(formGroup: AbstractControl, newValue: any[]) {\n formGroup.get('value').setValue(newValue);\n formGroup.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * When constructing a query using a field that is an Int, Double, Number ...etc.\n * TODO: Do we implement currency formation here potentially?\n */\n@Component({\n selector: 'novo-number-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"greaterThan\">{{ labels.greaterThan }}</novo-option>\n <novo-option value=\"lessThan\">{{ labels.lessThan }}</novo-option>\n <novo-option value=\"equalTo\">{{ labels.equalTo }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['greaterThan', 'lessThan', 'equalTo']\">\n <input novoInput type=\"number\" formControlName=\"value\"/>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n <ng-container *novoSwitchCases=\"['between']\">\n <novo-number-range formControlName=\"value\"/>\n </ng-container>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultNumberConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.equalTo;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.greaterThan, Operator.lessThan, Operator.equalTo);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\n\n/**\n * Any condition that has a type of ID usually only is queried by ID.\n */\n@Component({\n selector: 'novo-id-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\">\n <novo-option value=\"equalTo\">{{ labels.equalTo }}</novo-option>\n <ng-content></ng-content>\n </novo-select>\n </novo-field>\n <novo-field *novoConditionInputDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <input novoInput type=\"number\" min=\"1\" step=\"1\" formControlName=\"value\" />\n </novo-field>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultIdConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.equalTo;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Operator } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\n\n/**\n * Handle selection of field values when a list of options is provided.\n */\n@Component({\n selector: 'novo-picker-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"includeAll\">{{ labels.includeAll }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; fieldMeta as meta\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['includeAny', 'includeAll', 'excludeAny']\">\n <novo-select extupdatefix formControlName=\"value\" [placeholder]=\"labels.select\" [multiple]=\"true\">\n <!-- WHat about optionUrl/optionType -->\n <novo-option *ngFor=\"let option of meta?.options\" [value]=\"option.value\" [attr.data-automation-value]=\"option.label\">\n {{ option.label }}\n </novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultPickerConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.includeAny;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.includeAll, Operator.excludeAny);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { AddressCriteriaConfig } from '../query-builder.types';\n\n@Component({\n selector: 'novo-condition-templates',\n templateUrl: './condition-templates.component.html'\n})\nexport class NovoConditionTemplatesComponent {\n @Input() addressConfig: AddressCriteriaConfig;\n}\n","<novo-id-condition-def name=\"ID\"/>\n<novo-date-condition-def name=\"DATE\"/>\n<novo-date-time-condition-def name=\"TIMESTAMP\"/>\n<novo-string-condition-def name=\"STRING\"/>\n<novo-number-condition-def name=\"FLOAT\"/>\n<novo-number-condition-def name=\"INTEGER\"/>\n<novo-number-condition-def name=\"BIGDECIMAL\"/>\n<novo-number-condition-def name=\"DOUBLE\"/>\n<novo-address-condition-def name=\"ADDRESS\" [config]=\"addressConfig\"/>\n<novo-boolean-condition-def name=\"BOOLEAN\"/>\n<novo-picker-condition-def name=\"SELECT\"/>\n<novo-string-condition-def name=\"DEFAULT\"/>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n SimpleChanges,\n SkipSelf,\n ViewChild,\n ViewContainerRef,\n computed,\n input\n} from '@angular/core';\nimport { ControlContainer, FormControl, FormGroup } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { BaseConditionFieldDef } from '../query-builder.directives';\nimport { QueryBuilderConfig, QueryBuilderService } from '../query-builder.service';\nimport { NOVO_CONDITION_BUILDER } from '../query-builder.tokens';\nimport { AddressCriteriaConfig, BaseFieldDef, FieldConfig, QueryFilterOutlet } from '../query-builder.types';\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\n@Directive({ selector: '[conditionInputOutlet]' })\nexport class ConditionInputOutlet implements QueryFilterOutlet {\n constructor(public viewContainer: ViewContainerRef, public elementRef: ElementRef) {}\n}\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\n@Directive({ selector: '[conditionOperatorOutlet]' })\nexport class ConditionOperatorOutlet implements QueryFilterOutlet {\n constructor(public viewContainer: ViewContainerRef, public elementRef: ElementRef) {}\n}\n\n@Component({\n selector: 'novo-condition-builder',\n templateUrl: './condition-builder.component.html',\n styleUrls: ['./condition-builder.component.scss'],\n providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent },\n {\n provide: QueryBuilderService,\n deps: [NovoLabelService, [new SkipSelf(), new Optional(), QueryBuilderService]],\n useFactory: (labelService: NovoLabelService, queryBuilderService?: QueryBuilderService) => {\n if (!queryBuilderService) {\n queryBuilderService = new QueryBuilderService(labelService);\n }\n return queryBuilderService;\n }\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConditionBuilderComponent implements OnInit, OnChanges, AfterContentInit, AfterViewInit, OnDestroy {\n @ViewChild(ConditionOperatorOutlet, { static: true }) _operatorOutlet: ConditionOperatorOutlet;\n @ViewChild(ConditionInputOutlet, { static: true }) _inputOutlet: ConditionInputOutlet;\n\n @Input() label: any;\n @Input() scope: string;\n @Input() andIndex: number;\n @Input() groupIndex: number;\n @Input() addressConfig: AddressCriteriaConfig;\n hideOperator = input(true);\n conditionType = input();\n\n // This component can either be directly hosted as a host to a condition, or it can be part of a condition group within a criteria builder.\n // In the former case, config will come from inputs, and we will instantiate our own QueryBuilderService. In the latter, it comes from\n // the QueryBuilderService.\n inputConfig = input<QueryBuilderConfig>(null, { alias: 'config'});\n inputEditTypeFn = input<(field: BaseFieldDef) => string>(null, { alias: 'editTypeFn'});\n private config = computed<QueryBuilderConfig>(() => {\n if (this.isConditionHost) {\n this.queryBuilderService.config = this.inputConfig();\n }\n return this.queryBuilderService.config;\n });\n private editTypeFn = computed<(field: BaseFieldDef) => string>(() => {\n if (this.isConditionHost) {\n this.queryBuilderService.editTypeFn = this.inputEditTypeFn();\n }\n return this.queryBuilderService.editTypeFn;\n });\n\n public parentForm: FormGroup;\n public fieldConfig: FieldConfig<BaseFieldDef>;\n public searches!: Subscription;\n public results$: Promise<any[]>;\n public searchTerm: FormControl = new FormControl();\n public fieldDisplayWith;\n public displayIcon: string;\n\n public staticFieldSelection = computed(() => this.config().staticFieldSelection);\n private _lastContext: any = {};\n @HostBinding('class.condition-host')\n public isConditionHost = false;\n\n public gridColumns = computed(() => {\n if (this.staticFieldSelection()) {\n return '13rem 1fr';\n } else {\n const firstColumnWidth = this.hideOperator() ? '20rem' : '16rem';\n return `${firstColumnWidth} 13rem 1fr`;\n }\n });\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n public labels: NovoLabelService,\n private cdr: ChangeDetectorRef,\n private queryBuilderService: QueryBuilderService,\n private controlContainer: ControlContainer,\n ) {\n if (!queryBuilderService.componentHost) {\n queryBuilderService.componentHost = this;\n this.isConditionHost = true;\n this.groupIndex = 0;\n this.andIndex = 0;\n }\n }\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as FormGroup;\n this.parentForm.controls.field.valueChanges.subscribe((value) => {\n Promise.resolve().then(() => this.updateFieldSelection());\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.inputConfig?.previousValue?.staticFieldSelection &&\n changes.inputConfig.previousValue.staticFieldSelection !== changes.inputConfig.currentValue.staticFieldSelection) {\n this.parentForm.controls.field.setValue(changes.inputConfig.currentValue.staticFieldSelection);\n }\n }\n\n ngAfterContentInit() {\n const allFields = this.config()?.fields || [];\n const scopedFields = this.scope ? allFields.find((field) => field.value === this.scope) : allFields[0];\n allFields.length && this.changeFieldOptions(scopedFields);\n this.searches = this.searchTerm.valueChanges.pipe(debounceTime(300), distinctUntilChanged()).subscribe((term) => {\n this.results$ = Promise.resolve(\n this.fieldConfig.options.filter(\n (f) => f.name.toLowerCase().includes(term.toLowerCase()) || f.label?.toLowerCase().includes(term.toLowerCase()),\n ),\n );\n this.cdr.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n if (this.parentForm.value?.field !== null) {\n Promise.resolve().then(() => this.updateFieldSelection());\n }\n }\n\n ngOnDestroy() {\n this.searches.unsubscribe();\n // Clear all outlets and Maps\n [this._operatorOutlet.viewContainer, this._inputOutlet.viewContainer].forEach((def) => {\n def.clear();\n });\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n /**\n * Updates the Conditions \"Field\" Options to Change base on new Scope\n * @param fieldConfig\n */\n changeFieldOptions(fieldConfig: FieldConfig<BaseFieldDef>) {\n this.fieldConfig = fieldConfig;\n this.searchTerm.setValue('');\n this.results$ = Promise.resolve(this.fieldConfig.options);\n }\n\n getField() {\n const field = this.parentForm?.value?.field;\n if (!field) return null;\n return this.fieldConfig.find(field);\n }\n\n getDefaultField() {\n const fields = this.fieldConfig.options;\n if (fields?.length) {\n return fields[0].name;\n }\n return null;\n }\n\n updateFieldSelection() {\n const fieldConf = this.getField();\n if (!fieldConf) {\n this.parentForm.get('field').setValue(this.getDefaultField());\n return;\n } else {\n this.fieldDisplayWith = () => fieldConf.label || fieldConf.name;\n this.displayIcon = fieldConf.icon || null;\n }\n const { field } = this.parentForm.value;\n\n if (this._lastContext.field !== field) {\n if (this._lastContext.field) {\n // only clearing operator/value if field was previously defined so we can preload values onto the form\n this.parentForm.get('value').setValue(null);\n this.parentForm.get('operator').setValue(null);\n }\n this.createFieldTemplates();\n }\n setTimeout(() => this.updateConditionType());\n\n this._lastContext = { ...this.parentForm.value };\n this.cdr.markForCheck();\n }\n\n updateConditionType() {\n this.parentForm.get('conditionType')?.setValue(this.conditionType());\n }\n\n private findDefinitionForField(field) {\n if (!field) return;\n const editType = this.editTypeFn()(field);\n // Don't look at dataSpecialization it is no good, this misses currency, and percent\n const { name } = field;\n const fieldDefsByName = this.queryBuilderService.getFieldDefsByName();\n // Check Fields by priority for match Field Definition\n const key = [name, editType?.toUpperCase(), 'DEFAULT'].find((it) => fieldDefsByName.has(it));\n return fieldDefsByName.get(key);\n }\n\n private createFieldTemplates() {\n const definition = this.findDefinitionForField(this.getField());\n\n if (!this.parentForm.get('operator').value) {\n this.parentForm.get('operator').setValue(definition.defaultOperator);\n }\n\n this.createFieldOperators(definition);\n this.createFieldInput(definition);\n }\n\n private createFieldOperators(definition: BaseConditionFieldDef) {\n this._operatorOutlet.viewContainer.clear();\n if (definition) {\n const context = { $implicit: this.parentForm, fieldMeta: this.getField() };\n this._operatorOutlet.viewContainer.createEmbeddedView(definition.fieldOperators.template, context);\n }\n this.cdr.markForCheck();\n }\n\n private createFieldInput(definition: BaseConditionFieldDef) {\n this._inputOutlet.viewContainer.clear();\n if (definition) {\n const context = { $implicit: this.parentForm, fieldMeta: this.getField(), viewIndex: this.groupIndex.toString() + this.andIndex.toString() };\n this._inputOutlet.viewContainer.createEmbeddedView(definition.fieldInput.template, context);\n }\n this.cdr.markForCheck();\n }\n}\n","<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(hideOperator() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\" [addressConfig]=\"addressConfig\"/>\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ControlContainer, FormArray, FormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { QueryBuilderService } from '../query-builder.service';\nimport { Condition, Conjunction } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\nconst EMPTY_CONDITION: Condition = {\n conditionType: '$and',\n field: null,\n operator: null,\n scope: null,\n value: null,\n};\n@Component({\n selector: 'novo-condition-group',\n templateUrl: './condition-group.component.html',\n styleUrls: ['./condition-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }],\n host: {\n class: 'novo-condition-group',\n },\n})\nexport class ConditionGroupComponent implements OnInit, OnDestroy {\n @Input() controlName: string = '$' + Conjunction.AND;\n @Input() groupIndex: number;\n @Input() hideFirstOperator: boolean = true;\n @Input() canBeEmpty: boolean = false;\n @Input() formGroupName: any;\n\n public scope: string;\n public parentForm: UntypedFormGroup;\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n public qbs: QueryBuilderService,\n public labels: NovoLabelService,\n private controlContainer: ControlContainer,\n private formBuilder: FormBuilder,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as UntypedFormGroup;\n this.controlName = Object.keys(this.parentForm.controls)[0];\n this.updateGroupScope();\n merge(this.parentForm.parent.valueChanges, this.qbs.stateChanges)\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => this.cdr.markForCheck());\n }\n\n ngOnChanges() {\n this.updateGroupScope();\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n updateGroupScope() {\n if (this.parentForm && this.controlName) {\n this.scope = this.parentForm.value[this.controlName][0]?.scope || this.qbs.scopes()[0];\n }\n }\n\n updateControlName(value: string) {\n const name = `$${value.replace('$', '')}`;\n if (name !== this.controlName) {\n const current = this.parentForm.get(this.controlName).value;\n this.parentForm.controls[name] = this.parentForm.controls[this.controlName];\n delete this.parentForm.controls[this.controlName];\n this.controlName = name;\n // scrub properties not on control\n const currentStrict = current.map((item) => (({ conditionType, field, operator, scope, value, ...rest }) => ({ conditionType, field, operator, scope, value }))(item));\n this.parentForm.get(this.controlName)?.setValue(currentStrict);\n this.cdr.markForCheck();\n }\n }\n\n get root(): FormArray {\n return this.parentForm.get(this.controlName) as FormArray;\n }\n\n addCondition(data?: any) {\n const condition = this.newCondition(data);\n const onlyConditionIsEmpty = JSON.stringify(this.root.value) === JSON.stringify([EMPTY_CONDITION]);\n this.root.push(condition);\n this.qbs.hasMultipleScopes() && onlyConditionIsEmpty && this.removeCondition(0);\n this.cdr.markForCheck();\n }\n\n removeCondition(index: number) {\n const isPrimaryScope = this.scope === this.qbs.scopes()[0];\n const lastRowInGroup = this.root.length === 1;\n const lastRowInQueryBuilder = this.cantRemoveRow();\n this.root.removeAt(index);\n if ((lastRowInQueryBuilder || (lastRowInGroup && isPrimaryScope)) && !this.canBeEmpty) {\n this.addCondition();\n }\n this.cdr.markForCheck();\n }\n\n newCondition({ field, operator, scope, value }: Condition = EMPTY_CONDITION): UntypedFormGroup {\n return this.formBuilder.group({\n conditionType: '$and',\n field: [field, Validators.required],\n operator: [operator, Validators.required],\n scope: [scope],\n value: [value],\n });\n }\n\n cantRemoveRow() {\n if ((this.parentForm.parent as FormArray).length > 1) {\n return false;\n }\n return this.root.length <= 1;\n }\n}\n","<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChildren,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { ControlContainer, FormArray, FormBuilder, NG_VALUE_ACCESSOR, UntypedFormGroup, Validators } from '@angular/forms';\nimport { interval, Subject } from 'rxjs';\nimport { debounce, filter, startWith, takeUntil } from 'rxjs/operators';\nimport { NovoTabbedGroupPickerElement, TabbedGroupPickerButtonConfig, TabbedGroupPickerTab } from 'novo-elements/elements/tabbed-group-picker';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { ConditionGroupComponent } from '../condition-group/condition-group.component';\nimport { NovoConditionFieldDef } from '../query-builder.directives';\nimport { QueryBuilderService } from '../query-builder.service';\nimport { NOVO_CRITERIA_BUILDER } from '../query-builder.tokens';\nimport { BaseFieldDef, Condition, ConditionGroup, Conjunction, AddressCriteriaConfig } from '../query-builder.types';\n\nconst EMPTY_CONDITION: Condition = {\n conditionType: '$and',\n field: null,\n operator: null,\n scope: null,\n value: null,\n};\n@Component({\n selector: 'novo-criteria-builder',\n templateUrl: './criteria-builder.component.html',\n styleUrls: ['./criteria-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CriteriaBuilderComponent), multi: true },\n { provide: NOVO_CRITERIA_BUILDER, useExisting: CriteriaBuilderComponent },\n { provide: QueryBuilderService, useClass: QueryBuilderService },\n ],\n host: {\n class: 'novo-criteria-builder',\n },\n})\nexport class CriteriaBuilderComponent implements OnInit, OnDestroy, AfterContentChecked, AfterViewInit {\n @Input() config: any;\n @Input() controlName: string;\n @Input() allowedGroupings = [Conjunction.AND, Conjunction.OR, Conjunction.NOT];\n @Input() editTypeFn: (field: BaseFieldDef) => string;\n @Input() addressConfig: AddressCriteriaConfig;\n @Input() canBeEmpty: boolean = false;\n\n @Input('hideFirstOperator')\n set HideFirstOperator(hide: boolean) {\n if (!Helpers.isEmpty(hide)) {\n this._hideFirstOperator = hide;\n }\n }\n get hideFirstOperator() {\n return this._hideFirstOperator;\n }\n private _hideFirstOperator: boolean = true;\n\n @ContentChildren(NovoConditionFieldDef, { descendants: true }) _contentFieldDefs: QueryList<NovoConditionFieldDef>;\n scopedFieldPicker = viewChild(NovoTabbedGroupPickerElement);\n conditionGroups = viewChildren(ConditionGroupComponent);\n\n public parentForm: UntypedFormGroup;\n public innerForm: UntypedFormGroup;\n public tabbedGroupPickerTabs = computed<TabbedGroupPickerTab[]>(() => {\n const tabs = [];\n this.qbs.scopes()?.forEach((scope) => {\n tabs.push({\n typeName: scope,\n typeLabel: scope,\n valueField: 'name',\n labelField: 'label',\n data: this.qbs.config.fields.find((field) => field.value === scope)?.options || [],\n });\n });\n return tabs;\n });\n public addButtonConfig: TabbedGroupPickerButtonConfig = {\n theme: 'dialogue',\n side: 'left',\n size: 'sm',\n icon: 'add-thin',\n label: this.labels.addCondition,\n };\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n private controlContainer: ControlContainer,\n private formBuilder: FormBuilder,\n private cdr: ChangeDetectorRef,\n public qbs: QueryBuilderService,\n public labels: NovoLabelService,\n ) {\n if (!qbs.componentHost) {\n qbs.componentHost = this;\n }\n }\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as UntypedFormGroup;\n this.innerForm = this.formBuilder.group({\n criteria: this.formBuilder.array([]),\n });\n\n this.parentForm.valueChanges.pipe(\n startWith(this.parentForm.value),\n filter(v => v?.criteria),\n takeUntil(this._onDestroy)\n ).subscribe((value) => {\n Promise.resolve().then(() => {\n this.setInitialValue(value[this.controlName]);\n this.cdr.markForCheck();\n });\n });\n this.innerForm.valueChanges\n .pipe(\n debounce(() => interval(10)),\n takeUntil(this._onDestroy),\n )\n .subscribe((value) => {\n const result = value.criteria.filter((it, i) => {\n const key = Object.keys(it)[0];\n if (it[key].length === 0) {\n this.removeConditionGroupAt(i);\n }\n return it[key].length > 0;\n });\n\n Promise.resolve().then(() => {\n this.parentForm.get(this.controlName).setValue(result, { emitEvent: false });\n this.cdr.markForCheck();\n });\n });\n }\n\n ngAfterContentChecked(): void {\n this._configureQueryBuilderService();\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n this._registerFieldDefs();\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n private isConditionGroup(group: unknown): group is ConditionGroup {\n return Object.keys(group).every((key) => ['$and', '$or', '$not'].includes(key));\n }\n\n private setInitialValue(value: ConditionGroup[] | Condition[]) {\n if (value.length) {\n if (this.isConditionGroup(value[0])) {\n value.forEach((it) => this.addConditionGroup(it));\n } else {\n const conditions: Condition[] = [...value] as Condition[];\n if (this.qbs.hasMultipleScopes()) {\n // divide up by scope into separate groups\n const scopedConditions: { [key: string]: Condition[] } = {};\n conditions.forEach((condition) => {\n scopedConditions[condition.scope] = scopedConditions[condition.scope] || [];\n scopedConditions[condition.scope].push(condition);\n })\n for (const scope in scopedConditions) {\n this.addConditionGroup({ $and: scopedConditions[scope] });\n }\n } else {\n this.addConditionGroup({ $and: conditions });\n }\n }\n } else {\n this.addConditionGroup({ $and: value });\n }\n }\n\n get root(): FormArray {\n return this.innerForm.get('criteria') as FormArray;\n }\n\n addConditionGroup(data: any = { $and: [EMPTY_CONDITION] }) {\n this.root.push(this.newConditionGroup(data));\n this.cdr.markForCheck();\n }\n\n newConditionGroup(data: ConditionGroup): UntypedFormGroup {\n const controls = Object.entries(data).reduce((obj, [key, val]) => {\n return {\n ...obj,\n [key]: this.formBuilder.array(val.map((it) => this.newCondition(it))),\n };\n }, {});\n return this.formBuilder.group(controls);\n }\n\n newCondition({ field, operator, scope, value }: Condition = EMPTY_CONDITION): UntypedFormGroup {\n return this.formBuilder.group({\n conditionType: '$and',\n field: [field, Validators.required],\n operator: [operator, Validators.required],\n scope: [scope],\n value: [value],\n });\n }\n\n removeConditionGroupAt(index: number) {\n this.root.removeAt(index, { emitEvent: false });\n }\n\n clearAllConditions() {\n while (this.root.length) {\n this.root.removeAt(0);\n }\n }\n\n onFieldSelect(field) {\n this.scopedFieldPicker().dropdown.closePanel();\n const condition = { field: field.name, operator: null, scope: field.scope, value: null };\n const group = this.conditionGroups().find((group) => group.scope === field.scope);\n if (group) {\n group.addCondition(condition);\n } else {\n this.addConditionGroup({ $and: [condition] })\n }\n }\n\n private _configureQueryBuilderService() {\n this.qbs.scopes.set(this.config?.fields.map((f) => f.value));\n this.qbs.config = this.config;\n this.qbs.editTypeFn = this.editTypeFn;\n this.qbs.allowedGroupings = this.allowedGroupings as Conjunction[];\n }\n\n private _registerFieldDefs() {\n const defs = [...Array.from(this._contentFieldDefs)];\n defs.forEach((fieldDef) => {\n this.qbs.registerFieldDef(fieldDef);\n });\n }\n}\n","<form [formGroup]=\"innerForm\">\n <novo-stack [formArrayName]=\"controlName\" class=\"criteria-builder-inner\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLastAnd = last;\">\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">{{ qbs.hasMultipleScopes() ? conditionGroup.scope + ' ' + labels.filterss : qbs.getConjunctionLabel('and') }}</novo-label>\n <novo-condition-group [hideFirstOperator]=\"hideFirstOperator\" [canBeEmpty]=\"canBeEmpty\" [groupIndex]=\"andIndex\" [formGroupName]=\"andIndex\" #conditionGroup></novo-condition-group>\n </ng-container>\n </novo-stack>\n <novo-tabbed-group-picker\n *ngIf=\"qbs.hasMultipleScopes()\"\n [tabs]=\"tabbedGroupPickerTabs()\"\n [selectionEnabled]=\"false\"\n [buttonConfig]=\"addButtonConfig\"\n (activation)=\"onFieldSelect($event)\">\n </novo-tabbed-group-picker>\n</form>\n<novo-condition-templates [addressConfig]=\"addressConfig\"/>\n\n<!--\n {\n $and: [{\n $or: [{\n entity: 'JobOrder'\n field: 'categories',\n operator: 'doesNotContain',\n value: 'Healthcare'\n }]\n }]\n }\n -->\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NovoAutoCompleteModule } from 'novo-elements/elements/autocomplete';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCardModule } from 'novo-elements/elements/card';\nimport { NovoChipsModule } from 'novo-elements/elements/chips';\nimport { NovoCommonModule, NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoDatePickerModule } from 'novo-elements/elements/date-picker';\nimport { NovoDateTimePickerModule } from 'novo-elements/elements/date-time-picker';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoFlexModule } from 'novo-elements/elements/flex';\nimport { NovoFormExtrasModule, NovoFormModule } from 'novo-elements/elements/form';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { NovoNonIdealStateModule } from 'novo-elements/elements/non-ideal-state';\nimport { GooglePlacesModule } from 'novo-elements/elements/places';\nimport { NovoRadioModule } from 'novo-elements/elements/radio'\nimport { NovoSearchBoxModule } from 'novo-elements/elements/search';\nimport { NovoSelectModule } from 'novo-elements/elements/select';\nimport { NovoSelectSearchModule } from 'novo-elements/elements/select-search';\nimport { NovoSwitchModule } from 'novo-elements/elements/switch';\nimport { NovoTabbedGroupPickerModule } from 'novo-elements/elements/tabbed-group-picker';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { ConditionBuilderComponent, ConditionInputOutlet, ConditionOperatorOutlet } from './condition-builder/condition-builder.component';\nimport { NovoDefaultAddressConditionDef } from './condition-definitions/address-condition.definition';\nimport { NovoDefaultBooleanConditionDef } from './condition-definitions/boolean-condition.definition';\nimport { NovoDefaultDateConditionDef } from './condition-definitions/date-condition.definition';\nimport { NovoDefaultDateTimeConditionDef } from './condition-definitions/date-time-condition.definition';\nimport { NovoDefaultIdConditionDef } from './condition-definitions/id-condition.definition';\nimport { NovoDefaultNumberConditionDef } from './condition-definitions/number-condition.definition';\nimport { NovoDefaultPickerConditionDef } from './condition-definitions/picker-condition.definition';\nimport { NovoDefaultStringConditionDef } from './condition-definitions/string-condition.definition';\nimport { ConditionGroupComponent } from './condition-group/condition-group.component';\nimport { CriteriaBuilderComponent } from './criteria-builder/criteria-builder.component';\nimport { NovoConditionFieldDef, NovoConditionInputDef, NovoConditionOperatorsDef } from './query-builder.directives';\nimport { NovoConditionTemplatesComponent } from './condition-templates/condition-templates.component';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n CdkTableModule,\n GooglePlacesModule,\n NovoAutoCompleteModule,\n NovoButtonModule,\n NovoCommonModule,\n NovoFormModule,\n NovoSelectModule,\n NovoNonIdealStateModule,\n NovoFieldModule,\n NovoOptionModule,\n NovoFlexModule,\n NovoTabModule,\n NovoTabbedGroupPickerModule,\n NovoLoadingModule,\n NovoCardModule,\n NovoDatePickerModule,\n NovoDateTimePickerModule,\n NovoIconModule,\n NovoOverlayModule,\n NovoRadioModule,\n NovoSearchBoxModule,\n NovoSwitchModule,\n NovoChipsModule,\n NovoSelectSearchModule,\n NovoDropdownModule,\n NovoFormExtrasModule,\n NovoTooltipModule,\n ],\n declarations: [\n CriteriaBuilderComponent,\n ConditionBuilderComponent,\n ConditionInputOutlet,\n ConditionOperatorOutlet,\n ConditionGroupComponent,\n NovoDefaultAddressConditionDef,\n NovoDefaultBooleanConditionDef,\n NovoDefaultDateConditionDef,\n NovoDefaultDateTimeConditionDef,\n NovoConditionOperatorsDef,\n NovoConditionInputDef,\n NovoConditionFieldDef,\n NovoDefaultStringConditionDef,\n NovoDefaultNumberConditionDef,\n NovoDefaultIdConditionDef,\n NovoDefaultPickerConditionDef,\n NovoConditionTemplatesComponent,\n ],\n exports: [\n CriteriaBuilderComponent,\n ConditionBuilderComponent,\n NovoDefaultAddressConditionDef,\n NovoDefaultBooleanConditionDef,\n NovoDefaultDateConditionDef,\n NovoDefaultDateTimeConditionDef,\n NovoConditionOperatorsDef,\n NovoConditionInputDef,\n NovoConditionFieldDef,\n NovoDefaultStringConditionDef,\n NovoDefaultNumberConditionDef,\n NovoDefaultIdConditionDef,\n NovoDefaultPickerConditionDef,\n NovoConditionTemplatesComponent,\n ],\n})\nexport class NovoQueryBuilderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.QueryBuilderService","i6","i7","i12.NovoConditionOperatorsDef","i12.NovoConditionInputDef","i12.NovoConditionFieldDef","i2","i3","i4","i7.NovoConditionOperatorsDef","i7.NovoConditionInputDef","i7.NovoConditionFieldDef","i5","i8","i9.NovoConditionOperatorsDef","i9.NovoConditionInputDef","i9.NovoConditionFieldDef","i9","i10.NovoConditionOperatorsDef","i10.NovoConditionInputDef","i10.NovoConditionFieldDef","i1","i5.NovoConditionOperatorsDef","i5.NovoConditionInputDef","i5.NovoConditionFieldDef","i8.NovoConditionOperatorsDef","i8.NovoConditionInputDef","i8.NovoConditionFieldDef","i1.NovoDefaultAddressConditionDef","i2.NovoDefaultBooleanConditionDef","i3.NovoDefaultDateConditionDef","i4.NovoDefaultDateTimeConditionDef","i5.NovoDefaultStringConditionDef","i6.NovoDefaultNumberConditionDef","i7.NovoDefaultIdConditionDef","i8.NovoDefaultPickerConditionDef","i2.QueryBuilderService","i10","i11.NovoConditionTemplatesComponent","EMPTY_CONDITION","i9.ConditionBuilderComponent","i8.ConditionGroupComponent","i9.NovoConditionTemplatesComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"novo-elements-elements-query-builder.mjs","sources":["../../../projects/novo-elements/src/elements/query-builder/query-builder.types.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.service.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.tokens.ts","../../../projects/novo-elements/src/elements/query-builder/query-builder.directives.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/abstract-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/address-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/boolean-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/date-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/date-time-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/string-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/number-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/id-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-definitions/picker-condition.definition.ts","../../../projects/novo-elements/src/elements/query-builder/condition-templates/condition-templates.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-templates/condition-templates.component.html","../../../projects/novo-elements/src/elements/query-builder/condition-builder/condition-builder.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-builder/condition-builder.component.html","../../../projects/novo-elements/src/elements/query-builder/condition-group/condition-group.component.ts","../../../projects/novo-elements/src/elements/query-builder/condition-group/condition-group.component.html","../../../projects/novo-elements/src/elements/query-builder/criteria-builder/criteria-builder.component.ts","../../../projects/novo-elements/src/elements/query-builder/criteria-builder/criteria-builder.component.html","../../../projects/novo-elements/src/elements/query-builder/query-builder.module.ts","../../../projects/novo-elements/src/elements/query-builder/novo-elements-elements-query-builder.ts"],"sourcesContent":["import { ViewContainerRef } from '@angular/core';\n\nexport enum Conjunction {\n AND = 'and',\n OR = 'or',\n NOT = 'not',\n}\n\nexport type ConditionType = '$and' | '$or' | '$not';\n\nexport type ConditionGroup = {\n [K in Conjunction as `$${K}`]?: Condition[];\n};\n\nexport type NestedConditionGroup = {\n [K in Conjunction as `$${K}`]?: ConditionOrConditionGroup[];\n};\n\nexport type ConditionOrConditionGroup = Condition | NestedConditionGroup;\n\nexport enum Operator {\n after = 'after',\n before = 'before',\n between = 'between',\n equalTo = 'equalTo',\n exclude = 'exclude',\n excludeAny = 'excludeAny',\n greaterThan = 'greaterThan',\n include = 'include',\n includeAll = 'includeAll',\n includeAny = 'includeAny',\n isEmpty = 'isEmpty',\n isNull = 'isNull',\n lessThan = 'lessThan',\n radius = 'radius',\n within = 'within',\n}\n\nexport type OperatorName = keyof typeof Operator;\n\nexport interface Condition {\n conditionType?: ConditionType;\n field: string;\n operator: OperatorName | string;\n scope?: string;\n value: any;\n}\n\nexport interface Criteria {\n criteria: ConditionGroup[];\n}\n\nexport interface NestedCriteria {\n criteria: NestedConditionGroup[];\n}\n\nexport interface BaseFieldDef {\n name: string;\n label?: string;\n type: string;\n dataSpecialization?: string;\n optional?: boolean;\n multiValue?: boolean;\n inputType?: string;\n options?: { value: string | number; label: string; readOnly?: boolean }[];\n optionsUrl?: string;\n optionsType?: string;\n dataType?: string;\n icon?: string;\n}\n\nexport interface FieldConfig<T extends BaseFieldDef> {\n value: string;\n label: string;\n options: T[];\n search: (term: string) => T[];\n find: (name: string) => T;\n}\n\nexport interface AddressData {\n address_components: AddressComponent[];\n formatted_address: string;\n geometry: AddressGeometry;\n name?: string;\n place_id: string;\n radius?: AddressRadius;\n types?: string[];\n}\n\nexport interface AddressRadius {\n value: number;\n units: AddressRadiusUnitsName;\n}\n\nexport interface AddressComponent {\n long_name: string;\n short_name: string;\n types: string[];\n}\n\nexport interface AddressGeometry {\n location: AddressGeometryLocation;\n viewport: AddressGeometryViewport;\n}\n\nexport interface AddressGeometryLocation {\n lat: number;\n lng: number;\n}\n\nexport interface AddressGeometryViewport {\n north: number;\n south: number;\n east: number;\n west: number;\n}\n\nexport enum RadiusUnits {\n miles = 'miles',\n km = 'km',\n}\n\nexport type AddressRadiusUnitsName = keyof typeof RadiusUnits;\n\n/** All options that can be used to override the defaults for the address criteria */\nexport type AddressCriteriaConfig = {\n radiusEnabled?: boolean;\n radiusUnits?: AddressRadiusUnitsName;\n}\n\n/** Interface used to provide an outlet for rows to be inserted into. */\nexport interface QueryFilterOutlet {\n viewContainer: ViewContainerRef;\n}\n","import { computed, Injectable, signal } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { BaseConditionFieldDef } from './query-builder.directives';\nimport { BaseFieldDef, Conjunction, FieldConfig } from './query-builder.types';\n\nexport const defaultEditTypeFn = (field: BaseFieldDef) => {\n return field.inputType || field.dataType || field.type;\n};\n\nexport interface QueryBuilderConfig {\n fields: FieldConfig<BaseFieldDef>[];\n staticFieldSelection?: string;\n}\n\n@Injectable()\nexport class QueryBuilderService {\n private _customFieldDefs = new Set<BaseConditionFieldDef>();\n private _fieldDefsByName = new Map<string, BaseConditionFieldDef>();\n public scopes = signal([]);\n public hasMultipleScopes = computed(() => this.scopes()?.length > 1);\n /**\n * Will dispatch when properties changes, subscribe to this if component should\n * re-render when props are updated\n */\n readonly stateChanges: Subject<void> = new Subject<void>();\n\n /**\n * Function to determine operator and input templates for a field. Value passed\n * through the criteria builder Input.\n */\n public get editTypeFn(): (field: BaseFieldDef) => string {\n return this._editTypeFn;\n }\n public set editTypeFn(value: (field: BaseFieldDef) => string) {\n this._editTypeFn = value ?? defaultEditTypeFn;\n this.stateChanges.next();\n }\n private _editTypeFn: (field: BaseFieldDef) => string = defaultEditTypeFn;\n\n /**\n * The field configuration to control which types of fields are available to select\n * within the Condition Builder.\n */\n public get config(): QueryBuilderConfig {\n return this._config;\n }\n public set config(value: QueryBuilderConfig) {\n this._config = value;\n this.stateChanges.next();\n }\n private _config: QueryBuilderConfig = {\n fields: [],\n staticFieldSelection: null\n };\n\n /**\n * The configuration to control which types of conjuntions can be used in the query builder.\n * Value passed through the criteria builder Input\n * eg. and, or, not\n */\n public get allowedGroupings(): Conjunction[] {\n return this._allowedGroupings;\n }\n public set allowedGroupings(value: Conjunction[]) {\n this._allowedGroupings = value;\n this.stateChanges.next();\n }\n private _allowedGroupings: Conjunction[];\n\n public componentHost: any;\n\n constructor(private labels: NovoLabelService) {}\n\n /** Adds a field definition that was not included as part of the content children. */\n registerFieldDef(fieldDef: BaseConditionFieldDef) {\n this._customFieldDefs.add(fieldDef);\n this._fieldDefsByName.set(fieldDef.name, fieldDef);\n }\n\n /** Removes a field definition that was not included as part of the content children. */\n unregisterFieldDef(fieldDef: BaseConditionFieldDef) {\n this._customFieldDefs.delete(fieldDef);\n this._fieldDefsByName.delete(fieldDef.name);\n }\n\n getFieldDefsByName() {\n return this._fieldDefsByName;\n }\n\n getConjunctionLabel(conjunction: string) {\n switch (conjunction.replace('$', '').toLowerCase()) {\n case Conjunction.OR:\n return this.labels.or;\n case Conjunction.NOT:\n return this.labels.not;\n case Conjunction.AND:\n default:\n return this.labels.and;\n }\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const NOVO_QUERY_BUILDER = new InjectionToken<any>('NOVO_QUERY_BUILDER');\nexport const NOVO_CRITERIA_BUILDER = new InjectionToken<any>('NOVO_CRITERIA_BUILDER');\nexport const NOVO_CONDITION_BUILDER = new InjectionToken<any>('NOVO_CONDITION_BUILDER');\n","import { ContentChild, Directive, Input, TemplateRef } from '@angular/core';\nimport { QueryBuilderService } from './query-builder.service';\n\n/** Base interface for a condidation template directives. */\nexport interface ConditionDef {\n template: TemplateRef<any>;\n}\n\n/**\n * Contained within a novoConditionField definition describing what input should be\n * used to capture the compare value of the Condtion\n */\n@Directive({ selector: '[novoConditionInputDef]' })\nexport class NovoConditionInputDef implements ConditionDef {\n constructor(/** @docs-private */ public template: TemplateRef<any>) {}\n}\n\n/**\n * Contained within a novoConditionField definition describing what operators should be available.\n */\n@Directive({ selector: '[novoConditionOperatorsDef]' })\nexport class NovoConditionOperatorsDef implements ConditionDef {\n constructor(/** @docs-private */ public template: TemplateRef<any>) {}\n}\n\n/**\n * Field Field definition for the QueryBuilder.\n * Defines the inputType and operators to use for the query builder.\n */\n@Directive()\nexport class BaseConditionFieldDef {\n /** Unique name for this field. */\n @Input('novoFilterFieldDef')\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._setNameInput(name);\n }\n protected _name: string;\n\n @ContentChild(NovoConditionInputDef) fieldInput: NovoConditionInputDef;\n @ContentChild(NovoConditionOperatorsDef) fieldOperators: NovoConditionOperatorsDef;\n\n /**\n * Transformed version of the column name that can be used as part of a CSS classname. Excludes\n * all non-alphanumeric characters and the special characters '-' and '_'. Any characters that\n * do not match are replaced by the '-' character.\n */\n cssClassFriendlyName: string;\n _fieldCssClassName: string[];\n\n defaultOperator: string;\n\n constructor() {}\n\n /**\n * Overridable method that sets the css classes that will be added to every cell in this\n * column.\n * In the future, columnCssClassName will change from type string[] to string and this\n * will set a single string value.\n * @docs-private\n */\n protected _updateFieldCssClassName() {\n this._fieldCssClassName = [`novo-filter-field-${this.cssClassFriendlyName}`];\n }\n\n protected _setNameInput(value: string) {\n // If the directive is set without a name (updated programmatically), then this setter will\n // trigger with an empty string and should not overwrite the programmatically set value.\n if (value) {\n this._name = value;\n this.cssClassFriendlyName = value.replace(/[^a-z0-9_-]/gi, '-');\n this._updateFieldCssClassName();\n }\n }\n}\n\n@Directive({\n selector: '[novoConditionFieldDef]',\n})\nexport class NovoConditionFieldDef extends BaseConditionFieldDef {\n constructor(private qbs: QueryBuilderService) {\n super();\n }\n register() {\n this.qbs.registerFieldDef(this);\n }\n unregister() {\n this.qbs.unregisterFieldDef(this);\n }\n}\n","import { AfterViewInit, Directive, Input, OnDestroy, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/core';\nimport { FormControlDirective, FormControlName, UntypedFormGroup } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { NovoConditionFieldDef, NovoConditionOperatorsDef } from '../query-builder.directives';\nimport { Operator } from '../query-builder.types';\n\n@Directive()\nexport abstract class AbstractConditionFieldDef implements OnDestroy, OnInit, AfterViewInit {\n /** Column name that should be used to reference this column. */\n @Input()\n get name(): string {\n return this._name;\n }\n set name(name: string) {\n this._name = name;\n // With Ivy, inputs can be initialized before static query results are\n // available. In that case, we defer the synchronization until \"ngOnInit\" fires.\n this._syncFieldDefName();\n }\n _name: string;\n\n defaultOperator: Operator | string;\n protected _previousOperatorValue: Operator;\n\n protected operatorEditGroups: Set<Operator>[] = [];\n\n @ViewChild(NovoConditionFieldDef, { static: true }) fieldDef: NovoConditionFieldDef;\n @ViewChildren(FormControlName) formControlsByName: QueryList<FormControlName>;\n\n constructor(public labels: NovoLabelService) {}\n\n ngOnInit() {\n this._syncFieldDefName();\n this._syncFieldDefOperatorValue();\n this._previousOperatorValue = this.defaultOperator as Operator;\n // Need to add self to FilterBuilder because \"ContentChildren won't find it\"\n this.fieldDef?.register();\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n this.frameAfterViewInit();\n });\n }\n\n frameAfterViewInit() {\n const operatorField = this.formControlsByName.find(formControlDirective => formControlDirective.name === 'operator')?.control;\n if (operatorField) {\n this._previousOperatorValue = operatorField.value;\n }\n }\n\n ngOnDestroy() {\n this.fieldDef?.unregister();\n }\n\n /**\n * Define an edit group of operators. Once defined, if the user switches from one of these operators to another,\n * then the condition value will not be cleared. This makes sense if both operators use the same UI controls for editing.\n * @param operators The set of Operator values intended to share UI controls.\n */\n protected defineOperatorEditGroup(...operators: Operator[]): void {\n this.operatorEditGroups.push(new Set(operators));\n }\n\n onOperatorSelect(formGroup: UntypedFormGroup): void {\n let clearVal = true;\n if (this._previousOperatorValue && this.operatorEditGroups?.length) {\n const previousOperatorGroupIndex = this.operatorEditGroups.findIndex(grp => grp.has(this._previousOperatorValue));\n const newOperatorValue = formGroup.get('operator').getRawValue();\n const newOperatorGroupIndex = this.operatorEditGroups.findIndex(grp => grp.has(newOperatorValue));\n if (previousOperatorGroupIndex !== -1 && newOperatorGroupIndex !== -1 && previousOperatorGroupIndex === newOperatorGroupIndex) {\n clearVal = false;\n }\n }\n this._previousOperatorValue = formGroup.get('operator').value;\n if (clearVal) {\n formGroup.get('value').setValue(null);\n }\n }\n\n /** Synchronizes the column definition name with the text column name. */\n private _syncFieldDefName() {\n if (this.fieldDef) {\n this.fieldDef.name = this.name;\n }\n }\n\n private _syncFieldDefOperatorValue() {\n if (this.fieldDef) {\n this.fieldDef.defaultOperator = this.defaultOperator;\n }\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n input,\n InputSignal,\n OnDestroy,\n QueryList,\n Signal,\n signal,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n WritableSignal\n} from '@angular/core';\nimport { AbstractControl, UntypedFormGroup } from '@angular/forms';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { PlacesListComponent } from 'novo-elements/elements/places';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers, Key } from 'novo-elements/utils';\nimport { Subscription } from 'rxjs';\nimport { AddressCriteriaConfig, AddressData, AddressRadius, AddressRadiusUnitsName, Operator, RadiusUnits } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { NovoSelectElement } from 'novo-elements/elements/select';\n\n/**\n * Handle selection of field values when a list of options is provided.\n */\n@Component({\n selector: 'novo-address-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"radius\" *ngIf=\"radiusEnabled()\">{{ labels.radius }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex; fieldMeta as meta\" [formGroup]=\"formGroup\">\n <novo-flex justify=\"space-between\" align=\"end\">\n <novo-field #novoRadiusField *ngIf=\"formGroup.value.operator === 'radius'\" class=\"address-radius\">\n <novo-select\n #radiusSelect [placeholder]=\"labels.radius\"\n (onSelect)=\"onRadiusSelect(formGroup, $event.selected)\"\n [value]=\"radius()\"\n [options]=\"radiusOptions()\">\n </novo-select>\n </novo-field>\n <novo-field #novoField class=\"address-location\">\n <novo-chip-list [(ngModel)]=\"chipListModel\" [ngModelOptions]=\"{ standalone: true }\" (click)=\"openPlacesList(viewIndex)\">\n <novo-chip *ngFor=\"let item of formGroup.get('value').value\" (removed)=\"remove(item, formGroup, viewIndex)\">\n <novo-text ellipsis [tooltip]=\"item.formatted_address\" tooltipOnOverflow>{{ item.formatted_address }}</novo-text>\n <novo-icon novoChipRemove>close</novo-icon>\n </novo-chip>\n <input\n novoChipInput\n [id]=\"viewIndex\"\n [placeholder]=\"labels.location\"\n (keyup)=\"onKeyup($event, viewIndex)\"\n (keydown)=\"onKeydown($event, viewIndex)\"\n [picker]=\"placesPicker\"\n #addressInput/>\n </novo-chip-list>\n <novo-picker-toggle [overlayId]=\"viewIndex\" icon=\"location\" novoSuffix>\n <google-places-list\n [term]=\"term\"\n (select)=\"selectPlace($event, formGroup, viewIndex)\"\n formControlName=\"value\"\n #placesPicker/>\n </novo-picker-toggle>\n </novo-field>\n </novo-flex>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultAddressConditionDef extends AbstractConditionFieldDef implements OnDestroy {\n @ViewChildren(NovoPickerToggleElement) overlayChildren: QueryList<NovoPickerToggleElement>;\n @ViewChildren('addressInput') inputChildren: QueryList<ElementRef>;\n @ViewChild('placesPicker') placesPicker: PlacesListComponent;\n @ViewChildren(NovoSelectElement) addressSideTest: any;\n\n // Static defaults\n radiusValues: number[] = [5, 10, 20, 30, 40, 50, 100];\n defaultRadius: number = 30;\n\n // Overridable defaults\n defaults: AddressCriteriaConfig = {\n radiusEnabled: false,\n radiusUnits: 'miles',\n };\n config: InputSignal<AddressCriteriaConfig> = input();\n radiusUnits: Signal<AddressRadiusUnitsName> = computed(() =>\n this.config()?.radiusUnits || this.defaults.radiusUnits\n );\n radiusEnabled: Signal<boolean> = computed(() =>\n this.config()?.radiusEnabled || this.defaults.radiusEnabled\n );\n\n radius: WritableSignal<number> = signal(this.defaultRadius);\n radiusOptions: Signal<{ label: string; value: number; }[]> = computed(() => {\n const unitsLabel = this.radiusUnits() === RadiusUnits.miles ? this.labels.miles : this.labels.km;\n return this.radiusValues.map(value => ({\n label: `${value.toString()} ${unitsLabel}`,\n value,\n }));\n });\n\n defaultOperator = Operator.includeAny;\n chipListModel: any = '';\n term: string = '';\n\n private _addressChangesSubscription: Subscription = Subscription.EMPTY;\n\n public element = inject(ElementRef);\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.excludeAny, Operator.radius);\n }\n\n frameAfterViewInit(): void {\n super.frameAfterViewInit();\n // Initialize the radius value from existing data\n this.assignRadiusFromValue();\n\n // Update the radius on address value changes\n this._addressChangesSubscription = this.inputChildren.changes.subscribe(() => {\n this.assignRadiusFromValue();\n });\n }\n\n ngOnDestroy() {\n this._addressChangesSubscription.unsubscribe();\n }\n\n onKeyup(event, viewIndex) {\n if (![Key.Escape, Key.Enter].includes(event.key)) {\n this.openPlacesList(viewIndex);\n }\n this.term = event.target.value;\n }\n\n onKeydown(event, viewIndex) {\n if (!this.placesPicker.dropdownOpen) {\n this.openPlacesList(viewIndex);\n this.placesPicker.dropdownOpen = true;\n }\n if ([Key.Escape, Key.Tab].includes(event.key)) {\n this.closePlacesList(viewIndex);\n } else {\n this.placesPicker.onKeyDown(event);\n }\n }\n\n getValue(formGroup: AbstractControl): AddressData[] {\n return formGroup.value.value || [];\n }\n\n getCurrentOverlay(viewIndex: string): NovoPickerToggleElement {\n return this.overlayChildren?.find(item => item.overlayId === viewIndex);\n }\n\n getCurrentInput(viewIndex: string): ElementRef {\n return this.inputChildren?.find(item => (item as any).nativeElement.id === viewIndex);\n }\n\n openPlacesList(viewIndex) {\n this.getCurrentOverlay(viewIndex)?.openPanel();\n }\n\n closePlacesList(viewIndex) {\n this.getCurrentOverlay(viewIndex)?.closePanel();\n }\n\n selectPlace(event: any, formGroup: AbstractControl, viewIndex: string): void {\n const valueToAdd: AddressData = {\n address_components: event.address_components,\n formatted_address: event.formatted_address,\n geometry: event.geometry,\n name: event.name,\n place_id: event.place_id,\n types: event.types,\n };\n const current: AddressData | AddressData[] = this.getValue(formGroup);\n const updated: AddressData[] = Array.isArray(current) ? [...current, valueToAdd] : [valueToAdd];\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, updated));\n\n this.inputChildren.forEach(input => {\n input.nativeElement.value = '';\n })\n this.getCurrentInput(viewIndex)?.nativeElement.focus();\n this.closePlacesList(viewIndex);\n }\n\n remove(valueToRemove: AddressData, formGroup: AbstractControl, viewIndex: string): void {\n const current = this.getValue(formGroup);\n const index = current.indexOf(valueToRemove);\n if (index >= 0) {\n const oldValue = [...current]\n oldValue.splice(index, 1);\n formGroup.get('value').setValue(oldValue);\n }\n this.closePlacesList(viewIndex);\n }\n\n // Override abstract behavior - allow moving location from includeAny to radius, but when moving the opposite direction,\n // trim out radius information from the value\n onOperatorSelect(formGroup: UntypedFormGroup): void {\n const previousOperator = this._previousOperatorValue;\n super.onOperatorSelect(formGroup);\n if ([previousOperator, formGroup.get('operator').getRawValue()].indexOf(Operator.radius) !== -1 &&\n formGroup.get('value').getRawValue() != null) {\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, this.getValue(formGroup)));\n }\n }\n\n onRadiusSelect(formGroup: AbstractControl, radius: number): void {\n this.radius.set(radius);\n // We must dirty the form explicitly to show up as a user modification when it was done programmatically\n formGroup.get('value').setValue(this.updateRadiusInValues(formGroup, this.getValue(formGroup)));\n formGroup.markAsDirty();\n }\n\n private assignRadiusFromValue() {\n if (this.placesPicker?.model?.length) {\n const addressData: AddressData = this.placesPicker.model[0];\n const initialRadius = addressData.radius?.value;\n if (initialRadius && Helpers.isNumber(initialRadius)) {\n this.radius.set(initialRadius);\n }\n }\n }\n\n private updateRadiusInValues(formGroup: AbstractControl, values: AddressData[]): AddressData[] {\n return values.map(val => ({\n ...val,\n radius: this.isRadiusOperatorSelected(formGroup) ? this.getRadiusData(formGroup) : undefined,\n }));\n }\n\n private getRadiusData(formGroup: AbstractControl): AddressRadius {\n return {\n value: this.getRadius(formGroup),\n units: this.radiusUnits(),\n };\n }\n\n private getRadius(formGroup: AbstractControl): number | undefined {\n return this.isRadiusOperatorSelected(formGroup) ? this.radius() : undefined;\n }\n\n private isRadiusOperatorSelected(formGroup: AbstractControl): boolean {\n return formGroup.get('operator').value === 'radius';\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * When constructing a query using a field that is a boolean with only true/false as possible values.\n */\n@Component({\n selector: 'novo-boolean-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"include\">{{ labels.equals }}</novo-option>\n <novo-option value=\"exclude\">{{ labels.doesNotEqual }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoConditionInputDef=\"let formGroup\" [style.width.px]=\"125\" [formGroup]=\"formGroup\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ formGroup.value.operator === 'isNull' ? labels.yes : labels.true }}</novo-radio>\n <novo-radio [value]=\"false\">{{ formGroup.value.operator === 'isNull' ? labels.no : labels.false }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultBooleanConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.include;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.include, Operator.exclude, Operator.isNull);\n }\n}\n","import { ChangeDetectionStrategy, Component, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * Most complicated of the default conditions defs, a date needs to provide a different\n * input type depending on the operator selected.\n */\n@Component({\n selector: 'novo-date-condition-def',\n template: `\n <ng-container novoConditionFieldDef=\"DATE\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"before\">{{ labels.before }}</novo-option>\n <novo-option value=\"after\">{{ labels.after }}</novo-option>\n <novo-option value=\"within\">{{ labels.within }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['before', 'after']\">\n <input novoInput dateFormat=\"iso8601\" [picker]=\"datepicker\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker (onSelect)=\"closePanel($event, viewIndex)\" #datepicker></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['between']\">\n <input novoInput dateRangeFormat=\"date\" [picker]=\"daterangepicker\" formControlName=\"value\"/>\n <novo-picker-toggle [for]=\"daterangepicker\" triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker #daterangepicker (onSelect)=\"closePanel($event, viewIndex)\" mode=\"range\" numberOfMonths=\"2\"></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['within']\">\n <novo-select [placeholder]=\"labels.selectDateRange\" formControlName=\"value\">\n <novo-option value=\"7\">{{ labels.next7Days }}</novo-option>\n <novo-option value=\"-7\">{{ labels.past7Days }}</novo-option>\n <novo-option value=\"-30\">{{ labels.past30Days }}</novo-option>\n <novo-option value=\"-90\">{{ labels.past90Days }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultDateConditionDef extends AbstractConditionFieldDef {\n @ViewChildren(NovoPickerToggleElement)\n overlayChildren: QueryList<NovoPickerToggleElement>;\n\n defaultOperator = Operator.within;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.before, Operator.after);\n }\n\n closePanel(event, viewIndex): void {\n const overlay = this.overlayChildren.find(item => item.overlayId === viewIndex);\n overlay.closePanel(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { NovoPickerToggleElement } from 'novo-elements/elements/field';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * Most complicated of the default conditions defs, a date needs to provide a different\n * input type depending on the operator selected.\n */\n@Component({\n selector: 'novo-date-time-condition-def',\n template: `\n <ng-container novoConditionFieldDef=\"DATE\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"before\">{{ labels.before }}</novo-option>\n <novo-option value=\"after\">{{ labels.after }}</novo-option>\n <novo-option value=\"within\">{{ labels.within }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; viewIndex as viewIndex\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['after']\">\n <input novoInput dateTimeFormat=\"iso8601\" [picker]=\"datetimepicker\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [width]=\"-1\" [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-time-picker defaultTime=\"end\" (onSelect)=\"closePanel($event, viewIndex)\" #datetimepicker></novo-date-time-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['before']\">\n <input novoInput dateTimeFormat=\"iso8601\" [picker]=\"datetimepickerbefore\" formControlName=\"value\"/>\n <novo-picker-toggle triggerOnFocus [width]=\"-1\" [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-time-picker defaultTime=\"start\" (onSelect)=\"closePanel($event, viewIndex)\" #datetimepickerbefore></novo-date-time-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['between']\">\n <input novoInput dateRangeFormat=\"date\" [picker]=\"daterangepicker\" formControlName=\"value\"/>\n <novo-picker-toggle [for]=\"daterangepicker\" triggerOnFocus [overlayId]=\"viewIndex\" novoSuffix icon=\"calendar\">\n <novo-date-picker #daterangepicker (onSelect)=\"closePanel($event, viewIndex)\" mode=\"range\" numberOfMonths=\"2\"></novo-date-picker>\n </novo-picker-toggle>\n </novo-field>\n <novo-field *novoSwitchCases=\"['within']\">\n <novo-select [placeholder]=\"labels.selectDateRange\" formControlName=\"value\">\n <novo-option value=\"7\">{{ labels.next7Days }}</novo-option>\n <novo-option value=\"-7\">{{ labels.past7Days }}</novo-option>\n <novo-option value=\"-30\">{{ labels.past30Days }}</novo-option>\n <novo-option value=\"-90\">{{ labels.past90Days }}</novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultDateTimeConditionDef extends AbstractConditionFieldDef {\n @ViewChildren(NovoPickerToggleElement)\n overlayChildren: QueryList<NovoPickerToggleElement>;\n\n defaultOperator = Operator.within;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.before, Operator.after);\n }\n\n closePanel(event, viewIndex): void {\n const overlay = this.overlayChildren.find(item => item.overlayId === viewIndex);\n overlay.closePanel(event);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractControl } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Operator } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\n\n/**\n * Constructing filters against String fields can be complex. Each \"chip\" added to the\n * condition can be independently used to query a database. Not all systems support\n * querying within a text column, ie sql unless LIKE is enabled. This could result in a\n * performance penalty.\n */\n@Component({\n selector: 'novo-string-condition-def',\n template: `\n <!-- fieldTypes should be UPPERCASE -->\n <ng-container novoConditionFieldDef=\"STRING\">\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"includeAll\">{{ labels.includeAll }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"isEmpty\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['includeAny', 'includeAll', 'excludeAny']\">\n <novo-chip-list #chipList aria-label=\"filter value\" formControlName=\"value\">\n <novo-chip *ngFor=\"let chip of formGroup.value?.value || []\" [value]=\"chip\" (removed)=\"remove(chip, formGroup)\">\n <novo-text ellipsis [tooltip]=\"chip\" tooltipOnOverflow>{{ chip }}</novo-text>\n <novo-icon novoChipRemove>close</novo-icon>\n </novo-chip>\n <input\n novoChipInput\n [placeholder]=\"labels.typeToAddChips\"\n autocomplete=\"off\"\n (novoChipInputTokenEnd)=\"add($event, formGroup)\"\n />\n </novo-chip-list>\n <novo-autocomplete></novo-autocomplete>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isEmpty']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n // Change detection is intentionally not set to OnPush. This component's template will be provided\n // to the table to be inserted into its view. This is problematic when change detection runs since\n // the bindings in this template will be evaluated _after_ the table's view is evaluated, which\n // means the template in the table's view will not have the updated value (and in fact will cause\n // an ExpressionChangedAfterItHasBeenCheckedError).\n // tslint:disable-next-line:validate-decorators\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultStringConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.includeAny;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.includeAll, Operator.excludeAny);\n }\n\n getValue(formGroup: AbstractControl): any[] {\n return formGroup.value?.value || [];\n }\n\n add(event: any, formGroup: AbstractControl): void {\n const input = event.input;\n input.value = '';\n const valueToAdd = event.value;\n if (valueToAdd !== '') {\n const current: any[] = this.getValue(formGroup);\n const newValue: any[] = Array.isArray(current) ? [...current, valueToAdd] : [valueToAdd];\n this.setFormValue(formGroup, newValue);\n }\n }\n\n remove(valueToRemove: string, formGroup: AbstractControl): void {\n const current = this.getValue(formGroup);\n const index = current.indexOf(valueToRemove);\n if (index >= 0) {\n const value = [...current]\n value.splice(index, 1);\n this.setFormValue(formGroup, value);\n }\n }\n\n private setFormValue(formGroup: AbstractControl, newValue: any[]) {\n formGroup.get('value').setValue(newValue);\n formGroup.markAsDirty();\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\n/**\n * When constructing a query using a field that is an Int, Double, Number ...etc.\n * TODO: Do we implement currency formation here potentially?\n */\n@Component({\n selector: 'novo-number-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"greaterThan\">{{ labels.greaterThan }}</novo-option>\n <novo-option value=\"lessThan\">{{ labels.lessThan }}</novo-option>\n <novo-option value=\"equalTo\">{{ labels.equalTo }}</novo-option>\n <novo-option value=\"between\">{{ labels.between }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['greaterThan', 'lessThan', 'equalTo']\">\n <input novoInput type=\"number\" formControlName=\"value\"/>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n <ng-container *novoSwitchCases=\"['between']\">\n <novo-number-range formControlName=\"value\"/>\n </ng-container>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultNumberConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.equalTo;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.greaterThan, Operator.lessThan, Operator.equalTo);\n }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\nimport { Operator } from '../query-builder.types';\n\n/**\n * Any condition that has a type of ID usually only is queried by ID.\n */\n@Component({\n selector: 'novo-id-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\">\n <novo-option value=\"equalTo\">{{ labels.equalTo }}</novo-option>\n <ng-content></ng-content>\n </novo-select>\n </novo-field>\n <novo-field *novoConditionInputDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <input novoInput type=\"number\" min=\"1\" step=\"1\" formControlName=\"value\" />\n </novo-field>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultIdConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.equalTo;\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Operator } from '../query-builder.types';\nimport { AbstractConditionFieldDef } from './abstract-condition.definition';\n\n/**\n * Handle selection of field values when a list of options is provided.\n */\n@Component({\n selector: 'novo-picker-condition-def',\n template: `\n <ng-container novoConditionFieldDef>\n <novo-field *novoConditionOperatorsDef=\"let formGroup\" [formGroup]=\"formGroup\">\n <novo-select [placeholder]=\"labels.operator\" formControlName=\"operator\" (onSelect)=\"onOperatorSelect(formGroup)\">\n <novo-option value=\"includeAny\">{{ labels.includeAny }}</novo-option>\n <novo-option value=\"includeAll\">{{ labels.includeAll }}</novo-option>\n <novo-option value=\"excludeAny\">{{ labels.exclude }}</novo-option>\n <novo-option value=\"isNull\">{{ labels.isEmpty }}</novo-option>\n </novo-select>\n </novo-field>\n <ng-container *novoConditionInputDef=\"let formGroup; fieldMeta as meta\" [ngSwitch]=\"formGroup.value.operator\" [formGroup]=\"formGroup\">\n <novo-field *novoSwitchCases=\"['includeAny', 'includeAll', 'excludeAny']\">\n <novo-select extupdatefix formControlName=\"value\" [placeholder]=\"labels.select\" [multiple]=\"true\">\n <!-- WHat about optionUrl/optionType -->\n <novo-option *ngFor=\"let option of meta?.options\" [value]=\"option.value\" [attr.data-automation-value]=\"option.label\">\n {{ option.label }}\n </novo-option>\n </novo-select>\n </novo-field>\n <novo-field *novoSwitchCases=\"['isNull']\">\n <novo-radio-group formControlName=\"value\">\n <novo-radio [value]=\"true\">{{ labels.yes }}</novo-radio>\n <novo-radio [value]=\"false\">{{ labels.no }}</novo-radio>\n </novo-radio-group>\n </novo-field>\n </ng-container>\n </ng-container>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.Default,\n})\nexport class NovoDefaultPickerConditionDef extends AbstractConditionFieldDef {\n defaultOperator = Operator.includeAny;\n\n constructor(labelService: NovoLabelService) {\n super(labelService);\n this.defineOperatorEditGroup(Operator.includeAny, Operator.includeAll, Operator.excludeAny);\n }\n}\n","import { Component, Input } from '@angular/core';\nimport { AddressCriteriaConfig } from '../query-builder.types';\n\n@Component({\n selector: 'novo-condition-templates',\n templateUrl: './condition-templates.component.html'\n})\nexport class NovoConditionTemplatesComponent {\n @Input() addressConfig: AddressCriteriaConfig;\n}\n","<novo-id-condition-def name=\"ID\"/>\n<novo-date-condition-def name=\"DATE\"/>\n<novo-date-time-condition-def name=\"TIMESTAMP\"/>\n<novo-string-condition-def name=\"STRING\"/>\n<novo-number-condition-def name=\"FLOAT\"/>\n<novo-number-condition-def name=\"INTEGER\"/>\n<novo-number-condition-def name=\"BIGDECIMAL\"/>\n<novo-number-condition-def name=\"DOUBLE\"/>\n<novo-address-condition-def name=\"ADDRESS\" [config]=\"addressConfig\"/>\n<novo-boolean-condition-def name=\"BOOLEAN\"/>\n<novo-picker-condition-def name=\"SELECT\"/>\n<novo-string-condition-def name=\"DEFAULT\"/>\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n Directive,\n ElementRef,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n SimpleChanges,\n SkipSelf,\n ViewChild,\n ViewContainerRef,\n computed,\n input\n} from '@angular/core';\nimport { ControlContainer, FormControl, FormGroup } from '@angular/forms';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Subject, Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { BaseConditionFieldDef } from '../query-builder.directives';\nimport { QueryBuilderConfig, QueryBuilderService } from '../query-builder.service';\nimport { NOVO_CONDITION_BUILDER } from '../query-builder.tokens';\nimport { AddressCriteriaConfig, BaseFieldDef, FieldConfig, QueryFilterOutlet } from '../query-builder.types';\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\n@Directive({ selector: '[conditionInputOutlet]' })\nexport class ConditionInputOutlet implements QueryFilterOutlet {\n constructor(public viewContainer: ViewContainerRef, public elementRef: ElementRef) {}\n}\n\n/**\n * Provides a handle for the table to grab the view container's ng-container to insert data rows.\n * @docs-private\n */\n@Directive({ selector: '[conditionOperatorOutlet]' })\nexport class ConditionOperatorOutlet implements QueryFilterOutlet {\n constructor(public viewContainer: ViewContainerRef, public elementRef: ElementRef) {}\n}\n\n@Component({\n selector: 'novo-condition-builder',\n templateUrl: './condition-builder.component.html',\n styleUrls: ['./condition-builder.component.scss'],\n providers: [{ provide: NOVO_CONDITION_BUILDER, useExisting: ConditionBuilderComponent },\n {\n provide: QueryBuilderService,\n deps: [NovoLabelService, [new SkipSelf(), new Optional(), QueryBuilderService]],\n useFactory: (labelService: NovoLabelService, queryBuilderService?: QueryBuilderService) => {\n if (!queryBuilderService) {\n queryBuilderService = new QueryBuilderService(labelService);\n }\n return queryBuilderService;\n }\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ConditionBuilderComponent implements OnInit, OnChanges, AfterContentInit, AfterViewInit, OnDestroy {\n @ViewChild(ConditionOperatorOutlet, { static: true }) _operatorOutlet: ConditionOperatorOutlet;\n @ViewChild(ConditionInputOutlet, { static: true }) _inputOutlet: ConditionInputOutlet;\n\n @Input() label: any;\n @Input() scope: string;\n @Input() andIndex: number;\n @Input() groupIndex: number;\n @Input() addressConfig: AddressCriteriaConfig;\n hideOperator = input(true);\n conditionType = input();\n\n // This component can either be directly hosted as a host to a condition, or it can be part of a condition group within a criteria builder.\n // In the former case, config will come from inputs, and we will instantiate our own QueryBuilderService. In the latter, it comes from\n // the QueryBuilderService.\n inputConfig = input<QueryBuilderConfig>(null, { alias: 'config'});\n inputEditTypeFn = input<(field: BaseFieldDef) => string>(null, { alias: 'editTypeFn'});\n private config = computed<QueryBuilderConfig>(() => {\n if (this.isConditionHost) {\n this.queryBuilderService.config = this.inputConfig();\n }\n return this.queryBuilderService.config;\n });\n private editTypeFn = computed<(field: BaseFieldDef) => string>(() => {\n if (this.isConditionHost) {\n this.queryBuilderService.editTypeFn = this.inputEditTypeFn();\n }\n return this.queryBuilderService.editTypeFn;\n });\n\n public parentForm: FormGroup;\n public fieldConfig: FieldConfig<BaseFieldDef>;\n public searches!: Subscription;\n public results$: Promise<any[]>;\n public searchTerm: FormControl = new FormControl();\n public fieldDisplayWith;\n public displayIcon: string;\n\n public staticFieldSelection = computed(() => this.config().staticFieldSelection);\n private _lastContext: any = {};\n @HostBinding('class.condition-host')\n public isConditionHost = false;\n\n public gridColumns = computed(() => {\n if (this.staticFieldSelection()) {\n return '13rem 1fr';\n } else {\n const firstColumnWidth = this.hideOperator() ? '20rem' : '16rem';\n return `${firstColumnWidth} 13rem 1fr`;\n }\n });\n\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n public labels: NovoLabelService,\n private cdr: ChangeDetectorRef,\n private queryBuilderService: QueryBuilderService,\n private controlContainer: ControlContainer,\n ) {\n if (!queryBuilderService.componentHost) {\n queryBuilderService.componentHost = this;\n this.isConditionHost = true;\n this.groupIndex = 0;\n this.andIndex = 0;\n }\n }\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as FormGroup;\n this.parentForm.controls.field.valueChanges.subscribe((value) => {\n Promise.resolve().then(() => this.updateFieldSelection());\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.inputConfig?.previousValue?.staticFieldSelection &&\n changes.inputConfig.previousValue.staticFieldSelection !== changes.inputConfig.currentValue.staticFieldSelection) {\n this.parentForm.controls.field.setValue(changes.inputConfig.currentValue.staticFieldSelection);\n }\n }\n\n ngAfterContentInit() {\n const allFields = this.config()?.fields || [];\n const scopedFields = this.scope ? allFields.find((field) => field.value === this.scope) : allFields[0];\n allFields.length && this.changeFieldOptions(scopedFields);\n this.searches = this.searchTerm.valueChanges.pipe(debounceTime(300), distinctUntilChanged()).subscribe((term) => {\n this.results$ = Promise.resolve(\n this.fieldConfig.options.filter(\n (f) => f.name.toLowerCase().includes(term.toLowerCase()) || f.label?.toLowerCase().includes(term.toLowerCase()),\n ),\n );\n this.cdr.markForCheck();\n });\n }\n\n ngAfterViewInit() {\n if (this.parentForm.value?.field !== null) {\n Promise.resolve().then(() => this.updateFieldSelection());\n }\n }\n\n ngOnDestroy() {\n this.searches.unsubscribe();\n // Clear all outlets and Maps\n [this._operatorOutlet.viewContainer, this._inputOutlet.viewContainer].forEach((def) => {\n def.clear();\n });\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n /**\n * Updates the Conditions \"Field\" Options to Change base on new Scope\n * @param fieldConfig\n */\n changeFieldOptions(fieldConfig: FieldConfig<BaseFieldDef>) {\n this.fieldConfig = fieldConfig;\n this.searchTerm.setValue('');\n this.results$ = Promise.resolve(this.fieldConfig.options);\n }\n\n /**\n * Resets the input and operator view containers, regenerates the field templates,\n * and marks the component for change detection.\n *\n * Use this method after updating form controls to reinitialize the input and\n * operator fields so that the view reflects the latest form control changes.\n *\n * @returns void\n */\n resetInputAndOperator(): void {\n this._inputOutlet.viewContainer.clear();\n this._operatorOutlet.viewContainer.clear();\n this.createFieldTemplates();\n this.cdr.markForCheck();\n }\n\n getField() {\n const field = this.parentForm?.value?.field;\n if (!field) return null;\n return this.fieldConfig.find(field);\n }\n\n getDefaultField() {\n const fields = this.fieldConfig.options;\n if (fields?.length) {\n return fields[0].name;\n }\n return null;\n }\n\n updateFieldSelection() {\n const fieldConf = this.getField();\n if (!fieldConf) {\n this.parentForm.get('field').setValue(this.getDefaultField());\n return;\n } else {\n this.fieldDisplayWith = () => fieldConf.label || fieldConf.name;\n this.displayIcon = fieldConf.icon || null;\n }\n const { field } = this.parentForm.value;\n\n if (this._lastContext.field !== field) {\n if (this._lastContext.field) {\n // only clearing operator/value if field was previously defined so we can preload values onto the form\n this.parentForm.get('value').setValue(null);\n this.parentForm.get('operator').setValue(null);\n }\n this.createFieldTemplates();\n }\n setTimeout(() => this.updateConditionType());\n\n this._lastContext = { ...this.parentForm.value };\n this.cdr.markForCheck();\n }\n\n updateConditionType() {\n this.parentForm.get('conditionType')?.setValue(this.conditionType());\n }\n\n private findDefinitionForField(field) {\n if (!field) return;\n const editType = this.editTypeFn()(field);\n // Don't look at dataSpecialization it is no good, this misses currency, and percent\n const { name } = field;\n const fieldDefsByName = this.queryBuilderService.getFieldDefsByName();\n // Check Fields by priority for match Field Definition\n const key = [name, editType?.toUpperCase(), 'DEFAULT'].find((it) => fieldDefsByName.has(it));\n return fieldDefsByName.get(key);\n }\n\n private createFieldTemplates() {\n const definition = this.findDefinitionForField(this.getField());\n\n if (!this.parentForm.get('operator').value) {\n this.parentForm.get('operator').setValue(definition.defaultOperator);\n }\n\n this.createFieldOperators(definition);\n this.createFieldInput(definition);\n }\n\n private createFieldOperators(definition: BaseConditionFieldDef) {\n this._operatorOutlet.viewContainer.clear();\n if (definition) {\n const context = { $implicit: this.parentForm, fieldMeta: this.getField() };\n this._operatorOutlet.viewContainer.createEmbeddedView(definition.fieldOperators.template, context);\n }\n this.cdr.markForCheck();\n }\n\n private createFieldInput(definition: BaseConditionFieldDef) {\n this._inputOutlet.viewContainer.clear();\n if (definition) {\n const context = { $implicit: this.parentForm, fieldMeta: this.getField(), viewIndex: this.groupIndex.toString() + this.andIndex.toString() };\n this._inputOutlet.viewContainer.createEmbeddedView(definition.fieldInput.template, context);\n }\n this.cdr.markForCheck();\n }\n}\n","<form [formGroup]=\"parentForm\">\n <novo-grid gap=\"1rem\" [columns]=\"gridColumns()\" align=\"end\">\n <novo-field class=\"condition-field\" *ngIf=\"!staticFieldSelection()\">\n <novo-select\n [placeholder]=\"labels.chooseAField\"\n formControlName=\"field\"\n (onSelect)=\"updateFieldSelection()\"\n overlayWidth=\"24rem\"\n overlayHeight=\"20rem\"\n [displayWith]=\"fieldDisplayWith\"\n [style.minWidth.px]=\"160\"\n [style.maxWidth.px]=\"(hideOperator() || isConditionHost) ? 200 : 160\"\n [displayIcon]=\"displayIcon\">\n <novo-optgroup class=\"filter-search-results\">\n <novo-option>\n <novo-select-search [formControl]=\"searchTerm\" [clearSearchInput]=\"false\"></novo-select-search>\n </novo-option>\n <ng-container *ngIf=\"results$ | async as results; else loading\">\n <ng-container *ngIf=\"results.length\">\n <novo-option *ngFor=\"let field of results\" value=\"{{ field.name }}\"\n [attr.data-automation-id]=\"field.name\">\n {{ field.label || field.name }}\n </novo-option>\n </ng-container>\n </ng-container>\n </novo-optgroup>\n </novo-select>\n </novo-field>\n\n <div class=\"condition-operator\">\n <ng-container conditionOperatorOutlet></ng-container>\n </div>\n\n <div class=\"condition-input\">\n <ng-container conditionInputOutlet></ng-container>\n </div>\n </novo-grid>\n <ng-content></ng-content>\n</form>\n\n<novo-condition-templates *ngIf=\"isConditionHost\" [addressConfig]=\"addressConfig\"/>\n\n<!-- LOADING TEMPLATE -->\n<ng-template #loading>\n <novo-loading></novo-loading>\n</ng-template>\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ControlContainer, FormArray, FormBuilder, UntypedFormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';\nimport { merge, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { QueryBuilderService } from '../query-builder.service';\nimport { Condition, Conjunction } from '../query-builder.types';\nimport { NovoLabelService } from 'novo-elements/services';\n\nconst EMPTY_CONDITION: Condition = {\n conditionType: '$and',\n field: null,\n operator: null,\n scope: null,\n value: null,\n};\n@Component({\n selector: 'novo-condition-group',\n templateUrl: './condition-group.component.html',\n styleUrls: ['./condition-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ConditionGroupComponent), multi: true }],\n host: {\n class: 'novo-condition-group',\n },\n})\nexport class ConditionGroupComponent implements OnInit, OnDestroy {\n @Input() controlName: string = '$' + Conjunction.AND;\n @Input() groupIndex: number;\n @Input() hideFirstOperator: boolean = true;\n @Input() canBeEmpty: boolean = false;\n @Input() formGroupName: any;\n\n public scope: string;\n public parentForm: UntypedFormGroup;\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n public qbs: QueryBuilderService,\n public labels: NovoLabelService,\n private controlContainer: ControlContainer,\n private formBuilder: FormBuilder,\n private cdr: ChangeDetectorRef,\n ) {}\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as UntypedFormGroup;\n this.controlName = Object.keys(this.parentForm.controls)[0];\n this.updateGroupScope();\n merge(this.parentForm.parent.valueChanges, this.qbs.stateChanges)\n .pipe(takeUntil(this._onDestroy))\n .subscribe(() => this.cdr.markForCheck());\n }\n\n ngOnChanges() {\n this.updateGroupScope();\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n updateGroupScope() {\n if (this.parentForm && this.controlName) {\n this.scope = this.parentForm.value[this.controlName][0]?.scope || this.qbs.scopes()[0];\n }\n }\n\n updateControlName(value: string) {\n const name = `$${value.replace('$', '')}`;\n if (name !== this.controlName) {\n const current = this.parentForm.get(this.controlName).value;\n this.parentForm.controls[name] = this.parentForm.controls[this.controlName];\n delete this.parentForm.controls[this.controlName];\n this.controlName = name;\n // scrub properties not on control\n const currentStrict = current.map((item) => (({ conditionType, field, operator, scope, value, ...rest }) => ({ conditionType, field, operator, scope, value }))(item));\n this.parentForm.get(this.controlName)?.setValue(currentStrict);\n this.cdr.markForCheck();\n }\n }\n\n get root(): FormArray {\n return this.parentForm.get(this.controlName) as FormArray;\n }\n\n addCondition(data?: any) {\n const condition = this.newCondition(data);\n const onlyConditionIsEmpty = JSON.stringify(this.root.value) === JSON.stringify([EMPTY_CONDITION]);\n this.root.push(condition);\n this.qbs.hasMultipleScopes() && onlyConditionIsEmpty && this.removeCondition(0);\n this.cdr.markForCheck();\n }\n\n removeCondition(index: number) {\n const isPrimaryScope = this.scope === this.qbs.scopes()[0];\n const lastRowInGroup = this.root.length === 1;\n const lastRowInQueryBuilder = this.cantRemoveRow();\n this.root.removeAt(index);\n if ((lastRowInQueryBuilder || (lastRowInGroup && isPrimaryScope)) && !this.canBeEmpty) {\n this.addCondition();\n }\n this.cdr.markForCheck();\n }\n\n newCondition({ field, operator, scope, value }: Condition = EMPTY_CONDITION): UntypedFormGroup {\n return this.formBuilder.group({\n conditionType: '$and',\n field: [field, Validators.required],\n operator: [operator, Validators.required],\n scope: [scope],\n value: [value],\n });\n }\n\n cantRemoveRow() {\n if ((this.parentForm.parent as FormArray).length > 1) {\n return false;\n }\n return this.root.length <= 1;\n }\n}\n","<div [formGroup]=\"parentForm\" class=\"condition-group-container\">\n <novo-stack [formArrayName]=\"controlName\" gap=\"md\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLast = last;\">\n <ng-container [formGroupName]=\"andIndex\">\n <novo-flex class=\"condition-row\" [ngClass]=\"{ isFirst: andIndex === 0 }\" [class]=\"scope\" align=\"end\" gap=\"sm\" #flex>\n <novo-dropdown *ngIf=\"(!isFirst || !hideFirstOperator) && qbs.allowedGroupings.length > 1; else labeledGroup\">\n <button theme=\"dialogue\" icon=\"collapse\" size=\"sm\">{{qbs.getConjunctionLabel(controlName)}}</button>\n <novo-optgroup>\n <novo-option *ngFor=\"let c of qbs.allowedGroupings\" (click)=\"updateControlName(c)\">\n {{qbs.getConjunctionLabel(c)}}</novo-option>\n </novo-optgroup>\n </novo-dropdown>\n <ng-template #labeledGroup>\n <novo-label *ngIf=\"!isFirst || !hideFirstOperator\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">\n {{qbs.getConjunctionLabel(controlName)}}</novo-label>\n </ng-template>\n <novo-condition-builder [groupIndex]=\"groupIndex\" [andIndex]=\"andIndex\" [hideOperator]=\"isFirst && hideFirstOperator\" [scope]=\"scope\" [conditionType]=\"controlName\"></novo-condition-builder>\n <novo-button theme=\"icon\" icon=\"delete-o\" color=\"negative\" (click)=\"removeCondition(andIndex)\">\n </novo-button>\n </novo-flex>\n </ng-container>\n </ng-container>\n <button\n *ngIf=\"!qbs.hasMultipleScopes()\"\n theme=\"dialogue\"\n data-automation-id=\"add-advanced-search-condition\"\n icon=\"add-thin\"\n side=\"left\"\n size=\"sm\"\n uppercase\n (click)=\"addCondition()\">\n {{ labels.addCondition }}</button>\n </novo-stack>\n</div>\n","import {\n AfterContentChecked,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n computed,\n ContentChildren,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n QueryList,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport { ControlContainer, FormArray, FormBuilder, NG_VALUE_ACCESSOR, UntypedFormGroup, Validators } from '@angular/forms';\nimport { interval, Subject } from 'rxjs';\nimport { debounce, filter, startWith, takeUntil } from 'rxjs/operators';\nimport { NovoTabbedGroupPickerElement, TabbedGroupPickerButtonConfig, TabbedGroupPickerTab } from 'novo-elements/elements/tabbed-group-picker';\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { ConditionGroupComponent } from '../condition-group/condition-group.component';\nimport { NovoConditionFieldDef } from '../query-builder.directives';\nimport { QueryBuilderService } from '../query-builder.service';\nimport { NOVO_CRITERIA_BUILDER } from '../query-builder.tokens';\nimport { BaseFieldDef, Condition, ConditionGroup, Conjunction, AddressCriteriaConfig } from '../query-builder.types';\n\nconst EMPTY_CONDITION: Condition = {\n conditionType: '$and',\n field: null,\n operator: null,\n scope: null,\n value: null,\n};\n@Component({\n selector: 'novo-criteria-builder',\n templateUrl: './criteria-builder.component.html',\n styleUrls: ['./criteria-builder.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CriteriaBuilderComponent), multi: true },\n { provide: NOVO_CRITERIA_BUILDER, useExisting: CriteriaBuilderComponent },\n { provide: QueryBuilderService, useClass: QueryBuilderService },\n ],\n host: {\n class: 'novo-criteria-builder',\n },\n})\nexport class CriteriaBuilderComponent implements OnInit, OnDestroy, AfterContentChecked, AfterViewInit {\n @Input() config: any;\n @Input() controlName: string;\n @Input() allowedGroupings = [Conjunction.AND, Conjunction.OR, Conjunction.NOT];\n @Input() editTypeFn: (field: BaseFieldDef) => string;\n @Input() addressConfig: AddressCriteriaConfig;\n @Input() canBeEmpty: boolean = false;\n\n @Input('hideFirstOperator')\n set HideFirstOperator(hide: boolean) {\n if (!Helpers.isEmpty(hide)) {\n this._hideFirstOperator = hide;\n }\n }\n get hideFirstOperator() {\n return this._hideFirstOperator;\n }\n private _hideFirstOperator: boolean = true;\n\n @ContentChildren(NovoConditionFieldDef, { descendants: true }) _contentFieldDefs: QueryList<NovoConditionFieldDef>;\n scopedFieldPicker = viewChild(NovoTabbedGroupPickerElement);\n conditionGroups = viewChildren(ConditionGroupComponent);\n\n public parentForm: UntypedFormGroup;\n public innerForm: UntypedFormGroup;\n public tabbedGroupPickerTabs = computed<TabbedGroupPickerTab[]>(() => {\n const tabs = [];\n this.qbs.scopes()?.forEach((scope) => {\n tabs.push({\n typeName: scope,\n typeLabel: scope,\n valueField: 'name',\n labelField: 'label',\n data: this.qbs.config.fields.find((field) => field.value === scope)?.options || [],\n });\n });\n return tabs;\n });\n public addButtonConfig: TabbedGroupPickerButtonConfig = {\n theme: 'dialogue',\n side: 'left',\n size: 'sm',\n icon: 'add-thin',\n label: this.labels.addCondition,\n };\n /** Subject that emits when the component has been destroyed. */\n private readonly _onDestroy = new Subject<void>();\n\n constructor(\n private controlContainer: ControlContainer,\n private formBuilder: FormBuilder,\n private cdr: ChangeDetectorRef,\n public qbs: QueryBuilderService,\n public labels: NovoLabelService,\n ) {\n if (!qbs.componentHost) {\n qbs.componentHost = this;\n }\n }\n\n ngOnInit() {\n this.parentForm = this.controlContainer.control as UntypedFormGroup;\n this.innerForm = this.formBuilder.group({\n criteria: this.formBuilder.array([]),\n });\n\n this.parentForm.valueChanges.pipe(\n startWith(this.parentForm.value),\n filter(v => v?.criteria),\n takeUntil(this._onDestroy)\n ).subscribe((value) => {\n Promise.resolve().then(() => {\n this.setInitialValue(value[this.controlName]);\n this.cdr.markForCheck();\n });\n });\n this.innerForm.valueChanges\n .pipe(\n debounce(() => interval(10)),\n takeUntil(this._onDestroy),\n )\n .subscribe((value) => {\n const result = value.criteria.filter((it, i) => {\n const key = Object.keys(it)[0];\n if (it[key].length === 0) {\n this.removeConditionGroupAt(i);\n }\n return it[key].length > 0;\n });\n\n Promise.resolve().then(() => {\n this.parentForm.get(this.controlName).setValue(result, { emitEvent: false });\n this.cdr.markForCheck();\n });\n });\n }\n\n ngAfterContentChecked(): void {\n this._configureQueryBuilderService();\n this.cdr.detectChanges();\n }\n\n ngAfterViewInit(): void {\n this._registerFieldDefs();\n }\n\n ngOnDestroy() {\n this._onDestroy.next();\n this._onDestroy.complete();\n }\n\n private isConditionGroup(group: unknown): group is ConditionGroup {\n return Object.keys(group).every((key) => ['$and', '$or', '$not'].includes(key));\n }\n\n private setInitialValue(value: ConditionGroup[] | Condition[]) {\n if (value.length) {\n if (this.isConditionGroup(value[0])) {\n value.forEach((it) => this.addConditionGroup(it));\n } else {\n const conditions: Condition[] = [...value] as Condition[];\n if (this.qbs.hasMultipleScopes()) {\n // divide up by scope into separate groups\n const scopedConditions: { [key: string]: Condition[] } = {};\n conditions.forEach((condition) => {\n scopedConditions[condition.scope] = scopedConditions[condition.scope] || [];\n scopedConditions[condition.scope].push(condition);\n })\n for (const scope in scopedConditions) {\n this.addConditionGroup({ $and: scopedConditions[scope] });\n }\n } else {\n this.addConditionGroup({ $and: conditions });\n }\n }\n } else {\n this.addConditionGroup({ $and: value });\n }\n }\n\n get root(): FormArray {\n return this.innerForm.get('criteria') as FormArray;\n }\n\n addConditionGroup(data: any = { $and: [EMPTY_CONDITION] }) {\n this.root.push(this.newConditionGroup(data));\n this.cdr.markForCheck();\n }\n\n newConditionGroup(data: ConditionGroup): UntypedFormGroup {\n const controls = Object.entries(data).reduce((obj, [key, val]) => {\n return {\n ...obj,\n [key]: this.formBuilder.array(val.map((it) => this.newCondition(it))),\n };\n }, {});\n return this.formBuilder.group(controls);\n }\n\n newCondition({ field, operator, scope, value }: Condition = EMPTY_CONDITION): UntypedFormGroup {\n return this.formBuilder.group({\n conditionType: '$and',\n field: [field, Validators.required],\n operator: [operator, Validators.required],\n scope: [scope],\n value: [value],\n });\n }\n\n removeConditionGroupAt(index: number) {\n this.root.removeAt(index, { emitEvent: false });\n }\n\n clearAllConditions() {\n while (this.root.length) {\n this.root.removeAt(0);\n }\n }\n\n onFieldSelect(field) {\n this.scopedFieldPicker().dropdown.closePanel();\n const condition = { field: field.name, operator: null, scope: field.scope, value: null };\n const group = this.conditionGroups().find((group) => group.scope === field.scope);\n if (group) {\n group.addCondition(condition);\n } else {\n this.addConditionGroup({ $and: [condition] })\n }\n }\n\n private _configureQueryBuilderService() {\n this.qbs.scopes.set(this.config?.fields.map((f) => f.value));\n this.qbs.config = this.config;\n this.qbs.editTypeFn = this.editTypeFn;\n this.qbs.allowedGroupings = this.allowedGroupings as Conjunction[];\n }\n\n private _registerFieldDefs() {\n const defs = [...Array.from(this._contentFieldDefs)];\n defs.forEach((fieldDef) => {\n this.qbs.registerFieldDef(fieldDef);\n });\n }\n}\n","<form [formGroup]=\"innerForm\">\n <novo-stack [formArrayName]=\"controlName\" class=\"criteria-builder-inner\">\n <ng-container\n *ngFor=\"let andGroup of root.controls; let andIndex = index; let isFirst = first;let isLastAnd = last;\">\n <novo-label *ngIf=\"!isFirst\" color=\"ash\" size=\"xs\" uppercase padding=\"sm\">{{ qbs.hasMultipleScopes() ? conditionGroup.scope + ' ' + labels.filterss : qbs.getConjunctionLabel('and') }}</novo-label>\n <novo-condition-group [hideFirstOperator]=\"hideFirstOperator\" [canBeEmpty]=\"canBeEmpty\" [groupIndex]=\"andIndex\" [formGroupName]=\"andIndex\" #conditionGroup></novo-condition-group>\n </ng-container>\n </novo-stack>\n <novo-tabbed-group-picker\n *ngIf=\"qbs.hasMultipleScopes()\"\n [tabs]=\"tabbedGroupPickerTabs()\"\n [selectionEnabled]=\"false\"\n [buttonConfig]=\"addButtonConfig\"\n (activation)=\"onFieldSelect($event)\">\n </novo-tabbed-group-picker>\n</form>\n<novo-condition-templates [addressConfig]=\"addressConfig\"/>\n\n<!--\n {\n $and: [{\n $or: [{\n entity: 'JobOrder'\n field: 'categories',\n operator: 'doesNotContain',\n value: 'Healthcare'\n }]\n }]\n }\n -->\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { CdkTableModule } from '@angular/cdk/table';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NovoAutoCompleteModule } from 'novo-elements/elements/autocomplete';\nimport { NovoButtonModule } from 'novo-elements/elements/button';\nimport { NovoCardModule } from 'novo-elements/elements/card';\nimport { NovoChipsModule } from 'novo-elements/elements/chips';\nimport { NovoCommonModule, NovoOptionModule, NovoOverlayModule } from 'novo-elements/elements/common';\nimport { NovoDatePickerModule } from 'novo-elements/elements/date-picker';\nimport { NovoDateTimePickerModule } from 'novo-elements/elements/date-time-picker';\nimport { NovoDropdownModule } from 'novo-elements/elements/dropdown';\nimport { NovoFieldModule } from 'novo-elements/elements/field';\nimport { NovoFlexModule } from 'novo-elements/elements/flex';\nimport { NovoFormExtrasModule, NovoFormModule } from 'novo-elements/elements/form';\nimport { NovoIconModule } from 'novo-elements/elements/icon';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { NovoNonIdealStateModule } from 'novo-elements/elements/non-ideal-state';\nimport { GooglePlacesModule } from 'novo-elements/elements/places';\nimport { NovoRadioModule } from 'novo-elements/elements/radio'\nimport { NovoSearchBoxModule } from 'novo-elements/elements/search';\nimport { NovoSelectModule } from 'novo-elements/elements/select';\nimport { NovoSelectSearchModule } from 'novo-elements/elements/select-search';\nimport { NovoSwitchModule } from 'novo-elements/elements/switch';\nimport { NovoTabbedGroupPickerModule } from 'novo-elements/elements/tabbed-group-picker';\nimport { NovoTabModule } from 'novo-elements/elements/tabs';\nimport { ConditionBuilderComponent, ConditionInputOutlet, ConditionOperatorOutlet } from './condition-builder/condition-builder.component';\nimport { NovoDefaultAddressConditionDef } from './condition-definitions/address-condition.definition';\nimport { NovoDefaultBooleanConditionDef } from './condition-definitions/boolean-condition.definition';\nimport { NovoDefaultDateConditionDef } from './condition-definitions/date-condition.definition';\nimport { NovoDefaultDateTimeConditionDef } from './condition-definitions/date-time-condition.definition';\nimport { NovoDefaultIdConditionDef } from './condition-definitions/id-condition.definition';\nimport { NovoDefaultNumberConditionDef } from './condition-definitions/number-condition.definition';\nimport { NovoDefaultPickerConditionDef } from './condition-definitions/picker-condition.definition';\nimport { NovoDefaultStringConditionDef } from './condition-definitions/string-condition.definition';\nimport { ConditionGroupComponent } from './condition-group/condition-group.component';\nimport { CriteriaBuilderComponent } from './criteria-builder/criteria-builder.component';\nimport { NovoConditionFieldDef, NovoConditionInputDef, NovoConditionOperatorsDef } from './query-builder.directives';\nimport { NovoConditionTemplatesComponent } from './condition-templates/condition-templates.component';\nimport { NovoTooltipModule } from 'novo-elements/elements/tooltip';\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n DragDropModule,\n CdkTableModule,\n GooglePlacesModule,\n NovoAutoCompleteModule,\n NovoButtonModule,\n NovoCommonModule,\n NovoFormModule,\n NovoSelectModule,\n NovoNonIdealStateModule,\n NovoFieldModule,\n NovoOptionModule,\n NovoFlexModule,\n NovoTabModule,\n NovoTabbedGroupPickerModule,\n NovoLoadingModule,\n NovoCardModule,\n NovoDatePickerModule,\n NovoDateTimePickerModule,\n NovoIconModule,\n NovoOverlayModule,\n NovoRadioModule,\n NovoSearchBoxModule,\n NovoSwitchModule,\n NovoChipsModule,\n NovoSelectSearchModule,\n NovoDropdownModule,\n NovoFormExtrasModule,\n NovoTooltipModule,\n ],\n declarations: [\n CriteriaBuilderComponent,\n ConditionBuilderComponent,\n ConditionInputOutlet,\n ConditionOperatorOutlet,\n ConditionGroupComponent,\n NovoDefaultAddressConditionDef,\n NovoDefaultBooleanConditionDef,\n NovoDefaultDateConditionDef,\n NovoDefaultDateTimeConditionDef,\n NovoConditionOperatorsDef,\n NovoConditionInputDef,\n NovoConditionFieldDef,\n NovoDefaultStringConditionDef,\n NovoDefaultNumberConditionDef,\n NovoDefaultIdConditionDef,\n NovoDefaultPickerConditionDef,\n NovoConditionTemplatesComponent,\n ],\n exports: [\n CriteriaBuilderComponent,\n ConditionBuilderComponent,\n NovoDefaultAddressConditionDef,\n NovoDefaultBooleanConditionDef,\n NovoDefaultDateConditionDef,\n NovoDefaultDateTimeConditionDef,\n NovoConditionOperatorsDef,\n NovoConditionInputDef,\n NovoConditionFieldDef,\n NovoDefaultStringConditionDef,\n NovoDefaultNumberConditionDef,\n NovoDefaultIdConditionDef,\n NovoDefaultPickerConditionDef,\n NovoConditionTemplatesComponent,\n ],\n})\nexport class NovoQueryBuilderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.QueryBuilderService","i6","i7","i12.NovoConditionOperatorsDef","i12.NovoConditionInputDef","i12.NovoConditionFieldDef","i2","i3","i4","i7.NovoConditionOperatorsDef","i7.NovoConditionInputDef","i7.NovoConditionFieldDef","i5","i8","i9.NovoConditionOperatorsDef","i9.NovoConditionInputDef","i9.NovoConditionFieldDef","i9","i10.NovoConditionOperatorsDef","i10.NovoConditionInputDef","i10.NovoConditionFieldDef","i1","i5.NovoConditionOperatorsDef","i5.NovoConditionInputDef","i5.NovoConditionFieldDef","i8.NovoConditionOperatorsDef","i8.NovoConditionInputDef","i8.NovoConditionFieldDef","i1.NovoDefaultAddressConditionDef","i2.NovoDefaultBooleanConditionDef","i3.NovoDefaultDateConditionDef","i4.NovoDefaultDateTimeConditionDef","i5.NovoDefaultStringConditionDef","i6.NovoDefaultNumberConditionDef","i7.NovoDefaultIdConditionDef","i8.NovoDefaultPickerConditionDef","i2.QueryBuilderService","i10","i11.NovoConditionTemplatesComponent","EMPTY_CONDITION","i9.ConditionBuilderComponent","i8.ConditionGroupComponent","i9.NovoConditionTemplatesComponent"],"mappings":"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"}
|