Где открывается приложение
Одно и то же приложение может работать в трёх местах. Данные у каждого свои; узнать, где оно открыто, можно вызовом context.get:
const { kind } = await pairx.call("context.get"); // "chat" | "personal" | "preview"В чате#
Приложение, отправленное в чат, — это экземпляр: сообщение-карточка, которую открывают все участники. У экземпляра общие хранилища: очередь одна на всех, голоса видны всем.
- Писать могут участники чата — с учётом прав хранилища (
writers) и прав в самом чате: где писать нельзя, запись отклоняется сforbidden. - Автор экземпляра — тот, кто отправил приложение в этот чат. Для хранилищ с
writers: "admins"к нему добавляются администраторы чата. - Каждая отправка — новый экземпляр с чистыми данными. Одно приложение в двух чатах или дважды в одном чате — разные экземпляры.
- Подходит для личного диалога, группы и «Избранного».
Лично#
Ссылка https://pairx.org/app/<id> открывает приложение для одного человека — у него свой личный контекст. По той же ссылке человек возвращается к своим данным. Так открываются и приложения из «Профиль → Приложения».
- Хранилища работают так же, но пишет в них только сам человек; другие их не видят.
- Подходит для тренажёров, заметок, калькуляторов — всего, чем не нужно делиться.
Приложение из одного файла открывается и в чате, и лично. Пакет из нескольких файлов может ограничить это полем contexts в pairx.app.json — например, очередь имеет смысл только в чате:
{"contexts": ["chat"]}В странице этого поля нет: если приложению нужен чат, проверьте context.get и объясните человеку, что его стоит отправить в чат.
Предпросмотр#
Автор открывает приложение перед отправкой. Данные предпросмотра отдельные и не сохраняются: следующий предпросмотр начинается с чистого листа. context.get отдаёт kind: "preview" и preview: true — например, чтобы показать подсказку «Это предпросмотр, участники пока ничего не видят».
Одно приложение для всех мест#
const { kind } = await pairx.call("context.get");
if (kind === "personal") {
document.body.classList.add("solo"); // без списка участников
}Ни в каком месте приложение не узнаёт, в каком именно чате оно открыто и кто в нём состоит: только вид контекста и ID человека внутри приложения.