Работа с сервером
JavaScript Kanban может работать как с клиентскими, так и с серверными данными. Для работы на стороне сервера не требуется особых требований к бэкенду - Kanban может подключаться к любой серверной платформе, поддерживающей REST API.
Виджет поставляется с готовыми вариантами бэкенда на Go и Node, но также поддерживаются и собственные серверные скрипты.
RestDataProvider
JavaScript Kanban предоставляет сервис RestDataProvider, который полностью поддерживает REST API для работы с сервером. С помощью этого сервиса вы сможете легко взаимодействовать с сервером и выполнять следующие действия с данными:
- "add-card"
- "add-column"
- "add-comment"
- "add-row"
- "add-link"
- "delete-card"
- "delete-column"
- "delete-comment"
- "delete-row"
- "delete-link"
- "move-card"
- "move-column"
- "move-row"
- "update-card"
- "update-column"
- "update-comment"
- "update-row"
REST-методы
Сервис RestDataProvider включает в себя несколько REST-методов для динамической загрузки данных:
getCards()
- возвращает Promise с данными карточекgetColumns()
- возвращает Promise с данными колонокgetLinks()
- возвращает Promise с данными связейgetRows()
- возвращает Promise с данными строкgetUsers()
- возвращает Promise с данными пользователей
Взаимодействие с бэкендом
Чтобы подключить Kanban к серверу, просто подключите RestDataProvider к вашим серверным скриптам. Если вы используете встроенные бэкенды, они доступны по следующим ссылкам:
Вы также можете реализовать собственный бэкенд.
Если вы используете собственный бэкенд, ознакомьтесь с разделом REST API routes для получения подробностей.
Подключить RestDataProvider к серверу очень просто: используйте конструктор kanban.RestDataProvider и передайте ему URL сервера.
const url = "https://some_backend_url";
const restProvider = new kanban.RestDataProvider(url);
Promise.all([
restProvider.getUsers(),
restProvider.getCards(),
restProvider.getColumns(),
restProvider.getLinks(),
restProvider.getRows()
]).then(([users, cards, columns, links, rows]) => {
const board = new kanban.Kanban("#root", {
cards,
columns,
links,
rows,
rowKey: "type",
editorShape: [
...kanban.defaultEditorShape,
{
type: "multiselect",
key: "users",
label: "Users",
values: users
}
]
});
board.api.setNext(restProvider);
});
Чтобы включить операции с данными, такие как добавление или удаление элементов, и отправку запросов на сервер, RestDataProvider необходимо добавить в цепочку Event Bus с помощью метода api.setNext().
Пример
Пример подключения RestDataProvider к бэкенду на Go и загрузки данных с сервера:
Мультипользовательский бэкенд
Доски Kanban популярны среди компаний любого размера, а поддержка нескольких пользователей делает работу еще удобнее. Благодаря этой функции несколько пользователей могут одновременно управлять одними и теми же карточками Kanban в реальном времени - без перезагрузки страницы. Это обеспечивает более эффективное взаимодействие и своевременное обновление изменений для всех участников.
Чтобы настроить мультипользовательский бэкенд, сначала авторизуйтесь на сервере перед инициализацией Kanban. Для этого можно использовать простую функцию login(url: string)
:
const login = (url) => {
var token = sessionStorage.getItem("login-token");
if (token) {
return Promise.resolve(token);
}
return fetch(url + "/login?id=1")
.then(raw => raw.text())
.then(token => {
sessionStorage.setItem("login-token", token);
return token;
});
};
Данная функция реализует демонстрационную авторизацию - каждый пользователь авторизуется с ID 1. После входа сервер возвращает токен, который следует добавлять во все последующие запросы. Для этого используйте метод RestDataProvider.setHeaders()
, чтобы добавить кастомные заголовки ко всем запросам. По умолчанию сервер ожидает токен в заголовке "Remote-Token":<value>
:
login(url).then(token => {
// инициализация rest provider
const restProvider = new kanban.RestDataProvider(url);
// установка токена в кастомный заголовок
restProvder.setHeaders({
"Remote-Token": "eyJpZCI6IjEzMzciLCJ1c2VybmFtZSI6ImJpem9uZSIsImlhdC...",
});
// инициализация виджета...
});
После получения токена можно инициализировать Kanban следующим образом:
// инициализация виджета...
Promise.all([
restProvider.getCards(),
restProvider.getColumns(),
restProvider.getLinks(),
restProvider.getRows(),
]).then(([cards, columns, links, rows]) => {
const board = new Kanban("#root", {
cards,
columns,
links,
rows,
rowKey: "row",
cardShape,
editorShape,
});
// сохранение данных с клиента на сервер
board.api.setNext(restProvider);
// инициализация мультипользователя...
});
После инициализации виджета необходимо добавить WebSocket для прослушивания серверных событий. Пример:
// инициализация мультипользователя...
// получение клиентских обр аботчиков для серверных событий
const handlers = kanbanUpdates(
board.api,
restProvider.getIDResolver()
);
// подключение к серверным событиям
const events = new RemoteEvents(url + "/api/v1", token);
// привязка обработчиков к серверным событиям
events.on(handlers);
handlers
- клиентские функции для обработки событий от сервераevents
- объект для подключения к серверу и прослушивания событийRemoteEvents.on(handlers)
- связывает обработчики с серверными событиями
Добавление мультипользовательского бэкенда значительно упрощает совместную работу и позволяет мгновенно видеть изменения в интерфейсе.
Пример
Пример настройки мультипользовательского бэкенда для отображения изменений пользователей в реальном времени: