Меню реакций отображается за пределами окна отмены действия поста (мобильная версия)

На https://community.openstreetmap.org/
Я поставил «лайк». Спустя 13 минут я вернулся и хотел изменить его на «сердечко». Как видите, я дошёл до этого этапа, но не могу сменить «лайк» на «сердечко». Допустим, существует правило 10 минут, согласно которому нельзя ничего менять после истечения этого срока. В таком случае мой аргумент заключается в том, что нам не следует показывать список иконок, на которые можно изменить реакцию, если мы не можем воспользоваться ни одной из них.

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

Ещё лучше было бы, если бы при повторном нажатии на «большой палец» появлялось сообщение, объясняющее, что изменить выбор нельзя, так как прошло 10 минут.

Почему я публикую это здесь, на «мета», а не на том локальном сайте? Потому что я говорю о проблеме, которая затрагивает все сайты, предлагающие такой выбор.

1 лайк

Да, я могу воспроизвести это на мобильном устройстве (Android/Chrome). Мне кажется, раньше такого не было, так что, возможно, это какой-то регресс.

На рабочем столе вы видите значок :no_entry_sign: и всплывающую подсказку «Вы больше не можете убрать свою реакцию».

Пошагово (на мобильном):

  • Включите реакции
  • Установите post undo action window mins в 1 (необязательно)
  • Поставьте реакцию на пост и подождите N минут
  • Долгое нажатие на значок реакции
  • Меню реакций отображается, хотя возможность поставить или убрать реакцию отсутствует
  • Меню не реагирует, и ошибка не показывается
3 лайка

Я не смог найти в истории изменений того, что могло бы стать регрессией.

В toggleFromButton есть проверка на клик:

https://github.com/discourse/discourse-reactions/blob/main/assets/javascripts/discourse/widgets/discourse-reactions-actions.js#L430-L435

Но нет проверки на касание:
https://github.com/discourse/discourse-reactions/blob/main/assets/javascripts/discourse/widgets/discourse-reactions-actions.js#L170-L183

Думаю, можно сделать следующее, чтобы не открывать список реакций:

  touchStart() {
    cancel(this._touchTimeout);
    if (this.capabilities.touch) {
      if (
        this.attrs.post.current_user_reaction &&
        !this.attrs.post.current_user_reaction.can_undo
      ) {
        return false;
      }
      ...
}
2 лайка

Кстати, хорошо бы сообщить пользователю, что он не может убрать свою реакцию, но также стоит упомянуть и ограничение по времени — иначе пользователь не поймёт, идёт ли речь о дне, месяце, минуте или чём-то ещё. Единственный способ это выяснить — метод проб и ошибок!

2 лайка

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

3 лайка