@valtimo/logging 13.42.0 → 13.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,6 +21,60 @@ import * as i1$2 from '@angular/router';
21
21
  import { RouterModule } from '@angular/router';
22
22
  import { AuthGuardService } from '@valtimo/security';
23
23
 
24
+ /*
25
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
26
+ *
27
+ * Licensed under EUPL, Version 1.2 (the "License");
28
+ * you may not use this file except in compliance with the License.
29
+ * You may obtain a copy of the License at
30
+ *
31
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
32
+ *
33
+ * Unless required by applicable law or agreed to in writing, software
34
+ * distributed under the License is distributed on an "AS IS" basis,
35
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
36
+ * See the License for the specific language governing permissions and
37
+ * limitations under the License.
38
+ */
39
+ const LOGGING_LIST_TEST_IDS = {
40
+ /** Funnel icon in the table toolbar that reveals the search panel. */
41
+ filterButton: 'loggingListFilterButton',
42
+ clearSearchButton: 'loggingListClearSearchButton',
43
+ };
44
+ /**
45
+ * The search panel has no submit button — it applies itself on change, debounced.
46
+ */
47
+ const LOG_SEARCH_TEST_IDS = {
48
+ messageInput: 'logSearchMessageInput',
49
+ levelDropdown: 'logSearchLevelDropdown',
50
+ propertyKeyInput: 'logSearchPropertyKeyInput',
51
+ propertyValueInput: 'logSearchPropertyValueInput',
52
+ addPropertyButton: 'logSearchAddPropertyButton',
53
+ removePropertyButton: 'logSearchRemovePropertyButton',
54
+ clearButton: 'logSearchClearButton',
55
+ };
56
+ const LOG_DETAILS_TEST_IDS = {
57
+ modal: 'logDetailsModal',
58
+ message: 'logDetailsMessage',
59
+ timestamp: 'logDetailsTimestamp',
60
+ };
61
+
62
+ /*
63
+ * Copyright 2015-2026 Ritense BV, the Netherlands.
64
+ *
65
+ * Licensed under EUPL, Version 1.2 (the "License");
66
+ * you may not use this file except in compliance with the License.
67
+ * You may obtain a copy of the License at
68
+ *
69
+ * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
70
+ *
71
+ * Unless required by applicable law or agreed to in writing, software
72
+ * distributed under the License is distributed on an "AS IS" basis,
73
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
74
+ * See the License for the specific language governing permissions and
75
+ * limitations under the License.
76
+ */
77
+
24
78
  /*
25
79
  * Copyright 2015-2025 Ritense BV, the Netherlands.
26
80
  *
@@ -142,6 +196,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
142
196
  */
