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
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;
|
|
}
|
|
}
|
|
}
|