diff --git a/ui-ngx/src/app/shared/components/snack-bar-component.html b/ui-ngx/src/app/shared/components/snack-bar-component.html index 53f23fcf8a..573166fd1e 100644 --- a/ui-ngx/src/app/shared/components/snack-bar-component.html +++ b/ui-ngx/src/app/shared/components/snack-bar-component.html @@ -25,5 +25,5 @@ 'info-toast': notification.type === 'info' }">
- + diff --git a/ui-ngx/src/app/shared/components/snack-bar-component.scss b/ui-ngx/src/app/shared/components/snack-bar-component.scss index 6ef4191efb..8b211bffce 100644 --- a/ui-ngx/src/app/shared/components/snack-bar-component.scss +++ b/ui-ngx/src/app/shared/components/snack-bar-component.scss @@ -16,6 +16,33 @@ :host { display: inline-block; pointer-events: all; + &.toast-panel { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + display: flex; + &.left { + justify-content: flex-start; + } + &.right { + justify-content: flex-end; + } + &.top { + align-items: flex-start; + } + &.bottom { + align-items: flex-end; + } + &.h-center { + justify-content: center; + } + &.v-center { + align-items: center; + } + } .tb-toast { box-shadow: 0 3px 5px -1px rgba(0, 0, 0, 0.2), 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12); color: #fff; diff --git a/ui-ngx/src/app/shared/components/toast.directive.ts b/ui-ngx/src/app/shared/components/toast.directive.ts index 1d59b86a54..fb704c74db 100644 --- a/ui-ngx/src/app/shared/components/toast.directive.ts +++ b/ui-ngx/src/app/shared/components/toast.directive.ts @@ -16,9 +16,9 @@ import { AfterViewInit, ChangeDetectorRef, - Component, ComponentRef, + Component, ComponentFactoryResolver, ComponentRef, Directive, - ElementRef, + ElementRef, HostBinding, Inject, Input, NgZone, @@ -34,8 +34,7 @@ import { BreakpointObserver } from '@angular/cdk/layout'; import { MediaBreakpoints } from '@shared/models/constants'; import { MatButton } from '@angular/material/button'; import Timeout = NodeJS.Timeout; -import { ConnectedPosition, Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay'; -import { ComponentPortal, PortalInjector } from '@angular/cdk/portal'; +import { PortalInjector } from '@angular/cdk/portal'; @Directive({ selector: '[tb-toast]' @@ -49,7 +48,6 @@ export class ToastDirective implements AfterViewInit, OnDestroy { private hideNotificationSubscription: Subscription = null; private snackBarRef: MatSnackBarRef = null; - private overlayRef: OverlayRef; private toastComponentRef: ComponentRef; private currentMessage: NotificationMessage = null; @@ -58,7 +56,7 @@ export class ToastDirective implements AfterViewInit, OnDestroy { constructor(private elementRef: ElementRef, private viewContainerRef: ViewContainerRef, private notificationService: NotificationService, - private overlay: Overlay, + private componentFactoryResolver: ComponentFactoryResolver, private snackBar: MatSnackBar, private ngZone: NgZone, private breakpointObserver: BreakpointObserver, @@ -104,9 +102,11 @@ export class ToastDirective implements AfterViewInit, OnDestroy { if (this.snackBarRef) { this.snackBarRef.dismiss(); } - - const position = this.overlay.position(); - let panelClass = ['tb-toast-panel']; + if (this.toastComponentRef) { + this.viewContainerRef.detach(0); + this.toastComponentRef.destroy(); + } + let panelClass = ['tb-toast-panel', 'toast-panel']; if (notificationMessage.panelClass) { if (typeof notificationMessage.panelClass === 'string') { panelClass.push(notificationMessage.panelClass); @@ -114,46 +114,35 @@ export class ToastDirective implements AfterViewInit, OnDestroy { panelClass = panelClass.concat(notificationMessage.panelClass); } } - const overlayConfig = new OverlayConfig({ - panelClass, - backdropClass: 'cdk-overlay-transparent-backdrop', - hasBackdrop: false, - disposeOnNavigation: true - }); - let originX; - let originY; const horizontalPosition = notificationMessage.horizontalPosition || 'left'; const verticalPosition = notificationMessage.verticalPosition || 'top'; if (horizontalPosition === 'start' || horizontalPosition === 'left') { - originX = 'start'; + panelClass.push('left'); } else if (horizontalPosition === 'end' || horizontalPosition === 'right') { - originX = 'end'; + panelClass.push('right'); } else { - originX = 'center'; + panelClass.push('h-center'); } if (verticalPosition === 'top') { - originY = 'top'; + panelClass.push('top'); } else { - originY = 'bottom'; + panelClass.push('bottom'); } - const connectedPosition: ConnectedPosition = { - originX, - originY, - overlayX: originX, - overlayY: originY - }; - overlayConfig.positionStrategy = position.flexibleConnectedTo(this.elementRef) - .withPositions([connectedPosition]); - this.overlayRef = this.overlay.create(overlayConfig); + + const componentFactory = this.componentFactoryResolver.resolveComponentFactory(TbSnackBarComponent); const data: ToastPanelData = { - notification: notificationMessage + notification: notificationMessage, + panelClass, + destroyToastComponent: () => { + this.viewContainerRef.detach(0); + this.toastComponentRef.destroy(); + } }; const injectionTokens = new WeakMap([ - [MAT_SNACK_BAR_DATA, data], - [OverlayRef, this.overlayRef] + [MAT_SNACK_BAR_DATA, data] ]); const injector = new PortalInjector(this.viewContainerRef.injector, injectionTokens); - this.toastComponentRef = this.overlayRef.attach(new ComponentPortal(TbSnackBarComponent, this.viewContainerRef, injector)); + this.toastComponentRef = this.viewContainerRef.createComponent(componentFactory, 0, injector); this.cd.detectChanges(); if (notificationMessage.duration && notificationMessage.duration > 0) { @@ -173,7 +162,6 @@ export class ToastDirective implements AfterViewInit, OnDestroy { clearTimeout(this.dismissTimeout); this.dismissTimeout = null; } - this.overlayRef = null; this.toastComponentRef = null; this.currentMessage = null; }); @@ -181,43 +169,45 @@ export class ToastDirective implements AfterViewInit, OnDestroy { } private showSnackBar(notificationMessage: NotificationMessage, isGtSm: boolean) { - const data: ToastPanelData = { - notification: notificationMessage, - parent: this.elementRef - }; - const config: MatSnackBarConfig = { - horizontalPosition: notificationMessage.horizontalPosition || 'left', - verticalPosition: !isGtSm ? 'bottom' : (notificationMessage.verticalPosition || 'top'), - viewContainerRef: this.viewContainerRef, - duration: notificationMessage.duration, - panelClass: notificationMessage.panelClass, - data - }; this.ngZone.run(() => { if (this.snackBarRef) { this.snackBarRef.dismiss(); } + const data: ToastPanelData = { + notification: notificationMessage, + parent: this.elementRef, + panelClass: [], + destroyToastComponent: () => {} + }; + const config: MatSnackBarConfig = { + horizontalPosition: notificationMessage.horizontalPosition || 'left', + verticalPosition: !isGtSm ? 'bottom' : (notificationMessage.verticalPosition || 'top'), + viewContainerRef: this.viewContainerRef, + duration: notificationMessage.duration, + panelClass: notificationMessage.panelClass, + data + }; this.snackBarRef = this.snackBar.openFromComponent(TbSnackBarComponent, config); - }); - if (notificationMessage.duration && notificationMessage.duration > 0 && notificationMessage.forceDismiss) { - if (this.dismissTimeout !== null) { - clearTimeout(this.dismissTimeout); - this.dismissTimeout = null; - } - this.dismissTimeout = setTimeout(() => { - if (this.snackBarRef) { - this.snackBarRef.instance.actionButton._elementRef.nativeElement.click(); + if (notificationMessage.duration && notificationMessage.duration > 0 && notificationMessage.forceDismiss) { + if (this.dismissTimeout !== null) { + clearTimeout(this.dismissTimeout); + this.dismissTimeout = null; } - this.dismissTimeout = null; - }, notificationMessage.duration); - } - this.snackBarRef.afterDismissed().subscribe(() => { - if (this.dismissTimeout !== null) { - clearTimeout(this.dismissTimeout); - this.dismissTimeout = null; + this.dismissTimeout = setTimeout(() => { + if (this.snackBarRef) { + this.snackBarRef.instance.actionButton._elementRef.nativeElement.click(); + } + this.dismissTimeout = null; + }, notificationMessage.duration); } - this.snackBarRef = null; - this.currentMessage = null; + this.snackBarRef.afterDismissed().subscribe(() => { + if (this.dismissTimeout !== null) { + clearTimeout(this.dismissTimeout); + this.dismissTimeout = null; + } + this.snackBarRef = null; + this.currentMessage = null; + }); }); } @@ -235,8 +225,9 @@ export class ToastDirective implements AfterViewInit, OnDestroy { } ngOnDestroy(): void { - if (this.overlayRef) { - this.overlayRef.dispose(); + if (this.toastComponentRef) { + this.viewContainerRef.detach(0); + this.toastComponentRef.destroy(); } if (this.notificationSubscription) { this.notificationSubscription.unsubscribe(); @@ -250,6 +241,8 @@ export class ToastDirective implements AfterViewInit, OnDestroy { interface ToastPanelData { notification: NotificationMessage; parent?: ElementRef; + panelClass: string[]; + destroyToastComponent: () => void; } import { @@ -288,6 +281,11 @@ export class TbSnackBarComponent implements AfterViewInit, OnDestroy { @ViewChild('actionButton', {static: true}) actionButton: MatButton; + @HostBinding('class') + get panelClass(): string[] { + return this.data.panelClass; + } + private parentEl: HTMLElement; private snackBarContainerEl: HTMLElement; private parentScrollSubscription: Subscription = null; @@ -305,9 +303,7 @@ export class TbSnackBarComponent implements AfterViewInit, OnDestroy { private data: ToastPanelData, private elementRef: ElementRef, @Optional() - private snackBarRef: MatSnackBarRef, - @Optional() - private overlayRef: OverlayRef) { + private snackBarRef: MatSnackBarRef) { this.animationState = !!this.snackBarRef ? 'default' : 'opened'; this.notification = data.notification; } @@ -319,9 +315,8 @@ export class TbSnackBarComponent implements AfterViewInit, OnDestroy { this.snackBarContainerEl.style.position = 'absolute'; this.updateContainerRect(); this.updatePosition(this.snackBarRef.containerInstance.snackBarConfig); - const snackBarComponent = this; this.parentScrollSubscription = onParentScrollOrWindowResize(this.parentEl).subscribe(() => { - snackBarComponent.updateContainerRect(); + this.updateContainerRect(); }); } } @@ -373,7 +368,7 @@ export class TbSnackBarComponent implements AfterViewInit, OnDestroy { const isFadeOut = (toState as ToastAnimationState) === 'closing'; const itFinished = this.animationState === 'closing'; if (isFadeOut && itFinished) { - this.overlayRef.dispose(); + this.data.destroyToastComponent(); } } } diff --git a/ui-ngx/src/app/shared/models/ace/service-completion.models.ts b/ui-ngx/src/app/shared/models/ace/service-completion.models.ts index 63bc4cd938..87301900c0 100644 --- a/ui-ngx/src/app/shared/models/ace/service-completion.models.ts +++ b/ui-ngx/src/app/shared/models/ace/service-completion.models.ts @@ -24,7 +24,7 @@ export const alarmDataHref = 'Alarm data query'; -export const attributeScopeHref ='Attribute scope'; +export const attributeScopeHref = 'Attribute scope'; export const entityTypeHref = 'EntityType'; @@ -32,7 +32,7 @@ export const pageDataHref = 'DeviceInfo'; -export const assetInfoHref = 'AssetInfo' +export const assetInfoHref = 'AssetInfo'; export const entityViewInfoHref = 'EntityViewInfo'; @@ -84,15 +84,15 @@ export const stateParamsHref = 'Alias info'; -export const entityAliasFilterHref = 'Entity alias filter' +export const entityAliasFilterHref = 'Entity alias filter'; -export const entityAliasFilterResultHref = 'Entity alias filter result' +export const entityAliasFilterResultHref = 'Entity alias filter result'; -export const importEntityDataHref = 'Import entity data' +export const importEntityDataHref = 'Import entity data'; -export const importEntitiesResultInfoHref = 'Import entities result info' +export const importEntitiesResultInfoHref = 'Import entities result info'; -export const customDialogComponentHref = 'CustomDialogComponent' +export const customDialogComponentHref = 'CustomDialogComponent'; export const pageLinkArg: FunctionArg = { name: 'pageLink', @@ -135,21 +135,20 @@ export function observableArrayReturnType(objectType: string): FunctionArgType { }; } -export function observableBaseDataReturnType(objectType: string): FunctionArgType { +export function observableBaseDataReturnType(): FunctionArgType { return { - type: `Observable<${baseDataHref}<${objectType}>>`, - description: `An Observable of page result as a ${baseDataHref} holding array of ${objectType} objects.` + type: `Observable<${baseDataHref}<${entityIdHref}>>`, + description: `An Observable of ${baseDataHref} object.` }; } -export function observableArrayBaseDataReturnType(objectType: string): FunctionArgType { +export function observableArrayBaseDataReturnType(): FunctionArgType { return { - type: `Observable<Array<${baseDataHref}<${objectType}>>>`, - description: `An Observable of page result as a ${baseDataHref} holding array of ${objectType} objects.` + type: `Observable<Array<${baseDataHref}<${entityIdHref}>>>`, + description: `An Observable of array of ${baseDataHref} objects.` }; } - export function observablePageDataReturnType(objectType: string): FunctionArgType { return { type: `Observable<${pageDataHref}<${objectType}>>`, @@ -157,8 +156,6 @@ export function observablePageDataReturnType(objectType: string): FunctionArgTyp }; } - - export const serviceCompletions: TbEditorCompletions = { deviceService: { description: 'Device Service API
' + @@ -362,7 +359,7 @@ export const serviceCompletions: TbEditorCompletions = { type: 'AssetService', children: { getTenantAssetInfos: { - description: 'Get tenant asset', + description: 'Get tenant assets', meta: 'function', args: [ pageLinkArg, @@ -530,7 +527,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Get entity view info by id', meta: 'function', args: [ - {name: 'entityViewId', type: 'string', description: 'Id of the entities view'}, + {name: 'entityViewId', type: 'string', description: 'Id of the entity view'}, requestConfigArg ], return: observableReturnType(entityViewInfoHref) @@ -575,7 +572,7 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'function', args: [ {name: 'customerId', type: 'string', description: 'Id of the customer'}, - {name: 'entityViewId', type: 'string', description: 'Id of the entity viewId'}, + {name: 'entityViewId', type: 'string', description: 'Id of the entity view'}, requestConfigArg ], return: observableReturnType(entityViewHref) @@ -596,7 +593,7 @@ export const serviceCompletions: TbEditorCompletions = { { name: 'query', type: 'AssetSearchQuery', - description: 'Asset search query object' + description: 'Entity view search query object' }, requestConfigArg ], @@ -655,7 +652,7 @@ export const serviceCompletions: TbEditorCompletions = { type: 'DashboardService', children: { getTenantDashboards: { - description: 'Get tenant dashboard', + description: 'Get tenant dashboards', meta: 'function', args: [ pageLinkArg, @@ -664,16 +661,17 @@ export const serviceCompletions: TbEditorCompletions = { return: observablePageDataReturnType(dashboardInfoHref) }, getTenantDashboardsByTenantId: { - description: 'Get tenant dashboards by id', + description: 'Get dashboards by tenant id', meta: 'function', args: [ {name: 'tenantId', type: 'string', description: 'Id of the tenant'}, - pageLinkArg + pageLinkArg, + requestConfigArg ], return: observablePageDataReturnType(dashboardInfoHref) }, getCustomerDashboards: { - description: 'Get customer dashboard by id', + description: 'Get dashboards by customer id', meta: 'function', args: [ {name: 'customerId', type: 'string', description: 'Id of the customer'}, @@ -713,7 +711,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Delete dashboard by id', meta: 'function', args: [ - {name: 'dashboardId', type: 'string', description: 'Id of the entity view'}, + {name: 'dashboardId', type: 'string', description: 'Id of the dashboard'}, requestConfigArg ], return: observableVoid() @@ -729,7 +727,7 @@ export const serviceCompletions: TbEditorCompletions = { return: observableReturnType(dashboardHref) }, unassignDashboardFromCustomer: { - description: 'Unassign dashboard from any customer', + description: 'Unassign dashboard from specific customer', meta: 'function', args: [ {name: 'customerId', type: 'string', description: 'Id of the customer'}, @@ -757,7 +755,7 @@ export const serviceCompletions: TbEditorCompletions = { return: observableReturnType(dashboardHref) }, updateDashboardCustomers: { - description: 'Update dashboard by id', + description: 'Update customers assigned to dashboard by ids', meta: 'function', args: [ {name: 'dashboardId', type: 'string', description: 'Id of the dashboard'}, @@ -767,7 +765,7 @@ export const serviceCompletions: TbEditorCompletions = { return: observableReturnType(dashboardHref) }, addDashboardCustomers: { - description: 'Add dashboard customers by ids', + description: 'Assign (Add) customers to dashboard by ids', meta: 'function', args: [ {name: 'dashboardId', type: 'string', description: 'Id of the dashboard'}, @@ -777,14 +775,14 @@ export const serviceCompletions: TbEditorCompletions = { return: observableReturnType(dashboardHref) }, removeDashboardCustomers: { - description: 'Remove dashboard customers dy ids', + description: 'Unassign (Remove) customers from dashboard by ids', meta: 'function', args: [ {name: 'dashboardId', type: 'string', description: 'Id of the dashboard'}, {name: 'customerIds', type: `Array<string>`, description: 'Id of the customers'}, requestConfigArg ], - return: observableArrayReturnType(dashboardHref) + return: observableReturnType(dashboardHref) }, getPublicDashboardLink: { description: 'Get public dashboard link', @@ -798,7 +796,7 @@ export const serviceCompletions: TbEditorCompletions = { } }, getServerTimeDiff: { - description: 'remove dashboard customers ', + description: 'Get time difference', meta: 'function', args: [ ], @@ -822,7 +820,7 @@ export const serviceCompletions: TbEditorCompletions = { return: observablePageDataReturnType(userHref) }, getTenantAdmins: { - description: 'Get tenant admins by id', + description: 'Get tenant admins by id', meta: 'function', args: [ {name: 'tenantId', type: 'string', description: 'Id of the tenant'}, @@ -832,10 +830,10 @@ export const serviceCompletions: TbEditorCompletions = { return: observablePageDataReturnType(userHref) }, getCustomerUsers: { - description: 'Get customer users by id', + description: 'Get customer users by id', meta: 'function', args: [ - {name: 'customerId', type: 'string', description: 'id of the customer'}, + {name: 'customerId', type: 'string', description: 'Id of the customer'}, pageLinkArg, requestConfigArg ], @@ -845,7 +843,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Get user by id', meta: 'function', args: [ - {name: 'userId', type: 'string', description: 'id of the user'}, + {name: 'userId', type: 'string', description: 'Id of the user'}, requestConfigArg ], return: observableReturnType(userHref) @@ -855,6 +853,7 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'function', args: [ {name: 'user', type: userHref, description: 'User object to save'}, + {name: 'sendActivationMail', type: 'boolean', description: 'Send activation email', optional: true}, requestConfigArg ], return: observableReturnType(userHref) @@ -876,7 +875,7 @@ export const serviceCompletions: TbEditorCompletions = { {name: 'userCredentialsEnabled', type: 'boolean', description: 'User credentials enabled'}, requestConfigArg ], - return: observableReturnType(userHref) + return: observableReturnTypeVariable('any') }, getActivationLink: { description: 'Get activation link by id', @@ -885,7 +884,7 @@ export const serviceCompletions: TbEditorCompletions = { {name: 'userId', type: 'string', description: 'Id of the user'}, requestConfigArg ], - return:observableReturnTypeVariable('string') + return: observableReturnTypeVariable('string') }, sendActivationEmail: { description: 'Send activation email', @@ -928,8 +927,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Delete relations by entity id', meta: 'function', args: [ - {name: 'entityId', type: entityIdHref, description: 'Id to the entity'}, - {name: 'relationType', type: 'string', description: 'Relation type'}, + {name: 'entityId', type: entityIdHref, description: 'Entity Id'}, requestConfigArg ], return: observableVoid() @@ -1005,7 +1003,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Find by query', meta: 'function', args: [ - {name: 'query', type: entityRelationsQueryHref, description: 'Query'}, + {name: 'query', type: entityRelationsQueryHref, description: 'Entity relations query'}, requestConfigArg ], return: observableArrayReturnType(entityRelationHref) @@ -1014,7 +1012,7 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Find info by query', meta: 'function', args: [ - {name: 'query', type: entityRelationsQueryHref, description: 'Query'}, + {name: 'query', type: entityRelationsQueryHref, description: 'Entity relations query'}, requestConfigArg ], return: observableArrayReturnType(entityRelationInfoHref) @@ -1032,8 +1030,8 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'function', args: [ {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, - {name: 'attributeScope', type: attributeScopeHref, description: 'Atribute scope'}, - {name: 'keys', type:`Array<string>`, description: 'Array of the keys'}, + {name: 'attributeScope', type: attributeScopeHref, description: 'Attribute scope'}, + {name: 'keys', type: `Array<string>`, description: 'Array of the keys'}, requestConfigArg ], return: observableArrayReturnType(attributeDataHref) @@ -1043,8 +1041,8 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'function', args: [ {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, - {name: 'attributeScope', type: attributeScopeHref, description: 'Atribute scope'}, - {name: 'attributes', type: `array<${attributeDataHref}>`, description: 'Array of the attributes'}, + {name: 'attributeScope', type: attributeScopeHref, description: 'Attribute scope'}, + {name: 'attributes', type: `array<${attributeDataHref}>`, description: 'Array of the attributes data'}, requestConfigArg ], return: observableReturnTypeVariable('any') @@ -1054,11 +1052,11 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'function', args: [ {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, - {name: 'timeseries', type: `Array<${attributeDataHref}>>`, description: 'Array of the timeseries'}, - {name: 'deleteAllDataForKeys', type: 'boolean',optional: true, description: 'Delete all data for keys'}, + {name: 'timeseries', type: `Array<${attributeDataHref}>>`, description: 'Array of the timeseries data'}, + {name: 'deleteAllDataForKeys', type: 'boolean', optional: true, description: 'Delete all data for keys'}, requestConfigArg ], - return:observableReturnTypeVariable('any') + return: observableReturnTypeVariable('any') }, saveEntityAttributes: { description: 'Save entity attributes', @@ -1066,7 +1064,7 @@ export const serviceCompletions: TbEditorCompletions = { args: [ {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, {name: 'attributeScope', type: attributeScopeHref, description: 'Attribute scope'}, - {name: 'attributes', type: 'Array<${attributeDataHref}>>', description: 'Array of the attributes'}, + {name: 'attributes', type: 'Array<${attributeDataHref}>>', description: 'Array of the attributes data'}, requestConfigArg ], return: observableReturnTypeVariable('any') @@ -1077,10 +1075,10 @@ export const serviceCompletions: TbEditorCompletions = { args: [ {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, {name: 'timeseriesScope', type: 'string', description: 'Timeseries scope'}, - {name: 'timeseries', type: `Array<attributeDataHref>`, description: 'Array of the timeseries'}, + {name: 'timeseries', type: `Array<attributeDataHref>`, description: 'Array of the timeseries data'}, requestConfigArg ], - return:observableReturnTypeVariable('any') + return: observableReturnTypeVariable('any') }, } }, @@ -1098,7 +1096,7 @@ export const serviceCompletions: TbEditorCompletions = { {name: 'entityId', type: 'string', description: 'Id of the entity'}, requestConfigArg ], - return:observableBaseDataReturnType(entityIdHref) + return: observableBaseDataReturnType() }, getEntities: { description: 'Get entities by ids', @@ -1108,181 +1106,174 @@ export const serviceCompletions: TbEditorCompletions = { {name: 'entityIds', type: `Array<string>`, description: 'Ids of the entities'}, requestConfigArg ], - return:observableArrayBaseDataReturnType(entityIdHref) + return: observableArrayBaseDataReturnType() }, getEntitiesByNameFilter: { description: 'Get entities by name filter', meta: 'function', args: [ {name: 'entityType', type: entityTypeHref, description: 'Entity type'}, - {name: 'entityNameFilter', type: 'string', description: 'Name filter of the entity'}, + {name: 'entityNameFilter', type: 'string', description: 'Name filter for the entity'}, {name: 'pageSize', type: 'number', description: 'Size of the page'}, - {name: 'subType', type: 'string',optional: true, description: 'Subtype'}, + {name: 'subType', type: 'string', optional: true, description: 'Subtype'}, requestConfigArg ], - return:observableArrayBaseDataReturnType(entityIdHref) + return: observableArrayBaseDataReturnType() }, findEntityDataByQuery: { description: 'Find entity data by query', meta: 'function', args: [ - {name: 'query', type: entityDataQueryHref, description: 'Query'}, - + {name: 'query', type: entityDataQueryHref, description: 'Entity data query'}, requestConfigArg ], - return:observablePageDataReturnType(entityDataHref) + return: observablePageDataReturnType(entityDataHref) }, findAlarmDataByQuery: { description: 'Find alarm data by query', meta: 'function', args: [ - {name: 'query', type: alarmDataQueryHref, description: 'Query'}, + {name: 'query', type: alarmDataQueryHref, description: 'Alarm data query'}, requestConfigArg ], - return:observablePageDataReturnType(alarmDataHref) + return: observablePageDataReturnType(alarmDataHref) }, findEntityInfosByFilterAndName: { description: 'Find entity infos by filter and name', meta: 'function', args: [ - {name: 'filter', type: entityFilterHref, description: 'Filter of the entity'}, + {name: 'filter', type: entityFilterHref, description: 'Filter for the entities'}, {name: 'searchText', type: 'string', description: 'Search text'}, requestConfigArg ], - return:observablePageDataReturnType(entityInfoHref) + return: observablePageDataReturnType(entityInfoHref) }, findSingleEntityInfoByEntityFilter: { - description: 'Find single entity infos by filter of the entity ', + description: 'Find single entity infos by filter', meta: 'function', args: [ - {name: 'filter', type: entityFilterHref, description: 'Filter of the entity'}, - {name: 'searchText', type: 'string', description: 'search text'}, + {name: 'filter', type: entityFilterHref, description: 'Filter for the entity'}, requestConfigArg ], - return:observableReturnType(entityInfoHref) + return: observableReturnType(entityInfoHref) }, getAliasFilterTypesByEntityTypes: { - description: 'Get alias filter types by entity type', + description: 'Get alias filter types by entity types', meta: 'function', args: [ - {name: 'entityTypes', type:`Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'}, - {name: 'searchText', type: 'string', description: 'Search text'} + {name: 'entityTypes', type: `Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'} ], - return:{ - type:`Array<${aliasFilterTypeHref}$gt;`, - description:`Array of ${aliasFilterTypeHref} objects` + return: { + type: `Array<${aliasFilterTypeHref}$gt;`, + description: `Array of ${aliasFilterTypeHref} objects` } }, filterAliasByEntityTypes: { - description: 'Filter alias by entity type', + description: 'Filter alias by entity types', meta: 'function', args: [ - {name: 'entityAlias', type:entityAliasHref, description: 'Alias of the entity'}, - {name: 'entityTypes', type:`Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'} + {name: 'entityAlias', type: entityAliasHref, description: 'Alias of the entity'}, + {name: 'entityTypes', type: `Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'} ], - return:{ - type:'boolean', - description:`Returns boolean variable based on the filter` + return: { + type: 'boolean', + description: `Returns boolean variable based on the filter` } }, prepareAllowedEntityTypesList: { - description: 'Prepare allowed types of the entity list', + description: 'Prepare allowed entity types list', meta: 'function', args: [ - {name: 'allowedEntityTypes', type:`Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'}, - {name: 'useAliasEntityTypes', type:'boolean', description: 'Use alias entity types'}, + {name: 'allowedEntityTypes', type: `Array<${entityTypeHref}|${aliasEntityTypeHref}>`, description: 'Entity types'}, + {name: 'useAliasEntityTypes', type: 'boolean', description: 'Use alias entity types'}, ], - return:{ - type:`Array<${entityTypeHref}|${aliasEntityTypeHref}>`, - description:`Returns entity types array` + return: { + type: `Array<${entityTypeHref}|${aliasEntityTypeHref}>`, + description: `Returns entity types array` } }, getEntityKeys: { description: 'Get entity keys by id', meta: 'function', args: [ - {name: 'entityId', type:entityIdHref, description: 'id of the entity'}, - {name: 'query', type:'string', description: 'Query'}, - {name: 'type', type:dataKeyTypeHref, description: 'Query'}, + {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, + {name: 'query', type: 'string', description: 'Key name starts with'}, + {name: 'type', type: dataKeyTypeHref, description: 'Datakey type'}, requestConfigArg ], - return:{ - type:`Observable<Array<string>>`, - description:`An Observable of string variable.` + return: { + type: `Observable<Array<string>>`, + description: `An Observable of array of string variables.` } - // observableArrayReturnType('string') }, createDatasourcesFromSubscriptionsInfo: { - description: 'Create database from subscriptions info', + description: 'Create datasources from subscriptions info', meta: 'function', args: [ - {name: 'subscriptionsInfo', type:'array', description: 'Subscriptions info'} + {name: 'subscriptionsInfo', type: 'array', description: 'Subscriptions info'} ], - return:{ - type:`Array<${dataSourceHref}>`, - description:`Array of ${dataSourceHref} objects` + return: { + type: `Array<${dataSourceHref}>`, + description: `Array of ${dataSourceHref} objects` } }, createAlarmSourceFromSubscriptionInfo: { description: 'Create alarm source from subscriptions info', meta: 'function', args: [ - {name: 'subscriptionInfo', type:subscriptionInfoHref, description: 'Subscription info'} + {name: 'subscriptionInfo', type: subscriptionInfoHref, description: 'Subscription info'} ], - return:{ - type:`${dataSourceHref}`, - description:`${dataSourceHref} object` + return: { + type: `${dataSourceHref}`, + description: `${dataSourceHref} object` } }, resolveAlias: { description: 'Resolve alias', meta: 'function', args: [ - {name: 'entityAlias', type:entityAliasHref, description: 'Alias of the entity'}, - {name: 'stateParams', type:stateParamsHref, description: 'State params'}, + {name: 'entityAlias', type: entityAliasHref, description: 'Entity alias'}, + {name: 'stateParams', type: stateParamsHref, description: 'State params'}, ], - return:observableReturnType(aliasInfoHref) + return: observableReturnType(aliasInfoHref) }, resolveAliasFilter: { description: 'Resolve alias filter', meta: 'function', args: [ - {name: 'filter', type:entityAliasFilterHref, description: 'Entity alias filter'}, - {name: 'stateParams', type:stateParamsHref, description: 'State params'}, + {name: 'filter', type: entityAliasFilterHref, description: 'Entity alias filter'}, + {name: 'stateParams', type: stateParamsHref, description: 'State params'}, ], - return:observableReturnType(entityAliasFilterResultHref) + return: observableReturnType(entityAliasFilterResultHref) }, checkEntityAlias: { description: 'Check entity alias', meta: 'function', args: [ - {name: 'entityAlias', type:entityAliasHref, description: 'Alias of the entity'}, + {name: 'entityAlias', type: entityAliasHref, description: 'Entity alias'}, ], - return:observableReturnTypeVariable('boolean') - // observableReturnType('boolean') + return: observableReturnTypeVariable('boolean') }, saveEntityParameters: { description: 'Save entity parameters', meta: 'function', args: [ - {name: 'entityType', type:entityTypeHref, description: 'Entity type'}, - {name: 'entityData', type:importEntityDataHref, description: 'Data of the entity'}, - {name: 'update', type:'boolean', description: 'Update'}, + {name: 'entityType', type: entityTypeHref, description: 'Entity type'}, + {name: 'entityData', type: importEntityDataHref, description: 'Entity data'}, + {name: 'update', type: 'boolean', description: 'Update'}, requestConfigArg ], - return:observableReturnType(importEntitiesResultInfoHref) + return: observableReturnType(importEntitiesResultInfoHref) }, saveEntityData: { description: 'Save entity data', meta: 'function', args: [ - {name: 'entityId', type:entityIdHref, description: 'Id of the entity'}, - {name: 'entityData', type:importEntityDataHref, description: 'Data of the entity'}, + {name: 'entityId', type: entityIdHref, description: 'Id of the entity'}, + {name: 'entityData', type: importEntityDataHref, description: 'Entity data'}, requestConfigArg ], - return:observableReturnTypeVariable('any') - - // observableReturnType('any') + return: observableReturnTypeVariable('any') }, } }, @@ -1296,54 +1287,54 @@ export const serviceCompletions: TbEditorCompletions = { description: 'Confirm', meta: 'function', args: [ - {name: 'title', type:'string', description: 'Title'}, - {name: 'message', type:'string', description: 'Message'}, - {name: 'cancel', type:'string',optional: true, description: 'Cancel'}, - {name: 'ok', type:'string',optional: true, description: 'Ok'}, - {name: 'fullscreen', type:'boolean',optional: true, description: 'Fullscreen'}, + {name: 'title', type: 'string', description: 'Title'}, + {name: 'message', type: 'string', description: 'Message'}, + {name: 'cancel', type: 'string', optional: true, description: 'Cancel'}, + {name: 'ok', type: 'string', optional: true, description: 'Ok'}, + {name: 'fullscreen', type: 'boolean', optional: true, description: 'Fullscreen'}, ], - return:observableReturnTypeVariable('boolean') + return: observableReturnTypeVariable('boolean') }, alert: { description: 'Alert', meta: 'function', args: [ - {name: 'title', type:'string', description: 'Title'}, - {name: 'message', type:'string', description: 'Message'}, - {name: 'ok', type:'string',optional: true, description: 'Ok'}, - {name: 'fullscreen', type:'boolean',optional: true, description: 'Fullscreen'}, + {name: 'title', type: 'string', description: 'Title'}, + {name: 'message', type: 'string', description: 'Message'}, + {name: 'ok', type: 'string', optional: true, description: 'Ok'}, + {name: 'fullscreen', type: 'boolean', optional: true, description: 'Fullscreen'}, ], - return:observableReturnTypeVariable('boolean') + return: observableReturnTypeVariable('boolean') }, colorPicker: { description: 'Color picker', meta: 'function', args: [ - {name: 'color', type:'string', description: 'Сolor'}, + {name: 'color', type: 'string', description: 'Сolor'}, ], - return:observableReturnTypeVariable('string') + return: observableReturnTypeVariable('string') }, materialIconPicker: { description: 'Material icon picker', meta: 'function', args: [ - {name: 'icon', type:'string', description: 'Icon'}, + {name: 'icon', type: 'string', description: 'Icon'}, ], - return:observableReturnTypeVariable('string') + return: observableReturnTypeVariable('string') }, forbidden: { description: 'Forbidden', meta: 'function', args: [ ], - return:observableReturnTypeVariable('boolean') + return: observableReturnTypeVariable('boolean') }, todo: { description: 'To do', meta: 'function', args: [ ], - return:observableReturnTypeVariable('any') + return: observableReturnTypeVariable('any') }, } }, @@ -1352,16 +1343,16 @@ export const serviceCompletions: TbEditorCompletions = { 'See CustomDialogService for API reference.', meta: 'service', type: 'CustomDialogService', - children:{ + children: { customDialog: { description: 'Custom Dialog', meta: 'function', args: [ - {name: 'template', type:'string', description: 'Template'}, - {name: 'controller', type:customDialogComponentHref, description: 'Controller'}, - {name: 'data', type:'any', description: 'Data'}, + {name: 'template', type: 'string', description: 'Template'}, + {name: 'controller', type: customDialogComponentHref, description: 'Controller'}, + {name: 'data', type: 'any', description: 'Data', optional: true}, ], - return:observableReturnTypeVariable('any') + return: observableReturnTypeVariable('any') }, } }, @@ -1389,4 +1380,4 @@ export const serviceCompletions: TbEditorCompletions = { meta: 'service', type: 'DomSanitizer' } -} +};