import * as actions from './search-multiple.action'; import { Attribute } from "../../metamodel/model"; import { DatasetCount, SearchMultipleQueryParams } from "./model"; export interface State { pristine: boolean; currentStep: string; positionStepChecked: boolean; datasetsStepChecked: boolean; resultStepChecked: boolean; queryParams: SearchMultipleQueryParams; selectedDatasets: string[]; datasetsCountIsLoading: boolean; datasetsCountIsLoaded: boolean; datasetsCount: DatasetCount[]; attributeList: { dname: string, attributeList: Attribute[] }[]; data: { dname: string, data: any[] }[] } export const initialState: State = { pristine: true, currentStep: null, positionStepChecked: false, datasetsStepChecked: false, resultStepChecked: false, queryParams: null, selectedDatasets: [], datasetsCountIsLoading: false, datasetsCountIsLoaded: false, datasetsCount: [], attributeList: [], data: [] }; export function reducer(state: State = initialState, action: actions.Actions): State { switch (action.type) { case actions.INIT_SELECTED_DATASETS: return { ...state, selectedDatasets: action.payload }; case actions.CHANGE_STEP: return { ...state, currentStep: action.payload }; case actions.POSITION_CHECKED: return { ...state, pristine: false, positionStepChecked: true }; case actions.DATASETS_CHECKED: return { ...state, datasetsStepChecked: true }; case actions.RETRIEVE_DATASETS_COUNT: return { ...state, datasetsCountIsLoading: true }; case actions.RETRIEVE_DATASETS_COUNT_SUCCESS: return { ...state, datasetsCountIsLoading: false, datasetsCountIsLoaded: true, datasetsCount: action.payload }; case actions.RETRIEVE_DATASETS_COUNT_FAIL: return { ...state, datasetsCountIsLoading: false }; case actions.UPDATE_SELECTED_DATASETS: return { ...state, selectedDatasets: action.payload }; case actions.RETRIEVE_ATTRIBUTE_LIST_SUCCESS: return { ...state, attributeList: [...state.attributeList, action.payload] }; case actions.RETRIEVE_DATA_SUCCESS: const data = [...state.data.filter(d => d.dname !== action.payload.dname), action.payload]; return { ...state, data }; case actions.DESTROY_RESULTS: return { ...state, datasetsCountIsLoaded: false, datasetsCount: [], data: [] }; default: return state; } } export const getCurrentStep = (state: State) => state.currentStep; export const getPositionStepChecked = (state: State) => state.positionStepChecked; export const getDatasetsStepChecked = (state: State) => state.datasetsStepChecked; export const getResultStepChecked = (state: State) => state.resultStepChecked; export const getQueryParams = (state: State) => state.queryParams; export const getSelectedDatasets = (state: State) => state.selectedDatasets; export const getDatasetsCountIsLoading = (state: State) => state.datasetsCountIsLoading; export const getDatasetsCountIsLoaded = (state: State) => state.datasetsCountIsLoaded; export const getDatasetsCount = (state: State) => state.datasetsCount; export const getAttributeList = (state: State) => state.attributeList; export const getData = (state: State) => state.data;