Advertisement
the0938

Untitled

Mar 23rd, 2021 (edited)
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. ## Модуль application перегружен и переусложнён
  2.  
  3. Предлагаю превратить этот модуль в группу модулей, как `common` - это раз, - и два: вынести поля заявки, которые мы заполняем в разделе `/application`, в отдельную сущность. Структура видится мне так:
  4.  
  5. *application.core*
  6.  
  7. Здесь живёт модель заяки (та, у которой статус, сумма, срок). Именно в `application/core` хотят другие модули, когда хотят узнать, что там с заявкой текущего пользователя.
  8.  
  9. *application.statement*
  10.  
  11. Здесь живёт та злоебучая анкета, которую мы заполняем в разделе `/applicaion`. В эту сущность переезжают все `passportNumber` и прочие `familySize`. Здесь же лежит функционал по загрузке этой гигантской модели на сервер и скачивания с него оной.
  12.  
  13. *application.contacts*
  14.  
  15. Содержит форму контактных данных пользователя. Кстати, для упрощения. Все формы из раздела заявки можно научить принимать вместо `initialValues` модель из `application.statement` (`Partial<Model>`) и её же отдавать в `onSubmit`. Таким образом мы сможет отдать маппинг "форма - модель" и "модель - форма" на откуп самой форме (сейчас это делает злоебучий `FormHelper` и он мне пиздец как не нравится, хотя я его и написал. Писал с ненавистью, так сказать).
  16.  
  17. Итого: формы смотрят в Statement Store, чтобы отрисоваться, туда же бросает свои изменения на onSubmit.
  18.  
  19. *application.passport*
  20.  
  21. Содержит форму паспортных данных.
  22.  
  23. *application.residence*
  24.  
  25. Сюда переезжает форма с адресами юзера.
  26.  
  27. *application.family*
  28.  
  29. Помимо очевидной хуйни вида "здесь лежит форма сведений о семейном положении пользователя", можно добавить следующие. Ебучие выпадающие списки. На мой взгляд, мы подошли к реализации ввода значения из справочника из рук вон плохо. Основная претензия: значения свойства, по факту, лежат в КЛЮЧАХ справочиника. `martialStatus: keyof typeof MarialStatus` - это жесть. Как сделать лакшери (имхо, разумеется) - на примере поля "семейное положение":
  30.  
  31. 1. Создать тип
  32.  
  33. ```
  34. export enum MartialStatus {
  35. CIVIL_MARRIAGE = 'civil_marriage',
  36. UNMARRIED = 'unmarried',
  37. MARRIED = 'married',
  38. DIVORCED = 'divorced',
  39. }
  40. ```
  41.  
  42. Это - тип значения поля `StatementModel.martialStatus`. Он используется в `value` и `onChange` select'a "семейное положение". Далее. В select'е мы определяем ещё одну коллекцию:
  43.  
  44. ```
  45. const Options = {
  46. [MartialStatus.CIVIL_MARRIAGE]: 'Гражданский брак',
  47. [MartialStatus.UNMARRIED]: 'Холост / не замужем',
  48. [MartialStatus.MARRIED]: 'Женат / замужем',
  49. [MartialStatus.DIVORCED]: 'В разводе',
  50. };
  51. ```
  52.  
  53. и уже её юзать в хуке, что поставляется вместе с `Select`. По факту, тут мы объявили маппинг "значение из справочиника" - "то, что мы пишем в выпадаюшем списке". Таким образом, отображение отделено от данных, архитекторы ПО древности с радостью смотрят на нас из своих могил.
  54.  
  55. *application.contactPersons*
  56.  
  57. Нахуй `contactPersonPhoneA|B|C`. Заменяем его на массив с объектами `{ phone, type, name }`. Прям в модели `Statement`.
  58.  
  59. *application.income*
  60.  
  61. Сабж.
  62.  
  63. *application.agreements*
  64.  
  65. Чекбоксы с третьего шага уползают сюда. Сюда же уползает функционал по из загрузке с сервера.
  66.  
  67. *application.confirmation*
  68.  
  69. Подписание заявки будет жить тут.
  70.  
  71. *application.document*
  72.  
  73. Здесь будет жить Анкета-Заявление и функционал по получению её с сервера. Как, не видели никакой анкеты-заявления? Да вот же, серенькие слова в тесте под формой на третьем шаге заявки, такие же серенькие, как и остальной текст. Но вообще, при нажатии на эту неприметную (и заблокированную сейчас) кнопку заявка должна отправляться на сервер, и тот отдаст нам ссылку на документ, который, по сути, представляет собой печатную версию этой самой заявки. Пока бэк ещё не реализовал этот функционал, но обещают.
  74.  
  75. *application.steps*
  76.  
  77. Весь функционал по разбивке заявки по шагам, будет жить тут. Здесь же, кстати, будут жить и компоненты страниц `FirstStepPage`, `SecondStepPage` и `ThirdStepPage`.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement