redline-mobx
v4.0.3
Published
- `4.0.1` - Используется url-join для конкатенации урлов и `endpoint` может больше на заканчиваться обязательно на `/` - `4.0.0` - Теперь все методы у моделей и хранилищ выкидывают ошибки, а не проглатывают их
Downloads
4
Readme
CHANGES
4.0.1
- Используется url-join для конкатенации урлов и
endpoint
может больше на заканчиваться обязательно на/
- Используется url-join для конкатенации урлов и
4.0.0
- Теперь все методы у моделей и хранилищ выкидывают ошибки, а не проглатывают их
Install
Для работы с redline-mobx
вам надо установить следующие пакеты:
mobx
mobx-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-object
RedlineStores.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
имеющую следующие поля(она примитивная):
id
created_at
updated_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 object
Methods
AuthStore.getMe()
- Получит пользователя от сервера и сохранит его в полеuser
AuthStore.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("Я авторизирован!");
}
// ....