Home Reference Source

src/selectors/formPlugin.js

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

/**
 * селектор для редакс-форм
 * @param state
 * @returns {{}}
 */
export const formsSelector = state => {
  return state.form || {};
};

/**
 * селектор для  конкретной формы
 * @param name
 */
export const makeFormByName = name =>
  createSelector(
    formsSelector,
    formsState => {
      return _.get(formsState, name) || {};
    }
  );

/**
 * селктор для поля формы
 * @param formName
 * @param fieldName
 */
export const makeFieldByName = (formName, fieldName) =>
  createSelector(
    makeFormByName(formName),
    form => {
      return (
        (form && form.registeredFields && form.registeredFields[fieldName]) ||
        {}
      );
    }
  );

/**
 * селектор для значения видимости поля
 * @param formName
 * @param fieldName
 */
export const isVisibleSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.visible;
    }
  );

/**
 * селектор для значения активности поля
 * @param formName
 * @param fieldName
 */
export const isDisabledSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.disabled;
    }
  );

/**
 * селектор для свойства, отвечающего за инициализацию дополнительных свойств
 * @param formName
 * @param fieldName
 */
export const isInitSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.isInit;
    }
  );

export const messageSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.message;
    }
  );

export const dependencySelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.dependency;
    }
  );

export const filterSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.filter;
    }
  );

export const requiredSelector = (formName, fieldName) =>
  createSelector(
    makeFieldByName(formName, fieldName),
    field => {
      return field.required;
    }
  );