Skip to content

@webitel/ui-sdk/src/api ➡️ @webitel/api-services

Differences and Migration

IMPORTANT

TLDR; @webitel/ui-sdk/src/api is deprecated, use @webitel/api-services.

CAUTION

Use relative paths inside @webitel/api-services, бо наєбнеться.

General

.js -> .ts

Merge with default object

Більше такого не робимо. Тепер це розрулюватиметься на рівні стора карточки. На крайній, юзаємо Zod-схему

ts
import {CreateSourceBody} from "@webitel/api-services/gen-wire";
import {getDefaultsFromZodSchema} from '@webitel/api-services/gen/utils';

const defaultObject = { 
    name: '', 
    enabled: false, 
}; 

const defaultObject = getDefaultsFromZodSchema(CreateSourceBody); 

API Clients

Usage is same, but the import path has changed.

Imports

ts
// crm: the-contacts.vue

import ContactAPI from '@webitel/ui-sdk/src/api/clients/crm/ContactAPI'; 

import { ContactAPI } from '@webitel/api-services/api'; 

Transformers

Imports

ts
// @webitel/api-services/api/clients: SomeServiceAPI.ts

import applyTransform, { 
    sanitize, 
} from '@webitel/ui-sdk/src/api/transformers'; 

import { applyTransform, sanitize } from '@webitel/api-services/api/transformers'; 

CAUTION

applyTransform becomes a named export, not a default one.

sanitize.transformer

Use generated Zod objects and getShallowFieldsToSendFromZodSchema to dynamically get fieldsToSend

ts
import { CreateSourceBody } from '@webitel/api-services/gen-wire'; 
import { getShallowFieldsToSendFromZodSchema } from '@webitel/api-services/gen/utils'; 

const fieldsToSend = ['id', 'name']; 

const fieldsToSend = getShallowFieldsToSendFromZodSchema(CreateSourceBody); 

// ... sanitize(fieldsToSend);

merge.transformer

See "Merge with default object" Section

Defaults

NOTE

Наразі використовуємо наші старі дефолти. Треба додумати, як їх замінити на генеровані з Zod-схем.

Imports

ts
// crm

import { getDefaultGetListResponse, getDefaultGetParams } from '@webitel/ui-sdk/src/api/defaults'; 

import { getDefaultGetListResponse, getDefaultGetParams } from '@webitel/api-services/api/defaults'; 

Next

Тут описую своє бачення, на чому закінчую роботу, і куди хотілося б розвивати це далі.

  • Коли вичистимо імпорти з ui-sdk/src/api, треба буде там все зачистити і лишити тільки websocket.

  • Також, хотілося б замінити хардкод дефолти та конвертацію кейсів на Zod-схеми. Але то треба сидіти ще, думати. Не певен щодо цього.