Refactoring

This commit is contained in:
mpetrov 2025-02-10 16:11:46 +02:00
parent 55f2799446
commit 84b9bde577
11 changed files with 28 additions and 25 deletions

View File

@ -19,10 +19,10 @@ import { defaultHttpOptionsFromConfig, RequestConfig } from './http-utils';
import { Observable } from 'rxjs'; import { Observable } from 'rxjs';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { PageData } from '@shared/models/page/page-data'; import { PageData } from '@shared/models/page/page-data';
import { CalculatedField } from '@shared/models/calculated-field.models'; import { CalculatedField, CalculatedFieldTestScriptInputParams } from '@shared/models/calculated-field.models';
import { PageLink } from '@shared/models/page/page-link'; import { PageLink } from '@shared/models/page/page-link';
import { EntityId } from '@shared/models/id/entity-id'; import { EntityId } from '@shared/models/id/entity-id';
import { TestScriptResult } from '@shared/models/rule-node.models'; import { TestScriptResult } from '@shared/models/entity.models';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -50,7 +50,7 @@ export class CalculatedFieldsService {
defaultHttpOptionsFromConfig(config)); defaultHttpOptionsFromConfig(config));
} }
public testScript(inputParams: any, config?: RequestConfig): Observable<TestScriptResult> { public testScript(inputParams: CalculatedFieldTestScriptInputParams, config?: RequestConfig): Observable<TestScriptResult> {
return this.http.post<TestScriptResult>('/api/calculatedField/testScript', inputParams, defaultHttpOptionsFromConfig(config)); return this.http.post<TestScriptResult>('/api/calculatedField/testScript', inputParams, defaultHttpOptionsFromConfig(config));
} }
} }

View File

@ -35,7 +35,6 @@ import {
RuleNodeConfiguration, RuleNodeConfiguration,
ScriptLanguage, ScriptLanguage,
TestScriptInputParams, TestScriptInputParams,
TestScriptResult
} from '@app/shared/models/rule-node.models'; } from '@app/shared/models/rule-node.models';
import { componentTypeBySelector, ResourcesService } from '../services/resources.service'; import { componentTypeBySelector, ResourcesService } from '../services/resources.service';
import { catchError, map, mergeMap } from 'rxjs/operators'; import { catchError, map, mergeMap } from 'rxjs/operators';
@ -44,6 +43,7 @@ import { deepClone, snakeCase } from '@core/utils';
import { DebugRuleNodeEventBody } from '@app/shared/models/event.models'; import { DebugRuleNodeEventBody } from '@app/shared/models/event.models';
import { Edge } from '@shared/models/edge.models'; import { Edge } from '@shared/models/edge.models';
import { IModulesMap } from '@modules/common/modules-map.models'; import { IModulesMap } from '@modules/common/modules-map.models';
import { TestScriptResult } from '@shared/models/entity.models';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'

View File

