aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java1
-rwxr-xr-xsdnr/wt/mountpoint-registrar/installer/pom.xml4
-rw-r--r--sdnr/wt/mountpoint-registrar/provider/pom.xml8
-rw-r--r--sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java12
-rw-r--r--sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java9
-rwxr-xr-xsdnr/wt/netconfnode-state-service/installer/pom.xml4
-rw-r--r--sdnr/wt/netconfnode-state-service/model/pom.xml2
-rw-r--r--sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java57
-rw-r--r--sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx6
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx2
-rw-r--r--sdnr/wt/odlux/apps/demoApp/pom.xml4
-rw-r--r--sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx2
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts10
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx1
-rw-r--r--sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx15
-rw-r--r--sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx2
-rw-r--r--sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx4
-rw-r--r--sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx2
-rw-r--r--sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx4
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx2
-rw-r--r--sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx2
-rw-r--r--sdnr/wt/odlux/framework/pom.xml2
-rw-r--r--sdnr/wt/odlux/framework/src/app.tsx1
-rw-r--r--sdnr/wt/odlux/framework/src/components/errorDisplay.tsx1
-rw-r--r--sdnr/wt/odlux/framework/src/components/material-table/index.tsx4
-rw-r--r--sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx12
-rw-r--r--sdnr/wt/odlux/framework/src/components/navigationMenu.tsx38
-rw-r--r--sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts5
-rw-r--r--sdnr/wt/odlux/framework/src/models/applicationConfig.ts3
-rw-r--r--sdnr/wt/odlux/framework/src/views/home.tsx12
-rw-r--r--sdnr/wt/odlux/odlux.properties8
31 files changed, 127 insertions, 112 deletions
diff --git a/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java b/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
index 05f1e6dd5..d3ae5014e 100644
--- a/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
+++ b/sdnr/wt/devicemanager-o-ran-sc/o-ran/ru-fh/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/oran/impl/ORanNetworkElement.java
@@ -141,6 +141,7 @@ public class ORanNetworkElement implements NetworkElement {
if (oRanFaultListenerRegistrationResult != null) {
this.oRanFaultListenerRegistrationResult.close();
} ;
+ databaseService.clearGuiCutThroughEntriesOfNode(getMountpointId());
}
@Override
diff --git a/sdnr/wt/mountpoint-registrar/installer/pom.xml b/sdnr/wt/mountpoint-registrar/installer/pom.xml
index 34a70bb77..d1ee3fbb0 100755
--- a/sdnr/wt/mountpoint-registrar/installer/pom.xml
+++ b/sdnr/wt/mountpoint-registrar/installer/pom.xml
@@ -47,7 +47,7 @@
<dependencies>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${application.name}-feature</artifactId>
<version>${project.version}</version>
<type>xml</type>
@@ -60,7 +60,7 @@
</exclusions>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${application.name}-provider</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/sdnr/wt/mountpoint-registrar/provider/pom.xml b/sdnr/wt/mountpoint-registrar/provider/pom.xml
index 4a6a3f021..69af460f8 100644
--- a/sdnr/wt/mountpoint-registrar/provider/pom.xml
+++ b/sdnr/wt/mountpoint-registrar/provider/pom.xml
@@ -30,7 +30,7 @@
<groupId>org.onap.ccsdk.parent</groupId>
<artifactId>binding-parent</artifactId>
<version>2.2.0-SNAPSHOT</version>
- <relativePath/>
+ <relativePath />
</parent>
<groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
@@ -66,7 +66,7 @@
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>sdnr-wt-common</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
@@ -106,13 +106,13 @@
<artifactId>dmaapClient</artifactId>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>sdnr-wt-data-provider-model</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>sdnr-wt-devicemanager-core-model</artifactId>
<version>${project.version}</version>
<scope>provided</scope>
diff --git a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java
index ec5198012..6daeb493d 100644
--- a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java
+++ b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPFaultVESMsgConsumer.java
@@ -49,19 +49,29 @@ public class DMaaPFaultVESMsgConsumer extends DMaaPVESMsgConsumerImpl {
String faultSeverity;
String vesDomain;
int faultSequence;
+ String reportingEntityName;
ObjectMapper oMapper = new ObjectMapper();
JsonNode dmaapMessageRootNode;
LOG.info("Fault VES Message is - {}", msg);
try {
dmaapMessageRootNode = oMapper.readTree(msg);
+ reportingEntityName = dmaapMessageRootNode.at("/event/commonEventHeader/reportingEntityName").textValue();
+ if (reportingEntityName.equals("ONAP SDN-R")) {
+ LOG.info(
+ "VES PNF Registration message generated by SDNR, hence no need to process any further; Ignoring the received message");
+ return;
+ }
+
vesDomain = dmaapMessageRootNode.at("/event/commonEventHeader/domain").textValue();
if (!vesDomain.equalsIgnoreCase("fault")) {
LOG.warn("Received {} domain VES Message in DMaaP Fault topic, ignoring it", vesDomain);
return;
}
faultNodeId = dmaapMessageRootNode.at("/event/commonEventHeader/sourceName").textValue();
- faultOccurrenceTime = Instant.ofEpochMilli(dmaapMessageRootNode.at("/event/commonEventHeader/startEpochMicrosec").longValue()/1000)
+ faultOccurrenceTime = Instant
+ .ofEpochMilli(
+ dmaapMessageRootNode.at("/event/commonEventHeader/startEpochMicrosec").longValue() / 1000)
.atZone(ZoneId.of("Z")).toString();
faultObjectId = dmaapMessageRootNode.at("/event/faultFields/alarmInterfaceA").textValue();
faultReason = dmaapMessageRootNode.at("/event/faultFields/specificProblem").textValue();
diff --git a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java
index 1d70077b9..1d95ea522 100644
--- a/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java
+++ b/sdnr/wt/mountpoint-registrar/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/mountpointregistrar/impl/DMaaPPNFRegVESMsgConsumer.java
@@ -44,7 +44,6 @@ public class DMaaPPNFRegVESMsgConsumer extends DMaaPVESMsgConsumerImpl {
@Override
public void processMsg(String msg) {
LOG.debug("Message from DMaaP topic is - {} ", msg);
- @Nullable
String pnfId;
String pnfIPAddress;
@Nullable
@@ -57,10 +56,18 @@ public class DMaaPPNFRegVESMsgConsumer extends DMaaPVESMsgConsumerImpl {
String pnfUsername;
@Nullable
String pnfPasswd = null;
+ String reportingEntityName;
ObjectMapper oMapper = new ObjectMapper();
JsonNode dmaapMessageRootNode;
try {
dmaapMessageRootNode = oMapper.readTree(msg);
+ reportingEntityName = dmaapMessageRootNode.at("/event/commonEventHeader/reportingEntityName").textValue();
+ if (reportingEntityName.equals("ONAP SDN-R")) {
+ LOG.info(
+ "VES PNF Registration message generated by SDNR, hence no need to process any further; Ignoring the received message");
+ return;
+ }
+
pnfId = dmaapMessageRootNode.at("/event/commonEventHeader/sourceName").textValue();
pnfIPAddress = getPNFIPAddress(dmaapMessageRootNode);
pnfCommProtocol =
diff --git a/sdnr/wt/netconfnode-state-service/installer/pom.xml b/sdnr/wt/netconfnode-state-service/installer/pom.xml
index 5a066fdd6..f2ed1ce23 100755
--- a/sdnr/wt/netconfnode-state-service/installer/pom.xml
+++ b/sdnr/wt/netconfnode-state-service/installer/pom.xml
@@ -47,7 +47,7 @@
<dependencies>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${application.name}-feature</artifactId>
<version>${project.version}</version>
<type>xml</type>
@@ -60,7 +60,7 @@
</exclusions>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>${application.name}-provider</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/sdnr/wt/netconfnode-state-service/model/pom.xml b/sdnr/wt/netconfnode-state-service/model/pom.xml
index 69f38ed9f..731578d67 100644
--- a/sdnr/wt/netconfnode-state-service/model/pom.xml
+++ b/sdnr/wt/netconfnode-state-service/model/pom.xml
@@ -62,7 +62,7 @@
<scope>provided</scope>
</dependency>
<dependency>
- <groupId>org.onap.ccsdk.features.sdnr.wt</groupId>
+ <groupId>${project.groupId}</groupId>
<artifactId>sdnr-wt-data-provider-model</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java b/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java
index 9c24b8b4b..f12c53a4d 100644
--- a/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java
+++ b/sdnr/wt/netconfnode-state-service/model/src/main/java/org/onap/ccsdk/features/sdnr/wt/netconfnodestateservice/Capabilities.java
@@ -21,20 +21,18 @@
*/
package org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nullable;
-import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.AvailableCapabilities;
import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.UnavailableCapabilities;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.available.capabilities.AvailableCapability;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.netconf.node.connection.status.unavailable.capabilities.UnavailableCapability;
import org.opendaylight.yangtools.yang.common.QName;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,14 +46,12 @@ public class Capabilities {
private static final Logger LOG = LoggerFactory.getLogger(Capabilities.class);
- private static final String METHODNAME = "getCapability";
private static final String UNSUPPORTED = "Unsupported";
private final List<String> capabilities = new ArrayList<>();
private final DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
private Capabilities() {}
- @SuppressWarnings("null")
public static Capabilities getAvailableCapabilities(@Nullable NetconfNode nnode) {
LOG.info("GetAvailableCapabilities for node");
Capabilities capabilities = new Capabilities();
@@ -72,14 +68,13 @@ public class Capabilities {
return capabilities;
}
- @SuppressWarnings("null")
public static Capabilities getUnavailableCapabilities(NetconfNode nnode) {
LOG.info("GetUnavailableCapabilities for node");
Capabilities capabilities = new Capabilities();
if (nnode != null) {
UnavailableCapabilities availableCapabilites = nnode.getUnavailableCapabilities();
if (availableCapabilites != null) {
- capabilities.constructor(availableCapabilites.getUnavailableCapability());
+ capabilities.constructor2(availableCapabilites.getUnavailableCapability());
} else {
LOG.debug("empty capabilites");
}
@@ -93,30 +88,20 @@ public class Capabilities {
/**
* Does all construction steps
*
- * @param pcapabilities with a list of capabilities. <br>
- * Type could be <br>
- * - Boron: List<code><String></code> <br>
- * - Carbon: List<AvailableCapability>
+ * @param pcapabilities with a list of capabilities.
*/
- private void constructor(List<@NonNull ?> pcapabilities) {
+ private void constructor(List<AvailableCapability> pcapabilities) {
if (pcapabilities != null) {
- Method methodGetCapability;
-
- for (Object capability : pcapabilities) {
- if (capability instanceof String) { // ODL Boron specific
- this.capabilities.add((String) capability);
- } else { // Carbon specific part .. handled via generics
- try {
- methodGetCapability = capability.getClass().getDeclaredMethod(METHODNAME);
- methodGetCapability.setAccessible(true);
- this.capabilities.add(methodGetCapability.invoke(capability).toString());
- } catch (NoSuchMethodException | SecurityException | IllegalAccessException
- | IllegalArgumentException | InvocationTargetException e) {
- LOG.warn("Capability class with missing interface method {}: {} {} {}", METHODNAME,
- e.getMessage(), capability.getClass(),
- Arrays.toString(capability.getClass().getInterfaces()));
- }
- }
+ for (AvailableCapability capability : pcapabilities) {
+ this.capabilities.add(capability.getCapability());
+ }
+ }
+ }
+
+ private void constructor2(List<UnavailableCapability> pcapabilities) {
+ if (pcapabilities != null) {
+ for (UnavailableCapability capability : pcapabilities) {
+ this.capabilities.add(capability.getCapability());
}
}
}
@@ -132,6 +117,7 @@ public class Capabilities {
/**
* Verify if the namespace is supported
+ *
* @param qCapability from model
* @return true if namespace is supported
*/
@@ -142,6 +128,7 @@ public class Capabilities {
/**
* Verify if the namespace is supported
+ *
* @param namespace
* @return
*/
@@ -151,12 +138,12 @@ public class Capabilities {
/**
* check if the namespace and its revision are supported by the given capabilities
+ *
* @param qCapability capability from the model
* @return true if supporting the model AND revision<br>
* false if revision not available or both not found.
*/
public boolean isSupportingNamespaceAndRevision(QName qCapability) {
-
String namespace = qCapability.getNamespace().toString();
String revision = getRevisionString(qCapability);
return revision == null ? false : isSupportingNamespaceAndRevision(namespace, revision);
@@ -170,8 +157,11 @@ public class Capabilities {
*/
public boolean isSupportingNamespaceAndRevision(String namespace, @Nullable String revision) {
LOG.trace("isSupportingNamespaceAndRevision: Model namespace {}?[revision {}]", namespace, revision);
+
+ final String nsAndRev = String.format("%s?revision=%s", namespace, revision);
for (String capability : capabilities) {
- if (capability.contains(namespace) && (revision == null || capability.contains(revision))) {
+ //if (capability.contains(namespace) && (revision == null || capability.contains(revision))) {
+ if (capability.contains(revision != null ? nsAndRev : namespace)) {
LOG.trace("Verify true with: {}", capability);
return true;
} else {
@@ -228,11 +218,12 @@ public class Capabilities {
/**
* Verify if QName namespace is supported by capabilities
+ *
* @param revision result of getRevisionForNamespace()
* @return true if namespace is supported.
*/
static public boolean isNamespaceSupported(String revision) {
- return revision != UNSUPPORTED;
+ return revision != UNSUPPORTED;
}
@Override
diff --git a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
index e466dbacc..db426e814 100644
--- a/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
+++ b/sdnr/wt/odlux/apps/configurationApp/src/views/configurationApplication.tsx
@@ -588,7 +588,8 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp
const addNewElementAction = {
icon: AddIcon,
- tooltip: 'Add',
+ tooltip: 'Add',
+ ariaLabel:'add-element',
onClick: () => {
navigate("[]"); // empty key means new element
},
@@ -597,7 +598,8 @@ class ConfigurationApplicationComponent extends React.Component<ConfigurationApp
const addWithApiDocElementAction = {
icon: PostAdd,
- tooltip: 'Add',
+ tooltip: 'Add',
+ ariaLabel:'add-element-via-api-doc',
onClick: () => {
window.open(apiDocPathCreate, '_blank');
},
diff --git a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
index 94b4872dd..7d2f96af3 100644
--- a/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
+++ b/sdnr/wt/odlux/apps/connectApp/src/components/connectionStatusLog.tsx
@@ -54,7 +54,7 @@ class ConnectionStatusLogComponent extends React.Component<ConnectionStatusLogCo
render(): JSX.Element {
const refreshConnectionStatusLogAction = {
- icon: Refresh, tooltip: 'Refresh Connection Status Log Table', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Connection Status Log Table', ariaLabel:'refresh', onClick: () => {
this.setState({
refreshConnectionStatusLogEditorMode: RefreshConnectionStatusLogDialogMode.RefreshConnectionStatusLogTable
});
diff --git a/sdnr/wt/odlux/apps/demoApp/pom.xml b/sdnr/wt/odlux/apps/demoApp/pom.xml
index dae67b17b..e3f27d5c9 100644
--- a/sdnr/wt/odlux/apps/demoApp/pom.xml
+++ b/sdnr/wt/odlux/apps/demoApp/pom.xml
@@ -155,10 +155,6 @@
</execution>
</executions>
</plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- </plugin>
</plugins>
</build>
</project>
diff --git a/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx b/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx
index 748c66e51..0308828c9 100644
--- a/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx
+++ b/sdnr/wt/odlux/apps/eventLogApp/src/views/eventLog.tsx
@@ -55,7 +55,7 @@ class EventLogComponent extends React.Component<EventLogComponentProps, EventLog
render(): JSX.Element {
const refreshEventLogAction = {
- icon: Refresh, tooltip: 'Refresh Event log', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Event log', ariaLabel:'refresh', onClick: () => {
this.setState({
refreshEventLogEditorMode: RefreshEventLogDialogMode.RefreshEventLogTable
});
diff --git a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
index 46f92fbef..2ab1da2ed 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
+++ b/sdnr/wt/odlux/apps/faultApp/src/handlers/faultAppRootHandler.ts
@@ -30,7 +30,6 @@ import { SetPanelAction } from '../actions/panelChangeActions';
import { IFaultStatus, faultStatusHandler } from './faultStatusHandler';
import { stuckAlarmHandler } from './clearStuckAlarmsHandler';
import { PanelId } from '../models/panelId';
-import { SetPartialUpdatesAction } from '../actions/partialUpdatesAction';
export interface IFaultAppStoreState {
currentProblems: ICurrentProblemsState;
@@ -38,7 +37,6 @@ export interface IFaultAppStoreState {
alarmLogEntries: IAlarmLogEntriesState;
currentOpenPanel: PanelId | null;
faultStatus: IFaultStatus;
- listenForPartialUpdates: boolean;
}
const currentOpenPanelHandler: IActionHandler<PanelId | null> = (state = null, action) => {
@@ -48,13 +46,6 @@ const currentOpenPanelHandler: IActionHandler<PanelId | null> = (state = null, a
return state;
}
-const arePartialUpdatesActiveHandler: IActionHandler<boolean> = (state = false, action) => {
- if (action instanceof SetPartialUpdatesAction) {
- state = action.isActive;
- }
- return state;
-}
-
declare module '../../../../framework/src/store/applicationStore' {
interface IApplicationStoreState {
fault: IFaultAppStoreState;
@@ -67,7 +58,6 @@ const actionHandlers = {
alarmLogEntries: alarmLogEntriesActionHandler,
currentOpenPanel: currentOpenPanelHandler,
faultStatus: faultStatusHandler,
- listenForPartialUpdates: arePartialUpdatesActiveHandler
};
export const faultAppRootHandler = combineActionHandler<IFaultAppStoreState>(actionHandlers);
diff --git a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
index 06299417d..3715c623e 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/pluginFault.tsx
@@ -140,6 +140,7 @@ export function register() {
applicationApi.applicationStoreInitialized.then(store => {
store.dispatch(refreshFaultStatusAsyncAction);
});
+
window.setInterval(() => {
applicationApi.applicationStoreInitialized.then(store => {
store.dispatch(refreshFaultStatusAsyncAction);
diff --git a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
index 7b0c23693..0fc7b390e 100644
--- a/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
+++ b/sdnr/wt/odlux/apps/faultApp/src/views/faultApplication.tsx
@@ -41,7 +41,6 @@ import Refresh from '@material-ui/icons/Refresh';
import ClearStuckAlarmsDialog, { ClearStuckAlarmsDialogMode } from '../components/clearStuckAlarmsDialog';
import RefreshAlarmLogDialog, { RefreshAlarmLogDialogMode } from '../components/refreshAlarmLogDialog';
import RefreshCurrentProblemsDialog, { RefreshCurrentProblemsDialogMode } from '../components/refreshCurrentProblemsDialog';
-import { SetPartialUpdatesAction } from '../actions/partialUpdatesAction';
const mapProps = (state: IApplicationStoreState) => ({
panelId: state.fault.currentOpenPanel,
@@ -58,7 +57,6 @@ const mapDisp = (dispatcher: IDispatcher) => ({
switchActivePanel: (panelId: PanelId) => {
dispatcher.dispatch(setPanelAction(panelId));
},
- setPartialUpdates: (active: boolean) => dispatcher.dispatch(new SetPartialUpdatesAction(active))
});
type FaultApplicationComponentProps = RouteComponentProps & Connect<typeof mapProps, typeof mapDisp>;
@@ -138,11 +136,11 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
render(): JSX.Element {
const clearAlarmsAction = {
- icon: Sync, tooltip: 'Clear stuck alarms', onClick: this.onDialogOpen
+ icon: Sync, tooltip: 'Clear stuck alarms', ariaLabel:'clear-stuck-alarms', onClick: this.onDialogOpen
};
const refreshCurrentProblemsAction = {
- icon: Refresh, tooltip: 'Refresh Current Problems List', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Current Problems List', ariaLabel:'refresh', onClick: () => {
this.setState({
refreshCurrentProblemsEditorMode: RefreshCurrentProblemsDialogMode.RefreshCurrentProblemsTable
});
@@ -150,7 +148,7 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
};
const refreshAlarmLogAction = {
- icon: Refresh, tooltip: 'Refresh Alarm log table', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Alarm log table', ariaLabel:'refresh', onClick: () => {
this.setState({
refreshAlarmLogEditorMode: RefreshAlarmLogDialogMode.RefreshAlarmLogTable
});
@@ -230,15 +228,12 @@ class FaultApplicationComponent extends React.Component<FaultApplicationComponen
};
- componentWillUnmount() {
- this.props.setPartialUpdates(false);
- }
-
public componentDidMount() {
if (this.props.panelId === null) { //set default tab if none is set
this.onToggleTabs("CurrentProblem");
+ }else{
+ this.onToggleTabs(this.props.panelId);
}
- this.props.setPartialUpdates(true);
}
private renderIcon = (props: { rowData: Fault | FaultAlarmNotification }) => {
diff --git a/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx b/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx
index b672dc336..0a1bea0f1 100644
--- a/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx
+++ b/sdnr/wt/odlux/apps/inventoryApp/src/views/dashboard.tsx
@@ -124,7 +124,7 @@ class DashboardSelectorComponent extends React.Component<DashboardComponentProps
render() {
const refreshInventoryAction = {
- icon: Refresh, tooltip: 'Refresh Inventory', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Inventory', ariaLabel: 'refresh', onClick: () => {
this.setState({
refreshInventoryEditorMode: RefreshInventoryDialogMode.RefreshInventoryTable
});
diff --git a/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx b/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx
index 6b5071d90..0be28b748 100644
--- a/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx
+++ b/sdnr/wt/odlux/apps/maintenanceApp/src/views/maintenenceView.tsx
@@ -113,7 +113,7 @@ class MaintenenceViewComponent extends React.Component<MaintenenceViewComponentP
render() {
const { classes } = this.props;
const addMaintenenceEntryAction = {
- icon: AddIcon, tooltip: 'Add', onClick: () => {
+ icon: AddIcon, tooltip: 'Add', ariaLabel:'add-element', onClick: () => {
const startTime = (new Date().valueOf());
const endTime = startTime;
this.setState({
@@ -128,7 +128,7 @@ class MaintenenceViewComponent extends React.Component<MaintenenceViewComponentP
};
const refreshMaintenanceEntriesAction = {
- icon: Refresh, tooltip: 'Refresh Maintenance Entries', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Maintenance Entries', ariaLabel: 'refresh', onClick: () => {
this.setState({
refreshMaintenenceEntriesEditorMode: RefreshMaintenanceEntriesDialogMode.RefreshMaintenanceEntriesTable
});
diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
index f96223297..fbf6d5774 100644
--- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
+++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorApplication.tsx
@@ -151,7 +151,7 @@ class MediatorApplicationComponent extends React.Component<MediatorApplicationCo
</>
);
- const addMediatorConfigAction = { icon: AddIcon, tooltip: 'Add', onClick: this.onOpenAddConfigurationDialog };
+ const addMediatorConfigAction = { icon: AddIcon, tooltip: 'Add', ariaLabel: 'add-element', onClick: this.onOpenAddConfigurationDialog };
return (
<div className={classes.root}>
diff --git a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
index 0f4ebbe0b..be1ecc718 100644
--- a/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
+++ b/sdnr/wt/odlux/apps/mediatorApp/src/views/mediatorServerSelection.tsx
@@ -90,7 +90,7 @@ class MediatorServerSelectionComponent extends React.Component<MediatorServerSel
render() {
const { classes } = this.props;
const refreshMediatorAction = {
- icon: Refresh, tooltip: 'Refresh Mediator Server Table', onClick: () => {
+ icon: Refresh, tooltip: 'Refresh Mediator Server Table', ariaLabel:'refresh', onClick: () => {
this.setState({
refreshMediatorEditorMode: RefreshMediatorDialogMode.RefreshMediatorTable
});
@@ -98,7 +98,7 @@ class MediatorServerSelectionComponent extends React.Component<MediatorServerSel
};
const addMediatorServerActionButton = {
- icon: AddIcon, tooltip: 'Add', onClick: () => {
+ icon: AddIcon, tooltip: 'Add', ariaLabel:'add-element', onClick: () => {
this.setState({
mediatorServerEditorMode: EditMediatorServerDialogMode.AddMediatorServer,
mediatorServerToEdit: emptyMediatorServer,
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx b/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx
index 62090245a..6a06ea351 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/components/performanceData.tsx
@@ -85,7 +85,7 @@ class PerformanceDataComponent extends React.Component<PerformanceDataComponentP
<>
<ToggleContainer onToggleFilterButton={() => this.props.toggleFilterButton(!this.props.isFilterVisible)} existingFilter={this.props.existingFilter} onFilterChanged={this.onFilterChanged} selectedValue={this.props.currentView} showFilter={this.props.isFilterVisible} onChange={this.props.setSubView}>
{lineChart(chartPagedData)}
- <PerformanceDataTable stickyHeader idProperty={"_id"} tableId="perfromance-data-table" columns={performanceColumns} {...properties} {...actions} />
+ <PerformanceDataTable stickyHeader idProperty={"_id"} tableId="performance-data-table" columns={performanceColumns} {...properties} {...actions} />
</ToggleContainer>
</>
);
diff --git a/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx b/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx
index a0df93fe1..b0fd54c42 100644
--- a/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx
+++ b/sdnr/wt/odlux/apps/performanceHistoryApp/src/views/performanceHistoryApplication.tsx
@@ -251,7 +251,7 @@ class PerformanceHistoryComponent extends React.Component<PerformanceHistoryComp
<Tab label="Transmission Power" value="TransmissionPower" aria-label="transmission-power" />
<Tab label="Adaptive Modulation" value="AdaptiveModulation" aria-label="adaptive-modulation" />
<Tab label="Temperature" value="Temperature" aria-label="temperature" />
- <Tab label="Signal-to-interference-plus-noise ratio (SINR)" value="SINR" aria-label="snir" />
+ <Tab label="Signal-to-interference-plus-noise ratio (SINR)" value="SINR" aria-label="sinr" />
<Tab label="Cross Polar Discrimination" value="CPD" aria-label="cross-polar-discrimination" />
</Tabs>
</AppBar>
diff --git a/sdnr/wt/odlux/framework/pom.xml b/sdnr/wt/odlux/framework/pom.xml
index 3e947539f..0e6b3cf7f 100644
--- a/sdnr/wt/odlux/framework/pom.xml
+++ b/sdnr/wt/odlux/framework/pom.xml
@@ -46,7 +46,7 @@
<properties>
<buildtime>${maven.build.timestamp}</buildtime>
<distversion>ONAP Frankfurt (Neon, mdsal ${odl.mdsal.version})</distversion>
- <buildno>110.0d5d064(21/07/05)</buildno>
+ <buildno>115.f8b3b3c(21/07/30)</buildno>
<odlux.version>ONAP SDN-R | ONF Wireless for ${distversion} - Build: ${buildtime} ${buildno} ${project.version}</odlux.version>
</properties>
diff --git a/sdnr/wt/odlux/framework/src/app.tsx b/sdnr/wt/odlux/framework/src/app.tsx
index 7e162cd51..ada78b90f 100644
--- a/sdnr/wt/odlux/framework/src/app.tsx
+++ b/sdnr/wt/odlux/framework/src/app.tsx
@@ -105,4 +105,3 @@ export const runApplication = () => {
};
-
diff --git a/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx b/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx
index 1060d4b6d..b2a1f1f20 100644
--- a/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx
+++ b/sdnr/wt/odlux/framework/src/components/errorDisplay.tsx
@@ -82,6 +82,7 @@ class ErrorDisplayComponent extends React.Component<ErrorDisplayProps> {
render(): JSX.Element {
const { classes, state } = this.props;
const errorInfo = state.framework.applicationState.errors.length && state.framework.applicationState.errors[state.framework.applicationState.errors.length - 1];
+
return (
<Modal className={classes.modal}
aria-labelledby="simple-modal-title"
diff --git a/sdnr/wt/odlux/framework/src/components/material-table/index.tsx b/sdnr/wt/odlux/framework/src/components/material-table/index.tsx
index c74fd1a38..9155f38ec 100644
--- a/sdnr/wt/odlux/framework/src/components/material-table/index.tsx
+++ b/sdnr/wt/odlux/framework/src/components/material-table/index.tsx
@@ -159,7 +159,7 @@ type MaterialTableComponentBaseProps<TData> = WithStyles<typeof styles> & {
enableSelection?: boolean;
disableSorting?: boolean;
disableFilter?: boolean;
- customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, onClick: () => void, disabled?: boolean }[];
+ customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, ariaLabel: string, onClick: () => void, disabled?: boolean }[];
onHandleClick?(event: React.MouseEvent<HTMLTableRowElement>, rowData: TData): void;
createContextMenu?: (row: TData) => React.ReactElement<MenuItemProps | DividerTypeMap<{}, "hr">, React.ComponentType<MenuItemProps | DividerTypeMap<{}, "hr">>>[];
};
@@ -253,8 +253,8 @@ class MaterialTableComponent<TData extends {} = {}> extends React.Component<Mate
{rows // may need ordering here
.map((entry: TData & { [RowDisabled]?: boolean, [kex: string]: any }, index) => {
const entryId = getId(entry);
- const isSelected = this.isSelected(entryId);
const contextMenu = (this.props.createContextMenu && this.state.contextMenuInfo.index === index && this.props.createContextMenu(entry)) || null;
+ const isSelected = this.isSelected(entryId) || this.state.contextMenuInfo.index === index;
return (
<TableRowExt
hover
diff --git a/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx b/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx
index f7de0a062..4ad6422dc 100644
--- a/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx
+++ b/sdnr/wt/odlux/framework/src/components/material-table/tableToolbar.tsx
@@ -67,7 +67,7 @@ interface ITableToolbarComponentProps extends WithStyles<typeof styles> {
numSelected: number | null;
title?: string;
tableId?: string;
- customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, onClick: () => void, disabled?: boolean }[];
+ customActionButtons?: { icon: React.ComponentType<SvgIconProps>, tooltip?: string, ariaLabel: string, onClick: () => void, disabled?: boolean }[];
onToggleFilter: () => void;
onExportToCsv: () => void;
}
@@ -91,7 +91,7 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps,
render() {
const { numSelected, classes } = this.props;
const open = !!this.state.anchorEl;
- const buttonPrefix = this.props.tableId !== undefined ? this.props.tableId + '-' : '';
+ const buttonPrefix = this.props.tableId !== undefined ? this.props.tableId : 'table';
return (
<Toolbar className={`${classes.root} ${numSelected && numSelected > 0 ? classes.highlight : ''} `} >
<div className={classes.title}>
@@ -110,7 +110,7 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps,
{this.props.customActionButtons
? this.props.customActionButtons.map((action, ind) => (
<Tooltip key={`custom-action-${ind}`} title={action.tooltip || ''}>
- <IconButton disabled={action.disabled} aria-label={buttonPrefix + `custom-action-${ind}`} onClick={() => action.onClick()}>
+ <IconButton disabled={action.disabled} aria-label={`${buttonPrefix}-${action.ariaLabel}-button`} onClick={() => action.onClick()}>
<action.icon />
</IconButton>
</Tooltip>
@@ -118,20 +118,20 @@ class TableToolbarComponent extends React.Component<ITableToolbarComponentProps,
: null}
{numSelected && numSelected > 0 ? (
<Tooltip title="Delete">
- <IconButton aria-label={buttonPrefix + "delete"}>
+ <IconButton aria-label={`${buttonPrefix}-delete-button`}>
<DeleteIcon />
</IconButton>
</Tooltip>
) : (
<Tooltip title="Filter list">
- <IconButton aria-label={buttonPrefix + "filter-list"} onClick={() => { this.props.onToggleFilter && this.props.onToggleFilter() }}>
+ <IconButton aria-label={`${buttonPrefix}-filter-list-button`} onClick={() => { this.props.onToggleFilter && this.props.onToggleFilter() }}>
<FilterListIcon />
</IconButton>
</Tooltip>
)}
<Tooltip title="Actions">
<IconButton color="inherit"
- aria-label={buttonPrefix +"additional-actions-button"}
+ aria-label={`${buttonPrefix}-additional-actions-button`}
aria-owns={open ? 'menu-appbar' : undefined}
aria-haspopup="true"
onClick={this.handleMenu} >
diff --git a/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx b/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx
index 437ba1b3a..b65eb29e2 100644
--- a/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx
+++ b/sdnr/wt/odlux/framework/src/components/navigationMenu.tsx
@@ -87,9 +87,10 @@ const styles = (theme: Theme) => createStyles({
const tabletWidthBreakpoint = 768;
export const NavigationMenu = withStyles(styles)(connect()(({ classes, state, dispatch }: WithStyles<typeof styles> & Connect & Connect) => {
- const { user } = state.framework.authenticationState
- const isOpen = state.framework.applicationState.isMenuOpen
- const closedByUser = state.framework.applicationState.isMenuClosedByUser
+ const { user } = state.framework.authenticationState;
+ const isOpen = state.framework.applicationState.isMenuOpen;
+ const closedByUser = state.framework.applicationState.isMenuClosedByUser;
+ const transportUrl = state.framework.applicationState.transportpceUrl;
const [responsive, setResponsive] = React.useState(false);
@@ -139,20 +140,25 @@ export const NavigationMenu = withStyles(styles)(connect()(({ classes, state, di
) || null;
}) || null;
- const transportPCELink = <ListItemLink
- key={"transportPCE"}
- to={window.localStorage.getItem(transportPCEUrl)!}
- primary={"TransportPCE"}
- icon={<FontAwesomeIcon icon={faProjectDiagram}/>}
- external/>;
-
- const linkFound = menuItems.find(obj=>obj.key === "linkCalculation");
- if(linkFound){
- const index = menuItems.indexOf(linkFound);
- menuItems.splice(index+1,0,transportPCELink);
- }else{
- menuItems.push(transportPCELink);
+ if(transportUrl.length>0){
+
+ const transportPCELink = <ListItemLink
+ key={"transportPCE"}
+ to={transportUrl}
+ primary={"TransportPCE"}
+ icon={<FontAwesomeIcon icon={faProjectDiagram} />}
+ external />;
+
+ const linkFound = menuItems.find(obj => obj.key === "linkCalculation");
+
+ if (linkFound) {
+ const index = menuItems.indexOf(linkFound);
+ menuItems.splice(index + 1, 0, transportPCELink);
+ } else {
+ menuItems.push(transportPCELink);
+ }
}
+
return (
<Drawer
diff --git a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts
index 6426066f6..61e1334e7 100644
--- a/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts
+++ b/sdnr/wt/odlux/framework/src/handlers/applicationStateHandler.ts
@@ -50,7 +50,8 @@ export interface IApplicationState {
isWebsocketAvailable: boolean | undefined;
externalLoginProviders: ExternalLoginProvider[] | null;
authentication: "basic"|"oauth", // basic
- enablePolicy: boolean // false
+ enablePolicy: boolean, // false
+ transportpceUrl : string
}
const applicationStateInit: IApplicationState = {
@@ -63,11 +64,13 @@ const applicationStateInit: IApplicationState = {
externalLoginProviders: null,
authentication: "basic",
enablePolicy: false,
+ transportpceUrl: ""
};
export const configureApplication = (config: ApplicationConfig) => {
applicationStateInit.authentication = config.authentication === "oauth" ? "oauth" : "basic";
applicationStateInit.enablePolicy = config.enablePolicy ? true : false;
+ applicationStateInit.transportpceUrl=config.transportpceUrl == undefined ? "" : config.transportpceUrl;
}
export const applicationStateHandler: IActionHandler<IApplicationState> = (state = applicationStateInit, action) => {
diff --git a/sdnr/wt/odlux/framework/src/models/applicationConfig.ts b/sdnr/wt/odlux/framework/src/models/applicationConfig.ts
index 5224840eb..0ae9c266b 100644
--- a/sdnr/wt/odlux/framework/src/models/applicationConfig.ts
+++ b/sdnr/wt/odlux/framework/src/models/applicationConfig.ts
@@ -1,4 +1,5 @@
export type ApplicationConfig = {
authentication: "basic"|"oauth", // basic
- enablePolicy: false // false
+ enablePolicy: false, // false
+ transportpceUrl? : string
}; \ No newline at end of file
diff --git a/sdnr/wt/odlux/framework/src/views/home.tsx b/sdnr/wt/odlux/framework/src/views/home.tsx
index b5df0526f..0e1d487e3 100644
--- a/sdnr/wt/odlux/framework/src/views/home.tsx
+++ b/sdnr/wt/odlux/framework/src/views/home.tsx
@@ -91,6 +91,9 @@ class Home extends React.Component<HomeComponentProps> {
const connectionStatusOptions = {
responsive: true,
maintainAspectRatio: false,
+ animation: {
+ duration: 0
+ },
plugins: {
legend: {
display: true,
@@ -109,6 +112,9 @@ class Home extends React.Component<HomeComponentProps> {
const connectionStatusUnavailableOptions = {
responsive: true,
maintainAspectRatio: false,
+ animation: {
+ duration: 0
+ },
plugins: {
legend: {
display: true,
@@ -178,6 +184,9 @@ class Home extends React.Component<HomeComponentProps> {
const alarmStatusOptions = {
responsive: true,
maintainAspectRatio: false,
+ animation: {
+ duration: 0
+ },
plugins: {
legend: {
display: true,
@@ -196,6 +205,9 @@ class Home extends React.Component<HomeComponentProps> {
const alarmStatusUnavailableOptions = {
responsive: true,
maintainAspectRatio: false,
+ animation: {
+ duration: 0
+ },
plugins: {
legend: {
display: true,
diff --git a/sdnr/wt/odlux/odlux.properties b/sdnr/wt/odlux/odlux.properties
index 5e34ec0cd..7a69b8f07 100644
--- a/sdnr/wt/odlux/odlux.properties
+++ b/sdnr/wt/odlux/odlux.properties
@@ -1,12 +1,12 @@
odlux.framework.buildno=110.0d5d064(21/07/05)
-odlux.apps.configurationApp.buildno=96.078ad12(21/03/25)
+odlux.apps.configurationApp.buildno=103.10d8f9a(21/05/21)
odlux.apps.connectApp.buildno=110.0d5d064(21/07/05)
-odlux.apps.eventLogApp.buildno=96.078ad12(21/03/25)
+odlux.apps.eventLogApp.buildno=103.10d8f9a(21/05/21)
odlux.apps.faultApp.buildno=110.0d5d064(21/07/05)
odlux.apps.helpApp.buildno=96.078ad12(21/03/25)
odlux.apps.inventoryApp.buildno=108.a60ec28(21/06/11)
odlux.apps.linkCalculationApp.buildno=96.078ad12(21/03/25)
-odlux.apps.maintenanceApp.buildno=96.078ad12(21/03/25)
-odlux.apps.mediatorApp.buildno=96.078ad12(21/03/25)
+odlux.apps.maintenanceApp.buildno=103.10d8f9a(21/05/21)
+odlux.apps.mediatorApp.buildno=103.10d8f9a(21/05/21)
odlux.apps.networkMapApp.buildno=102.acd1c0b(21/05/07)
odlux.apps.permanceHistoryApp.buildno=81.1c38886(20/12/04)