1. JavaScript / Говнокод #26820

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    import { combineEpics, ofType } from 'redux-observable'
    
    import { map, switchMap, catchError, filter, mergeAll } from 'rxjs/operators'
    import { of, from } from 'rxjs'
    import * as R from 'ramda'
    
    import * as TICKETS_ACTION_TYPES from './tickets.types'
    import * as TicketsActions from './tickets.actions'
    import * as TicketsSelectors from './tickets.selectors'
    import { /* TICKET_TYPES,*/ TICKET_STEPS } from './constants'
    import mockAPI from 'services/mockAPI'
    
    export const getTicketsEpic = (action$, state$) =>
      from(
        R.map(
          (step) =>
            action$.pipe(
              filter(
                R.either(
                  R.both(R.propEq('type', TICKETS_ACTION_TYPES.GET_TICKETS_BY_STEP), R.pathEq(['payload', 'step'], step)),
                  R.propEq('type', TICKETS_ACTION_TYPES.GET_ALL_TICKETS)
                )
              ),
              switchMap((action) => {
                if (
                  action.type !== TICKETS_ACTION_TYPES.GET_ALL_TICKETS &&
                  TicketsSelectors.ticketsAllDirtySelector(state$.value)
                ) {
                  return of(TicketsActions.getAllTickets())
                } else if (!TicketsSelectors.ticketsByStepDirtySelector(step, state$.value)) {
                  return of(TicketsActions.getTicketsByStepSuccess(step, null, true))
                }
                return from(
                  // Mocks tickets API
                  // TODO: Replace by real request
                  mockAPI.getTicketsByStep(step)
                ).pipe(
                  map((data) => TicketsActions.getTicketsByStepSuccess(step, data)),
                  catchError((err) => of(TicketsActions.getTicketsByStepError(step, err)))
                )
              })
            ),
          R.values(TICKET_STEPS)
        )
      ).pipe(mergeAll())

    Редукс нам уже не интересен, нам с поподвыподвертами подавай, чтоб тупо болванку показать.

    Запостил: NickPepper, 25 Июля 2020

    Комментарии (19) RSS

    • KISS? не, не слышали
      Ответить
    • Если часто меняются фильтры и нужно инвалидировать предыдущие обновления состояния то redux-observable или redux-saga - единственные известные мне нормальные способы это сделать на редухе без копипасты
      Но тут этого нет, поэтому вероятно что просто выебуются
      Ответить
      • Тут как раз редух-обсер - мож просто на этом куске не видно. Да это вообще не говнокод. Тут всё хорошо и правильно. Я просто в ахуе с того, что раньше для показа списка записей нужно было просто результат аяха сунуть в объект и всё. Теперь же вот.. многабукаф
        Ответить
        • Я имею в виду что observable решает определенные проблемы которые ajax бы решал бойлерплейтом и вытеканием контроля текущего запроса в стейт, но в примере такого нет поэтому это действительно куча говна и обычный ajax был бы тоже адекватен
          Ответить
      • combineEpics, ofType - redux-observable, он естессна за собой rxjs тащит и тп
        Ответить
    • Какие пиздопротивные лесенки
      R.map(
            (step) =>
              action$.pipe(
                filter(
                  R.either(
                    R.both(R

      ненавижу код с лесенками
      Ответить
      • Я тоже. Но великое изобретение челлвечества - prettier - навидит....
        Ответить

    Добавить комментарий