Skip to content
Snippets Groups Projects
reducer.ts 1.71 KiB
Newer Older
import { DARSState, INITIAL_DARS_STATE } from '@app/dars/store/state';
import { DarsActionTypes } from './actions';
import * as darsActions from './actions';

type SupportedActions =
  | darsActions.ErrorLoadingMetadata
  | darsActions.AddAuditMetadata
  | darsActions.StartLoadingAudit
  | darsActions.DoneLoadingAudit
  | darsActions.CloseAudit;

export function darsReducer(
  state = INITIAL_DARS_STATE,
): DARSState {
  switch (action.type) {
    case DarsActionTypes.ErrorLoadingMetadata: {
      return {
        ...state,
        metadata: {
          status: 'Error',
          message: action.payload.message,
        },
      };
    }
    case DarsActionTypes.AddAuditMetadata: {
      if (state.metadata.status === 'Loaded') {
        return {
          ...state,
          metadata: {
            status: 'Loaded',
            metadata: state.metadata.metadata.concat(action.payload.metadata),
          },
        };
      } else {
        return {
          ...state,
          metadata: {
            status: 'Loaded',
            metadata: action.payload.metadata,
          },
        };
      }
    }
    case DarsActionTypes.StartLoadingAudit: {
      return {
        ...state,
        visibleAudit: {
          status: 'Loading',
        },
      };
    }
    case DarsActionTypes.DoneLoadingAudit: {
      return {
        ...state,
        visibleAudit: {
          status: 'Loaded',
          metadata: action.payload.metadata,
          audit: action.payload.audit,
        },
      };
    }
    case DarsActionTypes.CloseAudit: {
      return {
        ...state,
        visibleAudit: { status: 'NotLoaded' },
      };
    }
    default:
      return state;
  }
}