Home Reference Source

src/actions/widgets.js

import {
  REGISTER,
  DATA_REQUEST,
  DATA_SUCCESS,
  DATA_FAIL,
  RESOLVE,
  REMOVE,
  SHOW,
  HIDE,
  ENABLE,
  DISABLE,
  LOADING,
  UNLOADING,
  ALERT_ADD,
  ALERT_REMOVE,
  SORT_BY,
  CHANGE_COUNT,
  CHANGE_SIZE,
  CHANGE_PAGE,
  CHANGE_FILTERS_VISIBILITY,
  TOGGLE_FILTERS_VISIBILITY,
  RESET_STATE,
  SET_WIDGET_METADATA,
  SET_TABLE_SELECTED_ID,
  SET_ACTIVE,
  DISABLE_ON_FETCH,
} from '../constants/widgets';
import createActionHelper from './createActionHelper';

/**
 * Регистрация виджета в хранилище
 * @param widgetId - уникальный индефикатор виджета
 * @param initProps - стартовые свойства
 * @example
 * dispatch(registerWidget("Page.Widget", {isVisible: false}))
 */
export function registerWidget(widgetId, initProps) {
  return createActionHelper(REGISTER)({ widgetId, initProps });
}

/**
 * Запрос за данными
 * @param widgetId - уникальный индефикатор виджета
 * @param options - опции для `fetch`
 * @example
 * dispatch(dataRequestWidget("Page.Widget", {size: 200}))
 */
export function dataRequestWidget(widgetId, options = {}) {
  return createActionHelper(DATA_REQUEST)({ widgetId, options });
}

/**
 * Вспомогательный экшен. Успешный запрос за данными.
 * @ignore
 * @param widgetId - уникальный индефикатор виджета
 * @param json - response в виде json
 */
export function dataSuccessWidget(widgetId, json) {
  return createActionHelper(DATA_SUCCESS)(
    {
      widgetId,
      query: json,
    },
    {
      ...json.meta,
    }
  );
}

/**
 * Вспомогательный экшен. Ошибка при запросе за данными.
 * @ignore
 * @param widgetId - уникальный индефикатор виджета
 * @param err - объект ошибки
 * @param meta - meta эффекты запроса
 */
export function dataFailWidget(widgetId, err, meta) {
  return createActionHelper(DATA_FAIL)(
    {
      widgetId,
      err,
    },
    meta
  );
}

/**
 * Вызывает действие разрешения виджета.
 * Side-effect: зависимости, простановка в resolve-модель
 * @param widgetId - уникальный индефикатор виджета
 */
export function resolveWidget(widgetId, resolveModel) {
  return createActionHelper(RESOLVE)({ widgetId, model: resolveModel });
}

/**
 * Удаляет виджет из хранилища
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(removeWidget("Page.Widget"))
 */
export function removeWidget(widgetId) {
  return createActionHelper(REMOVE)({ widgetId });
}

/**
 * Сделать виджет видимым
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(showWidget("Page.Widget"))
 */
export function showWidget(widgetId) {
  return createActionHelper(SHOW)({ widgetId });
}

/**
 * Сделать виджет невидимым
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(hideWidget("Page.Widget"))
 */
export function hideWidget(widgetId) {
  return createActionHelper(HIDE)({ widgetId });
}

/**
 * Сделать виджет разблокированым
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(enableWidget("Page.Widget"))
 */
export function enableWidget(widgetId) {
  return createActionHelper(ENABLE)({ widgetId });
}

/**
 * Сделать виджет заблокированым
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(disableWidget("Page.Widget"))
 */
export function disableWidget(widgetId) {
  return createActionHelper(DISABLE)({ widgetId });
}

export function disableWidgetOnFetch(widgetId) {
  return createActionHelper(DISABLE_ON_FETCH)({ widgetId });
}

/**
 * Активировать анимацию загрузки у виджета
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(loadingWidget("Page.Widget"))
 */
export function loadingWidget(widgetId) {
  return createActionHelper(LOADING)({ widgetId });
}

/**
 * Деактивировать анимацию загрузки у виджета
 * @param widgetId - уникальный индефикатор виджета
 * @example
 * dispatch(unloadingWidget("Page.Widget"))
 */
export function unloadingWidget(widgetId) {
  return createActionHelper(UNLOADING)({ widgetId });
}

/**
 * @ignore
 * @param widgetId
 * @param alertKey
 */
export function alertAddWidget(widgetId, alertKey) {
  return createActionHelper(ALERT_ADD)({ widgetId, alertKey });
}

/**
 * @ignore
 * @param widgetId
 * @param alertKey
 */
export function alertRemoveWidget(widgetId, alertKey) {
  return createActionHelper(ALERT_REMOVE)({ widgetId, alertKey });
}

/**
 * @ignore
 * @param widgetId
 * @param fieldKey
 * @param sortDirection
 */
export function sortByWidget(widgetId, fieldKey, sortDirection) {
  return createActionHelper(SORT_BY)({ widgetId, fieldKey, sortDirection });
}

/**
 * Меняет номер страницы виджета
 * Этот параметр используется при запросах на сервер
 * @param widgetId - уникальный индефикатор виджета
 * @param page - номер страницы
 */
export function changePageWidget(widgetId, page) {
  return createActionHelper(CHANGE_PAGE)({ widgetId, page });
}

/**
 * Меняет количество записей в виджете.
 * Этот параметр служит для отрисовки пейджинга
 * @param widgetId - уникальный индефикатор виджета
 * @param count - кол-во записей
 */
export function changeCountWidget(widgetId, count) {
  return createActionHelper(CHANGE_COUNT)({ widgetId, count });
}

/**
 * Меняет размер выборки виджета
 * Этот параметр используется при запросах на сервер
 * @param widgetId - уникальный индефикатор виджета
 * @param size - размер выборки
 */
export function changeSizeWidget(widgetId, size) {
  return createActionHelper(CHANGE_SIZE)({ widgetId, size });
}

/**
 * Показать фильтры виджета
 * @param widgetId
 */
export function showWidgetFilters(widgetId) {
  return changeFiltersVisibility(widgetId, true);
}

/**
 * Скрыть филтры виджета
 * @param widgetId
 */
export function hideWidgetFilters(widgetId) {
  return changeFiltersVisibility(widgetId, false);
}

/**
 * Изменить видимость фильтров виджета
 * @param widgetId
 * @param isFilterVisible
 * @returns {*}
 */
export function changeFiltersVisibility(widgetId, isFilterVisible) {
  return createActionHelper(CHANGE_FILTERS_VISIBILITY)({
    widgetId,
    isFilterVisible,
  });
}

/**
 * Изменить видимость фильтров виджета на противоположенную
 * @param widgetId
 */
export function toggleWidgetFilters(widgetId) {
  return createActionHelper(TOGGLE_FILTERS_VISIBILITY)({ widgetId });
}

export function resetWidgetState(widgetId) {
  return createActionHelper(RESET_STATE)({ widgetId });
}

export function setWidgetMetadata(pageId, widgetId, metadata) {
  return createActionHelper(SET_WIDGET_METADATA)({
    pageId,
    widgetId,
    metadata,
  });
}

/**
 * Изменить выбранную запись в виджете
 * @param widgetId
 * @param selectedId
 */
export function setTableSelectedId(widgetId, selectedId) {
  return createActionHelper(SET_TABLE_SELECTED_ID)({
    widgetId,
    value: selectedId,
  });
}

export function setActive(widgetId) {
  return createActionHelper(SET_ACTIVE)({ widgetId });
}