Полноэкранный чат по умолчанию для настройки совместной работы

Я работаю над настройкой совместной работы, которая позиционирует Чат как основное пространство для общения участников, аналогично другим платформам для совместной работы. Цель состоит в том, чтобы участники попадали прямо в свои каналы или последние ветки, делая чат центральным узлом при посещении сайта.

Таким образом, вместо того чтобы попадать на представление, подобное этому:

Я бы попадал сразу на полноэкранный чат:

Похоже, что в настоящее время нет способа открыть чат в полноэкранном режиме по умолчанию. Можно ли добавить такую опцию?

Её можно реализовать как настройку сайта, модификатор темы или преобразователь значений. Это дало бы авторам тем или администраторам сайтов гибкость в интеграции Чата как представления по умолчанию для взаимодействия.

5 лайков

Вы можете написать инициализатор следующим образом:

export default {
  name: "default-full-page-chat",

  initialize() {
    if (!window.localStorage.getItem("discourse_chat_preferred_mode")) {
      window.localStorage.setItem("discourse_chat_preferred_mode", '\"FULL_PAGE_CHAT\"');
    }
  },
};

Думаю, это должно сделать то, что вам нужно.

8 лайков

Действительно, работает как по волшебству! Спасибо :blush:

7 лайков

Я знаю, что проблема уже решена, но вместо прямого доступа к localStorage, как в вашем примере, если вы можете получить доступ к сервисам плагина из темы, можно сделать так:

export default {
  name: "default-full-page-chat",

  initialize(container) {
    const chat = container.lookup("service:chat");
    if (!chat.userCanChat) {
      return;
    }

    const chatStateManager = container.lookup("service:chat-state-manager");
    chatStateManager.prefersFullPage();
  },
};

Это вызывает метод по ссылке:

В долгосрочной перспективе это будет более надёжным решением, если сработает (я ещё не тестировал это :sweat_smile: ).

5 лайков

Да, использование сервиса удобнее, но я не думаю, что у нас есть способ проверить, заданы ли какие-либо предпочтения через сервис на данный момент. Так ли это?

И, если я правильно понял запрос, мы не хотим переопределять решение пользователя; мы просто хотим предлагать полноэкранный режим при первой загрузке. Если же мы хотим принудительно его включить, то ваше решение сработает.

4 лайка

У нас есть эти методы, но isDrawerPreferred всегда возвращает true, если настройка не задана:

Думаю, было бы удобно добавить геттер hasNoPreferredMode для этой ситуации, который просто проверяет хранилище. Вот соответствующий PR:

4 лайка

Хорошо, @manuel, этот PR уже слит, так что вы можете использовать API плагина, который я описал в Full-screen chat as default for collaboration setup - #4 by martin, и hasNoPreferredMode из менеджера состояния чата.

2 лайка

Привет, @manuel, короткое замечание:

В режиме полноэкранного чата обычно нужно выйти из полноэкранного режима (или как-то иначе изменить интерфейс чата), прежде чем появится понятная возможность вернуться к списку чатов или переключиться на разговор с другим участником.

Стоит подумать, можно ли улучшить этот опыт навигации непосредственно внутри полноэкранного режима.

Спасибо, @martin, всё работает отлично!

При тестировании UX в моём текущем случае мне кажется более интуитивным, чтобы чат всегда был на весь экран. Я хочу, чтобы чат был основным способом общения, и если разрешить его сворачивать, пользователи могут случайно оказаться на экране, который они не выбирали намеренно, что может запутать.

Я думаю просто скрыть кнопку сворачивания с помощью CSS, если только нет более прямого способа отключить её?


@jahan_gagan, я не совсем понял, к чему вы отсылали. Это на сайтах, где для навигации используется «гамбургер-меню»? В моей настройке все варианты навигации доступны через боковую панель.

Однако я столкнулся с одной проблемой: на планшетах при переходе в канал чата автоматически появляется клавиатура, из-за чего макет начинает сильно «прыгать». Я ещё не искал решение этой проблемы, просто отмечаю её как осложнение.

3 лайка

Да, скрытие кнопки сворачивания сработало бы, но я только что проверил, и есть ещё один способ, которым пользователи могут переключиться обратно в режим панели. Если вы нажмёте клавишу -, находясь на форуме, мы откроем панель чата:

В этой функции мы вызываем chatStateManager.prefersDrawer(), который устанавливает предпочтение в локальном хранилище. В последнее время у нас внутри были дополнительные обсуждения о возможности режима только чата в Discourse, включая эксперимент в этом направлении, а также идеи, касающиеся режима панели.

Не уверен, когда наступит время, чтобы мы могли уделить этому больше внимания; @mcwumbly или @lindsey могут внести свои предложения здесь.

2 лайка

Спасибо, это очень полезно знать! Пока не уверен, что буду делать прямо сейчас, но да, было бы здорово, если бы в будущем появилась возможность полностью синхронизировать это с обычными настройками Discourse.

1 лайк