Интерфейс переписки в заявке#
- модель переписки по заявке: chat.schema.json
- модель сообщения: message.schema.json
- Макеты закладки в заявке
Вкладка Переписка#
- Переписка ведется внутри тем во вкладке
Переписка. Вкладку видят все пользователи, которые могут просмотреть заявку. - Темы: см. chat-order.schema.json
- Вкладка
Перепискане отображается в статусахDRAFTиDRAFT_CONTRACTORзаявок - Если у пользователя есть непрочитанные сообщения, отображается значок наличия новых сообщений.
- на вкладке
- на названии темы
Просмотр темы#
- При клике на название темы отображается область просмотра переписки относящейся к выбранной теме, отображается всем пользователям (см. Отображение списка сообщений)
- в заголовке:
- кнопка
К темам- отображается всем пользователям. При нажатии отображаетсясписок тем Название темы- отображается название текущей темы- Кнопка
Поиск- отображается всем пользователям. При наведении на кнопку появляется хинтПоиск по теме(см. Поиск) - Кнопка
Файлы и ссылки- отображается всем пользователям. При наведении на кнопку появляется хинтФайлы и ссылки по теме(см. Вложения)
- кнопка
- Панель отправки сообщений:
- отображаются пользователям с правом SEND_MESSAGE_ORDER
- закреплена внизу экрана
- максимальная
- поле ввода текста - если пользователь ввел текст, переключился на другую закладку, вернулся в переписку - текст остается.
- переключатель
Приватное- отображается пользователям с правом SEND_PRIVATE_MESSAGE_ORDER
- при наведении показывается хинт
Клиент не увидит - при включении переключателя панель отправки сообщений подсвечивается (макет)
Отображение списка сообщений#
- При открытии темы:
- если нет сообщений отображается
Пока нет сообщений: макет - если у пользователя нет непрочитанных сообщений: отображается последнее сообщение в переписке
- если у пользователя есть непрочитанные сообщения: см непрочитанные сообщения
- если нет сообщений отображается
- В области просмотра сообщений:
- новые сообщения появляются внизу. При появлении новых сообщений старые сдвигаются вверх.
- сообщения группируются по дате
sentAt:- каждая новая дата (если есть сообщения в эту дату) отображается как разделитель между сообщениями разных дат. При скролле сообщений надпись с датой прокручивается вместе с сообщениями. Макет.
- если непрочитанные сообщения начинаются в новую дату, то дата располагается под надписью "Непрочитанные сообщения". Макет.
- сообщения на фронт загружаются по мере прокрутки переписки пользователем, за один раз SPA_CHAT_LOAD_MESSAGES_NUMBER сообщений
- во время подгрузки сообщений отображается лоадер в верхней части: макет
- если последнее сообщение не видно на экране, отображается кнопка перехода к последнему сообщению. По нажатию список сообщений прокручивается к последнему. Все сообщения помечаются как прочитанные. Макет.
- На каждом сообщении отображается:
- время
sentAt - автор
- время
- Если в тексте сообщения есть ссылки (в одном сообщении может быть больше одной):
- отображаются как кликабельные
- открываются в новом табе браузера
Пометки о прочтении#
При:
- отображении сообщения на экране пользователя
- прокрутке всех сообщений кнопкой перехода к последнему сообщению - все сообщения помечаются прочитанными
- отправке нового сообщения, когда есть непрочитанные, и отображения его внизу списка сообщений - все сообщения помечаются прочитанными
Из message.notReadBy удаляется роль просмотревшего
- Сообщения помечаются прочитанные исполнителем (исполнителю удаляется из
message.notReadBy), только если прочитал исполнитель, ответственный за тему - Если сообщение от роли CUSTOMER посмотрел пользователь с ролью CONTRACTOR (ответственный за тему), то из
message.notReadByудаляются CONTRACTOR и AGENT,
Пр этом:
isReadпомечается в true, если сообщение прочитано "второй стороной", правило определения см. в описании статусаПрочитано
Виды отображения сообщений#
Свои сообщения- сообщения у которыхsentBy == текущий пользовательотображаются справа.Не свои сообщения- сообщения у которыхsentBy != текущий пользовательотображаются слева.Приватные сообщения- сообщения у которыхisPrivate == true, на сообщении пометкаПриватный. Отображаются только пользователям с правом VIEW_PRIVATE_MESSAGE_ORDER. Макет.Файл- сообщения в которых отправлено вложение. Отображается название и размер вложения. При клике на название файла, файл скачивается на устройство пользователя. МакетНа сообщение есть ответ- сообщение, у которогоhasReply == true. Для такого сообщения показывается отметка о том, что на него есть ответ. Макет.Сообщение является ответом- сообщения, которых указаноreplyForId. Для такого сообщения показывается первая строчка сообщения на которое отвечает. При клике на эту строчку, переписка прокручивается к исходному сообщению, при этом с бэка загружаются все сообщения между сообщением ответом и тем, на которое ответ. Макет.Сообщения о возвратах на доработку- сообщения у которыхmessageType == BACKWARD: макет.
Отображение автора сообщения#
В зависимости от того кто смотрит переписку, по разному отображается автор сообщения:
| Кто смотрит | Кто отправитель | Что показываем |
|---|---|---|
| CUSTOMER | CUSTOMER | Фамилия Имя Отчество пользователя отправителя |
| CUSTOMER | CONTRACTOR, AGENT | Название агента |
| CONTRACTOR, AGENT, OBSERVER, COMPLIANCE | CUSTOMER | Фамилия Имя Отчество пользователя отправителя |
| CONTRACTOR, AGENT, OBSERVER, COMPLIANCE | CONTRACTOR | Фамилия Имя исполнителя: |
| CONTRACTOR, AGENT, OBSERVER, COMPLIANCE | AGENT | Фамилия Имя агента |
- Название агента:
user.agent.company.fullName, если к заявке ещё не привязано договор, то отображается константаАгент Фамилия Имяпользователя отправителя:{user.LastName user.FirstName user.patronymic}Фамилия Имяисполнителя:user.employee.fioФамилия Имяагента:user.agent.representative.fio
Состояния сообщений#
Отправляется#
- макет
- текстовое сообщение или файл отправлены пользователем, но ещё не сохранены в БД.
- сообщение видит только пользователь-отправитель
- если в сообщении отправляется файл, то ссылка для скачивания не активная
Отправлено#
- макет
- сообщение и файл успешно сохранены
- сообщение видят все пользователи
- если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
- на сообщении отображается одна галка, кто видит отметку:
| Роль отправителя | Публичное/Приватное | Пользователь с какой ролью видит сообщение с отметкой Отправлено |
|---|---|---|
| CUSTOMER | Публичное | CUSTOMER |
| CONTRACTOR | Публичное | CONTRACTOR, AGENT |
| AGENT | Публичное | CONTRACTOR, AGENT |
| CUSTOMER | Приватное | не может отправлять приватные |
| CONTRACTOR | Приватное | CONTRACTOR |
| AGENT | Приватное | AGENT |
Прочитано#
- макет
- сообщение видят все пользователи
- если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
- на сообщении отображается две галки, кто и когда видит отметку (в таблице CONTRACTOR - ответственный за тему в которой находится сообщение):
| Роль отправителя | Публичное/Приватное | "Прочитано", если в сообщении есть пометка о прочтении ролью: | Пользователь с какой ролью видит отметку о прочтении |
|---|---|---|---|
| CUSTOMER | Публичное | CONTRACTOR (не агент, не наблюдатель) | CUSTOMER |
| CONTRACTOR, | Публичное | CUSTOMER | CONTRACTOR, AGENT |
| AGENT | Публичное | CUSTOMER | CONTRACTOR, AGENT |
| CUSTOMER | Приватное | отсутствует, кликнт не может написать приватное | - |
| CONTRACTOR | Приватное | AGENT | CONTRACTOR |
| AGENT | Приватное | CONTRACTOR | AGENT |
| COMPLIANCE | Приватное | CONTRACTOR | COMPLIANCE |
Ошибка отправки#
- макет
- сообщение видит только пользователь-отправитель в случае, если не удалось сохранить сообщение в БД или загрузить прикрепленное вложение
- под сообщением отображается надпись
Сообщение не отправлено - отображается кнопка повторной отправки, при нажатии на кнопку сообщение отправляется повторно
- если у пользователя открыта переписка, статус сообщения устанавливается без необходимости обновить страницу пользователем вручную
- после обновления страницы сообщение не отображается
- после перехода по закладкам внутри заявки и возврата в переписку сообщение остается
Новые (непрочитанные) сообщения#
Пометка о прочтении ролью вычисляется по атрибуту notReadBy[] (см. Сохранение пометки о прочтении).
Индикатор наличия непрочитанных сообщений на закладке Переписка (и на названии темы при открытой закладке):
- макет
- отображается, если:
- при открытии заявки у пользователя есть непрочитанные сообщения в переписке
- пользователь находится в заявке, не на закладке переписки, и у его появились новые сообщения (появляется без обновления страницы пользователем)
- скрывается, если:
- пользователь просмотрел все сообщения
- пользователь нажал кнопку перехода к последнему сообщению
При открытии переписки (темы) с непрочитанными сообщениями (открыл или обновил страницу с открытой темой в браузере):
- отображается самое раннее непрочитанное сообщение
- над сообщением отображается надпись
Непрочитанные сообщениямакет - При прокрутке списка сообщений, надпись остается над тем же сообщением где и была и не сдвигается к следующему непрочитанному
- если перешли на другую закладку (внутри заявки), вернулись в чат:
- если есть новые сообщения, надпись
Непрочитанные сообщениясветится в новом месте - нет новых - надписи нет нигде.
- если есть новые сообщения, надпись
Если надпись есть, то пока пользователь в открытой теме выполняет любые действия (прокрутка, пишет ответы, и т.п.) - надпись остается на одном и том же месте.
Правило определения наличия новых сообщения для роли:
- Для роли CONTRACTOR непрочитанные сообщения отображаются только если пользователь назначен ответственным за тему, и только в тех темах где он назначен ответственным.
- (в таблице CONTRACTOR - ответственный за тему в которой находится сообщение):
| Для роли | Приватное / публичное | Сообщение является "новым", если не прочитано ролью: |
|---|---|---|
| CUSTOMER | публичное | CUSTOMER |
| CONTRACTOR | публичное | CONTRACTOR |
| AGENT | публичное | CONTRACTOR или AGENT (= если CONTRACTOR прочитал, то для AGENT оно становится прочитанным) |
| CUSTOMER | приватное | отсутствуют, клиент не видит приватные сообщения |
| CONTRACTOR | приватное | CONTRACTOR |
| AGENT | приватное | AGENT |
Для роли OBSERVER, COMPLIANCE индикатор новых сообщений не отображаем.
Контекстное меню сообщений#
- Кнопка вызова контекстного меню сообщения (
Три точкирядом с сообщением) отображается при наведении мышкой на сообщение в области просмотра переписки - Если для пользователя нет ни одного пункта меню, которые нужно отобразить, кнопка контекстно не отображается.
Пункты контекстного меню:
Ответить#
- отображается пользователю с правом SEND_MESSAGE_ORDER
- при нажатии инициализируется процесс ответа (см. Ответ на выбранное сообщение)