mirror of
https://github.com/DSpace/dspace-angular.git
synced 2025-10-09 19:13:08 +00:00

Conflicts: src/app/+community-page/community-page.component.ts src/app/+item-page/edit-item-page/item-delete/item-delete.component.spec.ts src/app/+item-page/edit-item-page/item-delete/item-delete.component.ts src/app/+item-page/edit-item-page/item-private/item-private.component.ts src/app/+item-page/edit-item-page/item-public/item-public.component.spec.ts src/app/+item-page/edit-item-page/item-public/item-public.component.ts src/app/+item-page/edit-item-page/item-reinstate/item-reinstate.component.spec.ts src/app/+item-page/edit-item-page/item-reinstate/item-reinstate.component.ts src/app/+item-page/edit-item-page/item-withdraw/item-withdraw.component.spec.ts src/app/+item-page/edit-item-page/item-withdraw/item-withdraw.component.ts src/app/+item-page/edit-item-page/simple-item-action/abstract-simple-item-action.component.spec.ts src/app/core/auth/server-auth.service.ts src/app/core/cache/response.models.ts src/app/core/data/item-data.service.spec.ts src/app/core/data/item-data.service.ts src/app/core/data/request.models.ts src/app/core/index/index.effects.ts src/app/core/metadata/metadata.service.spec.ts src/app/core/shared/operators.spec.ts src/app/header/header.component.spec.ts src/app/shared/form/form.component.ts
122 lines
3.4 KiB
TypeScript
122 lines
3.4 KiB
TypeScript
import {
|
|
RequestActionTypes, RequestAction, RequestConfigureAction,
|
|
RequestExecuteAction, RequestCompleteAction, ResetResponseTimestampsAction, RequestRemoveAction
|
|
} from './request.actions';
|
|
import { RestRequest } from './request.models';
|
|
import { RestResponse } from '../cache/response.models';
|
|
|
|
export class RequestEntry {
|
|
request: RestRequest;
|
|
requestPending: boolean;
|
|
responsePending: boolean;
|
|
completed: boolean;
|
|
response: RestResponse
|
|
}
|
|
|
|
export interface RequestState {
|
|
[uuid: string]: RequestEntry
|
|
}
|
|
|
|
// Object.create(null) ensures the object has no default js properties (e.g. `__proto__`)
|
|
const initialState = Object.create(null);
|
|
|
|
export function requestReducer(state = initialState, action: RequestAction): RequestState {
|
|
switch (action.type) {
|
|
|
|
case RequestActionTypes.CONFIGURE: {
|
|
return configureRequest(state, action as RequestConfigureAction);
|
|
}
|
|
|
|
case RequestActionTypes.EXECUTE: {
|
|
return executeRequest(state, action as RequestExecuteAction);
|
|
}
|
|
|
|
case RequestActionTypes.COMPLETE: {
|
|
return completeRequest(state, action as RequestCompleteAction);
|
|
}
|
|
case RequestActionTypes.RESET_TIMESTAMPS: {
|
|
return resetResponseTimestamps(state, action as ResetResponseTimestampsAction);
|
|
}
|
|
|
|
case RequestActionTypes.REMOVE: {
|
|
return removeRequest(state, action as RequestRemoveAction);
|
|
}
|
|
|
|
default: {
|
|
return state;
|
|
}
|
|
}
|
|
}
|
|
|
|
function configureRequest(state: RequestState, action: RequestConfigureAction): RequestState {
|
|
return Object.assign({}, state, {
|
|
[action.payload.uuid]: {
|
|
request: action.payload,
|
|
requestPending: true,
|
|
responsePending: false,
|
|
completed: false,
|
|
}
|
|
});
|
|
}
|
|
|
|
function executeRequest(state: RequestState, action: RequestExecuteAction): RequestState {
|
|
const obs = Object.assign({}, state, {
|
|
[action.payload]: Object.assign({}, state[action.payload], {
|
|
requestPending: false,
|
|
responsePending: true
|
|
})
|
|
});
|
|
return obs;
|
|
}
|
|
|
|
/**
|
|
* Update a request with the response
|
|
*
|
|
* @param state
|
|
* the current state
|
|
* @param action
|
|
* a RequestCompleteAction
|
|
* @return RequestState
|
|
* the new state, with the response added to the request
|
|
*/
|
|
function completeRequest(state: RequestState, action: RequestCompleteAction): RequestState {
|
|
const time = new Date().getTime();
|
|
return Object.assign({}, state, {
|
|
[action.payload.uuid]: Object.assign({}, state[action.payload.uuid], {
|
|
responsePending: false,
|
|
completed: true,
|
|
response: Object.assign({}, action.payload.response, { timeAdded: time })
|
|
})
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Reset the timeAdded property of all responses
|
|
*
|
|
* @param state
|
|
* the current state
|
|
* @param action
|
|
* a RequestCompleteAction
|
|
* @return RequestState
|
|
* the new state, with the timeAdded property reset
|
|
*/
|
|
function resetResponseTimestamps(state: RequestState, action: ResetResponseTimestampsAction): RequestState {
|
|
const newState = Object.create(null);
|
|
Object.keys(state).forEach((key) => {
|
|
newState[key] = Object.assign({}, state[key],
|
|
{ response: Object.assign({}, state[key].response, { timeAdded: action.payload }) }
|
|
);
|
|
});
|
|
return newState;
|
|
}
|
|
|
|
function removeRequest(state: RequestState, action: RequestRemoveAction): RequestState {
|
|
const newState = Object.create(null);
|
|
for (const value in state) {
|
|
if (value !== action.uuid) {
|
|
newState[value] = state[value];
|
|
}
|
|
}
|
|
return newState;
|
|
}
|