Skip to content

Code Base Deprecation Info

Навігація

Вам треба зробити:

Таблиця

Фіча, задача, технологія✅ Так⚠️ Ситуативно❌ ДУЖЕ ситуативно🚧 Refactor?
Табличка🔗@webitel/ui-datalist@webitel/ui-sdk/*
Карточка🔗@webitel/ui-datalist@webitel/ui-sdk/*
API: clients, utils🔗@webitel/api-services/api@webitel/ui-sdk/api
API: gen, types, zod-schemas🔗@webitel/api-services/genwebitel-sdk
Vue Component Style🔗Composition APIOptions API (під mixins)
TypeScript/JavaScript🔗TypeScriptJavaScript
Access Control, Userinfo🔗v2v1

Проблематика

Через велику кодову базу, постійне розширення та модифікацію, у нас є доволі багато місць, де використовується застаріла кодова база.

Тому, основне питання таке:

Яку версію кодової бази обрати для виконання вашої конкретної задачі?

Чому?

Техборги: Щось не доробили, щось переписали але не порефакторили всюди, щось пропустили.

Станом на зараз маємо підхід "краще написати по-правильному ніж костилити, і мати зайвий техборг, ніж притримуватись старого стилю і писати костилі, доки не розвалиться повністю".

Наприклад

Маємо (станом на v25.06) кілька (напевне, 3) версій коду фільтрів або таблички, який виконує одну й ту ж функцію.

  • @webitel/ui-sdk/modules/TableStoreModule
  • @webitel/ui-sdk/store/new/modules/tableStoreModule
  • @webitel/ui-datalist/table

Або, схоже з фільтрами таблиці:

  • @webitel/ui-sdk/modules/QueryFilters
  • @webitel/ui-sdk/modules/Filters
  • @webitel/ui-datalist/filters

Або, апплікейшени: Crm написана повністю на composables, i на новіших сторах. А Admin – там ще аж mixins.

Узагальнені критерії вибору

Як написані "сусідні" фічі?

Дуже часто, коли вам треба додати щось, то рівно в тому ж апплікейшені лежить сусідній шматок функціоналу, якось вже написаний. В такому разі, найкраще взяти за основу саме його.

На скільки достатньо часу та наснаги ви маєте для рефакторингу?

Boy-scout rule: "Leave the code better than you found it".

При інших рівних факторах, беріть новіше.

А за можливості, переписуйте старіше на новіше також.

Обираємо технологію

Store

Pinia

Краще Pinia.

⚠️ Vuex

Але якщо в апплікейшені Pinia ще не засетаплена і у вас немає часу на ризики, то візьміть Vuex.

Наприклад:

  1. Новий store для нової ізольованої фічі у Workspace – беріть собі спокійно Pinia.

  2. Новий розділ для Admin – беріть Vuex, бо там все на Vuex і у вас буде тупо copy-paste розділу.


Валідації

Zod + Regle

Свіже.

Рекомендовано, там де можете. Вже інтегровано у @webitel/ui-datalist/card.

⚠️ Vuelidate

Там де вже є.

Від Vuelidate ми відмовляємось, мігруємо на Zod + Regle.


TypeScript

✅ Впроваджуємо 🙂


Vue components style

✅ Composition API

<script setup>

❌ Options API

Compat, або під існуючі mixins.

Обираємо кодову базу

API

@webitel/api-services

Так.

@webitel/ui-sdk/api та @webitel/ui-sdk/src/api

Ні. Весь контент з тих папок мігрований у @webitel/api-services.

Бачите – міняйте імпорт на @webitel/api-services.

Таблички

@webitel/ui-datalist/table.

Так. Найновіша версія, Pinia.

Станом на v25.06 використовується тільки в crm i history апплікейшенах.

⚠️ Таблички з @webitel/ui-sdk/... (все інше)

Якщо на рівні апплікейшена є декілька сторів одночасно, то беремо найновіший. Або "найближчий" ієрархічно. Якщо всюди однаковий – беремо його.


Карточки

Сторінки запису таблички

Те саме, що і з табличками. – вони зазвичай йдуть разом.


Валідації

Зазвичай існують разом зі стором карточки.

Зокрема бо у більшості карточок у нас є таби.

🤔 Якщо є стор карточки

  • Стор старий => Vuelidate – пишуться в компоненті.

  • Стор новий => Zod + Regleвони вже зашиті у стор.

🤔 Якщо стору карточки немає

  • Якщо є згенерована з API zod-схема => використовуємо її для валідації.

  • Якщо немає – то я хз, напишіть @dlohvinov.

Access Control, Userinfo

@webitel/ui-sdk/modules/Userinfo/v2/...

По можливості краще v2.

WARNING

Увага на шлях: ../v2/..

⚠️ @webitel/ui-sdk/modules/Userinfo/...

Старіше. Має сенс використовувати має сенс тільки для copy-paste створення розділів або фіч.