чат по заявке через комментарии к строке списка (#14)
Tests / frontend-test (push) Successful in 1m15s

Обсуждение заявки поверх штатных комментариев SharePoint (PnPjs
item.comments) — без новых колонок и провижининга, права на переписку
раздаёт сам SharePoint по правам на элемент.

Встроено в ApproveFeature и EditFeature (единственные входы в просмотр
заявки для всех типов), поэтому доступно автору, всем согласующим
(включая уже решивших и ещё не дошедших до своего шага) и исполнителям,
а не только текущему шагу маршрута, как DecisionPanel.

Автора комментария всегда ставит реальная учётка — отладочная подмена
личности на запись в SharePoint не влияет, в UI есть предупреждение.

---------

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/14
This commit was merged in pull request #14.
This commit is contained in:
2026-08-24 11:37:34 +00:00
parent a146877327
commit 0ecb1ded78
19 changed files with 1357 additions and 5 deletions
@@ -3,6 +3,7 @@ import type { WebPartContext } from '@microsoft/sp-webpart-base';
import styles from './ApproveFeature.module.scss';
import { getViewComponent } from '../../forms/viewRegistry';
import { isConfirmedStaleListId } from '../../shared/approval';
import { RequestChat, isChatEnabledFor } from '../../shared/chat';
export interface IApproveFeatureProps {
context: WebPartContext;
@@ -14,8 +15,14 @@ export interface IApproveFeatureProps {
listId?: string;
}
// Фича «Согласование»: открывается по ссылке из потока (mode=approve&type=&id=).
// Показывает заявку в режиме чтения; панель решения добавим следующим шагом.
// Фича «Согласование»: открывается по ссылке из потока (mode=approve&type=&id=)
// и кликом по строке любой таблицы заявок. Показывает заявку в режиме чтения
// (панель решения — внутри самой формы просмотра, она зависит от её полей).
//
// Обсуждение (чат) добавлено ЗДЕСЬ, а не в девяти <Форма>View.tsx: оно ничего не
// знает о полях конкретной формы, а эта фича — единственный вход в просмотр
// заявки, общий для всех типов. Стоит вне .rp-print-root формы, поэтому в
// печатную версию заявки переписка не попадает.
const ApproveFeature: React.FC<IApproveFeatureProps> = ({ context, formKey, itemId, listId }) => {
const ViewComponent = getViewComponent(formKey);
@@ -31,9 +38,18 @@ const ApproveFeature: React.FC<IApproveFeatureProps> = ({ context, formKey, item
{partitionError ? (
<div className={styles.state}>{partitionError}</div>
) : ViewComponent ? (
<React.Suspense fallback={<div className={styles.state}>Загрузка…</div>}>
<ViewComponent context={context} itemId={itemId} formKey={formKey} listId={listId} />
</React.Suspense>
<>
<React.Suspense fallback={<div className={styles.state}>Загрузка…</div>}>
<ViewComponent context={context} itemId={itemId} formKey={formKey} listId={listId} />
</React.Suspense>
{/* Доступно всем, кто может открыть заявку: автору, всем согласующим
(и уже решившим, и ещё ждущим своей очереди) и исполнителям —
в отличие от панели решения, которая видна только текущему шагу.
Пока включено только для «Обходного листа» — см. isChatEnabledFor. */}
{isChatEnabledFor(formKey) && (
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
)}
</>
) : (
<div className={styles.state}>Для формы «{formKey}» режим согласования пока не настроен.</div>
)}