8 changed files with 475 additions and 2143 deletions
@ -0,0 +1,88 @@ |
|||
///
|
|||
/// Copyright © 2016-2025 The Thingsboard Authors
|
|||
///
|
|||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|||
/// you may not use this file except in compliance with the License.
|
|||
/// You may obtain a copy of the License at
|
|||
///
|
|||
/// http://www.apache.org/licenses/LICENSE-2.0
|
|||
///
|
|||
/// Unless required by applicable law or agreed to in writing, software
|
|||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|||
/// See the License for the specific language governing permissions and
|
|||
/// limitations under the License.
|
|||
///
|
|||
|
|||
import { EntityAliases, EntityAliasInfo, getEntityAliasId } from '@shared/models/alias.models'; |
|||
import { FilterInfo, Filters } from '@shared/models/query/query.models'; |
|||
import { Dashboard } from '@shared/models/dashboard.models'; |
|||
import { Datasource, DatasourceType, Widget } from '@shared/models/widget.models'; |
|||
import { WidgetModelDefinition } from '@shared/models/widget/widget-model.definition'; |
|||
import { |
|||
ApiUsageWidgetSettings, |
|||
getUniqueDataKeys |
|||
} from '@home/components/widget/lib/settings/cards/api-usage-settings.component.models'; |
|||
|
|||
interface AliasFilterPair { |
|||
alias?: EntityAliasInfo; |
|||
filter?: FilterInfo; |
|||
} |
|||
|
|||
interface ApiUsageDatasourcesInfo { |
|||
ds?: AliasFilterPair; |
|||
} |
|||
|
|||
export const ApiUsageModelDefinition: WidgetModelDefinition<ApiUsageDatasourcesInfo> = { |
|||
testWidget(widget: Widget): boolean { |
|||
if (widget?.config?.settings) { |
|||
const settings = widget.config.settings; |
|||
if (settings.apiUsageDataKeys && Array.isArray(settings.apiUsageDataKeys)) { |
|||
return true; |
|||
} |
|||
} |
|||
return false; |
|||
}, |
|||
prepareExportInfo(dashboard: Dashboard, widget: Widget): ApiUsageDatasourcesInfo { |
|||
const settings: ApiUsageWidgetSettings = widget.config.settings as ApiUsageWidgetSettings; |
|||
const info: ApiUsageDatasourcesInfo = {}; |
|||
if (settings.dsEntityAliasId) { |
|||
info.ds = prepareExportDataSourcesInfo(dashboard, settings.dsEntityAliasId); |
|||
} |
|||
return info; |
|||
}, |
|||
updateFromExportInfo(widget: Widget, entityAliases: EntityAliases, filters: Filters, info: ApiUsageDatasourcesInfo): void { |
|||
const settings: ApiUsageWidgetSettings = widget.config.settings as ApiUsageWidgetSettings; |
|||
if (info?.ds?.alias) { |
|||
settings.dsEntityAliasId = getEntityAliasId(entityAliases, info.ds.alias); |
|||
} |
|||
}, |
|||
datasources(widget: Widget): Datasource[] { |
|||
const settings: ApiUsageWidgetSettings = widget.config.settings as ApiUsageWidgetSettings; |
|||
const datasources: Datasource[] = []; |
|||
if (settings.apiUsageDataKeys?.length && settings.dsEntityAliasId) { |
|||
datasources.push({ |
|||
type: DatasourceType.entity, |
|||
name: '', |
|||
entityAliasId: settings.dsEntityAliasId, |
|||
dataKeys: getUniqueDataKeys(settings.apiUsageDataKeys) |
|||
}); |
|||
} |
|||
return datasources; |
|||
}, |
|||
hasTimewindow(): boolean { |
|||
return false; |
|||
} |
|||
}; |
|||
|
|||
const prepareExportDataSourcesInfo = (dashboard: Dashboard, settings: string): AliasFilterPair => { |
|||
const aliasAndFilter: AliasFilterPair = {}; |
|||
const entityAlias = dashboard.configuration.entityAliases[settings]; |
|||
if (entityAlias) { |
|||
aliasAndFilter.alias = { |
|||
alias: entityAlias.alias, |
|||
filter: entityAlias.filter |
|||
}; |
|||
} |
|||
return aliasAndFilter; |
|||
} |
|||
File diff suppressed because it is too large
Loading…
Reference in new issue