Home Reference Source

src/components/widgets/selectors.js

import { createSelector } from 'reselect';
import { isEmpty } from 'lodash';
import { getWidgetId } from '../../tools/helpers';

/**
 * селектор всего виджета
 */
const widgetSelector = (state, props) => {
  return state.widgets[getWidgetId(props.pageId, props.containerId)] || {};
};

/**
 * селктор инициализации виджета
 */
const isInitSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.isInit
);

/**
 * селектор видимости виджета
 */
const visibleSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.visible
);

/**
 * секлектор энейбла виджета
 */
const enabledSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.enabled
);

/**
 * селектор загрузки виджета
 */
const loadingSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.isLoading
);

/**
 * селектор метаданных виджета
 */
const metadataSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.metadata
);

/**
 * Селектор квэри
 */
const querySelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.query
);

/**
 * Селeктор резолв модели
 */
const resolveSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.resolveModel
);

/**
 * Селeктор алертов
 */
const alertsSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.alerts
);

const idsSelector = createSelector(
  [querySelector],
  queryState => (isEmpty(queryState) ? [] : queryState.list.map(m => m.id))
);

const sortingSelector = createSelector(
  [widgetSelector],
  widgetState => widgetState.sorting
);

export {
  widgetSelector,
  isInitSelector,
  visibleSelector,
  loadingSelector,
  metadataSelector,
  querySelector,
  resolveSelector,
  alertsSelector,
  idsSelector,
  sortingSelector,
};