Мобильное меню заголовка бренда не раскрывается полностью до изменения размера окна

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

Но если после этого изменить размер окна в любом направлении, оно полностью раскрывается и показывает все подпункты.

Как сделать так, чтобы оно раскрывалось полностью при нажатии без необходимости изменения размера окна?

Я заметил, что на нашем форуме при простом нажатии на гамбургер-меню класс «slide-in» не добавляется к div-элементу «menu-panel».

Однако как только я изменяю размер окна, этот класс добавляется, и меню начинает работать корректно.

Насколько я могу судить, menu-panel и slide-in не происходят из нашей темы. Но похоже, что slide-in важен для корректной работы. Почему класс slide-in не добавляется при открытии меню? Почему изменение размера окна браузера заставляет его внезапно добавиться?

Вот как я вижу этот компонент на мобильном устройстве без установленных тем:

Мне не пришлось изменять размер, чтобы получить это, и при изменении размера класс slide-in вообще не появляется…

Похоже, что у вас установлена версия Discourse 3.2, а не текущая версия 3.3. Для этого компонента есть обновления, зависящие от версии 3.3, поэтому вы их сейчас не получаете.

Возможно, обновление Discourse и компонента решит все ваши проблемы, но если нет, то может быть конфликт с другими настройками.

Вы правы, мы используем Discourse 3.2.3. Мне казалось, что из этого поста следует, что проблема существует и в версии 3.3, но у вас всё выглядит хорошо. Я проверю, возможно ли нам обновиться до версии 3.3 или, возможно, установить более старую версию компонента brand-header.

Опубликовано ли где-либо, что компонент требует версию 3.3? Я нигде этого не вижу.

Не знаете ли вы, когда были внесены обновления, зависящие от версии 3.3? Или какая последняя версия работает с 3.2?

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

Когда это делается, подробности указываются в файле .discourse-compatibility:

В данном случае вы будете зафиксированы на коммите с хешем: 12e6f76e0508b262517efd5db2d7feca261dff86, что соответствует адресу: DEV: move widgets to dedicated files, cleanup (#28) · discourse/discourse-brand-header@12e6f76 · GitHub

После этого изменения код компонента был полностью переписан из-за изменений в работе заголовка в Discourse.

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

Я сделал форк компонента, откатил его до коммита 12e6f76 и установил эту версию на наш форум, но проблема всё ещё сохраняется. Разве это не должно было её исправить?

Нет, это тот коммит, к которому вы уже привязаны, вы упускаете всё, что идёт после него.

Должно быть, я что-то неправильно понимаю. Раньше у нас не было такой проблемы. В какой-то момент проблема возникла из-за того, что компонент внес изменения, требующие версии Discourse 3.3, и мы обновили компонент, но при этом всё ещё используем Discourse 3.2. Верно? Если да, то разве самое простое решение — откатиться к последней версии компонента, которая работает с Discourse 3.2?

Компонент не должен был получить эти изменения для версии 3.3. Когда компонент зафиксирован на конкретной версии Discourse, он фактически остаётся в текущем состоянии до тех пор, пока не будет обновлён сам Discourse.

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

Теперь я понимаю… хитро. Можно ли с уверенностью предположить, что разработчик не приложит никаких усилий, чтобы компонент корректно работал с версией 3.2?

Я создал копию форума и обновился до версии 3.3, и да, это действительно решает проблему. Я уточняю у нашего администратора, возможно ли обновить работающий форум до версии 3.3.

Спасибо!

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

Наконец-то нам удалось обновить живой форум до версии 3.3, и всё внезапно заработало. Спасибо ещё раз!