aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx')
-rw-r--r--sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx81
1 files changed, 81 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx b/sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx
new file mode 100644
index 000000000..70b4d8f2a
--- /dev/null
+++ b/sdnr/wt/odlux/apps/connectApp/src/handlers/mountedNetworkElementsHandler.tsx
@@ -0,0 +1,81 @@
+import { IActionHandler } from '../../../../framework/src/flux/action';
+
+import {
+ AddMountedNetworkElement,
+ AllMountedNetworkElementsLoadedAction,
+ LoadAllMountedNetworkElementsAction,
+ RemoveMountedNetworkElement,
+ UpdateConnectionStateMountedNetworkElement,
+ UpdateRequiredMountedNetworkElement
+} from '../actions/mountedNetworkElementsActions';
+
+import { MountedNetworkElementType } from '../models/mountedNetworkElements';
+
+export interface IMountedNetworkElementsState {
+ elements: MountedNetworkElementType[];
+ busy: boolean;
+}
+
+const mountedNetworkElementsStateInit: IMountedNetworkElementsState = {
+ elements: [],
+ busy: false
+};
+
+export const mountedNetworkElementsActionHandler: IActionHandler<IMountedNetworkElementsState> = (state = mountedNetworkElementsStateInit, action) => {
+ if (action instanceof LoadAllMountedNetworkElementsAction) {
+
+ state = {
+ ...state,
+ busy: true
+ };
+
+ } else if (action instanceof AllMountedNetworkElementsLoadedAction) {
+ if (!action.error && action.mountedNetworkElements) {
+ state = {
+ ...state,
+ elements: action.mountedNetworkElements,
+ busy: false
+ };
+ } else {
+ state = {
+ ...state,
+ busy: false
+ };
+ }
+ } else if (action instanceof AddMountedNetworkElement) {
+ action.mountedNetworkElement && (state = {
+ ...state,
+ elements: [...state.elements, action.mountedNetworkElement],
+ });
+ } else if (action instanceof RemoveMountedNetworkElement) {
+ state = {
+ ...state,
+ elements: state.elements.filter(e => e.mountId !== action.mountId),
+ };
+ } else if (action instanceof UpdateConnectionStateMountedNetworkElement) {
+ const index = state.elements.findIndex(el => el.mountId === action.mountId);
+ if (index > -1) {
+ state = {
+ ...state,
+ elements: [
+ ...state.elements.slice(0, index),
+ { ...state.elements[index], connectionStatus: action.mountId },
+ ...state.elements.slice(index + 1)
+ ]
+ }
+ }
+ } else if (action instanceof UpdateRequiredMountedNetworkElement) {
+ const index = state.elements.findIndex(el => el.mountId === action.mountId);
+ if (index > -1 && (state.elements[index].required !== action.required)) {
+ state = {
+ ...state,
+ elements: [
+ ...state.elements.slice(0, index),
+ { ...state.elements[index], required: action.required },
+ ...state.elements.slice(index + 1)
+ ]
+ }
+ }
+ };
+ return state;
+}; \ No newline at end of file