143
197
  class LogDetailsComponent {
144
198
  constructor() {
199
+ this.testIds = LOG_DETAILS_TEST_IDS;
145
200
  this.open = false;
146
201
  this.closeModalEvent = new EventEmitter();
147
202
  this.classesToIgnore = [
@@ -173,11 +228,11 @@ class LogDetailsComponent {
173
228
  return s;
174
229
  }
175
230
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LogDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: LogDetailsComponent, isStandalone: true, selector: "valtimo-log-details", inputs: { open: "open", logEvent: "logEvent" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
231
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: LogDetailsComponent, isStandalone: true, selector: "valtimo-log-details", inputs: { open: "open", logEvent: "logEvent" }, outputs: { closeModalEvent: "closeModalEvent" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n [open]=\"open\"\n size=\"lg\"\n [attr.data-test-id]=\"testIds.modal\"\n (close)=\"onCloseSelect()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\" [attr.data-test-id]=\"testIds.message\">\n {{ logEventFormatted?.formattedMessage || '-' }}\n </div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div [attr.data-test-id]=\"testIds.timestamp\">\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ModalModule }, { kind: "component", type: i3.Modal, selector: "cds-modal, ibm-modal", inputs: ["size", "theme", "ariaLabel", "open", "trigger", "hasScrollingContent"], outputs: ["overlaySelected", "close"] }, { kind: "component", type: i3.ModalHeader, selector: "cds-modal-header, ibm-modal-header", inputs: ["theme", "closeLabel", "showCloseButton"], outputs: ["closeSelect"] }, { kind: "directive", type: i3.ModalContent, selector: "[cdsModalContent], [ibmModalContent]", inputs: ["hasForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
177
232
  }
178
233
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LogDetailsComponent, decorators: [{
179
234
  type: Component,
180
- args: [{ selector: 'valtimo-log-details', standalone: true, imports: [CommonModule, TranslateModule, ModalModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
235
+ args: [{ selector: 'valtimo-log-details', standalone: true, imports: [CommonModule, TranslateModule, ModalModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n [open]=\"open\"\n size=\"lg\"\n [attr.data-test-id]=\"testIds.modal\"\n (close)=\"onCloseSelect()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\" [attr.data-test-id]=\"testIds.message\">\n {{ logEventFormatted?.formattedMessage || '-' }}\n </div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div [attr.data-test-id]=\"testIds.timestamp\">\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n", styles: [".log-header{padding-top:24px;padding-bottom:12px;color:var(--cds-text-primary);font-weight:600;font-size:16px;line-height:24px}.log-text{white-space:pre-wrap}.property-key{color:var(--cds-text-primary)}.property-value{color:var(--cds-text-secondary)}.valtimo-log-details__content{padding:32px}.valtimo-log-details__content ::ng-deep .highlight1{color:var(--cds-text-primary);font-weight:600}.valtimo-log-details__content ::ng-deep .valtimo-log-stacktrace{color:var(--cds-text-primary);font-weight:400;background-color:var(--cds-layer-01)}.valtimo-log-details__content ::ng-deep .highlight3{color:var(--cds-text-on-color-disabled);font-weight:300}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
181
236
  }], propDecorators: { open: [{
182
237
  type: Input
183
238
  }], logEvent: [{
@@ -209,6 +264,7 @@ class LogSearchComponent {
209
264
  this.cdsThemeService = cdsThemeService;
210
265
  this.fb = fb;
211
266
  this.iconService = iconService;
267
+ this.testIds = LOG_SEARCH_TEST_IDS;
212
268
  this.searchSubmitEvent = new EventEmitter();
213
269
  this.theme$ = this.cdsThemeService.currentTheme$.pipe(map((theme) => theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100));
214
270
  this.formGroup = this.fb.group({
@@ -367,7 +423,7 @@ class LogSearchComponent {
367
423
  this.formGroup.patchValue(mappedFormValue, { emitEvent: false });
368
424
  }
369
425
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LogSearchComponent, deps: [{ token: i1$1.CdsThemeService }, { token: i2$1.FormBuilder }, { token: i3.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
370
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "readonly", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: TimePickerModule }, { kind: "component", type: i3.TimePicker, selector: "cds-timepicker, ibm-timepicker", inputs: ["invalid", "invalidText", "label", "hideLabel", "placeholder", "pattern", "id", "disabled", "value", "maxLength", "skeleton", "theme", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
426
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.25", type: LogSearchComponent, isStandalone: true, selector: "valtimo-log-search", inputs: { initSearchRequest: "initSearchRequest" }, outputs: { searchSubmitEvent: "searchSubmitEvent" }, viewQueries: [{ propertyName: "_afterTimestampDatePicker", first: true, predicate: ["afterTimestamp"], descendants: true }, { propertyName: "_beforeTimestampDatePicker", first: true, predicate: ["beforeTimestamp"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.messageInput\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.levelDropdown\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyKeyInput\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyValueInput\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [attr.data-test-id]=\"testIds.removePropertyButton\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.addPropertyButton\"\n (click)=\"addPropertySearchField()\"\n >\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button\n cdsButton=\"tertiary\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.clearButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "component", type: i3.Dropdown, selector: "cds-dropdown, ibm-dropdown", inputs: ["id", "label", "hideLabel", "helperText", "placeholder", "displayValue", "clearText", "size", "type", "theme", "disabled", "readonly", "skeleton", "inline", "disableArrowKeys", "invalid", "invalidText", "warn", "warnText", "appendInline", "scrollableContainer", "itemValueKey", "selectionFeedback", "menuButtonLabel", "selectedLabel", "dropUp", "fluid"], outputs: ["selected", "onClose", "close"] }, { kind: "component", type: i3.DropdownList, selector: "cds-dropdown-list, ibm-dropdown-list", inputs: ["ariaLabel", "items", "listTpl", "type", "showTitles"], outputs: ["select", "scroll", "blurIntent"] }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "ngmodule", type: InputModule }, { kind: "component", type: i3.TextInputLabelComponent, selector: "cds-text-label, ibm-text-label", inputs: ["labelInputID", "disabled", "skeleton", "labelTemplate", "textInputTemplate", "helperText", "invalidText", "invalid", "warn", "warnText", "ariaLabel", "fluid"] }, { kind: "directive", type: i3.TextInput, selector: "[cdsText], [ibmText]", inputs: ["theme", "size", "invalid", "warn", "skeleton"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2$1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i3.DatePicker, selector: "cds-date-picker, ibm-date-picker", inputs: ["range", "dateFormat", "language", "label", "helperText", "rangeHelperText", "rangeLabel", "placeholder", "ariaLabel", "inputPattern", "id", "value", "theme", "disabled", "readonly", "invalid", "invalidText", "warn", "warnText", "size", "rangeInvalid", "rangeInvalidText", "rangeWarn", "rangeWarnText", "skeleton", "plugins", "flatpickrOptions"], outputs: ["valueChange", "onClose"] }, { kind: "ngmodule", type: TimePickerModule }, { kind: "component", type: i3.TimePicker, selector: "cds-timepicker, ibm-timepicker", inputs: ["invalid", "invalidText", "label", "hideLabel", "placeholder", "pattern", "id", "disabled", "value", "maxLength", "skeleton", "theme", "size"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
371
427
  }
372
428
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LogSearchComponent, decorators: [{
373
429
  type: Component,
@@ -382,7 +438,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
382
438
  FormsModule,
383
439
  DatePickerModule,
384
440
  TimePickerModule,
385
- ], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
441
+ ], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.messageInput\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.levelDropdown\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyKeyInput\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyValueInput\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [attr.data-test-id]=\"testIds.removePropertyButton\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.addPropertyButton\"\n (click)=\"addPropertySearchField()\"\n >\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button\n cdsButton=\"tertiary\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.clearButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n", styles: [".valtimo-log-search{flex-direction:column;padding:16px;max-width:880px}.valtimo-log-search,.valtimo-log-search__property,.valtimo-log-search__timestamp,.valtimo-log-search__datetime{display:flex;gap:16px}.valtimo-log-search__message{grid-area:message}.valtimo-log-search__level{grid-area:level}.valtimo-log-search__fields{display:grid;gap:16px;grid-template-columns:repeat(2,1fr);grid-template-areas:\"message timestamp\" \"level timestamp\"}.valtimo-log-search__timestamp{grid-area:timestamp;flex-direction:column}.valtimo-log-search__datetime{align-items:flex-end}.valtimo-log-search__properties{display:flex;flex-direction:column}.valtimo-log-search__properties>*:not(:last-child):not(.valtimo-log-search__label){margin-bottom:16px}.valtimo-log-search__property{align-items:flex-end}.valtimo-log-search__label{font-size:var(--cds-label-01-font-size);color:var(--cds-text-secondary)}.valtimo-log-search ::ng-deep .cds--date-picker.cds--date-picker--single .cds--date-picker__input{inline-size:unset!important}\n/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
386
442
  }], ctorParameters: () => [{ type: i1$1.CdsThemeService }, { type: i2$1.FormBuilder }, { type: i3.IconService }], propDecorators: { _afterTimestampDatePicker: [{
387
443
  type: ViewChild,
388
444
  args: ['afterTimestamp']
@@ -416,6 +472,7 @@ class LoggingListComponent {
416
472
  this.iconService = iconService;
417
473
  this.loggingApiService = loggingApiService;
418
474
  this.router = router;
475
+ this.testIds = LOGGING_LIST_TEST_IDS;
419
476
  this.loading$ = new BehaviorSubject(true);
420
477
  this.logItems$ = this.activatedRoute.queryParamMap.pipe(tap(() => this.loading$.next(true)), switchMap(queryParams => this.loggingApiService.getTechnicalLogs({
421
478
  ...queryParams['params'],
@@ -553,7 +610,7 @@ class LoggingListComponent {
553
610
  });
554
611
  }
555
612
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LoggingListComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i3.IconService }, { token: LoggingApiService }, { token: i1$2.Router }], target: i0.ɵɵFactoryTarget.Component }); }
556
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button overflowTrigger cdsButton=\"ghost\" [iconOnly]=\"true\">\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1$1.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
613
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.25", type: LoggingListComponent, isStandalone: true, selector: "ng-component", providers: [LoggingApiService], ngImport: i0, template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n [attr.data-test-id]=\"testIds.filterButton\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.clearSearchButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i1$1.CarbonListComponent, selector: "valtimo-carbon-list", inputs: ["items", "fields", "tableTranslations", "paginatorConfig", "pagination", "loading", "skeletonRowCount", "actions", "actionItems", "showActionItems", "header", "hideColumnHeader", "initialSortState", "sortState", "isSearchable", "initialSearchValue", "searchDebounceMs", "invalidSearchFields", "searchFields", "enableSingleSelection", "lastColumnTemplate", "paginationIdentifier", "showSelectionColumn", "striped", "hideToolbar", "lockedTooltipTranslationKey", "movingRowsEnabled", "dragAndDrop", "dragAndDropDisabled", "expandedRowTemplate", "expandedRowKey", "trackByKey"], outputs: ["rowClicked", "paginationClicked", "paginationSet", "search", "sortChanged", "moveRow", "itemsReordered"] }, { kind: "component", type: i1$1.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }, { kind: "component", type: OverflowMenuComponent, selector: "v-overflow-menu", inputs: ["open", "placement", "menuWidth", "offsetX", "offsetY", "closeOnSelect", "useHostAsReference", "portalToBody"], outputs: ["openChange"] }, { kind: "ngmodule", type: DropdownModule }, { kind: "ngmodule", type: IconModule }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: LogDetailsComponent, selector: "valtimo-log-details", inputs: ["open", "logEvent"], outputs: ["closeModalEvent"] }, { kind: "component", type: LogSearchComponent, selector: "valtimo-log-search", inputs: ["initSearchRequest"], outputs: ["searchSubmitEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
557
614
  }
558
615
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImport: i0, type: LoggingListComponent, decorators: [{
559
616
  type: Component,
@@ -567,7 +624,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
567
624
  IconModule,
568
625
  LogDetailsComponent,
569
626
  LogSearchComponent,
570
- ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button overflowTrigger cdsButton=\"ghost\" [iconOnly]=\"true\">\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
627
+ ], providers: [LoggingApiService], template: "<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n [attr.data-test-id]=\"testIds.filterButton\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.clearSearchButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
571
628
  }], ctorParameters: () => [{ type: i1$2.ActivatedRoute }, { type: i3.IconService }, { type: LoggingApiService }, { type: i1$2.Router }] });
572
629
 
573
630
  /*
@@ -677,5 +734,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.25", ngImpo
677
734
  * Generated bundle index. Do not edit.
678
735
  */
679
736
 
680
- export { LoggingModule };
737
+ export { LOGGING_LIST_TEST_IDS, LOG_DETAILS_TEST_IDS, LOG_SEARCH_TEST_IDS, LoggingModule };
681
738
  //# sourceMappingURL=valtimo-logging.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {LoggingEvent} from '../../models';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n @Input() public open = false;\n\n @Input() public set logEvent(logEvent: LoggingEvent) {\n this.logEventFormatted = {\n ...logEvent,\n stacktrace: this.formatStacktrace(logEvent?.stacktrace),\n };\n }\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public logEventFormatted: LoggingEvent;\n\n public readonly classesToIgnore: string[] = [\n 'LoggingContextKt',\n 'LoggableResourceAspect',\n 'RunWithoutAuthorizationAspect',\n 'UserLoggingFilter',\n ];\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n\n private formatStacktrace(s?: string): string {\n if (!s) {\n return s;\n }\n\n s = s.replace(/^[^\\t].+(Exception|Error): .+/gm, '<span class=\"highlight1\">$&</span>');\n s = s.replace(/^Caused by: .+/gm, '<span class=\"highlight1\">$&</span>');\n this.classesToIgnore.forEach(\n c =>\n (s = s.replace(\n new RegExp(`^\\tat .+\\.${c}\\..+`, 'gm'),\n '<span class=\"highlight3\">$&</span>'\n ))\n );\n s = s.replace(/^\\tat com.(ritense|valtimo).+/gm, '<span class=\"highlight2\">$&</span>');\n s = s.replace(/^\\t.+common frames omitted$/gm, '<span class=\"highlight3\">$&</span>');\n s = s.replace(/^\\tat .+/gm, '<span class=\"highlight3\">$&</span>');\n return s;\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal [open]=\"open\" size=\"lg\" (close)=\"onCloseSelect()\">\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\">{{ logEventFormatted?.formattedMessage || '-' }}</div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div>\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n TimePickerModule,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, map, Observable, Subscription} from 'rxjs';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n FormsModule,\n DatePickerModule,\n TimePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n beforeTime: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n afterTime: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private initTimeForm(formValue: LoggingEventSearchFormValue): void {\n const {beforeTimestamp, afterTimestamp} = formValue;\n\n if (!!beforeTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(beforeTimestamp);\n this.formGroup.patchValue({beforeTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n\n if (!!afterTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(afterTimestamp);\n this.formGroup.patchValue({afterTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n }\n\n private convertTimestampToTimeString(timestamp: string): {hours: string; minutes: string} {\n const date = new Date(timestamp);\n return {\n hours: `0${date.getHours()}`.slice(-2),\n minutes: `0${date.getMinutes()}`.slice(-2),\n };\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {\n afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),\n }),\n ...(!!formValue.beforeTimestamp && {\n beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),\n }),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private mapTimeStamps(date: string, time: string | null): string {\n if (!time) return date;\n\n const timeValue: string[] = time.split(':');\n const dateObject = new Date(date);\n dateObject.setHours(+timeValue[0], +timeValue[1]);\n\n return flatpickr.formatDate(dateObject, 'Z');\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n this.initTimeForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button cdsButton=\"primary\" size=\"sm\" type=\"button\" (click)=\"addPropertySearchField()\">\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button cdsButton=\"tertiary\" type=\"button\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n CarbonTag,\n ColumnConfig,\n DEFAULT_PAGINATION,\n OverflowMenuComponent,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n OverflowMenuComponent,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n levelTags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly isSearchActive$: Observable<boolean> = this.searchRequest$.pipe(\n map((searchRequest: LoggingEventSearchRequest) => Object.keys(searchRequest).length > 0)\n );\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'levelTags',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(\n rowClickEvent: LoggingEvent & {ctrlClick: boolean; tags: CarbonTag[]}\n ): void {\n const {ctrlClick: _1, tags: _2, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button overflowTrigger cdsButton=\"ghost\" [iconOnly]=\"true\">\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button cdsButton=\"primary\" (click)=\"onClearFilter()\">\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/shared';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3.LoggingApiService","i6"],"mappings":"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"}
1
+ {"version":3,"file":"valtimo-logging.mjs","sources":["../../../../projects/valtimo/logging/src/lib/constants/logging.test-ids.ts","../../../../projects/valtimo/logging/src/lib/constants/index.ts","../../../../projects/valtimo/logging/src/lib/models/logging.model.ts","../../../../projects/valtimo/logging/src/lib/models/index.ts","../../../../projects/valtimo/logging/src/lib/services/logging-api.service.ts","../../../../projects/valtimo/logging/src/lib/services/index.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-details/log-details.component.html","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.ts","../../../../projects/valtimo/logging/src/lib/components/log-search/log-search.component.html","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.ts","../../../../projects/valtimo/logging/src/lib/components/logging-list/logging-list.component.html","../../../../projects/valtimo/logging/src/logging-routing.module.ts","../../../../projects/valtimo/logging/src/logging.module.ts","../../../../projects/valtimo/logging/src/public_api.ts","../../../../projects/valtimo/logging/src/valtimo-logging.ts"],"sourcesContent":["/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst LOGGING_LIST_TEST_IDS = {\n /** Funnel icon in the table toolbar that reveals the search panel. */\n filterButton: 'loggingListFilterButton',\n clearSearchButton: 'loggingListClearSearchButton',\n} as const;\n\n/**\n * The search panel has no submit button — it applies itself on change, debounced.\n */\nconst LOG_SEARCH_TEST_IDS = {\n messageInput: 'logSearchMessageInput',\n levelDropdown: 'logSearchLevelDropdown',\n propertyKeyInput: 'logSearchPropertyKeyInput',\n propertyValueInput: 'logSearchPropertyValueInput',\n addPropertyButton: 'logSearchAddPropertyButton',\n removePropertyButton: 'logSearchRemovePropertyButton',\n clearButton: 'logSearchClearButton',\n} as const;\n\nconst LOG_DETAILS_TEST_IDS = {\n modal: 'logDetailsModal',\n message: 'logDetailsMessage',\n timestamp: 'logDetailsTimestamp',\n} as const;\n\nexport {LOGGING_LIST_TEST_IDS, LOG_SEARCH_TEST_IDS, LOG_DETAILS_TEST_IDS};\n","/*\n * Copyright 2015-2026 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.test-ids';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ninterface LoggingEvent {\n timestamp: string;\n formattedMessage: string;\n level: string;\n properties: Array<LoggingEventProperty>;\n stacktrace: string;\n}\n\ninterface LoggingEventProperty {\n key: string;\n value: string;\n}\n\ninterface LoggingEventSearchRequest {\n afterTimestamp?: string;\n beforeTimestamp?: string;\n level?: string;\n likeFormattedMessage?: string;\n properties?: Array<LoggingEventProperty>;\n size?: number;\n page?: number;\n}\n\nenum LogLevel {\n DEBUG = 'DEBUG',\n ERROR = 'ERROR',\n INFO = 'INFO',\n TRACE = 'TRACE',\n WARN = 'WARN',\n}\n\nconst LOG_LEVEL_TAG = {\n [LogLevel.DEBUG]: 'teal',\n [LogLevel.ERROR]: 'red',\n [LogLevel.INFO]: 'blue',\n [LogLevel.TRACE]: 'grey',\n [LogLevel.WARN]: 'purple',\n};\n\nconst LOG_ELLIPSIS_LIMIT = 128;\n\nexport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventSearchRequest,\n LogLevel,\n};\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging.model';\nexport * from './search.model';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ConfigService, Page, BaseApiService} from '@valtimo/shared';\nimport {Observable} from 'rxjs';\nimport {LoggingEvent, LoggingEventSearchRequest} from '../models';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class LoggingApiService extends BaseApiService {\n constructor(\n protected readonly configService: ConfigService,\n protected readonly httpClient: HttpClient\n ) {\n super(httpClient, configService);\n }\n\n public getTechnicalLogs(\n searchRequest: LoggingEventSearchRequest\n ): Observable<Page<LoggingEvent>> {\n const {size, page, ...searchBody} = searchRequest;\n const params = new HttpParams({\n fromObject: {size, page} as any,\n });\n\n return this.httpClient.post<Page<LoggingEvent>>(\n this.getApiUrl('management/v1/logging'),\n searchBody,\n {\n params,\n }\n );\n }\n}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './logging-api.service';\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {ModalModule} from 'carbon-components-angular';\nimport {LoggingEvent} from '../../models';\nimport {LOG_DETAILS_TEST_IDS} from '../../constants';\n\n@Component({\n selector: 'valtimo-log-details',\n templateUrl: './log-details.component.html',\n styleUrl: './log-details.component.scss',\n standalone: true,\n imports: [CommonModule, TranslateModule, ModalModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LogDetailsComponent {\n public readonly testIds = LOG_DETAILS_TEST_IDS;\n @Input() public open = false;\n\n @Input() public set logEvent(logEvent: LoggingEvent) {\n this.logEventFormatted = {\n ...logEvent,\n stacktrace: this.formatStacktrace(logEvent?.stacktrace),\n };\n }\n\n @Output() public readonly closeModalEvent = new EventEmitter();\n\n public logEventFormatted: LoggingEvent;\n\n public readonly classesToIgnore: string[] = [\n 'LoggingContextKt',\n 'LoggableResourceAspect',\n 'RunWithoutAuthorizationAspect',\n 'UserLoggingFilter',\n ];\n\n public onCloseSelect(): void {\n this.closeModalEvent.emit();\n }\n\n private formatStacktrace(s?: string): string {\n if (!s) {\n return s;\n }\n\n s = s.replace(/^[^\\t].+(Exception|Error): .+/gm, '<span class=\"highlight1\">$&</span>');\n s = s.replace(/^Caused by: .+/gm, '<span class=\"highlight1\">$&</span>');\n this.classesToIgnore.forEach(\n c =>\n (s = s.replace(\n new RegExp(`^\\tat .+\\.${c}\\..+`, 'gm'),\n '<span class=\"highlight3\">$&</span>'\n ))\n );\n s = s.replace(/^\\tat com.(ritense|valtimo).+/gm, '<span class=\"highlight2\">$&</span>');\n s = s.replace(/^\\t.+common frames omitted$/gm, '<span class=\"highlight3\">$&</span>');\n s = s.replace(/^\\tat .+/gm, '<span class=\"highlight3\">$&</span>');\n return s;\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<cds-modal\n [open]=\"open\"\n size=\"lg\"\n [attr.data-test-id]=\"testIds.modal\"\n (close)=\"onCloseSelect()\"\n>\n <cds-modal-header [showCloseButton]=\"true\" (closeSelect)=\"onCloseSelect()\">\n {{ 'logging.detailsTitle' | translate }}\n </cds-modal-header>\n\n <section cdsModalContent class=\"valtimo-log-details__content\">\n <h4 class=\"log-header\">\n {{ 'logging.formattedMessage' | translate }}\n </h4>\n\n <div class=\"log-text\" [attr.data-test-id]=\"testIds.message\">\n {{ logEventFormatted?.formattedMessage || '-' }}\n </div>\n\n <h4 class=\"log-header\">\n {{ 'logging.timestamp' | translate }}\n </h4>\n\n <div [attr.data-test-id]=\"testIds.timestamp\">\n {{ logEventFormatted?.timestamp || '-' }}\n </div>\n\n @if (logEventFormatted?.properties?.length > 0) {\n <h4 class=\"log-header\">\n {{ 'logging.properties' | translate }}\n </h4>\n <div>\n @for (property of logEventFormatted.properties; track property.key) {\n <div>\n <span class=\"property-key\">{{ property.key }}: </span>\n <span class=\"property-value\">{{ property.value }}</span>\n </div>\n }\n </div>\n }\n\n @if (logEventFormatted?.stacktrace) {\n <h4 class=\"log-header\">\n {{ 'logging.stacktrace' | translate }}\n </h4>\n <div>\n <pre class=\"valtimo-log-stacktrace\" [innerHtml]=\"logEventFormatted.stacktrace\"></pre>\n </div>\n }\n </section>\n</cds-modal>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ViewChild,\n} from '@angular/core';\nimport {FormArray, FormBuilder, FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {CARBON_THEME, CdsThemeService, CurrentCarbonTheme} from '@valtimo/components';\nimport {\n ButtonModule,\n DatePicker,\n DatePickerModule,\n DropdownModule,\n IconModule,\n IconService,\n InputModule,\n ListItem,\n TimePickerModule,\n} from 'carbon-components-angular';\nimport flatpickr from 'flatpickr';\nimport {debounceTime, map, Observable, Subscription} from 'rxjs';\nimport {LOG_SEARCH_TEST_IDS} from '../../constants';\nimport {\n LoggingEventProperty,\n LoggingEventSearchFormValue,\n LoggingEventSearchRequest,\n LogLevel,\n} from '../../models';\n\n@Component({\n selector: 'valtimo-log-search',\n templateUrl: './log-search.component.html',\n styleUrl: './log-search.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n DropdownModule,\n IconModule,\n InputModule,\n ReactiveFormsModule,\n FormsModule,\n DatePickerModule,\n TimePickerModule,\n ],\n})\nexport class LogSearchComponent implements OnInit, AfterViewInit, OnDestroy {\n public readonly testIds = LOG_SEARCH_TEST_IDS;\n @ViewChild('afterTimestamp') private readonly _afterTimestampDatePicker: DatePicker;\n @ViewChild('beforeTimestamp') private readonly _beforeTimestampDatePicker: DatePicker;\n\n @Input() public initSearchRequest: LoggingEventSearchRequest;\n @Output() public readonly searchSubmitEvent = new EventEmitter<LoggingEventSearchRequest>();\n\n public readonly theme$: Observable<CARBON_THEME> = this.cdsThemeService.currentTheme$.pipe(\n map((theme: CurrentCarbonTheme) =>\n theme === CurrentCarbonTheme.G10 ? CARBON_THEME.WHITE : CARBON_THEME.G100\n )\n );\n\n public readonly formGroup = this.fb.group({\n likeFormattedMessage: this.fb.control<string>(''),\n level: this.fb.control<ListItem>({content: '', selected: false}),\n beforeTimestamp: this.fb.control<string>(''),\n beforeTime: this.fb.control<string>(''),\n afterTimestamp: this.fb.control<string>(''),\n afterTime: this.fb.control<string>(''),\n properties: this.fb.array([\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n }),\n ]),\n });\n\n public logLevelItems: Partial<ListItem>[] = [\n {\n content: LogLevel.ERROR,\n },\n {\n content: LogLevel.WARN,\n },\n {\n content: LogLevel.INFO,\n },\n {\n content: LogLevel.DEBUG,\n },\n {\n content: LogLevel.TRACE,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n public get propertiesArray(): FormArray {\n return this.formGroup.get('properties') as FormArray;\n }\n\n constructor(\n private readonly cdsThemeService: CdsThemeService,\n private readonly fb: FormBuilder,\n private readonly iconService: IconService\n ) {\n this.iconService.register(TrashCan16);\n }\n\n public ngOnInit(): void {\n this.setInitialForm();\n\n this._subscriptions.add(\n this.formGroup.valueChanges.pipe(debounceTime(500)).subscribe(() => {\n this.searchSubmitEvent.emit(this.mapFormValueToLogSearch());\n })\n );\n }\n\n public ngAfterViewInit(): void {\n const afterTimestampControlValue = this.formGroup.get('afterTimestamp')?.value;\n const beforeTimestampControlValue = this.formGroup.get('beforeTimestamp')?.value;\n\n if (!!afterTimestampControlValue) {\n this._afterTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(afterTimestampControlValue), 'd-m-Y'),\n ]);\n }\n\n if (!!beforeTimestampControlValue) {\n this._beforeTimestampDatePicker.writeValue([\n flatpickr.formatDate(new Date(beforeTimestampControlValue), 'd-m-Y'),\n ]);\n }\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onClearFilter(): void {\n this.formGroup.reset();\n this._afterTimestampDatePicker.writeValue([]);\n this._beforeTimestampDatePicker.writeValue([]);\n }\n\n public onDateSelected(control: 'afterTimestamp' | 'beforeTimestamp', event: Date[]): void {\n this.formGroup.get(control)?.patchValue(flatpickr.formatDate(event[0], 'Z'));\n }\n\n public addPropertySearchField(): void {\n this.propertiesArray.push(\n this.fb.group({\n key: this.fb.control<string>(''),\n value: this.fb.control<string>(''),\n })\n );\n }\n\n public removePropertySearchField(index: number): void {\n this.propertiesArray.removeAt(index);\n }\n\n private initLogItems(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.level) return;\n\n this.logLevelItems = this.logLevelItems.map((levelItem: Partial<ListItem>) => ({\n ...levelItem,\n selected: formValue.level?.content === levelItem.content,\n }));\n }\n\n private initPropertiesForm(formValue: LoggingEventSearchFormValue): void {\n if (!formValue.properties) return;\n\n for (let i = 1; i < formValue.properties.length; i++) {\n this.addPropertySearchField();\n }\n }\n\n private initTimeForm(formValue: LoggingEventSearchFormValue): void {\n const {beforeTimestamp, afterTimestamp} = formValue;\n\n if (!!beforeTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(beforeTimestamp);\n this.formGroup.patchValue({beforeTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n\n if (!!afterTimestamp) {\n const {hours, minutes} = this.convertTimestampToTimeString(afterTimestamp);\n this.formGroup.patchValue({afterTime: `${hours}:${minutes}`}, {emitEvent: false});\n }\n }\n\n private convertTimestampToTimeString(timestamp: string): {hours: string; minutes: string} {\n const date = new Date(timestamp);\n return {\n hours: `0${date.getHours()}`.slice(-2),\n minutes: `0${date.getMinutes()}`.slice(-2),\n };\n }\n\n private mapFormValueToLogSearch(): LoggingEventSearchRequest {\n const formValue = this.formGroup.getRawValue();\n const properties = formValue.properties.filter(\n (property: {key: string | null; value: string | null}) => !!property.key && !!property.value\n ) as LoggingEventProperty[];\n\n return {\n ...(!!formValue.likeFormattedMessage && {\n likeFormattedMessage: formValue.likeFormattedMessage,\n }),\n ...(!!formValue.level?.content && {level: formValue.level.content}),\n ...(!!formValue.afterTimestamp && {\n afterTimestamp: this.mapTimeStamps(formValue.afterTimestamp, formValue.afterTime),\n }),\n ...(!!formValue.beforeTimestamp && {\n beforeTimestamp: this.mapTimeStamps(formValue.beforeTimestamp, formValue.beforeTime),\n }),\n ...(!!properties.length && {properties}),\n };\n }\n\n private mapSearchRequestToFormValue(\n searchRequest: LoggingEventSearchRequest\n ): LoggingEventSearchFormValue {\n return {\n ...(searchRequest.likeFormattedMessage && {\n likeFormattedMessage: searchRequest.likeFormattedMessage,\n }),\n ...(searchRequest.level && {\n level: {\n content: searchRequest.level,\n selected: true,\n },\n }),\n ...(searchRequest.afterTimestamp && {afterTimestamp: searchRequest.afterTimestamp}),\n ...(searchRequest.beforeTimestamp && {beforeTimestamp: searchRequest.beforeTimestamp}),\n ...(searchRequest.properties && {properties: searchRequest.properties}),\n };\n }\n\n private mapTimeStamps(date: string, time: string | null): string {\n if (!time) return date;\n\n const timeValue: string[] = time.split(':');\n const dateObject = new Date(date);\n dateObject.setHours(+timeValue[0], +timeValue[1]);\n\n return flatpickr.formatDate(dateObject, 'Z');\n }\n\n private setInitialForm(): void {\n const mappedFormValue: LoggingEventSearchFormValue = this.mapSearchRequestToFormValue(\n this.initSearchRequest\n );\n this.initLogItems(mappedFormValue);\n this.initPropertiesForm(mappedFormValue);\n this.initTimeForm(mappedFormValue);\n\n this.formGroup.patchValue(mappedFormValue, {emitEvent: false});\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n<form\n *ngIf=\"theme$ | async as theme\"\n class=\"valtimo-log-search\"\n [formGroup]=\"formGroup\"\n (click)=\"$event.stopImmediatePropagation()\"\n>\n <section class=\"valtimo-log-search__fields\">\n <cds-text-label class=\"valtimo-log-search__message\">\n {{ 'logging.columns.formattedMessage' | translate }}\n\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.messageInput\"\n formControlName=\"likeFormattedMessage\"\n [placeholder]=\"'logging.columns.formattedMessage' | translate\"\n />\n </cds-text-label>\n\n <cds-dropdown\n class=\"valtimo-log-search__level\"\n formControlName=\"level\"\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.levelDropdown\"\n [appendInline]=\"true\"\n [label]=\"'logging.columns.level' | translate\"\n [placeholder]=\"'logging.columns.level' | translate\"\n >\n <cds-dropdown-list [items]=\"logLevelItems\"></cds-dropdown-list>\n </cds-dropdown>\n\n <div class=\"valtimo-log-search__timestamp\">\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #afterTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.afterTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('afterTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"afterTime\">\n </cds-timepicker>\n </div>\n\n <div class=\"valtimo-log-search__datetime\">\n <cds-date-picker\n #beforeTimestamp\n [attr.data-carbon-theme]=\"theme\"\n [label]=\"'logging.search.beforeTimestamp' | translate\"\n placeholder=\"DD-MM-YYYY\"\n [dateFormat]=\"'d-m-Y'\"\n (valueChange)=\"onDateSelected('beforeTimestamp', $event)\"\n ></cds-date-picker>\n\n <cds-timepicker [attr.data-carbon-theme]=\"theme\" formControlName=\"beforeTime\">\n </cds-timepicker>\n </div>\n </div>\n </section>\n\n <section formArrayName=\"properties\" class=\"valtimo-log-search__properties\">\n <span class=\"valtimo-log-search__label\"> {{ 'logging.search.properties' | translate }} </span>\n\n @for (propertyGroup of propertiesArray.controls; track $index) {\n <form [formGroup]=\"propertyGroup\" class=\"valtimo-log-search__property\">\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyKeyInput\"\n formControlName=\"key\"\n [placeholder]=\"'interface.key' | translate\"\n />\n </cds-text-label>\n\n <cds-text-label>\n <input\n cdsText\n [attr.data-carbon-theme]=\"theme\"\n [attr.data-test-id]=\"testIds.propertyValueInput\"\n formControlName=\"value\"\n [placeholder]=\"'interface.value' | translate\"\n />\n </cds-text-label>\n\n <button\n cdsButton=\"danger--ghost\"\n [attr.data-test-id]=\"testIds.removePropertyButton\"\n [disabled]=\"$count === 1\"\n iconOnly=\"true\"\n type=\"button\"\n (click)=\"removePropertySearchField($index)\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n </form>\n }\n\n <button\n cdsButton=\"primary\"\n size=\"sm\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.addPropertyButton\"\n (click)=\"addPropertySearchField()\"\n >\n {{ 'logging.search.addProperty' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"add\" size=\"16\"></svg>\n </button>\n </section>\n\n <button\n cdsButton=\"tertiary\"\n type=\"button\"\n [attr.data-test-id]=\"testIds.clearButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</form>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, OnDestroy, OnInit} from '@angular/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Filter16, TrashCan16} from '@carbon/icons';\nimport {TranslateModule} from '@ngx-translate/core';\nimport {\n CARBON_CONSTANTS,\n CarbonListItem,\n CarbonListModule,\n CarbonTag,\n ColumnConfig,\n DEFAULT_PAGINATION,\n OverflowMenuComponent,\n Pagination,\n ViewType,\n} from '@valtimo/components';\nimport {Page} from '@valtimo/shared';\nimport {\n ButtonModule,\n DropdownModule,\n IconModule,\n IconService,\n} from 'carbon-components-angular';\nimport {\n BehaviorSubject,\n combineLatest,\n map,\n Observable,\n startWith,\n Subscription,\n switchMap,\n take,\n tap,\n} from 'rxjs';\nimport {\n LOG_ELLIPSIS_LIMIT,\n LOG_LEVEL_TAG,\n LoggingEvent,\n LoggingEventProperty,\n LoggingEventQueryParams,\n LoggingEventSearchRequest,\n} from '../../models';\nimport {LoggingApiService} from '../../services';\nimport {LogDetailsComponent} from '../log-details/log-details.component';\nimport {LogSearchComponent} from '../log-search/log-search.component';\nimport {LOGGING_LIST_TEST_IDS} from '../../constants';\n\n@Component({\n templateUrl: './logging-list.component.html',\n styleUrl: './logging-list.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n CommonModule,\n TranslateModule,\n ButtonModule,\n CarbonListModule,\n OverflowMenuComponent,\n DropdownModule,\n IconModule,\n LogDetailsComponent,\n LogSearchComponent,\n ],\n providers: [LoggingApiService],\n})\nexport class LoggingListComponent implements OnInit, OnDestroy {\n public readonly testIds = LOGGING_LIST_TEST_IDS;\n public readonly loading$ = new BehaviorSubject<boolean>(true);\n public readonly logItems$: Observable<CarbonListItem> = this.activatedRoute.queryParamMap.pipe(\n tap(() => this.loading$.next(true)),\n switchMap(queryParams =>\n this.loggingApiService.getTechnicalLogs({\n ...queryParams['params'],\n ...(!!queryParams['params']?.properties && {\n properties: this.base64ToObject(queryParams['params'].properties),\n }),\n })\n ),\n map((loggingPage: Page<LoggingEvent>) => {\n this.pagination$.next({\n ...this.pagination$.getValue(),\n collectionSize: loggingPage.totalElements,\n });\n\n return loggingPage.content.map((logEvent: LoggingEvent) => ({\n ...logEvent,\n levelTags: [\n {\n content: logEvent.level,\n type: LOG_LEVEL_TAG[logEvent.level],\n },\n ],\n }));\n }),\n startWith([]),\n tap(() => {\n this.loading$.next(false);\n })\n );\n\n public readonly searchRequest$ = new BehaviorSubject<LoggingEventSearchRequest>({});\n public readonly isSearchActive$: Observable<boolean> = this.searchRequest$.pipe(\n map((searchRequest: LoggingEventSearchRequest) => Object.keys(searchRequest).length > 0)\n );\n public readonly pagination$ = new BehaviorSubject<Pagination>(DEFAULT_PAGINATION);\n public readonly logDetailsOpen$ = new BehaviorSubject<boolean>(false);\n public readonly selectedLogEvent$ = new BehaviorSubject<LoggingEvent | null>(null);\n\n public readonly FIELDS: ColumnConfig[] = [\n {\n key: 'timestamp',\n label: 'logging.columns.timestamp',\n viewType: ViewType.DATE_TIME,\n },\n {\n key: 'levelTags',\n label: 'logging.columns.level',\n viewType: ViewType.TAGS,\n },\n {\n key: 'formattedMessage',\n label: 'logging.columns.formattedMessage',\n viewType: ViewType.TEXT,\n tooltipCharLimit: LOG_ELLIPSIS_LIMIT,\n },\n ];\n\n private readonly _subscriptions = new Subscription();\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly iconService: IconService,\n private readonly loggingApiService: LoggingApiService,\n private readonly router: Router\n ) {\n this.iconService.registerAll([Filter16, TrashCan16]);\n }\n\n public ngOnInit(): void {\n this.setInitialParams();\n }\n\n public ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n public onCloseModalEvent(): void {\n this.logDetailsOpen$.next(false);\n\n setTimeout(() => {\n this.selectedLogEvent$.next(null);\n }, CARBON_CONSTANTS.modalAnimationMs);\n }\n\n public onPaginationClicked(page: number, logItems: CarbonListItem[]): void {\n const activePagination: Pagination = this.pagination$.getValue();\n const searchRequest: LoggingEventSearchRequest = this.searchRequest$.getValue();\n\n if (!searchRequest.beforeTimestamp && activePagination.page === 1)\n this.searchRequest$.next({...searchRequest, beforeTimestamp: logItems[0].timestamp});\n\n this.pagination$.next({...activePagination, page});\n }\n\n public onPaginationSet(size: number): void {\n const {collectionSize, page} = this.pagination$.getValue();\n const resetPage: boolean = Math.ceil(+collectionSize / size) <= +page && +collectionSize > 0;\n\n this.pagination$.next({...this.pagination$.getValue(), size, ...(resetPage && {page: 1})});\n }\n\n public onRowClickedEvent(\n rowClickEvent: LoggingEvent & {ctrlClick: boolean; tags: CarbonTag[]}\n ): void {\n const {ctrlClick: _1, tags: _2, ...logEvent} = rowClickEvent;\n this.logDetailsOpen$.next(true);\n this.selectedLogEvent$.next(logEvent);\n }\n\n public onSearchSubmitEvent(searchRequest: LoggingEventSearchRequest): void {\n this.searchRequest$.next(searchRequest);\n }\n\n public onClearFilter(): void {\n this.onSearchSubmitEvent({});\n }\n\n private base64ToObject(base64string: string): object {\n return JSON.parse(atob(base64string));\n }\n\n private objectToBase64(jsObject: object): string {\n return btoa(JSON.stringify(jsObject));\n }\n\n private openQueryParamsSubscription(): void {\n this._subscriptions.add(\n combineLatest([this.pagination$, this.searchRequest$]).subscribe(\n ([pagination, searchRequest]) => {\n const {size, page} = pagination;\n\n this.router.navigate(['/logging'], {\n queryParams: {\n size,\n page: page - 1,\n ...{\n ...searchRequest,\n ...(!!searchRequest.properties?.length && {\n properties: this.objectToBase64(searchRequest.properties),\n }),\n },\n },\n });\n }\n )\n );\n }\n\n private mapQueryParamsToSearchRequest(\n queryParams: LoggingEventQueryParams\n ): LoggingEventSearchRequest {\n return {\n ...(!!queryParams.likeFormattedMessage && {\n likeFormattedMessage: queryParams.likeFormattedMessage,\n }),\n ...(!!queryParams.level && {level: queryParams.level}),\n ...(!!queryParams.afterTimestamp && {afterTimestamp: queryParams.afterTimestamp}),\n ...(!!queryParams.beforeTimestamp && {beforeTimestamp: queryParams.beforeTimestamp}),\n ...(!!queryParams.properties && {\n properties: this.base64ToObject(queryParams.properties) as Array<LoggingEventProperty>,\n }),\n };\n }\n\n private setInitialParams(): void {\n this.activatedRoute.queryParamMap\n .pipe(\n take(1),\n map(queryParams => {\n const {size, page, ...searchRequest} = queryParams['params'];\n return {size, page, searchRequest};\n })\n )\n .subscribe(({size, page, searchRequest}) => {\n this.searchRequest$.next(this.mapQueryParamsToSearchRequest(searchRequest));\n this.pagination$.next({\n ...this.pagination$.getValue(),\n size: +size,\n page: +(page ?? 0) + 1,\n });\n\n this.openQueryParamsSubscription();\n });\n }\n}\n","<!--\n ~ Copyright 2015-2025 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<valtimo-carbon-list\n *ngIf=\"{logItems: logItems$ | async, isSearchActive: isSearchActive$ | async} as obs\"\n [items]=\"obs.logItems\"\n [fields]=\"FIELDS\"\n [loading]=\"loading$ | async\"\n [pagination]=\"pagination$ | async\"\n paginationIdentifier=\"logging\"\n (paginationClicked)=\"onPaginationClicked($event, obs.logItems)\"\n (paginationSet)=\"onPaginationSet($event)\"\n (rowClicked)=\"onRowClickedEvent($event)\"\n>\n <valtimo-no-results\n [action]=\"obs.isSearchActive ? clearSearchButton : null\"\n [description]=\"\n 'logging.noResults.' + (obs.isSearchActive ? 'searchDescription' : 'description') | translate\n \"\n [title]=\"'logging.noResults.title' | translate\"\n ></valtimo-no-results>\n\n <v-overflow-menu\n carbonToolbarContent\n placement=\"bottom-end\"\n [closeOnSelect]=\"false\"\n >\n <button\n overflowTrigger\n cdsButton=\"ghost\"\n [attr.data-test-id]=\"testIds.filterButton\"\n [iconOnly]=\"true\"\n >\n <svg cdsIcon=\"filter\" size=\"16\"></svg>\n </button>\n\n <div overflowPane>\n <ng-container *ngTemplateOutlet=\"logSearch\"></ng-container>\n </div>\n </v-overflow-menu>\n</valtimo-carbon-list>\n\n<valtimo-log-details\n [open]=\"logDetailsOpen$ | async\"\n [logEvent]=\"selectedLogEvent$ | async\"\n (closeModalEvent)=\"onCloseModalEvent()\"\n></valtimo-log-details>\n\n<ng-template #logSearch>\n <valtimo-log-search\n [initSearchRequest]=\"searchRequest$ | async\"\n (searchSubmitEvent)=\"onSearchSubmitEvent($event)\"\n ></valtimo-log-search>\n</ng-template>\n\n<ng-template #clearSearchButton>\n <button\n cdsButton=\"primary\"\n [attr.data-test-id]=\"testIds.clearSearchButton\"\n (click)=\"onClearFilter()\"\n >\n {{ 'interface.clear' | translate }}\n\n <svg class=\"cds--btn__icon\" cdsIcon=\"trash-can\" size=\"16\"></svg>\n </button>\n</ng-template>\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {NgModule} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {ROLE_ADMIN} from '@valtimo/shared';\nimport {AuthGuardService} from '@valtimo/security';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\n\nconst routes: Routes = [\n {\n path: 'logging',\n component: LoggingListComponent,\n canActivate: [AuthGuardService],\n data: {title: 'Logging', roles: [ROLE_ADMIN]},\n },\n];\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule],\n})\nexport class LoggingRoutingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CommonModule} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {TranslateLoader, TranslateModule} from '@ngx-translate/core';\nimport {HttpLoaderFactory} from '@valtimo/shared';\nimport {LoggingListComponent} from './lib/components/logging-list/logging-list.component';\nimport {LoggingRoutingModule} from './logging-routing.module';\n\n@NgModule({\n imports: [\n CommonModule,\n LoggingRoutingModule,\n TranslateModule.forRoot({\n loader: {\n provide: TranslateLoader,\n useFactory: HttpLoaderFactory,\n deps: [HttpClient],\n },\n }),\n LoggingListComponent,\n ],\n})\nexport class LoggingModule {}\n","/*\n * Copyright 2015-2025 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/*\n * Public API Surface of documenten-api\n */\n\nexport * from './lib/constants';\nexport * from './logging.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i1","i3.LoggingApiService","i6"],"mappings":"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"}
@@ -2,6 +2,11 @@ import { EventEmitter } from '@angular/core';
2
2
  import { LoggingEvent } from '../../models';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class LogDetailsComponent {
5
+ readonly testIds: {
6
+ readonly modal: "logDetailsModal";
7
+ readonly message: "logDetailsMessage";
8
+ readonly timestamp: "logDetailsTimestamp";
9
+ };
5
10
  open: boolean;
6
11
  set logEvent(logEvent: LoggingEvent);
7
12
  readonly closeModalEvent: EventEmitter<any>;
@@ -9,6 +9,15 @@ export declare class LogSearchComponent implements OnInit, AfterViewInit, OnDest
9
9
  private readonly cdsThemeService;
10
10
  private readonly fb;
11
11
  private readonly iconService;
12
+ readonly testIds: {
13
+ readonly messageInput: "logSearchMessageInput";
14
+ readonly levelDropdown: "logSearchLevelDropdown";
15
+ readonly propertyKeyInput: "logSearchPropertyKeyInput";
16
+ readonly propertyValueInput: "logSearchPropertyValueInput";
17
+ readonly addPropertyButton: "logSearchAddPropertyButton";
18
+ readonly removePropertyButton: "logSearchRemovePropertyButton";
19
+ readonly clearButton: "logSearchClearButton";
20
+ };
12
21
  private readonly _afterTimestampDatePicker;
13
22
  private readonly _beforeTimestampDatePicker;
14
23
  initSearchRequest: LoggingEventSearchRequest;
@@ -11,6 +11,10 @@ export declare class LoggingListComponent implements OnInit, OnDestroy {
11
11
  private readonly iconService;
12
12
  private readonly loggingApiService;
13
13
  private readonly router;
14
+ readonly testIds: {
15
+ readonly filterButton: "loggingListFilterButton";
16
+ readonly clearSearchButton: "loggingListClearSearchButton";
17
+ };
14
18
  readonly loading$: BehaviorSubject<boolean>;
15
19
  readonly logItems$: Observable<CarbonListItem>;
16
20
  readonly searchRequest$: BehaviorSubject<LoggingEventSearchRequest>;
@@ -0,0 +1 @@
1
+ export * from './logging.test-ids';
@@ -0,0 +1,23 @@
1
+ declare const LOGGING_LIST_TEST_IDS: {
2
+ /** Funnel icon in the table toolbar that reveals the search panel. */
3
+ readonly filterButton: "loggingListFilterButton";
4
+ readonly clearSearchButton: "loggingListClearSearchButton";
5
+ };
6
+ /**
7
+ * The search panel has no submit button — it applies itself on change, debounced.
8
+ */
9
+ declare const LOG_SEARCH_TEST_IDS: {
10
+ readonly messageInput: "logSearchMessageInput";
11
+ readonly levelDropdown: "logSearchLevelDropdown";
12
+ readonly propertyKeyInput: "logSearchPropertyKeyInput";
13
+ readonly propertyValueInput: "logSearchPropertyValueInput";
14
+ readonly addPropertyButton: "logSearchAddPropertyButton";
15
+ readonly removePropertyButton: "logSearchRemovePropertyButton";
16
+ readonly clearButton: "logSearchClearButton";
17
+ };
18
+ declare const LOG_DETAILS_TEST_IDS: {
19
+ readonly modal: "logDetailsModal";
20
+ readonly message: "logDetailsMessage";
21
+ readonly timestamp: "logDetailsTimestamp";
22
+ };
23
+ export { LOGGING_LIST_TEST_IDS, LOG_SEARCH_TEST_IDS, LOG_DETAILS_TEST_IDS };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@valtimo/logging",
3
3
  "license": "EUPL-1.2",
4
- "version": "13.42.0",
4
+ "version": "13.44.0",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "19.2.25",
7
7
  "@angular/core": "19.2.25"
package/public_api.d.ts CHANGED
@@ -1 +1,2 @@
1
+ export * from './lib/constants';
1
2
  export * from './logging.module';