From 6c26761b51b78b646f2fccab4b4c5269439f12b3 Mon Sep 17 00:00:00 2001 From: Pavel Antonov <antonov@perx.ru> Date: Tue, 22 Aug 2023 11:00:17 +0400 Subject: [PATCH] =?UTF-8?q?Actions=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proto/extensions/extension.proto | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/proto/extensions/extension.proto b/proto/extensions/extension.proto index ba82ecd..754b258 100644 --- a/proto/extensions/extension.proto +++ b/proto/extensions/extension.proto @@ -151,11 +151,32 @@ message ActionResponse { } State state = 10000; // Состояние расширение + string msg = 10100; // Сообщение о выполнении действия + string title = 10110; // Текст для отображения в интерфейсе + string html = 10120; // HTML для отображения в интерфейсе (альтернатива msg) + string md = 10130; // HTML для отображения в интерфейсе (альтернатива 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; + repeated Action next = 10300; // Следующие возможные действия. Интерфейс отображает как варианты дальнейших действий пользователя map<string,string>metadata = 10400; // Метаданные запроса repeated content.references.Reference refs = 10320; // Ссылки на записи (назначение ссылок зависит от действия и расширения) + } @@ -186,10 +207,52 @@ message Action { ITEMS = 5; // Действие связано с несколькими записями (требуется передача space_id, env_id, collection_id, item_ids). Отображается на экране списка записей. REVISION = 6; // Действие связано с ревизией записи (требуется передача space_id, env_id, collection_id, item_id, rev_id). На данный момент не используется. CREATE = 7; // Действие создание записи (требуется передача space_id, env_id, collection_id). + MAIN_MENU = 10000; // Действие отображается в главном меню (требуется передача space_id, env_id) + MAIN_MENU_BOTTOM = 10010; // Действие отображается в главном меню внизу (требуется передача space_id, env_id) + } + + enum ActionType { + REQUEST = 0; // Действие выполняет запрос на сервер + NAVIGATION = 1; // Действие переносит пользователя в другую часть интерфейса } + ActionType action_type = 9000; // Тип действия + string extension = 10000; // Расширение string action = 10100; // Идентификатор действия + + + // URL для запроса действия (альтернатива `extension` и `action`). В случае если параметр + // `action_url` указан, то интерфейс не запрашивает расширение и действие, а выполняет запрос по указанному URL используя + // указанный протокол. В случае если указан `action_url` то `extension` и `action` игнорируются. + // + // Для форматов HTML/MD относительные ссылки в тексте преобразуются в абсолютные используя `action_url` в качестве + // базового URL. + // + // Пример: `https://example.com/api/v1/action` - будет выполнен запрос HTTP по указанному URL. + // Сервер может вернуть ответ в формате JSON или HTML/MD. Дальнейшие действия определяется оп заголовку ответа + // `Content-Type`: + // - `application/json` - ответ в формате JSON. Структура ответа соответствует `ActionResponse` и интерпретируется + // тем же способом что и ответ от GRPC. + // - `text/html` - ответ в формате HTML. Интерфейс отображает ответ в виде сообщения. + // - `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`) + // Перечень переменных для подстановки: + // - :spaceId + // - :envId + // - :colId + // - :itemId + // + string action_url = 10110; + string name = 10200; // Название действия для отображения в интерфейсе (пункт меню, кнопка). string description = 10210; // Описание действия для отображения в интерфейсе string icon = 10220; // Название иконки для отображения действия в интерфейсе @@ -209,6 +272,8 @@ message Action { string params_collection = 10330; ActionRequest request = 10400; // Параметры запроса (используется в случае `ActionResponse.next`) + + // DEPRECATED: Используйте `action_url` вместо `navigation_route` bool navigation_action = 10500; // Флаг указывающий что действие переносить пользователя в другую часть интерфейса, а не отправляет запрос на сервер // navigation_route - Строка шаблон для перехода в интерфейсе @@ -222,5 +287,16 @@ message Action { // - :colId // - :itemId // + // DEPRECATED: Используйте `action_type == "NAVIGATION"` string navigation_route = 10510; + + enum Autorun { + NONE = 0; // Действие не выполняется автоматически + ONCE_PER_USER = 1; // Действие выполняется при старте приложения + PER_USER_SESSION = 2; // Действие выполняется при старте приложения и при каждом перезапуске приложения + ONCE_SPACE = 3; // Действие выполняется при старте приложения и при каждом перезапуске приложения + } + + Autorun autorun = 10520; // Параметр указывающий что действие выполняется автоматически + bool confirm = 10530; // Параметр указывающий что действие требует подтверждения пользователя } \ No newline at end of file -- GitLab