Skip to content
Snippets Groups Projects
placesFacets.js 2.81 KiB
import {
  FETCH_FACET,
  UPDATE_FACET,
  UPDATE_FILTER,
  OPEN_FACET_DIALOG,
  CLOSE_FACET_DIALOG,
} from '../actions';
import { updateFilter } from './helpers';

export const INITIAL_STATE = {
  facets: {
    source: {
      id: 'source',
      label: 'Source',
      // predicate: defined in backend
      distinctValueCount: 0,
      values: [],
      flatValues: [],
      sortBy: 'instanceCount',
      sortDirection: 'desc',
      sortButton: false,
      isFetching: false,
      searchField: false,
      containerClass: 'five',
    },
    area: {
      id: 'area',
      label: 'Area',
      // predicate: defined in backend
      distinctValueCount: 0,
      values: [],
      flatValues: [],
      sortBy: 'prefLabel',
      sortDirection: 'asc',
      sortButton: false,
      isFetching: false,
      searchField: false,
      containerClass: 'ten',
    },
    // type: {
    //   id: 'type',
    //   label: 'Type',
    //   // predicate: defined in backend
    //   distinctValueCount: 0,
    //   values: [],
    //   flatValues: [],
    //   sortBy: 'instanceCount',
    //   sortDirection: 'desc',
    //   sortButton: false,
    //   isFetching: false,
    //   searchField: false,
    //   containerSize: 'large',
    //} ,
  },
  filters: {
    source: new Set(),
    area: new Set(),
    type: new Set(),
  },
  updatedFacet: '',
  fetching: false
};

const placesFacets = (state = INITIAL_STATE, action) => {
  if (action.resultClass === 'places') {
    switch (action.type) {
      case OPEN_FACET_DIALOG:
        return {
          ...state,
          facetDialogOpen: true,
          activeFacet: action.property
        };
      case CLOSE_FACET_DIALOG:
        return { ...state, facetDialogOpen: false };
      case FETCH_FACET:
        return {
          ...state,
          fetching: true,
          facets: {
            ...state.facets,
            [ action.id ]: {
              ...state.facets[action.id],
              distinctValueCount: 0,
              values: [],
              flatValues: [],
              sortBy: action.sortBy,
              sortDirection: action.sortDirection,
              isFetching: true
            }
          }
        };
      case UPDATE_FACET:
        return {
          ...state,
          fetching: false,
          facets: {
            ...state.facets,
            [ action.id ]: {
              ...state.facets[action.id],
              distinctValueCount: action.distinctValueCount,
              values: action.values,
              flatValues: action.flatValues || [],
              sortBy: action.sortBy,
              sortDirection: action.sortDirection,
              isFetching: false
            }
          }
        };
      case UPDATE_FILTER:
        return updateFilter(state, action);
      default:
        return state;
    }
  } else return state;
};

export default placesFacets;