vas3k.club icon indicating copy to clipboard operation
vas3k.club copied to clipboard

Баг: При отправке нового комментария сбрасывается счетчик непрочитанных

Open nlopin opened this issue 4 years ago • 7 comments

Ситуация

Приходишь в тему почитать комментарии, но когда отвечаешь на один из них, страница перезагружается и все непрочитанные комменты становятся прочитанными.

Решение

Отправлять комментарии асинхронно на сервер.

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

Шаги

  • [x] Новый шаблон для отображения комментариев в поиске и профиле. При клике переходить в пост
  • [ ] Перенести рендер комментариев на клиент
  • [ ] Асинхронная отправка комментариев

nlopin avatar Aug 02 '20 13:08 nlopin

Вот я бы тоже с удовольствием послушал best practices для такого. Фича нужная так-то.

Отправлять с сервера отрендеренный HTML кажется странным, но дублировать шаблоны комментариев — ещё большее зло. Мы моментально запутаемся где вносить правки и всё проебём.

Мой вариант: придерживаться json api и попробовать как-то аккуратно перенести рендеринг комментариев с сервера на клиент. Только тех, что под постом. Но не подгружать их асинхронно, а только рендерить, как сейчас сделано с голосованием, например. Так мы избежим раздражающих лоадеров и SPA.

Вещи, которые надо не забыть при этом:

  • Комментарии рендерятся не только в постах, но и в профиле юзера или в поиске, например. Самый лучший вариант там — сделать для них отдельный шаблон и оставить его на сервере. На них давно жалуются, что они выглядят как комментарии, но не работают как они (кнопка ответить например ничего не делает). Вот и пофиксим :)
  • Сам виджет vote теперь тоже нужно будет как-то засунуть внутрь клиентского рендеринга (лучше с минимальными изменениями), а в остальных местах использовать заглушку, как ты сделал в поиске. Так норм.
  • У комментариев есть несколько типов (комент, реплай, пиннед, батл) и в будущем они могут расширяться. Хз как принято делать такое на Vue-виджетах, наверное нужна какая-то иерархия или базовый класс.
  • JSON-эндпоинты решили делать через добавление .json к уже имеющимся. Посмотри как сделано получение профиля юзера, там есть сразу и вьюха и вся нужная авторизация.

vas3k avatar Aug 03 '20 07:08 vas3k

Мне нравится подход, аналогичный upvote. Не вижу большой проблемы отрендерить и комментарий, и кнопку.

Я посмотрю, как можно решить историю с шаблонами, у меня нет опыта во vue, может есть какое-то умное решение. В идеале сервер больше ничего о них не должен знать.

Одним PR тут не обойдешься, давай делать кусками:

  • перенос рендеринга комментариев на клиент
  • новый шаблон для рендера комментариев в профиле пользователя и поиске
  • добавление нового комментария

nlopin avatar Aug 03 '20 10:08 nlopin

В идеале сервер больше ничего о них не должен знать.

Да, именно. На сервере теперь можно будет завести один общий шаблон комментария, который мы будем использовать в поиске или профиле юзера. Потом подтюним ему стили и добавим в его блок название поста, а то многие спрашивают как из поиска по комментам перейти в пост. Одного шаблона для этого хватит.

Одним PR тут не обойдешься, давай делать кусками

Я бы поменял местами 1 и 2. Ведь если ты сразу перенесешь рендеринг на клиент, это автоматом сломает поиск и профиль :)

vas3k avatar Aug 03 '20 10:08 vas3k

Добавил туду в первый пост

nlopin avatar Aug 03 '20 11:08 nlopin

Есть два варианта показать комменты — использовать стандартный блок комментария, либо уменьшенный (ака reply). Я не уверен, что комменты это самое важное в поиске, поэтому показывать их минифицированно мне кажется хорошей идеей.

Ниже сравнение норм vs сжато:

Норм Мини
image CleanShot 2020-08-03 at 22 19 58@2x
CleanShot 2020-08-03 at 22 20 30@2x CleanShot 2020-08-03 at 22 19 51@2x

nlopin avatar Aug 03 '20 20:08 nlopin

Давай показывать полноценные. Пока не уверен как лучше, но если чо потом поправим

vas3k avatar Aug 03 '20 20:08 vas3k

Заметочка на будущее — надо делать тизеры. В поиске комменты занимают кучу места, а посты торчат в виде заголовков :(

nlopin avatar Aug 03 '20 20:08 nlopin