Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import { pageTypes, AddFiltersError, RemoveFiltersError, SetFilter } from 'actions/page'
- import { createDefaultFromDate, createDefaultToDate, validateFromToDate } from 'helpers'
- import { filtersErrorsText } from 'constants/filters'
- const validate = (key, dispatch, filtersErrors, from, to) => {
- const dictionaryKey = `${key}DateFiltersError`
- const errorText = filtersErrorsText[dictionaryKey]
- if (!validateFromToDate(from, to)) {
- if (!filtersErrors[key].includes(errorText)) {
- dispatch(
- AddFiltersError(key, errorText)
- )
- }
- } else {
- if (filtersErrors[key].includes(errorText)) {
- dispatch(
- RemoveFiltersError(key, errorText)
- )
- }
- }
- }
- export const filtersDatesValidationMiddleware = ({ dispatch, getState }) => next => action => {
- const { type } = action
- const {
- page: {
- filters,
- filtersErrors
- }
- } = getState()
- if (type === pageTypes.SET_FILTER) {
- // Перехватываем установку фильтров. Если даты невалидны, ставим флаг
- const { name, value } = action
- const args = [ dispatch, filtersErrors ]
- const fromArgs = [ ...args, value, filters.to ]
- const toArgs = [ ...args, filters.from, value ]
- switch (name) {
- case 'from':
- validate('from', ...fromArgs)
- validate('to', ...fromArgs)
- break
- case 'to':
- validate('to', ...toArgs)
- validate('from', ...toArgs)
- break
- }
- }
- if (type === pageTypes.LOAD_PAGE_DATA) {
- // Перехватываем загрузку отчёта. Если даты невалидны, - устанавливаем даты из initialState
- if (!validateFromToDate(filters.from, filters.to)) {
- dispatch(
- SetFilter('from', createDefaultFromDate())
- )
- dispatch(
- RemoveFiltersError('from', filtersErrorsText.fromDateFiltersError)
- )
- dispatch(
- SetFilter('to', createDefaultToDate())
- )
- dispatch(
- RemoveFiltersError('from', filtersErrorsText.toDateFiltersError)
- )
- }
- }
- return next(action)
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement