@meshmakers/octo-ui 3.3.470 → 3.3.490
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Component, Injectable, EventEmitter, Output, Input, forwardRef, ViewChild, makeEnvironmentProviders } from '@angular/core';
|
|
2
|
+
import { inject, Component, Injectable, EventEmitter, Output, Input, ElementRef, forwardRef, ViewChild, makeEnvironmentProviders } from '@angular/core';
|
|
3
3
|
import { AttributeSelectorService, AttributeValueTypeDto as AttributeValueTypeDto$1, CkTypeAttributeService, CkTypeSelectorService, SearchFilterTypesDto, SortOrdersDto, FieldFilterOperatorsDto, provideOctoServices } from '@meshmakers/octo-services';
|
|
4
4
|
import { DataSourceTyped, HierarchyDataSourceBase, NotificationDisplayService, provideMmSharedUi } from '@meshmakers/shared-ui';
|
|
5
5
|
import { provideMmSharedAuth } from '@meshmakers/shared-auth';
|
|
@@ -18,8 +18,7 @@ import { DropDownListModule, DropDownsModule, AutoCompleteModule } from '@progre
|
|
|
18
18
|
import * as i5$1 from '@progress/kendo-angular-icons';
|
|
19
19
|
import { IconsModule, SVGIconModule } from '@progress/kendo-angular-icons';
|
|
20
20
|
import { searchIcon, sortAscSmallIcon, sortDescSmallIcon, chevronRightIcon, chevronDownIcon, downloadIcon, fileIcon, folderIcon, calendarIcon, checkboxCheckedIcon, listUnorderedIcon, filterClearIcon, arrowRightIcon, arrowLeftIcon, chevronDoubleRightIcon, chevronDoubleLeftIcon, arrowUpIcon, arrowDownIcon, plusIcon, minusIcon, trashIcon, dollarIcon, copyIcon } from '@progress/kendo-svg-icons';
|
|
21
|
-
import
|
|
22
|
-
import { WindowRef, WindowModule, WindowService, WindowCloseResult, DialogContentBase, DialogRef, DialogModule, DialogService } from '@progress/kendo-angular-dialog';
|
|
21
|
+
import { WindowRef, WindowModule, WindowService, WindowCloseResult } from '@progress/kendo-angular-dialog';
|
|
23
22
|
import { Subject, firstValueFrom, of, forkJoin, Subscription } from 'rxjs';
|
|
24
23
|
import { debounceTime, distinctUntilChanged, switchMap, map, tap, catchError } from 'rxjs/operators';
|
|
25
24
|
import { LoaderModule } from '@progress/kendo-angular-indicators';
|
|
@@ -1891,7 +1890,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
1891
1890
|
|
|
1892
1891
|
// Models
|
|
1893
1892
|
|
|
1894
|
-
class CkTypeSelectorDialogComponent
|
|
1893
|
+
class CkTypeSelectorDialogComponent {
|
|
1894
|
+
windowRef = inject(WindowRef);
|
|
1895
1895
|
ckTypeSelectorService = inject(CkTypeSelectorService);
|
|
1896
1896
|
searchSubject = new Subject();
|
|
1897
1897
|
subscriptions = new Subscription();
|
|
@@ -1912,18 +1912,18 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
|
|
|
1912
1912
|
selectItemBy = (context) => context.dataItem.fullName;
|
|
1913
1913
|
initialCkModelIds;
|
|
1914
1914
|
derivedFromRtCkTypeId;
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1915
|
+
lastClickTime = 0;
|
|
1916
|
+
lastClickRtCkTypeId = null;
|
|
1917
|
+
/** Data passed from the service */
|
|
1918
|
+
data;
|
|
1918
1919
|
ngOnInit() {
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
this.
|
|
1922
|
-
this.
|
|
1923
|
-
this.
|
|
1924
|
-
this.
|
|
1925
|
-
|
|
1926
|
-
this.selectedKeys = [data.selectedCkTypeId];
|
|
1920
|
+
if (this.data) {
|
|
1921
|
+
this.dialogTitle = this.data.dialogTitle || 'Select Construction Kit Type';
|
|
1922
|
+
this.allowAbstract = this.data.allowAbstract ?? false;
|
|
1923
|
+
this.initialCkModelIds = this.data.ckModelIds;
|
|
1924
|
+
this.derivedFromRtCkTypeId = this.data.derivedFromRtCkTypeId;
|
|
1925
|
+
if (this.data.selectedCkTypeId) {
|
|
1926
|
+
this.selectedKeys = [this.data.selectedCkTypeId];
|
|
1927
1927
|
}
|
|
1928
1928
|
}
|
|
1929
1929
|
// Set up search debouncing
|
|
@@ -2016,19 +2016,32 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
|
|
|
2016
2016
|
this.selectedType = null;
|
|
2017
2017
|
}
|
|
2018
2018
|
}
|
|
2019
|
+
onCellClick(event) {
|
|
2020
|
+
const item = event.dataItem;
|
|
2021
|
+
const now = Date.now();
|
|
2022
|
+
if (item && item.rtCkTypeId === this.lastClickRtCkTypeId && (now - this.lastClickTime) < 400) {
|
|
2023
|
+
// Double-click detected
|
|
2024
|
+
if (!item.isAbstract || this.allowAbstract) {
|
|
2025
|
+
this.selectedType = item;
|
|
2026
|
+
this.onConfirm();
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
this.lastClickTime = now;
|
|
2030
|
+
this.lastClickRtCkTypeId = item?.rtCkTypeId ?? null;
|
|
2031
|
+
}
|
|
2019
2032
|
onCancel() {
|
|
2020
|
-
this.
|
|
2033
|
+
this.windowRef.close();
|
|
2021
2034
|
}
|
|
2022
2035
|
onConfirm() {
|
|
2023
2036
|
if (this.selectedType) {
|
|
2024
2037
|
const result = {
|
|
2025
2038
|
selectedCkType: this.selectedType
|
|
2026
2039
|
};
|
|
2027
|
-
this.
|
|
2040
|
+
this.windowRef.close(result);
|
|
2028
2041
|
}
|
|
2029
2042
|
}
|
|
2030
2043
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2031
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog",
|
|
2044
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: CkTypeSelectorDialogComponent, isStandalone: true, selector: "mm-ck-type-selector-dialog", ngImport: i0, template: `
|
|
2032
2045
|
<div class="ck-type-selector-container">
|
|
2033
2046
|
<div class="filter-container">
|
|
2034
2047
|
<div class="filter-row">
|
|
@@ -2067,13 +2080,13 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
|
|
|
2067
2080
|
<kendo-grid
|
|
2068
2081
|
[data]="gridData"
|
|
2069
2082
|
[loading]="isLoading"
|
|
2070
|
-
[height]="400"
|
|
2071
2083
|
[selectable]="{ mode: 'single' }"
|
|
2072
2084
|
[pageable]="{ pageSizes: [25, 50, 100] }"
|
|
2073
2085
|
[pageSize]="pageSize"
|
|
2074
2086
|
[skip]="skip"
|
|
2075
2087
|
(pageChange)="onPageChange($event)"
|
|
2076
2088
|
(selectionChange)="onSelectionChange($event)"
|
|
2089
|
+
(cellClick)="onCellClick($event)"
|
|
2077
2090
|
[kendoGridSelectBy]="selectItemBy"
|
|
2078
2091
|
[(selectedKeys)]="selectedKeys"
|
|
2079
2092
|
class="type-grid">
|
|
@@ -2102,13 +2115,13 @@ class CkTypeSelectorDialogComponent extends DialogContentBase {
|
|
|
2102
2115
|
<div class="selection-info" *ngIf="selectedType">
|
|
2103
2116
|
<strong>Selected:</strong> {{ selectedType.rtCkTypeId }}
|
|
2104
2117
|
</div>
|
|
2105
|
-
</div>
|
|
2106
2118
|
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2119
|
+
<div class="dialog-actions">
|
|
2120
|
+
<button kendoButton (click)="onCancel()">Cancel</button>
|
|
2121
|
+
<button kendoButton themeColor="primary" [disabled]="!selectedType || (selectedType.isAbstract && !allowAbstract)" (click)="onConfirm()">OK</button>
|
|
2122
|
+
</div>
|
|
2123
|
+
</div>
|
|
2124
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;height:100%}.ck-type-selector-container{display:flex;flex-direction:column;flex:1;min-height:0;padding:20px;box-sizing:border-box;gap:12px}.filter-container{margin-bottom:16px;flex-shrink:0}.filter-row{display:flex;gap:16px;align-items:flex-end}.filter-item{display:flex;flex-direction:column;gap:4px}.filter-item label{font-size:12px;font-weight:500}.filter-item.flex-grow{flex:1}.filter-item.filter-actions{flex-shrink:0}.filter-input{min-width:180px}.grid-container{flex:1;min-height:0;display:flex;flex-direction:column}.grid-container kendo-grid,.grid-container .type-grid{flex:1;min-height:200px}.type-grid{border-radius:4px}.type-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.abstract-type{font-style:italic;opacity:.7}.final-type{font-weight:600}.type-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:10px;margin-left:8px;text-transform:uppercase}.type-badge.abstract{background-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-on-warning, #000);opacity:.8}.type-badge.final{background-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-on-success, #fff);opacity:.8}.selection-info{margin-top:12px;padding:8px 12px;background:var(--kendo-color-success-subtle, #d4edda);border:1px solid var(--kendo-color-success, #28a745);border-radius:4px;font-size:14px;flex-shrink:0}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:8px 20px 0;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "directive", type: i5.TextBoxSuffixTemplateDirective, selector: "[kendoTextBoxSuffixTemplate]", inputs: ["showSeparator"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "component", type: i3$1.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: LoaderModule }, { kind: "ngmodule", type: WindowModule }] });
|
|
2112
2125
|
}
|
|
2113
2126
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: CkTypeSelectorDialogComponent, decorators: [{
|
|
2114
2127
|
type: Component,
|
|
@@ -2121,7 +2134,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
2121
2134
|
DropDownsModule,
|
|
2122
2135
|
IconsModule,
|
|
2123
2136
|
LoaderModule,
|
|
2124
|
-
|
|
2137
|
+
WindowModule
|
|
2125
2138
|
], template: `
|
|
2126
2139
|
<div class="ck-type-selector-container">
|
|
2127
2140
|
<div class="filter-container">
|
|
@@ -2161,13 +2174,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
2161
2174
|
<kendo-grid
|
|
2162
2175
|
[data]="gridData"
|
|
2163
2176
|
[loading]="isLoading"
|
|
2164
|
-
[height]="400"
|
|
2165
2177
|
[selectable]="{ mode: 'single' }"
|
|
2166
2178
|
[pageable]="{ pageSizes: [25, 50, 100] }"
|
|
2167
2179
|
[pageSize]="pageSize"
|
|
2168
2180
|
[skip]="skip"
|
|
2169
2181
|
(pageChange)="onPageChange($event)"
|
|
2170
2182
|
(selectionChange)="onSelectionChange($event)"
|
|
2183
|
+
(cellClick)="onCellClick($event)"
|
|
2171
2184
|
[kendoGridSelectBy]="selectItemBy"
|
|
2172
2185
|
[(selectedKeys)]="selectedKeys"
|
|
2173
2186
|
class="type-grid">
|
|
@@ -2196,17 +2209,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
2196
2209
|
<div class="selection-info" *ngIf="selectedType">
|
|
2197
2210
|
<strong>Selected:</strong> {{ selectedType.rtCkTypeId }}
|
|
2198
2211
|
</div>
|
|
2199
|
-
</div>
|
|
2200
2212
|
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2206
|
-
|
|
2213
|
+
<div class="dialog-actions">
|
|
2214
|
+
<button kendoButton (click)="onCancel()">Cancel</button>
|
|
2215
|
+
<button kendoButton themeColor="primary" [disabled]="!selectedType || (selectedType.isAbstract && !allowAbstract)" (click)="onConfirm()">OK</button>
|
|
2216
|
+
</div>
|
|
2217
|
+
</div>
|
|
2218
|
+
`, styles: [":host{display:flex;flex-direction:column;height:100%}.ck-type-selector-container{display:flex;flex-direction:column;flex:1;min-height:0;padding:20px;box-sizing:border-box;gap:12px}.filter-container{margin-bottom:16px;flex-shrink:0}.filter-row{display:flex;gap:16px;align-items:flex-end}.filter-item{display:flex;flex-direction:column;gap:4px}.filter-item label{font-size:12px;font-weight:500}.filter-item.flex-grow{flex:1}.filter-item.filter-actions{flex-shrink:0}.filter-input{min-width:180px}.grid-container{flex:1;min-height:0;display:flex;flex-direction:column}.grid-container kendo-grid,.grid-container .type-grid{flex:1;min-height:200px}.type-grid{border-radius:4px}.type-grid ::ng-deep .k-grid-table tbody tr{cursor:pointer}.abstract-type{font-style:italic;opacity:.7}.final-type{font-weight:600}.type-badge{display:inline-block;font-size:10px;padding:1px 6px;border-radius:10px;margin-left:8px;text-transform:uppercase}.type-badge.abstract{background-color:var(--kendo-color-warning, #ffc107);color:var(--kendo-color-on-warning, #000);opacity:.8}.type-badge.final{background-color:var(--kendo-color-success, #28a745);color:var(--kendo-color-on-success, #fff);opacity:.8}.selection-info{margin-top:12px;padding:8px 12px;background:var(--kendo-color-success-subtle, #d4edda);border:1px solid var(--kendo-color-success, #28a745);border-radius:4px;font-size:14px;flex-shrink:0}.dialog-actions{display:flex;justify-content:flex-end;gap:8px;padding:8px 20px 0;flex-shrink:0}\n"] }]
|
|
2219
|
+
}] });
|
|
2207
2220
|
|
|
2208
2221
|
class CkTypeSelectorDialogService {
|
|
2209
|
-
|
|
2222
|
+
windowService = inject(WindowService);
|
|
2210
2223
|
/**
|
|
2211
2224
|
* Opens the CkType selector dialog
|
|
2212
2225
|
* @param options Dialog options
|
|
@@ -2220,20 +2233,28 @@ class CkTypeSelectorDialogService {
|
|
|
2220
2233
|
allowAbstract: options.allowAbstract,
|
|
2221
2234
|
derivedFromRtCkTypeId: options.derivedFromRtCkTypeId
|
|
2222
2235
|
};
|
|
2223
|
-
const
|
|
2236
|
+
const windowRef = this.windowService.open({
|
|
2224
2237
|
content: CkTypeSelectorDialogComponent,
|
|
2225
2238
|
width: 900,
|
|
2226
2239
|
height: 650,
|
|
2227
2240
|
minWidth: 750,
|
|
2228
2241
|
minHeight: 550,
|
|
2242
|
+
resizable: true,
|
|
2229
2243
|
title: options.dialogTitle || 'Select Construction Kit Type'
|
|
2230
2244
|
});
|
|
2231
2245
|
// Pass data to the component
|
|
2232
|
-
|
|
2233
|
-
|
|
2246
|
+
const contentRef = windowRef.content;
|
|
2247
|
+
if (contentRef?.instance) {
|
|
2248
|
+
contentRef.instance.data = data;
|
|
2234
2249
|
}
|
|
2235
2250
|
try {
|
|
2236
|
-
const result = await firstValueFrom(
|
|
2251
|
+
const result = await firstValueFrom(windowRef.result);
|
|
2252
|
+
if (result instanceof WindowCloseResult) {
|
|
2253
|
+
return {
|
|
2254
|
+
confirmed: false,
|
|
2255
|
+
selectedCkType: null
|
|
2256
|
+
};
|
|
2257
|
+
}
|
|
2237
2258
|
if (result && typeof result === 'object' && 'selectedCkType' in result) {
|
|
2238
2259
|
// User clicked OK and we have a result
|
|
2239
2260
|
const dialogResult = result;
|
|
@@ -3102,10 +3123,14 @@ class CkTypeSelectorInputComponent {
|
|
|
3102
3123
|
onChange = () => { };
|
|
3103
3124
|
onTouched = () => { };
|
|
3104
3125
|
searchIcon = searchIcon;
|
|
3126
|
+
popupSettings = { appendTo: 'root', popupClass: 'mm-ck-type-popup' };
|
|
3127
|
+
static popupStyleInjected = false;
|
|
3105
3128
|
ckTypeSelectorService = inject(CkTypeSelectorService);
|
|
3106
3129
|
dialogService = inject(CkTypeSelectorDialogService, { optional: true });
|
|
3130
|
+
elementRef = inject(ElementRef);
|
|
3107
3131
|
ngOnInit() {
|
|
3108
3132
|
this.setupSearch();
|
|
3133
|
+
this.injectPopupStyles();
|
|
3109
3134
|
}
|
|
3110
3135
|
ngOnDestroy() {
|
|
3111
3136
|
this.subscriptions.unsubscribe();
|
|
@@ -3223,6 +3248,29 @@ class CkTypeSelectorInputComponent {
|
|
|
3223
3248
|
this.typeMap = new Map(items.map(item => [item.rtCkTypeId, item]));
|
|
3224
3249
|
}));
|
|
3225
3250
|
}
|
|
3251
|
+
injectPopupStyles() {
|
|
3252
|
+
if (CkTypeSelectorInputComponent.popupStyleInjected)
|
|
3253
|
+
return;
|
|
3254
|
+
const style = document.createElement('style');
|
|
3255
|
+
style.setAttribute('data-mm-ck-type-popup', '');
|
|
3256
|
+
style.textContent = `
|
|
3257
|
+
.mm-ck-type-popup {
|
|
3258
|
+
max-width: 500px !important;
|
|
3259
|
+
min-width: 0 !important;
|
|
3260
|
+
}
|
|
3261
|
+
.mm-ck-type-popup .k-child-animation-container {
|
|
3262
|
+
max-width: 500px !important;
|
|
3263
|
+
}
|
|
3264
|
+
.mm-ck-type-popup .k-list-item {
|
|
3265
|
+
padding: 4px 12px !important;
|
|
3266
|
+
min-height: 0 !important;
|
|
3267
|
+
font-size: 13px !important;
|
|
3268
|
+
line-height: 20px !important;
|
|
3269
|
+
}
|
|
3270
|
+
`;
|
|
3271
|
+
document.head.appendChild(style);
|
|
3272
|
+
CkTypeSelectorInputComponent.popupStyleInjected = true;
|
|
3273
|
+
}
|
|
3226
3274
|
selectCkType(ckType) {
|
|
3227
3275
|
this.selectedCkType = ckType;
|
|
3228
3276
|
this.searchFormControl.setValue(ckType.rtCkTypeId, { emitEvent: false });
|
|
@@ -3276,6 +3324,7 @@ class CkTypeSelectorInputComponent {
|
|
|
3276
3324
|
[suggest]="true"
|
|
3277
3325
|
[clearButton]="true"
|
|
3278
3326
|
[filterable]="true"
|
|
3327
|
+
[popupSettings]="popupSettings"
|
|
3279
3328
|
(filterChange)="onFilterChange($event)"
|
|
3280
3329
|
(valueChange)="onSelectionChange($event)"
|
|
3281
3330
|
(blur)="onBlur()"
|
|
@@ -3352,6 +3401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
3352
3401
|
[suggest]="true"
|
|
3353
3402
|
[clearButton]="true"
|
|
3354
3403
|
[filterable]="true"
|
|
3404
|
+
[popupSettings]="popupSettings"
|
|
3355
3405
|
(filterChange)="onFilterChange($event)"
|
|
3356
3406
|
(valueChange)="onSelectionChange($event)"
|
|
3357
3407
|
(blur)="onBlur()"
|
|
@@ -3427,6 +3477,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
3427
3477
|
}] } });
|
|
3428
3478
|
|
|
3429
3479
|
class FieldFilterEditorComponent {
|
|
3480
|
+
attributeService = inject(AttributeSelectorService, { optional: true });
|
|
3430
3481
|
plusIcon = plusIcon;
|
|
3431
3482
|
minusIcon = minusIcon;
|
|
3432
3483
|
trashIcon = trashIcon;
|
|
@@ -3451,10 +3502,21 @@ class FieldFilterEditorComponent {
|
|
|
3451
3502
|
];
|
|
3452
3503
|
booleanOptions = ['true', 'false'];
|
|
3453
3504
|
availableAttributes = [];
|
|
3505
|
+
/**
|
|
3506
|
+
* Optional CK type ID for self-loading attributes.
|
|
3507
|
+
* When set, the component loads available attributes itself and shows
|
|
3508
|
+
* navigation property controls (checkbox + max depth).
|
|
3509
|
+
* When not set, the component uses the externally provided availableAttributes input.
|
|
3510
|
+
*/
|
|
3511
|
+
ckTypeId;
|
|
3454
3512
|
/** Enable variable mode - allows using variables instead of literal values */
|
|
3455
3513
|
enableVariables = false;
|
|
3456
3514
|
/** Available variables for selection when enableVariables is true */
|
|
3457
3515
|
availableVariables = [];
|
|
3516
|
+
/** Controls for self-loading mode (when ckTypeId is set) */
|
|
3517
|
+
includeNavigationProperties = true;
|
|
3518
|
+
maxDepth = null;
|
|
3519
|
+
isLoadingAttributes = false;
|
|
3458
3520
|
_filters = [];
|
|
3459
3521
|
nextId = 1;
|
|
3460
3522
|
filteredAttributeList = [];
|
|
@@ -3468,7 +3530,11 @@ class FieldFilterEditorComponent {
|
|
|
3468
3530
|
}
|
|
3469
3531
|
filtersChange = new EventEmitter();
|
|
3470
3532
|
selectedKeys = [];
|
|
3471
|
-
ngOnChanges() {
|
|
3533
|
+
ngOnChanges(changes) {
|
|
3534
|
+
// Self-load attributes when ckTypeId changes
|
|
3535
|
+
if (changes?.['ckTypeId'] && this.ckTypeId) {
|
|
3536
|
+
this.loadAttributesFromCkType();
|
|
3537
|
+
}
|
|
3472
3538
|
this.filteredAttributeList = [...this.availableAttributes];
|
|
3473
3539
|
this.buildAttributeTypeMap();
|
|
3474
3540
|
// Ensure useVariable flag is set correctly for filters with variable values
|
|
@@ -3493,6 +3559,43 @@ class FieldFilterEditorComponent {
|
|
|
3493
3559
|
this.attributeTypeMap.set(attr.attributePath, attr.attributeValueType);
|
|
3494
3560
|
}
|
|
3495
3561
|
}
|
|
3562
|
+
// ============================================================================
|
|
3563
|
+
// Self-loading attribute methods (when ckTypeId is set)
|
|
3564
|
+
// ============================================================================
|
|
3565
|
+
onNavigationPropertiesChange() {
|
|
3566
|
+
if (!this.includeNavigationProperties) {
|
|
3567
|
+
this.maxDepth = null;
|
|
3568
|
+
}
|
|
3569
|
+
this.loadAttributesFromCkType();
|
|
3570
|
+
}
|
|
3571
|
+
onMaxDepthChange(value) {
|
|
3572
|
+
this.maxDepth = value;
|
|
3573
|
+
this.loadAttributesFromCkType();
|
|
3574
|
+
}
|
|
3575
|
+
async loadAttributesFromCkType() {
|
|
3576
|
+
if (!this.ckTypeId || !this.attributeService)
|
|
3577
|
+
return;
|
|
3578
|
+
this.isLoadingAttributes = true;
|
|
3579
|
+
try {
|
|
3580
|
+
const result = await firstValueFrom(this.attributeService.getAvailableAttributes(this.ckTypeId, undefined, // filter
|
|
3581
|
+
1000, // first
|
|
3582
|
+
undefined, // after
|
|
3583
|
+
undefined, // attributeValueType
|
|
3584
|
+
undefined, // searchTerm
|
|
3585
|
+
this.includeNavigationProperties, this.maxDepth ?? undefined));
|
|
3586
|
+
this.availableAttributes = result.items;
|
|
3587
|
+
this.filteredAttributeList = [...this.availableAttributes];
|
|
3588
|
+
this.buildAttributeTypeMap();
|
|
3589
|
+
}
|
|
3590
|
+
catch (error) {
|
|
3591
|
+
console.error('Error loading filter attributes:', error);
|
|
3592
|
+
this.availableAttributes = [];
|
|
3593
|
+
this.filteredAttributeList = [];
|
|
3594
|
+
}
|
|
3595
|
+
finally {
|
|
3596
|
+
this.isLoadingAttributes = false;
|
|
3597
|
+
}
|
|
3598
|
+
}
|
|
3496
3599
|
addFilter() {
|
|
3497
3600
|
const newFilter = {
|
|
3498
3601
|
id: this.nextId++,
|
|
@@ -3817,8 +3920,32 @@ class FieldFilterEditorComponent {
|
|
|
3817
3920
|
return values;
|
|
3818
3921
|
}
|
|
3819
3922
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: FieldFilterEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3820
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: FieldFilterEditorComponent, isStandalone: true, selector: "mm-field-filter-editor", inputs: { availableAttributes: "availableAttributes", enableVariables: "enableVariables", availableVariables: "availableVariables", filters: "filters" }, outputs: { filtersChange: "filtersChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
3923
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: FieldFilterEditorComponent, isStandalone: true, selector: "mm-field-filter-editor", inputs: { availableAttributes: "availableAttributes", ckTypeId: "ckTypeId", enableVariables: "enableVariables", availableVariables: "availableVariables", filters: "filters" }, outputs: { filtersChange: "filtersChange" }, usesOnChanges: true, ngImport: i0, template: `
|
|
3821
3924
|
<div class="field-filter-editor">
|
|
3925
|
+
@if (ckTypeId) {
|
|
3926
|
+
<div class="attribute-options">
|
|
3927
|
+
<label class="inline-checkbox">
|
|
3928
|
+
<input type="checkbox" kendoCheckBox
|
|
3929
|
+
[(ngModel)]="includeNavigationProperties"
|
|
3930
|
+
(ngModelChange)="onNavigationPropertiesChange()" />
|
|
3931
|
+
Include Navigation Properties
|
|
3932
|
+
</label>
|
|
3933
|
+
<label class="inline-field">
|
|
3934
|
+
Max Depth
|
|
3935
|
+
<kendo-numerictextbox
|
|
3936
|
+
[(ngModel)]="maxDepth"
|
|
3937
|
+
[min]="1" [max]="5" [step]="1" [format]="'n0'"
|
|
3938
|
+
[spinners]="true"
|
|
3939
|
+
[disabled]="!includeNavigationProperties"
|
|
3940
|
+
(valueChange)="onMaxDepthChange($event)"
|
|
3941
|
+
class="depth-input">
|
|
3942
|
+
</kendo-numerictextbox>
|
|
3943
|
+
</label>
|
|
3944
|
+
@if (isLoadingAttributes) {
|
|
3945
|
+
<span class="loading-hint">Loading...</span>
|
|
3946
|
+
}
|
|
3947
|
+
</div>
|
|
3948
|
+
}
|
|
3822
3949
|
<div class="toolbar">
|
|
3823
3950
|
<button
|
|
3824
3951
|
kendoButton
|
|
@@ -3865,25 +3992,26 @@ class FieldFilterEditorComponent {
|
|
|
3865
3992
|
<kendo-grid-column field="attributePath" title="Attribute Path" [width]="280">
|
|
3866
3993
|
<ng-template kendoGridCellTemplate let-dataItem>
|
|
3867
3994
|
@if (availableAttributes.length > 0) {
|
|
3868
|
-
<kendo-
|
|
3995
|
+
<kendo-combobox
|
|
3869
3996
|
[data]="filteredAttributeList"
|
|
3870
3997
|
[(ngModel)]="dataItem.attributePath"
|
|
3871
3998
|
(valueChange)="onAttributeChange(dataItem, $event)"
|
|
3872
3999
|
[textField]="'attributePath'"
|
|
3873
4000
|
[valueField]="'attributePath'"
|
|
3874
4001
|
[valuePrimitive]="true"
|
|
4002
|
+
[allowCustom]="true"
|
|
3875
4003
|
[filterable]="true"
|
|
3876
4004
|
(filterChange)="onAttributeFilterChange($event)"
|
|
3877
4005
|
[listHeight]="300"
|
|
3878
4006
|
[popupSettings]="{ appendTo: 'root', animate: true }"
|
|
3879
4007
|
class="attribute-dropdown">
|
|
3880
|
-
<ng-template
|
|
4008
|
+
<ng-template kendoComboBoxItemTemplate let-item>
|
|
3881
4009
|
<div class="attribute-item">
|
|
3882
4010
|
<span class="attribute-path">{{ item.attributePath }}</span>
|
|
3883
4011
|
<span class="attribute-type">{{ item.attributeValueType }}</span>
|
|
3884
4012
|
</div>
|
|
3885
4013
|
</ng-template>
|
|
3886
|
-
</kendo-
|
|
4014
|
+
</kendo-combobox>
|
|
3887
4015
|
} @else {
|
|
3888
4016
|
<kendo-textbox
|
|
3889
4017
|
[(ngModel)]="dataItem.attributePath"
|
|
@@ -4046,7 +4174,7 @@ class FieldFilterEditorComponent {
|
|
|
4046
4174
|
</div>
|
|
4047
4175
|
}
|
|
4048
4176
|
</div>
|
|
4049
|
-
`, isInline: true, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.toolbar{display:flex;gap:10px;margin-bottom:5px}.filter-grid{border:1px solid #d5d5d5}.filter-grid ::ng-deep .k-grid-header .k-header{font-weight:600}.checkbox-column{text-align:center}.attribute-dropdown,.operator-dropdown,.attribute-input,.value-input{width:100%}.attribute-item{display:flex;justify-content:space-between;align-items:center;width:100%}.attribute-path{flex:1}.attribute-type{font-size:11px;color:#888;margin-left:8px;padding:2px 6px;background:#f0f0f0;border-radius:3px}.empty-state{padding:40px;text-align:center;border:1px dashed;border-radius:8px;font-family:Montserrat,sans-serif;font-size:.9rem}.empty-state p{margin:0}.value-cell{display:flex;gap:4px;align-items:center}.value-cell .value-input{flex:1}.variable-toggle{flex-shrink:0}.variable-item{display:flex;flex-direction:column;gap:2px}.variable-name{font-family:monospace;font-weight:500}.variable-label{font-size:11px;color:var(--kendo-color-subtle, #888)}.variable-value{font-family:monospace;color:var(--kendo-color-primary, #0d6efd)}.variable-placeholder{color:var(--kendo-color-subtle, #888)}.variable-dropdown ::ng-deep .k-input-value-text{font-family:monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i3.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: i3$1.ValueTemplateDirective, selector: "[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]" }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i5.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "ngmodule", type: DateInputsModule }, { kind: "component", type: i6.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "adaptiveTitle", "adaptiveSubtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: PopupModule }, { kind: "ngmodule", type: IntlModule }] });
|
|
4177
|
+
`, isInline: true, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.attribute-options{display:flex;align-items:center;gap:16px;font-size:.85rem}.inline-checkbox{display:flex;align-items:center;gap:6px;cursor:pointer;font-weight:400}.inline-field{display:flex;align-items:center;gap:6px;font-weight:400}.depth-input{width:80px}.loading-hint{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.toolbar{display:flex;gap:10px;margin-bottom:5px}.filter-grid{border:1px solid #d5d5d5}.filter-grid ::ng-deep .k-grid-header .k-header{font-weight:600}.checkbox-column{text-align:center}.attribute-dropdown,.operator-dropdown,.attribute-input,.value-input{width:100%}.attribute-item{display:flex;justify-content:space-between;align-items:center;width:100%}.attribute-path{flex:1}.attribute-type{font-size:11px;color:#888;margin-left:8px;padding:2px 6px;background:#f0f0f0;border-radius:3px}.empty-state{padding:40px;text-align:center;border:1px dashed;border-radius:8px;font-family:Montserrat,sans-serif;font-size:.9rem}.empty-state p{margin:0}.value-cell{display:flex;gap:4px;align-items:center}.value-cell .value-input{flex:1}.variable-toggle{flex-shrink:0}.variable-item{display:flex;flex-direction:column;gap:2px}.variable-name{font-family:monospace;font-weight:500}.variable-label{font-size:11px;color:var(--kendo-color-subtle, #888)}.variable-value{font-family:monospace;color:var(--kendo-color-primary, #0d6efd)}.variable-placeholder{color:var(--kendo-color-subtle, #888)}.variable-dropdown ::ng-deep .k-input-value-text{font-family:monospace}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: GridModule }, { kind: "component", type: i3.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "adaptiveMode", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "gridResizable", "rowReorderable", "navigable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "showInactiveTools", "isDetailExpanded", "isGroupExpanded", "dataLayoutMode"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "gridStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "csvExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i3.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i3.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterVariant", "filterable", "editable"] }, { kind: "directive", type: i3.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "directive", type: i3.HeaderTemplateDirective, selector: "[kendoGridHeaderTemplate]" }, { kind: "ngmodule", type: ButtonsModule }, { kind: "component", type: i4.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }, { kind: "ngmodule", type: DropDownsModule }, { kind: "directive", type: i3$1.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { kind: "component", type: i3$1.ComboBoxComponent, selector: "kendo-combobox", inputs: ["icon", "svgIcon", "inputAttributes", "showStickyHeader", "focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur", "inputFocus", "inputBlur", "escape"], exportAs: ["kendoComboBox"] }, { kind: "component", type: i3$1.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["customIconClass", "showStickyHeader", "icon", "svgIcon", "loading", "data", "value", "textField", "valueField", "adaptiveMode", "adaptiveTitle", "adaptiveSubtitle", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "leftRightArrowsNavigation", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }, { kind: "directive", type: i3$1.ValueTemplateDirective, selector: "[kendoDropDownListValueTemplate],[kendoDropDownTreeValueTemplate]" }, { kind: "ngmodule", type: InputsModule }, { kind: "component", type: i5.TextBoxComponent, selector: "kendo-textbox", inputs: ["focusableId", "title", "type", "disabled", "readonly", "tabindex", "value", "selectOnFocus", "showSuccessIcon", "showErrorIcon", "clearButton", "successIcon", "successSvgIcon", "errorIcon", "errorSvgIcon", "clearButtonIcon", "clearButtonSvgIcon", "size", "rounded", "fillMode", "tabIndex", "placeholder", "maxlength", "inputAttributes"], outputs: ["valueChange", "inputFocus", "inputBlur", "focus", "blur"], exportAs: ["kendoTextBox"] }, { kind: "component", type: i5.NumericTextBoxComponent, selector: "kendo-numerictextbox", inputs: ["focusableId", "disabled", "readonly", "title", "autoCorrect", "format", "max", "min", "decimals", "placeholder", "step", "spinners", "rangeValidation", "tabindex", "tabIndex", "changeValueOnScroll", "selectOnFocus", "value", "maxlength", "size", "rounded", "fillMode", "inputAttributes"], outputs: ["valueChange", "focus", "blur", "inputFocus", "inputBlur"], exportAs: ["kendoNumericTextBox"] }, { kind: "directive", type: i5.CheckBoxDirective, selector: "input[kendoCheckBox]", inputs: ["size", "rounded"] }, { kind: "ngmodule", type: DateInputsModule }, { kind: "component", type: i6.DateTimePickerComponent, selector: "kendo-datetimepicker", inputs: ["focusableId", "weekDaysFormat", "showOtherMonthDays", "value", "format", "twoDigitYearMax", "tabindex", "disabledDates", "popupSettings", "adaptiveTitle", "adaptiveSubtitle", "disabled", "readonly", "readOnlyInput", "cancelButton", "formatPlaceholder", "placeholder", "steps", "focusedDate", "calendarType", "animateCalendarNavigation", "weekNumber", "min", "max", "rangeValidation", "disabledDatesValidation", "incompleteDateValidation", "autoCorrectParts", "autoSwitchParts", "autoSwitchKeys", "enableMouseWheel", "allowCaretMode", "clearButton", "autoFill", "adaptiveMode", "inputAttributes", "defaultTab", "size", "rounded", "fillMode", "headerTemplate", "footerTemplate", "footer"], outputs: ["valueChange", "open", "close", "focus", "blur", "escape"], exportAs: ["kendo-datetimepicker"] }, { kind: "ngmodule", type: IconsModule }, { kind: "ngmodule", type: PopupModule }, { kind: "ngmodule", type: IntlModule }] });
|
|
4050
4178
|
}
|
|
4051
4179
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: FieldFilterEditorComponent, decorators: [{
|
|
4052
4180
|
type: Component,
|
|
@@ -4063,6 +4191,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
4063
4191
|
IntlModule
|
|
4064
4192
|
], template: `
|
|
4065
4193
|
<div class="field-filter-editor">
|
|
4194
|
+
@if (ckTypeId) {
|
|
4195
|
+
<div class="attribute-options">
|
|
4196
|
+
<label class="inline-checkbox">
|
|
4197
|
+
<input type="checkbox" kendoCheckBox
|
|
4198
|
+
[(ngModel)]="includeNavigationProperties"
|
|
4199
|
+
(ngModelChange)="onNavigationPropertiesChange()" />
|
|
4200
|
+
Include Navigation Properties
|
|
4201
|
+
</label>
|
|
4202
|
+
<label class="inline-field">
|
|
4203
|
+
Max Depth
|
|
4204
|
+
<kendo-numerictextbox
|
|
4205
|
+
[(ngModel)]="maxDepth"
|
|
4206
|
+
[min]="1" [max]="5" [step]="1" [format]="'n0'"
|
|
4207
|
+
[spinners]="true"
|
|
4208
|
+
[disabled]="!includeNavigationProperties"
|
|
4209
|
+
(valueChange)="onMaxDepthChange($event)"
|
|
4210
|
+
class="depth-input">
|
|
4211
|
+
</kendo-numerictextbox>
|
|
4212
|
+
</label>
|
|
4213
|
+
@if (isLoadingAttributes) {
|
|
4214
|
+
<span class="loading-hint">Loading...</span>
|
|
4215
|
+
}
|
|
4216
|
+
</div>
|
|
4217
|
+
}
|
|
4066
4218
|
<div class="toolbar">
|
|
4067
4219
|
<button
|
|
4068
4220
|
kendoButton
|
|
@@ -4109,25 +4261,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
4109
4261
|
<kendo-grid-column field="attributePath" title="Attribute Path" [width]="280">
|
|
4110
4262
|
<ng-template kendoGridCellTemplate let-dataItem>
|
|
4111
4263
|
@if (availableAttributes.length > 0) {
|
|
4112
|
-
<kendo-
|
|
4264
|
+
<kendo-combobox
|
|
4113
4265
|
[data]="filteredAttributeList"
|
|
4114
4266
|
[(ngModel)]="dataItem.attributePath"
|
|
4115
4267
|
(valueChange)="onAttributeChange(dataItem, $event)"
|
|
4116
4268
|
[textField]="'attributePath'"
|
|
4117
4269
|
[valueField]="'attributePath'"
|
|
4118
4270
|
[valuePrimitive]="true"
|
|
4271
|
+
[allowCustom]="true"
|
|
4119
4272
|
[filterable]="true"
|
|
4120
4273
|
(filterChange)="onAttributeFilterChange($event)"
|
|
4121
4274
|
[listHeight]="300"
|
|
4122
4275
|
[popupSettings]="{ appendTo: 'root', animate: true }"
|
|
4123
4276
|
class="attribute-dropdown">
|
|
4124
|
-
<ng-template
|
|
4277
|
+
<ng-template kendoComboBoxItemTemplate let-item>
|
|
4125
4278
|
<div class="attribute-item">
|
|
4126
4279
|
<span class="attribute-path">{{ item.attributePath }}</span>
|
|
4127
4280
|
<span class="attribute-type">{{ item.attributeValueType }}</span>
|
|
4128
4281
|
</div>
|
|
4129
4282
|
</ng-template>
|
|
4130
|
-
</kendo-
|
|
4283
|
+
</kendo-combobox>
|
|
4131
4284
|
} @else {
|
|
4132
4285
|
<kendo-textbox
|
|
4133
4286
|
[(ngModel)]="dataItem.attributePath"
|
|
@@ -4290,9 +4443,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImpor
|
|
|
4290
4443
|
</div>
|
|
4291
4444
|
}
|
|
4292
4445
|
</div>
|
|
4293
|
-
`, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.toolbar{display:flex;gap:10px;margin-bottom:5px}.filter-grid{border:1px solid #d5d5d5}.filter-grid ::ng-deep .k-grid-header .k-header{font-weight:600}.checkbox-column{text-align:center}.attribute-dropdown,.operator-dropdown,.attribute-input,.value-input{width:100%}.attribute-item{display:flex;justify-content:space-between;align-items:center;width:100%}.attribute-path{flex:1}.attribute-type{font-size:11px;color:#888;margin-left:8px;padding:2px 6px;background:#f0f0f0;border-radius:3px}.empty-state{padding:40px;text-align:center;border:1px dashed;border-radius:8px;font-family:Montserrat,sans-serif;font-size:.9rem}.empty-state p{margin:0}.value-cell{display:flex;gap:4px;align-items:center}.value-cell .value-input{flex:1}.variable-toggle{flex-shrink:0}.variable-item{display:flex;flex-direction:column;gap:2px}.variable-name{font-family:monospace;font-weight:500}.variable-label{font-size:11px;color:var(--kendo-color-subtle, #888)}.variable-value{font-family:monospace;color:var(--kendo-color-primary, #0d6efd)}.variable-placeholder{color:var(--kendo-color-subtle, #888)}.variable-dropdown ::ng-deep .k-input-value-text{font-family:monospace}\n"] }]
|
|
4446
|
+
`, styles: [".field-filter-editor{display:flex;flex-direction:column;gap:10px}.attribute-options{display:flex;align-items:center;gap:16px;font-size:.85rem}.inline-checkbox{display:flex;align-items:center;gap:6px;cursor:pointer;font-weight:400}.inline-field{display:flex;align-items:center;gap:6px;font-weight:400}.depth-input{width:80px}.loading-hint{font-size:.8rem;color:var(--kendo-color-subtle, #6c757d)}.toolbar{display:flex;gap:10px;margin-bottom:5px}.filter-grid{border:1px solid #d5d5d5}.filter-grid ::ng-deep .k-grid-header .k-header{font-weight:600}.checkbox-column{text-align:center}.attribute-dropdown,.operator-dropdown,.attribute-input,.value-input{width:100%}.attribute-item{display:flex;justify-content:space-between;align-items:center;width:100%}.attribute-path{flex:1}.attribute-type{font-size:11px;color:#888;margin-left:8px;padding:2px 6px;background:#f0f0f0;border-radius:3px}.empty-state{padding:40px;text-align:center;border:1px dashed;border-radius:8px;font-family:Montserrat,sans-serif;font-size:.9rem}.empty-state p{margin:0}.value-cell{display:flex;gap:4px;align-items:center}.value-cell .value-input{flex:1}.variable-toggle{flex-shrink:0}.variable-item{display:flex;flex-direction:column;gap:2px}.variable-name{font-family:monospace;font-weight:500}.variable-label{font-size:11px;color:var(--kendo-color-subtle, #888)}.variable-value{font-family:monospace;color:var(--kendo-color-primary, #0d6efd)}.variable-placeholder{color:var(--kendo-color-subtle, #888)}.variable-dropdown ::ng-deep .k-input-value-text{font-family:monospace}\n"] }]
|
|
4294
4447
|
}], propDecorators: { availableAttributes: [{
|
|
4295
4448
|
type: Input
|
|
4449
|
+
}], ckTypeId: [{
|
|
4450
|
+
type: Input
|
|
4296
4451
|
}], enableVariables: [{
|
|
4297
4452
|
type: Input
|
|
4298
4453
|
}], availableVariables: [{
|