@foxford/foxford-js-sdk
v3.2.14
Published
Foxford sdk for external projects
Downloads
597
Keywords
Readme
Foxford-js-sdk
Набор методом для работы с Фоксфорд
Использование
// @flow
import { Foxford } from '@foxford/foxford-js-sdk'
import type { User } from '@foxford/foxford-js-sdk'
const foxSdk = new Foxford()
const getUser = async function () {
const user: User = await foxSdk.user.getUser()
}
Сервисы
- user - для работы с юзером фокса
- promo - для работы с промокодами
- tag - для работы с тэгами
- cart - для работы с корзиной
- course - для работы с курсами
- widgets - для работы с виджетами
- productPack - для работы с продукт-паками
- leadrequest - для работы с лидреквестами
- api, foxApi, staticApi - для работы с HTTP-запросами
- captcha - для работы с капчей
- analytics - для работы с аналитикой
Описание интерфейсов можно глянуть в index.d.ts
или index.js.flow
Виджеты
Библиотека сама сходит на скриптом по нужному адресу и вставит его в ваш DOM. После чего проинициализирует виджеты с заданными конфигом. Теперь нет необходимости инициализировать библиотеку виджетов вручную.
Пример инициализации виджетов
const WIDGETS_CONFIG = Object.freeze({
analyticContext: { prefix: 'app', module: '' },
widgets: [
{
name: 'menu',
options: {
header: true,
footer: true,
headerContainer: document.getElementById(HEADER_CONTAINER_NAME),
footerContainer: document.getElementById(FOOTER_CONTAINER_NAME),
},
},
],
})
const sdk = new Foxford()
sdk.widgets.create(WIDGETS_CONFIG)
Корзина
Саздаем cartItem
и добавляем его в корзину
const sdk = new Foxford()
async function addCourseToCart(id: number) {
try {
const course = await sdk.course.getCourse(id)
// создаем cart-item
const cartItem = sdk.cart.createCartItem(course.id, course.cartItem.type)
// добавляем cart-item в корзину
await sdk.cart.addCartItemToCart(cartItem)
// redirect
} catch (error) {
// error
}
}
Курс
Получение информации по курсу
const sdk = new Foxford()
async function getCourse(id: number): Course {
const course = await sdk.course.getCourse(id)
return course
}
Лидрееквест
Создаем лидреквест и отсылаем его
const sdk = new Foxford()
async function sendLeadRequest({ email, phone, name }) {
const lrData = {
email: email,
phone_number: phone,
name: name,
}
const leadRequest = sdk.leadrequest.createLeadRequest(LEAD_REQUEST_TYPE, 'express.foxford.ru | offer', lrData)
await sdk.leadrequest.send(leadRequest, search)
}
User identity event
Для отправки юзер эвентов нужно выполнить
const sdk = new Foxford()
async function sendUserEvent(event: 'experiment' | 'funnel' | 'conversion'): void {
await sdk.user.pushEvent(event) // отправка события
}
sendUserEvent('conversion')
Api
В случае крайней необходимости есть возможность делать прямые запросы через настроенный api клиент.
const sdk = new Foxford()
const api = sdk.api
const foxApi = sdk.foxApi
const api = sdk.api
const staticApi = sdk.staticApi
foxApi.post(`/api/${endpoint}`, { data })
// ---------------------------------------------------------------------------------------- //
// Выполняем запрос к внешнему ресурсу
api.get(`https://some.external.source`).then(({ data }) => data)
// ---------------------------------------------------------------------------------------- //
/*
`staticApi` можно использовать для доступа к статичным методам и свойствам апи
* staticApi.create() - для создания нового инстанса
* staticApi.isCancel() - для проверки был ли запрос отменен пользователем
* staticApi.CancelToken - для отмены запросов
*/
// Отмена запроса
const CancelToken = staticApi.CancelToken
const source = CancelToken.source()
staticApi
.get('/user/12345', {
cancelToken: source.token,
})
.catch(function (thrown) {
if (staticApi.isCancel(thrown)) {
console.log('Request canceled', thrown.message)
} else {
// обработка ошибки
}
})
staticApi.post(
'/user/12345',
{
name: 'new name',
},
{
cancelToken: source.token,
}
)
// Отмена запроса (параметр сообщения опциональный)
source.cancel('Operation canceled by the user.')
// Создание инстанса
const customClient = staticApi.create({
baseURL: someCustomURL,
responseType: 'text',
})
Плагины
Данные плагины могут быть использованы в любой экосистеме(react, vanilla js)
Ознакомьтесь подробнее с документацией по каждому плагину.