Skip to content

Роутер для взаимодействия с состоянием приложения МойСклад

Notifications You must be signed in to change notification settings

wmakeev/moysklad-router

Repository files navigation

moysklad-router

npm Travis Coveralls Gemnasium JavaScript Style Guide

Библиотека для управления текущим url приложения МойСклад.

Набор методов для модификации, отлеживания состояния приложения МойСклад и генерация url.

Содержание

Зачем?

Роутер задумывался с целью облегчить задачу написания расширений для онлайн-приложения МойСклад. Часто необходимо знать в каком разделе сейчас находится пользователь, получить идентификатор теущего документа, перейти в нужный раздел или обновить данные на странице после изменений.

Установка

$ npm install moysklad-router

Использование

Для работы с роутером небходимо подключить библиотеку отдельным скриптом либо использовать в составе сборки

// Создаем экземпляр роутера
let router = moyskladRouter()

// Запускаем отслеживание состояния url
router.start()

// Переходим на страницу заказа покупателя
router('customerorder/edit', '8ee87f6f-125e-11e3-a711-7054d21a8d1e')

API

Создание экземпляра

let router = moyskladRouter()

router.start() : this

Включает отслеживание текущего состояния.

router.stop() : this

Выключает отслеживание состояния.

router.getState() : Object

Возвращает копию текущего состояния.

Пример url состояния для раздела "Отгрузки" с примененным фильтром "Проведенные отгрузки с 01.06.2015 00:00":

https://online.moysklad.ru/app/#demand?global_periodFilter=01.06.2015%2000:00:00,&global_operationApprovalState=1

Результат вызова router.getState(),

{
	path: 'demand',
	query: {
		global_periodFilter: ["01.06.2015 00:00:00",""],
		global_operationApprovalState: "1"
	}
}

или пример для отдельного документа "Отгрузка"

https://online.moysklad.ru/app/#demand/edit?id=0f698528-0b8d-11e5-7a40-e897000af75f
{
	path: 'demand/edit',
	query: {
		id: "0f698528-0b8d-11e5-7a40-e897000af75f"
	}
}

router(...args) → router.navigate(...args)

router.navigate(state, isPatch=false) : this

Перенаправляет приложение в новое состояние (новое состояние добавляется в историю навигации браузера).

Аргумент Тип Описание Значение по умолчанию
state Object объект описывающий новое состояние обязательный
isPatch Boolean true, если необходимо частичное обновление состояния query. В этом случае значение параметра state накладывается на активное состояние приложения. false

Пример вызова:

let curState = router.getState()
curState.query.id = '0f698528-0b8d-11e5-7a40-e897000af75f'
router.navigate(curState)

аналогичная запись с флагом isPatch = true

router.navigate({
	query: {
		id: '0f698528-0b8d-11e5-7a40-e897000af75f'
	}
}, true)

router.navigate(path, query={} | uuid, isPatch=false) : this

Перенаправляет приложение в новое состояние (новое состояние добавляется в историю навигации браузера).

Аргумент Тип Описание Значение по умолчанию
path String значение ключа path состояния приложения обязательный
query Object значение ключа query состояния приложения { }
uuid String идентификатор документа для раздела path, аналогично query со значением {id: uuid} нет
isPatch Boolean true, если необходимо частичное обновление состояния query. В этом случае значение параметра query накладывается на активное значение query состояния приложения. false

Все три вызова navigate показанные ниже аналогичны:

router.navigate({
	path: 'customerorder/edit',
	query: { id: uuid }
})

router.navigate('customerorder/edit', uuid)

router.navigate('customerorder/edit', { id: uuid })

Если вы находитесь на странице редактирования заказа, то перейти к другому заказу можно следующим вызовом:

router.navigate({
	query: { id: uuid }
}, true)

router.replaceState(...args) : this

Перенаправляет приложение в новое состояние (новое состояние НЕ добавляется в историю навигации браузера).

Вызов метода аналогичен вызову router.navigate, за тем исключением, что для установки состояния используется метод history.replaceState (т.е. не затрагивается история навигации).

router.refresh() : this

Обновляет текущую страницу приложения без перезагрузки.

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

Реализуется через добавление в hash url ключа refresh с числовым значением текущего времени, тем самым заставляя МойСклад обновить страницу.

router.getPath() : String

Возвращает текущий path состояния

// #customerorder/edit?id=123-456-789

router.getPath() // → 'customerorder/edit'

router.getSection() : String

Возвращает текущий раздел

// #customerorder/edit

router.getSection() // → 'customerorder'

router.getAction() : String

Возвращает текущую операцию

// #customerorder/edit

router.getAction() // → 'edit'

router.getQuery() : Object

Возвращает текущий query состояния

// #customerorder/edit?id=123-456-789

router.getQuery() // → { id: '123-456-789' }

router Events

router реализует интерфейс EventEmitter и генерирует следующие события:

  • Запуск роутера router.on('start', router => {...})

  • Остановка роутера router.on('stop', router => {...})

  • Изменение текущего состояния router.on('route', (state, router) => {...})

License

MIT @ Vitaliy V. Makeev

About

Роутер для взаимодействия с состоянием приложения МойСклад

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published