Files
dspace-angular/src/app/notifications/qa/topics/quality-assurance-topics.reducer.ts
2023-12-19 13:35:51 +01:00

76 lines
2.0 KiB
TypeScript

import { QualityAssuranceTopicObject } from '../../../core/notifications/qa/models/quality-assurance-topic.model';
import {
QualityAssuranceTopicActionTypes,
QualityAssuranceTopicsActions,
} from './quality-assurance-topics.actions';
/**
* The interface representing the Quality Assurance topic state.
*/
export interface QualityAssuranceTopicState {
topics: QualityAssuranceTopicObject[];
processing: boolean;
loaded: boolean;
totalPages: number;
currentPage: number;
totalElements: number;
}
/**
* Used for the Quality Assurance topic state initialization.
*/
const qualityAssuranceTopicInitialState: QualityAssuranceTopicState = {
topics: [],
processing: false,
loaded: false,
totalPages: 0,
currentPage: 0,
totalElements: 0,
};
/**
* The Quality Assurance Topic Reducer
*
* @param state
* the current state initialized with qualityAssuranceTopicInitialState
* @param action
* the action to perform on the state
* @return QualityAssuranceTopicState
* the new state
*/
export function qualityAssuranceTopicsReducer(state = qualityAssuranceTopicInitialState, action: QualityAssuranceTopicsActions): QualityAssuranceTopicState {
switch (action.type) {
case QualityAssuranceTopicActionTypes.RETRIEVE_ALL_TOPICS: {
return Object.assign({}, state, {
topics: [],
processing: true,
});
}
case QualityAssuranceTopicActionTypes.ADD_TOPICS: {
return Object.assign({}, state, {
topics: action.payload.topics,
processing: false,
loaded: true,
totalPages: action.payload.totalPages,
currentPage: state.currentPage,
totalElements: action.payload.totalElements,
});
}
case QualityAssuranceTopicActionTypes.RETRIEVE_ALL_TOPICS_ERROR: {
return Object.assign({}, state, {
processing: false,
loaded: true,
totalPages: 0,
currentPage: 0,
totalElements: 0,
});
}
default: {
return state;
}
}
}