You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

114 lines
3.6 KiB
TypeScript

// Copyright (C) 2020 Intel Corporation
//
// SPDX-License-Identifier: MIT
import { BoundariesActions, BoundariesActionTypes } from 'actions/boundaries-actions';
import { ModelsActionTypes, ModelsActions } from 'actions/models-actions';
import { AuthActionTypes, AuthActions } from 'actions/auth-actions';
import { ModelsState, Model } from './interfaces';
const defaultState: ModelsState = {
initialized: false,
fetching: false,
creatingStatus: '',
interactors: [],
detectors: [],
trackers: [],
reid: [],
visibleRunWindows: false,
activeRunTask: null,
inferences: {},
};
export default function (state = defaultState, action: ModelsActions | AuthActions | BoundariesActions): ModelsState {
switch (action.type) {
case ModelsActionTypes.GET_MODELS: {
return {
...state,
initialized: false,
fetching: true,
};
}
case ModelsActionTypes.GET_MODELS_SUCCESS: {
return {
...state,
interactors: action.payload.models.filter((model: Model) => ['interactor'].includes(model.type)),
detectors: action.payload.models.filter((model: Model) => ['detector'].includes(model.type)),
trackers: action.payload.models.filter((model: Model) => ['tracker'].includes(model.type)),
reid: action.payload.models.filter((model: Model) => ['reid'].includes(model.type)),
initialized: true,
fetching: false,
};
}
case ModelsActionTypes.GET_MODELS_FAILED: {
return {
...state,
initialized: true,
fetching: false,
};
}
case ModelsActionTypes.SHOW_RUN_MODEL_DIALOG: {
return {
...state,
visibleRunWindows: true,
activeRunTask: action.payload.taskInstance,
};
}
case ModelsActionTypes.CLOSE_RUN_MODEL_DIALOG: {
return {
...state,
visibleRunWindows: false,
activeRunTask: null,
};
}
case ModelsActionTypes.GET_INFERENCE_STATUS_SUCCESS: {
const { inferences } = state;
if (action.payload.activeInference.status === 'finished') {
return {
...state,
inferences: Object.fromEntries(
Object.entries(inferences).filter(([key]): boolean => +key !== action.payload.taskID),
),
};
}
const update: any = {};
update[action.payload.taskID] = action.payload.activeInference;
return {
...state,
inferences: {
...state.inferences,
...update,
},
};
}
case ModelsActionTypes.GET_INFERENCE_STATUS_FAILED: {
const { inferences } = state;
delete inferences[action.payload.taskID];
return {
...state,
inferences: { ...inferences },
};
}
case ModelsActionTypes.CANCEL_INFERENCE_SUCCESS: {
const { inferences } = state;
delete inferences[action.payload.taskID];
return {
...state,
inferences: { ...inferences },
};
}
case BoundariesActionTypes.RESET_AFTER_ERROR:
case AuthActionTypes.LOGOUT_SUCCESS: {
return { ...defaultState };
}
default: {
return state;
}
}
}