Home Reference Source

src/selectors/pages.js

/**
 * Created by emamoshin on 22.12.2017.
 */
import { createSelector } from 'reselect';

/*
 Базовые селекторы
 */

/**
 * Базовый селектор всех страниц
 * @param state
 */
const pagesSelector = state => {
  return state.pages || {};
};

/*
 Селекторы генераторы
 */

/**
 * Селектор-генератор для получения страницы по ID
 * @param pageId
 */
const makePageByIdSelector = pageId =>
  createSelector(
    pagesSelector,
    pagesState => {
      return pagesState[pageId];
    }
  );

/**
 * Селектор-генератор для получения метеданных страницы по ID
 * @param pageId
 */
const makePageMetadataByIdSelector = pageId =>
  createSelector(
    makePageByIdSelector(pageId),
    pageState => {
      return pageState && pageState.metadata;
    }
  );

/**
 * Селектор-генератор для получения виджетов страницы по ID
 * @param pageId
 */
const makePageWidgetsByIdSelector = pageId =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    metadata => {
      return metadata && metadata.widgets;
    }
  );

/**
 * Селектор-генератор для получения статуса загрузки по ID
 * @param pageId
 */
const makePageLoadingByIdSelector = pageId =>
  createSelector(
    makePageByIdSelector(pageId),
    pageState => {
      return pageState && pageState.loading;
    }
  );
/**
 * Селектор-генератор для получения статуса ошибки по ID
 * @param pageId
 */
const makePageErrorByIdSelector = pageId =>
  createSelector(
    makePageByIdSelector(pageId),
    pageState => {
      return pageState && pageState.error;
    }
  );

/**
 * Селектор-генератор для получения статуса загрузки по ID
 * @param pageId
 */
const makePageRoutesByIdSelector = pageId =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => {
      return pageState && pageState.routes;
    }
  );

/*
 Остальные селекторы
 */
const makeWidgetMetadataSelector = (pageId, widgetId) =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => {
      return pageState && pageState.widgets[widgetId];
    }
  );

const makePageActionsByIdSelector = pageId =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => {
      return pageState && pageState.actions;
    }
  );

const makePageToolbarByIdSelector = pageId =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => {
      return pageState && pageState.toolbar;
    }
  );

const makePageTitleByIdSelector = pageId =>
  createSelector(
    makePageMetadataByIdSelector(pageId),
    pageState => {
      return pageState && pageState.page && pageState.page.title;
    }
  );

/**
 *  Получение свойства disabled страницы по ее id
 * @param pageId
 */
const makePageDisabledByIdSelector = pageId =>
  createSelector(
    makePageByIdSelector(pageId),
    pageState => {
      return pageState && pageState.disabled;
    }
  );
/**
 * Получение свойсва status страницы по ee d
 * @param pageId
 * @return
 */
const makePageStatusByIdSelected = pageId =>
  createSelector(
    makePageByIdSelector(pageId),
    pageState => {
      return pageState && pageState.status;
    }
  );

export {
  pagesSelector,
  makePageByIdSelector,
  makePageMetadataByIdSelector,
  makePageLoadingByIdSelector,
  makePageRoutesByIdSelector,
  makeWidgetMetadataSelector,
  makePageActionsByIdSelector,
  makePageToolbarByIdSelector,
  makePageErrorByIdSelector,
  makePageTitleByIdSelector,
  makePageDisabledByIdSelector,
  makePageWidgetsByIdSelector,
  makePageStatusByIdSelected,
};