Skip to content
Snippets Groups Projects
Commit 9d175604 authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Обновлена спецификация Action

parent 7006e31d
No related branches found
No related tags found
1 merge request!18Расширение Actions для анонсов
......@@ -141,6 +141,18 @@ message ActionRequest {
content.references.Reference params = 11020;
}
// Target - определяет как открывать результат выполнения действия в пользовательском интерфейсе
enum Target {
DEFAULT = 0; // По умолчанию (если нет других условий, то MODAL)
MODAL = 1; // Открывать в модальном окне
WIDE = 2; // Открывать в широком модальном окне
MAIN = 4; // Открывать в главной рабочей области (часть без меню)
DRAWER = 5; // Открывать в боковой панели
NOTIFICATION = 6; // Открывать виде всплывающего уведомлении
BLANK = 7; // Открывать в новой вкладке
NONE = 100; // Не отображать результат
}
message ActionResponse {
enum State {
DONE = 0; // Запрос завершен
......@@ -150,33 +162,22 @@ message ActionResponse {
PARAMETERS_REQUIRED = 4; // Требуются дополнительные данные для выполнения запроса
}
State state = 10000; // Состояние расширение
enum Format {
PLAIN = 0;
HTML = 1;
MARKDOWN = 2;
}
State state = 10000; // Состояние расширение
Target target = 10010; // Как открывать результат выполнения действия в пользовательском интерфейсе (переопределяет значение в Action)
Format format = 10050; // Формат полей msg и error
string msg = 10100; // Сообщение о выполнении действия
string title = 10110; // Текст для отображения в интерфейсе
string html = 10120; // HTML для отображения в интерфейсе (альтернатива msg)
string md = 10130; // Markdown для отображения в интерфейсе (альтернатива msg)
string image = 10140; // Изображение для отображения в интерфейсе (шапке окна)
string error = 10200; // Сообщение в случае ошибки
enum Target {
MODAL = 0; // Открыть во всплывающем окне
WIDE_MODAL = 1; // Открыть во всплывающем широком окне (вся страница)
WORKSPACE = 2; // Открыть в рабочей области (без меню)
NOTIFICATION = 3; // Открыть в виде уведомления
DRAWER = 4; // Открыть в виде выдвижной панели
NEW_WINDOW = 100; // Открыть в новом окне
NONE = 1000; // Без отображения результата
}
// Как открывать результат выполнения действия
// В случае ответа в виде HTML/MD, открывать аналогично WIDE_MODAL, или брать значние из заголовка 'X-Action-Target'
Target target = 10210;
string error = 10200; // Сообщение в случае ошибки (дополнительно к msg)
repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя
map<string,string>metadata = 10400; // Метаданные запроса
repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения)
}
......@@ -211,54 +212,43 @@ message Action {
MAIN_MENU_BOTTOM = 10010; // Действие отображается в главном меню внизу (требуется передача space_id, env_id)
}
enum ActionType {
REQUEST = 0; // Действие выполняет запрос на сервер
NAVIGATION = 1; // Действие переносит пользователя в другую часть интерфейса
}
ActionType action_type = 9000; // Тип действия
// DEPRECATED: Используйте `action` в формате URI
string extension = 10000; // Расширение
string action = 10100; // Идентификатор действия
// URL для запроса действия (альтернатива `extension` и `action`). В случае если параметр
// `action_url` указан, то интерфейс не запрашивает расширение и действие, а выполняет запрос по указанному URL используя
// указанный протокол. В случае если указан `action_url` то `extension` и `action` игнорируются.
//
// Для форматов HTML/MD относительные ссылки в тексте преобразуются в абсолютные используя `action_url` в качестве
// базового URL.
// Идентификатор действия (в формате URI)
// Варианты использования:
// - пустой - никаких действий не выполняется
// - `action_id` - простое действие (если установлено расширение, то оно используется)
// - `grpc:///extension_id/action_id` - полное действие с указанием расширения
// - `https://host/path` - действие по HTTP(S)
// - `ui:///path` - действие в интерфейсе
// - `/path` - действие в интерфейсе
//
// Пример: `https://example.com/api/v1/action` - будет выполнен запрос HTTP по указанному URL.
// Сервер может вернуть ответ в формате JSON или HTML/MD. Дальнейшие действия определяется оп заголовку ответа
// `Content-Type`:
// - `application/json` - ответ в формате JSON. Структура ответа соответствует `ActionResponse` и интерпретируется
// тем же способом что и ответ от GRPC.
// - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения.
// - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения в IFrame
// - `text/markdown` - ответ в формате MD. Интерфейс отображает ответ в виде сообщения.
//
// Пример: `grpc://example.com/api/v1/action` - будет выполнен запрос GRPC по указанному URL.
// Сервер может вернуть ответ в `ActionResponse`.
//
// action_type == "NAVIGATION" - Строка шаблон для перехода в интерфейсе
// При указании полного адреса (http(s)://xyz), URL открывается в новом окне браузера
// Относительный адрес в пользовательском интерфейсе переносит пользователя в соответствующий раздел без перезагрузки приложения
//
// Переменные `:var` заменяются на текуще значение в пользовательском интерфейсе (Пример: `/spaces/:spaceId/envs/:envId/cols/:colId`)
// Переменные `:var` заменяются на текуще значение в пользовательском интерфейсе
// Перечень переменных для подстановки:
// - :spaceId
// - :envId
// - :colId
// - :itemId
//
string action_url = 10110;
// Пример: `ui:///spaces/:spaceId/envs/:envId/cols/:colId` - будет выполнено действие в интерфейсе.
string action = 10100;
Target target = 10110; // как должен отображаться результат действия
string parent = 10120; // Идентификатор родительского действия (для отображения в меню)
string name = 10200; // Название действия для отображения в интерфейсе (пункт меню, кнопка).
string description = 10210; // Описание действия для отображения в интерфейсе
string icon = 10220; // Название иконки для отображения действия в интерфейсе
content.references.Reference image = 10230; // Изображение для отображения в действия в интерфейсе
repeated string groups = 10240; // Группы отображения действия в интерфейсе
Kind kind = 10300; // Указывает на что направлено действие
Kind kind = 10300; // Указывает область действия (где отображается действие)
repeated string classes = 10310; // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
// Для `CREATE` действуют следующие правила:
// - Для создание записей в коллекции применимы действия которые содержат в classes название коллекции
......@@ -290,13 +280,11 @@ message Action {
// DEPRECATED: Используйте `action_type == "NAVIGATION"`
string navigation_route = 10510;
enum Autorun {
NONE = 0; // Действие не выполняется автоматически
ONCE_PER_USER = 1; // Действие выполняется при старте приложения
PER_USER_SESSION = 2; // Действие выполняется при старте приложения и при каждом входе пользователя в пространство
ONCE_SPACE = 3; // Действие выполняется один раз для пространства
}
// Параметр указывающий что действие выполняется автоматически
// Если указано, то действие выполняется автоматически каждый раз при загрузке приложения
bool autorun = 10520;
Autorun autorun = 10520; // Параметр указывающий что действие выполняется автоматически
bool confirm = 10530; // Параметр указывающий что действие требует подтверждения пользователя
// Параметр указывающий что действие требует подтверждения пользователя
// Перед выполнением действия пользователю отображается информация о действии и кнопки подтверждения/отмены
bool confirm = 10530;
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment