Чат заявки: отметки «@» и оповещения через поток (#26)
Tests / frontend-test (push) Successful in 2m1s
Tests / frontend-test (push) Successful in 2m1s
## Что сделано **Чат заявки: отметки и оповещения** - В поле ввода «@» открывает подсказку с участниками заявки: инициатор, согласующие и исполнители из маршрута, а также те, кому открыты «Все заявки» этого типа (список из request-type-access). - Отметка — обычный текст «@ФИО», без штатного упоминания SharePoint, чтобы не уходило его письмо. - После отправки сообщения портал вызывает поток Power Automate (`FLOW_CHAT_NOTIFY_URL`): отмеченным — «Вас упомянули», инициатору — «Новое сообщение по вашей заявке». Сбой потока не мешает отправке. - В письмо добавляется строка «Прикреплены файлы: …», чтобы сообщение из одного файла не приходило пустым. - Свойство веб-части «Чат: уведомлять о своих сообщениях (для теста)», по умолчанию выключено: письма и о своих сообщениях, можно отметить себя. - Когда пишет сам инициатор с отметками, в `initiatorEmail` уходит первый отмеченный — поток шлёт инициатору всегда, если его нет среди отмеченных, и иначе он получил бы письмо о своём же сообщении. **Чат включён для:** Обходной лист, заявка на подбор, заявка на приём, заявка в отдел 1С. **Исправление:** редактор маршрута может удалять исполнителей в Обходном листе, Командировке и заявке в 1С (не передавалось `canRemoveRow`). **Прочее:** убраны 4 предупреждения линтера (`no-new-null`, `no-script-url`). ## Не проверено на тенанте - Ответ потока 200 через AadHttpClient и доставка писем. - Права согласующих на комментарии и на запись в библиотеку «Файлы чата». - Папки в «Файлы чата» наследуют права библиотеки, а не закрыты на заявку — для подбора и приёма это важно решить до выкладки. - Если поток вставляет `messageText` в HTML-письмо, перенос строки перед «Прикреплены файлы» может не отобразиться. --------- Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/26
This commit was merged in pull request #26.
This commit is contained in:
@@ -53,7 +53,7 @@ const ApproveFeature: React.FC<IApproveFeatureProps> = ({ context, formKey, item
|
||||
{/* Доступно всем, кто может открыть заявку: автору, всем согласующим
|
||||
(и уже решившим, и ещё ждущим своей очереди) и исполнителям —
|
||||
в отличие от панели решения, которая видна только текущему шагу.
|
||||
Пока включено только для «Обходного листа» — см. isChatEnabledFor. */}
|
||||
Включено не для всех типов заявок — см. isChatEnabledFor. */}
|
||||
{isChatEnabledFor(formKey) && (
|
||||
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
|
||||
)}
|
||||
|
||||
@@ -73,7 +73,7 @@ const EditFeature: React.FC<IEditFeatureProps> = ({ context, formKey, itemId, li
|
||||
{/* Обсуждение — то же самое, что видят согласующие (комментарии к строке
|
||||
заявки). Здесь оно особенно нужно: заявку правят как раз после
|
||||
возврата на доработку, и уточнить причину логично не уходя с формы.
|
||||
Пока включено только для «Обходного листа» — см. isChatEnabledFor. */}
|
||||
Включено не для всех типов заявок — см. isChatEnabledFor. */}
|
||||
{isChatEnabledFor(formKey) && (
|
||||
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
|
||||
)}
|
||||
|
||||
@@ -33,6 +33,7 @@ function asDay(value: unknown): string {
|
||||
}
|
||||
|
||||
/** Разобрать сохранённое значение; всё, что не прошло проверку, — как «не задано». */
|
||||
// eslint-disable-next-line @rushstack/no-new-null -- так отдаёт localStorage.getItem, если ключа нет
|
||||
export function parseStoredRefinement(raw: string | null): IStoredRefinement | undefined {
|
||||
if (!raw) return undefined;
|
||||
let parsed: { filters?: Record<string, unknown>; sort?: Record<string, unknown> };
|
||||
|
||||
Reference in New Issue
Block a user