Home Reference Source

src/selectors/toolbar.js

import { createSelector } from 'reselect';
import { filter } from 'lodash';

/*
 селектор для всех кнопок
 */
const toolbarSelector = state => {
  return state.toolbar || {};
};

const getContainerButtons = containerKey =>
  createSelector(
    toolbarSelector,
    toolbar => toolbar[containerKey] || {}
  );

/**
 * селектор для кнопки по уникальному ключу
 * @param key
 */

const makeButtonByKeyAndIdSelector = (key, id) =>
  createSelector(
    getContainerButtons(key),
    containerButtons => {
      return containerButtons[id] || {};
    }
  );

/**
 * селектор для того, чтобы узнать зарегистрирована кнопка или нет
 * @param key
 */
const isInitSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.isInit;
    }
  );

/**
 *  селектор видимости кнопки
 * @param key
 */
const isVisibleSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.visible;
    }
  );

/*
 * селектор блокировки кнопки
 */
const isDisabledSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.disabled;
    }
  );

/**
 * селектор пазмера кнопки
 * @param key
 */
const sizeSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.size;
    }
  );

/**
 * селектор цвета кнопки
 * @param key
 */
const colorSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.color;
    }
  );

/**
 * селектор счетчика кнопки
 * @param key
 */
const countSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.count;
    }
  );

/**
 * селектор имени кнопки
 * @param key
 */
const titleSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.title;
    }
  );

/**
 * селектор посказаки кнопки
 * @param key
 * @param id
 */
const hintSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.hint;
    }
  );

/**
 * селектор расположения посказаки кнопки
 * @param key
 * @param id
 */

const hintPositionSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.hintPosition;
    }
  );

/**
 * селектор иконки кнопки
 * @param key
 */
const iconSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.icon;
    }
  );

/**
 * селектор стиля кнопки
 * @param key
 */
const styleSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.style;
    }
  );

/**
 * селектор класса кнопки
 * @param key
 */
const classSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.className;
    }
  );

/**
 * селектор выполнения
 * @param key
 */
const isLoading = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.loading;
    }
  );
/**
 * селектор ошибок экшена кнопки
 * @param key
 */
const errorSelector = (key, id) =>
  createSelector(
    makeButtonByKeyAndIdSelector(key, id),
    button => {
      return button.error;
    }
  );

export {
  toolbarSelector,
  isVisibleSelector,
  sizeSelector,
  colorSelector,
  isDisabledSelector,
  titleSelector,
  countSelector,
  hintSelector,
  iconSelector,
  classSelector,
  styleSelector,
  isInitSelector,
  isLoading,
  errorSelector,
  getContainerButtons,
  hintPositionSelector,
};