Browse Source

UI: Improve SCADA synbol tags functions.

pull/11391/head
Igor Kulikov 2 years ago
parent
commit
16c2f5af60
  1. 6
      ui-ngx/src/app/modules/home/components/widget/lib/svg/iot-svg.models.ts
  2. 2
      ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tag.component.html
  3. 25
      ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tag.component.ts
  4. 6
      ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tags.component.ts
  5. 3
      ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata.component.scss
  6. 25
      ui-ngx/src/app/modules/home/pages/scada-symbol/scada-symbol.models.ts

6
ui-ngx/src/app/modules/home/components/widget/lib/svg/iot-svg.models.ts

@ -67,7 +67,7 @@ export type IotSvgTagStateRenderFunction = (ctx: IotSvgContext, element: Element
export type IotSvgActionTrigger = 'click'; export type IotSvgActionTrigger = 'click';
export type IotSvgActionFunction = (ctx: IotSvgContext, event: Event) => void; export type IotSvgActionFunction = (ctx: IotSvgContext, element: Element, event: Event) => void;
export interface IotSvgAction { export interface IotSvgAction {
actionFunction?: string; actionFunction?: string;
action?: IotSvgActionFunction; action?: IotSvgActionFunction;
@ -427,7 +427,7 @@ export class IotSvgObject {
if (tag.actions) { if (tag.actions) {
for (const trigger of Object.keys(tag.actions)) { for (const trigger of Object.keys(tag.actions)) {
const action = tag.actions[trigger]; const action = tag.actions[trigger];
action.action = parseFunction(action.actionFunction, ['ctx', 'event']) || (() => {}); action.action = parseFunction(action.actionFunction, ['ctx', 'element', 'event']) || (() => {});
} }
} }
} }
@ -483,7 +483,7 @@ export class IotSvgObject {
elements.forEach(element => { elements.forEach(element => {
element.attr('cursor', 'pointer'); element.attr('cursor', 'pointer');
element.on(trigger, (event) => { element.on(trigger, (event) => {
action.action(this.context, event); action.action(this.context, element, event);
}); });
}); });
} }

2
ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tag.component.html

@ -71,7 +71,7 @@
[objectHighlightRules]="scadaSymbolClickActionHighlightRules" [objectHighlightRules]="scadaSymbolClickActionHighlightRules"
[propertyHighlightRules]="scadaSymbolClickActionPropertiesHighlightRules" [propertyHighlightRules]="scadaSymbolClickActionPropertiesHighlightRules"
[editorCompleter]="clickActionFunctionCompleter" [editorCompleter]="clickActionFunctionCompleter"
[functionArgs]="['ctx', 'event']" [functionArgs]="['ctx', 'element', 'event']"
helpId="widget/lib/timeseries/cell_style_fn"> helpId="widget/lib/timeseries/cell_style_fn">
</tb-js-func> </tb-js-func>
</ng-template> </ng-template>

25
ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tag.component.ts

@ -15,7 +15,6 @@
/// ///
import { import {
ChangeDetectorRef,
Component, Component,
EventEmitter, EventEmitter,
forwardRef, forwardRef,
@ -29,9 +28,12 @@ import {
} from '@angular/core'; } from '@angular/core';
import { import {
ControlValueAccessor, ControlValueAccessor,
NG_VALIDATORS,
NG_VALUE_ACCESSOR, NG_VALUE_ACCESSOR,
UntypedFormBuilder, UntypedFormBuilder,
UntypedFormControl,
UntypedFormGroup, UntypedFormGroup,
Validator,
Validators Validators
} from '@angular/forms'; } from '@angular/forms';
import { IotSvgTag } from '@home/components/widget/lib/svg/iot-svg.models'; import { IotSvgTag } from '@home/components/widget/lib/svg/iot-svg.models';
@ -55,11 +57,16 @@ import {
provide: NG_VALUE_ACCESSOR, provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => ScadaSymbolMetadataTagComponent), useExisting: forwardRef(() => ScadaSymbolMetadataTagComponent),
multi: true multi: true
},
{
provide: NG_VALIDATORS,
useExisting: forwardRef(() => ScadaSymbolMetadataTagComponent),
multi: true
} }
], ],
encapsulation: ViewEncapsulation.None encapsulation: ViewEncapsulation.None
}) })
export class ScadaSymbolMetadataTagComponent implements ControlValueAccessor, OnInit, OnChanges { export class ScadaSymbolMetadataTagComponent implements ControlValueAccessor, OnInit, OnChanges, Validator {
@ViewChild('tagSelect') @ViewChild('tagSelect')
tagSelect: MatSelect; tagSelect: MatSelect;
@ -108,8 +115,7 @@ export class ScadaSymbolMetadataTagComponent implements ControlValueAccessor, On
private propagateChange = (_val: any) => {}; private propagateChange = (_val: any) => {};
constructor(private fb: UntypedFormBuilder, constructor(private fb: UntypedFormBuilder) {
private cd: ChangeDetectorRef) {
} }
ngOnInit() { ngOnInit() {
@ -143,7 +149,7 @@ export class ScadaSymbolMetadataTagComponent implements ControlValueAccessor, On
this.propagateChange = fn; this.propagateChange = fn;
} }
registerOnTouched(fn: any): void { registerOnTouched(_fn: any): void {
} }
setDisabledState(isDisabled: boolean): void { setDisabledState(isDisabled: boolean): void {
@ -170,6 +176,15 @@ export class ScadaSymbolMetadataTagComponent implements ControlValueAccessor, On
); );
} }
public validate(_c: UntypedFormControl) {
const valid = this.tagFormGroup.valid;
return valid ? null : {
tag: {
valid: false,
},
};
}
editTagStateRenderFunction(): void { editTagStateRenderFunction(): void {
this.openPanelWithCallback(this.expansionPanel, () => { this.openPanelWithCallback(this.expansionPanel, () => {
this.openPanelWithCallback(this.renderFunctionExpansionPanel, () => { this.openPanelWithCallback(this.renderFunctionExpansionPanel, () => {

6
ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata-tags.component.ts

@ -131,7 +131,7 @@ export class ScadaSymbolMetadataTagsComponent implements ControlValueAccessor, O
this.propagateChange = fn; this.propagateChange = fn;
} }
registerOnTouched(fn: any): void { registerOnTouched(_fn: any): void {
} }
setDisabledState(isDisabled: boolean): void { setDisabledState(isDisabled: boolean): void {
@ -148,7 +148,7 @@ export class ScadaSymbolMetadataTagsComponent implements ControlValueAccessor, O
this.tagsFormGroup.setControl('tags', this.prepareTagsFormArray(tags), {emitEvent: false}); this.tagsFormGroup.setControl('tags', this.prepareTagsFormArray(tags), {emitEvent: false});
} }
public validate(c: UntypedFormControl) { public validate(_c: UntypedFormControl) {
const valid = this.tagsFormGroup.valid; const valid = this.tagsFormGroup.valid;
return valid ? null : { return valid ? null : {
tags: { tags: {
@ -161,7 +161,7 @@ export class ScadaSymbolMetadataTagsComponent implements ControlValueAccessor, O
return this.tagsFormGroup.get('tags') as UntypedFormArray; return this.tagsFormGroup.get('tags') as UntypedFormArray;
} }
trackByTag(index: number, tagControl: AbstractControl): any { trackByTag(_index: number, tagControl: AbstractControl): any {
return tagControl; return tagControl;
} }

3
ui-ngx/src/app/modules/home/pages/scada-symbol/metadata-components/scada-symbol-metadata.component.scss

@ -73,6 +73,9 @@
} }
} }
} }
}
.tb-js-func {
.ace_tb { .ace_tb {
&.ace_scada-symbol { &.ace_scada-symbol {
&-ctx { &-ctx {

25
ui-ngx/src/app/modules/home/pages/scada-symbol/scada-symbol.models.ts

@ -762,26 +762,26 @@ export class ScadaSymbolElement {
const scadaSymbolCtxObjectHighlightRules: TbHighlightRule[] = [ const scadaSymbolCtxObjectHighlightRules: TbHighlightRule[] = [
{ {
class: 'scada-symbol-ctx', class: 'scada-symbol-ctx',
regex: /(?<=\W|^)(ctx)(?=\.)\b/ regex: /(?<=\W|^)(ctx)(?=\W|$)\b/
} }
]; ];
export const scadaSymbolGeneralStateRenderHighlightRules: TbHighlightRule[] = export const scadaSymbolGeneralStateRenderHighlightRules: TbHighlightRule[] =
scadaSymbolCtxObjectHighlightRules.concat({ scadaSymbolCtxObjectHighlightRules.concat({
class: 'scada-symbol-svg', class: 'scada-symbol-svg',
regex: /(?<=\W|^)(svg)(?=\.)\b/ regex: /(?<=\W|^)(svg)(?=\W|$)\b/
}); });
export const scadaSymbolElementStateRenderHighlightRules: TbHighlightRule[] = export const scadaSymbolElementStateRenderHighlightRules: TbHighlightRule[] =
scadaSymbolCtxObjectHighlightRules.concat({ scadaSymbolCtxObjectHighlightRules.concat({
class: 'scada-symbol-element', class: 'scada-symbol-element',
regex: /(?<=\W|^)(element)(?=\.)\b/ regex: /(?<=\W|^)(element)(?=\W|$)\b/
}); });
export const scadaSymbolClickActionHighlightRules: TbHighlightRule[] = export const scadaSymbolClickActionHighlightRules: TbHighlightRule[] =
scadaSymbolCtxObjectHighlightRules.concat({ scadaSymbolElementStateRenderHighlightRules.concat({
class: 'scada-symbol-event', class: 'scada-symbol-event',
regex: /(?<=\W|^)(event)(?=\.)\b/ regex: /(?<=\W|^)(event)(?=\W|$)\b/
}); });
const scadaSymbolCtxPropertyHighlightRules: TbHighlightRule[] = [ const scadaSymbolCtxPropertyHighlightRules: TbHighlightRule[] = [
@ -832,7 +832,7 @@ export const scadaSymbolElementStateRenderPropertiesHighlightRules: TbHighlightR
}); });
export const scadaSymbolClickActionPropertiesHighlightRules: TbHighlightRule[] = export const scadaSymbolClickActionPropertiesHighlightRules: TbHighlightRule[] =
scadaSymbolCtxPropertyHighlightRules.concat({ scadaSymbolElementStateRenderPropertiesHighlightRules.concat({
class: 'scada-symbol-event-properties', class: 'scada-symbol-event-properties',
regex: /(?<=event\.)([a-zA-Z\$_\u00a1-\uffff][a-zA-Z\d\$_\u00a1-\uffff]*)\b/ regex: /(?<=event\.)([a-zA-Z\$_\u00a1-\uffff][a-zA-Z\d\$_\u00a1-\uffff]*)\b/
}); });
@ -860,14 +860,13 @@ export const elementStateRenderFunctionCompletions = (ctxCompletion: TbEditorCom
}; };
export const clickActionFunctionCompletions = (ctxCompletion: TbEditorCompletion): TbEditorCompletions => { export const clickActionFunctionCompletions = (ctxCompletion: TbEditorCompletion): TbEditorCompletions => {
return { const completions = elementStateRenderFunctionCompletions(ctxCompletion);
ctx: ctxCompletion, completions.event = {
event: { meta: 'argument',
meta: 'argument', type: 'Event',
type: 'Event', description: 'DOM event.'
description: 'DOM event.'
},
}; };
return completions;
}; };
export const iotSvgContextCompletion = (metadata: IotSvgMetadata, tags: string[], export const iotSvgContextCompletion = (metadata: IotSvgMetadata, tags: string[],

Loading…
Cancel
Save