@ -38,7 +38,8 @@ import { catchError, filter, switchMap } from 'rxjs/operators';
import { import {
CalculatedField, CalculatedField,
CalculatedFieldDebugDialogData, CalculatedFieldDebugDialogData,
CalculatedFieldDialogData, CalculatedFieldScriptTestDialogData CalculatedFieldDialogData,
CalculatedFieldScriptTestDialogData
} from '@shared/models/calculated-field.models'; } from '@shared/models/calculated-field.models';
import { import {
CalculatedFieldDebugDialogComponent, CalculatedFieldDebugDialogComponent,

View File

@ -16,7 +16,6 @@
:host { :host {
.debug-dialog-container { .debug-dialog-container {
height: 77vh; height: 77vh;
min-width: 80vw;
.debug-dialog-content { .debug-dialog-content {
border-radius: 0; border-radius: 0;

View File

@ -115,7 +115,10 @@ export class CalculatedFieldDialogComponent extends DialogComponent<CalculatedFi
Object.fromEntries(Object.keys(this.configFormGroup.get('arguments').value).map(k => [k, ''])), Object.fromEntries(Object.keys(this.configFormGroup.get('arguments').value).map(k => [k, ''])),
this.configFormGroup.get('expressionSCRIPT').value, this.configFormGroup.get('expressionSCRIPT').value,
true true
).pipe(filter(Boolean)).subscribe((expression: string) => this.configFormGroup.get('expressionSCRIPT').setValue(expression)); ).pipe(filter(Boolean)).subscribe((expression: string) => {
this.configFormGroup.get('expressionSCRIPT').setValue(expression);
this.configFormGroup.get('expressionSCRIPT').markAsDirty();
});
} }
private applyDialogData(): void { private applyDialogData(): void {

View File

@ -48,10 +48,10 @@
<div #rightPanel> <div #rightPanel>
<div #topRightPanel class="test-block-content"> <div #topRightPanel class="test-block-content">
<div class="relative flex size-full min-w-96 gap-2"> <div class="relative flex size-full min-w-96 gap-2">
<div class="absolute right-4 top-[6px] z-10 text-[12px] font-bold"> <div class="absolute right-2 top-[6px] z-10 text-[12px] font-bold">
<span class="block-label">{{ 'calculated-fields.arguments' | translate }}</span> <span class="block-label">{{ 'calculated-fields.arguments' | translate }}</span>
</div> </div>
<tb-calculated-field-test-arguments formControlName="arguments"/> <tb-calculated-field-test-arguments class="size-full" formControlName="arguments"/>
</div> </div>
</div> </div>
<div #bottomRightPanel class="test-block-content"> <div #bottomRightPanel class="test-block-content">

View File

@ -37,6 +37,7 @@ import { beautifyJs } from '@shared/models/beautify.models';
import { CalculatedFieldsService } from '@core/http/calculated-fields.service'; import { CalculatedFieldsService } from '@core/http/calculated-fields.service';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { CalculatedFieldScriptTestDialogData } from '@shared/models/calculated-field.models'; import { CalculatedFieldScriptTestDialogData } from '@shared/models/calculated-field.models';
import { filter } from 'rxjs/operators';
@Component({ @Component({
selector: 'tb-calculated-field-script-test-dialog', selector: 'tb-calculated-field-script-test-dialog',
@ -71,10 +72,8 @@ export class CalculatedFieldScriptTestDialogComponent extends DialogComponent<Ca
private destroyRef: DestroyRef, private destroyRef: DestroyRef,
private calculatedFieldService: CalculatedFieldsService) { private calculatedFieldService: CalculatedFieldsService) {
super(store, router, dialogRef); super(store, router, dialogRef);
beautifyJs(this.data.expression, {indent_size: 4}).pipe(takeUntilDestroyed()).subscribe( beautifyJs(this.data.expression, {indent_size: 4}).pipe(filter(Boolean), takeUntilDestroyed()).subscribe(
(res) => { (res) => this.calculatedFieldScriptTestFormGroup.get('expression').patchValue(res, {emitEvent: false})
this.calculatedFieldScriptTestFormGroup.get('expression').patchValue(res, {emitEvent: false});
}
); );
this.calculatedFieldScriptTestFormGroup.get('arguments').patchValue(this.data.arguments, {emitEvent: false}); this.calculatedFieldScriptTestFormGroup.get('arguments').patchValue(this.data.arguments, {emitEvent: false});
} }

View File

@ -360,7 +360,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
this.columns[1].width = '20%'; this.columns[1].width = '20%';
this.columns.push( this.columns.push(
new EntityTableColumn<Event>('entityId', 'event.entity-id', '85px', new EntityTableColumn<Event>('entityId', 'event.entity-id', '85px',
(entity) => `<span style="display: inline-block; width: 7ch">${entity.body.entityId.substring(0, 6)}…</span>`, (entity) => `<span style="display: inline-block; width: 7ch">${entity.body.entityId.substring(0, 8)}…</span>`,
() => ({padding: '0 12px 0 0'}), () => ({padding: '0 12px 0 0'}),
false, false,
() => ({padding: '0 12px 0 0'}), () => ({padding: '0 12px 0 0'}),
@ -380,7 +380,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
} }
), ),
new EntityTableColumn<Event>('messageId', 'event.message-id', '85px', new EntityTableColumn<Event>('messageId', 'event.message-id', '85px',
(entity) => `<span style="display: inline-block; width: 7ch">${entity.body.msgId?.substring(0, 6)}…</span>`, (entity) => `<span style="display: inline-block; width: 7ch">${entity.body.msgId?.substring(0, 8)}…</span>`,
() => ({padding: '0 12px 0 0'}), () => ({padding: '0 12px 0 0'}),
false, false,
() => ({padding: '0 12px 0 0'}), () => ({padding: '0 12px 0 0'}),
@ -462,9 +462,7 @@ export class EventTableConfig extends EntityTableConfig<Event, TimePageLink> {
name: this.translate.instant('common.test-with-this-message', {test: this.translate.instant(this.testButtonLabel)}), name: this.translate.instant('common.test-with-this-message', {test: this.translate.instant(this.testButtonLabel)}),
icon: 'bug_report', icon: 'bug_report',
isEnabled: () => true, isEnabled: () => true,
onAction: (_, entity) => { onAction: (_, entity) => this.debugEventSelected.next(entity.body)
this.debugEventSelected.next(entity.body);
}
}); });
break; break;
} }

View File

@ -148,10 +148,13 @@ export interface CalculatedFieldDebugDialogData {
testScriptFn: CalculatedFieldTestScriptFn; testScriptFn: CalculatedFieldTestScriptFn;
} }
export interface CalculatedFieldScriptTestDialogData { export interface CalculatedFieldScriptTestDialogData extends CalculatedFieldTestScriptInputParams {
withApply: boolean;
}
export interface CalculatedFieldTestScriptInputParams {
arguments: Record<string, unknown>, arguments: Record<string, unknown>,
expression: string; expression: string;
withApply: boolean;
} }
export interface ArgumentEntityTypeParams { export interface ArgumentEntityTypeParams {

View File

@ -203,6 +203,11 @@ export interface EntityDebugSettings {
allEnabledUntil?: number; allEnabledUntil?: number;
} }
export interface TestScriptResult {
output: string;
error: string;
}
export interface AdditionalDebugActionConfig { export interface AdditionalDebugActionConfig {
action?: (id?: EntityId, ...restArguments: unknown[]) => void; action?: (id?: EntityId, ...restArguments: unknown[]) => void;
title: string; title: string;

View File

@ -374,11 +374,6 @@ export interface TestScriptInputParams {
msgType: string; msgType: string;
} }
export interface TestScriptResult {
output: string;
error: string;
}
export enum MessageType { export enum MessageType {
POST_ATTRIBUTES_REQUEST = 'POST_ATTRIBUTES_REQUEST', POST_ATTRIBUTES_REQUEST = 'POST_ATTRIBUTES_REQUEST',
POST_TELEMETRY_REQUEST = 'POST_TELEMETRY_REQUEST', POST_TELEMETRY_REQUEST = 'POST_TELEMETRY_REQUEST',