redline-mobx v4.0.3
CHANGES
4.0.1- Используется url-join для конкатенации урлов и
endpointможет больше на заканчиваться обязательно на/
- Используется url-join для конкатенации урлов и
4.0.0- Теперь все методы у моделей и хранилищ выкидывают ошибки, а не проглатывают их
Install
Для работы с redline-mobx вам надо установить следующие пакеты:
mobxmobx-state-tree@nestjsx/crud-request
RedlineStores
Аггрегатор всех хранилищ в вашем проекте, схема работы выглядит следующим образом:
- Вы создаете модели
- Создаете хранилища с помощью
createDetailStoreилиcreateListStore(не обязательно) Создаете аггрегатор хранилищ
import { RedlineStores } from "redline-mobx"; import { SomeStore } from "./stores"; const stores = new RedlineStores(logger, axios, snapshots); stores.add({ type: SomeStore, name: "some_store", });
Methods
RedlineStores.add({name: string, snapshots: {}, type, additional_envs })- метод для добавления новых хранилищRedlineStores.getStore(name: string)- найти хранилище по его имениRedlineStores.getStores()- получить все сторыRedlineStores.toJS()- Вернуть содержимое(сторы) какjs-objectRedlineStores.toJSON()- Вернуть содержимое какjson-string
createModel
Создается тип для модели, надо это потому, что сейчас схема такая что у модели есть дополнительные методы:
some_model_instance.delete()some_model_instance.update(values: any)
Для того чтобы создать новую модель надо сделать что-то такое:
import { createModel } from "redline-mobx";
import { types } from "mobx-state-tree";
PostModel = createModel({
name: "PostModel",
type: types.model({
title: types.string,
author: types.string,
}),
endpoint: "/api/posts/",
});модели расширяют стандартную модель BaseModel имеющую следующие поля(она примитивная):
idcreated_atupdated_at
createDetailStore
Создается тип для хранения одной записи какого-то типа.
const PageStore = createDetailStore({
type: PageModel,
endpoint: urls.PAGES_ENDPOINT,
name: "PageStore",
});Methods
DetailStore.reset()- Сбросить состояниеDetailStore.getOne(id_slug: string, {qparams?: CreateQueryParams, axios_params?: AxiosRequestConfig })- Сделать запрос на бэкDetailStore.create(values: any)- Отправляет запрос на создание новой записи на бэк и из того что бэк вернет попытается получить запись(item)
createListStore
Создается тип для хранения списка записей
const PagesStore = createListStore({
type: PageModel,
endpoint: urls.PAGES_ENDPOINT,
name: "PagesStore",
mixin_types: [SeoBase],
});Methods
ListStore.reset()- Сбросить состояниеListStore.getList({qparams?: CreateQueryParams, axios_params?: AxiosRequestConfig, loadmore?: boolean })- Сделать запрос на бэк
createFormStore
Почти бесполезная функция, но всяго удобнее чем каждый раз писать обращение к axios из контекста и.т.п
FormStore.sendOrder(data, ...)- Отправить форму с предоставленными данными(data)
Статусы меняются в
sending|error|readyВАЖНО ошибки при запросе прокидываются выше.
const OrderForm = createFormStore({
name: "OrderForm",
endpoint: "api/forms/order_form",
});
const order_form = OrderForm.create();
order_form.sendOrder({
username: "vl",
product_id: 11,
});createAuthStore
Создает стору для авторизации, ожидает в ответ от сервера, при успешном логине токен, который будет сохранен в Cookies.
const UserModel = types.model("UserModel", {
id: types.maybeNull(types.number),
email: types.maybeNull(types.string),
password: types.maybeNull(types.string),
});
const AuthStore = createAuthStore({
type: UserModel,
name: "AuthStore",
me_endpoint: urls.ME_ENDPOINT, // URL для получения самого пользователя
login_endpoint: urls.LOGIN_ENDPOINT, // URL для логина
});
AuthStore.getMe();
AuthStore.user; // User objectMethods
AuthStore.getMe()- Получит пользователя от сервера и сохранит его в полеuserAuthStore.login(credentials)- Делает запрос для осуществления логина,credentialsпередаются как json в теле POST-запроса наlogin_endpoint. Ожидается, что сервер вернетtoken, который будет сохранен в куки.AuthStore.logout()- Удалит запис в куках и почистит полеuserв самом хранилище
Additional
AuthStore.setUser()- Установить объект пользователя или обновить данные о немAuthStore.resetUser()- Удалить текущего юзера (AuthStore.user)AuthStore.setToken()- Установить токен в кукиAuthStore.resetToken()- Удалить токен из кук
Views
AuthStore.isAuthenticated- Геттер который ожидает статус сторы какis_readyи проверяет наличие информации о пользователе в полеuser
// ....
if (auth_store.isAuthenticated) {
console.log("Я авторизирован!");
}
// ....