feat: чат включён в заявках на подбор, на приём и в отдел 1С
Tests / frontend-test (pull_request) Successful in 2m7s
Tests / frontend-test (pull_request) Successful in 2m7s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -53,7 +53,7 @@ const ApproveFeature: React.FC<IApproveFeatureProps> = ({ context, formKey, item
|
|||||||
{/* Доступно всем, кто может открыть заявку: автору, всем согласующим
|
{/* Доступно всем, кто может открыть заявку: автору, всем согласующим
|
||||||
(и уже решившим, и ещё ждущим своей очереди) и исполнителям —
|
(и уже решившим, и ещё ждущим своей очереди) и исполнителям —
|
||||||
в отличие от панели решения, которая видна только текущему шагу.
|
в отличие от панели решения, которая видна только текущему шагу.
|
||||||
Пока включено только для «Обходного листа» — см. isChatEnabledFor. */}
|
Включено не для всех типов заявок — см. isChatEnabledFor. */}
|
||||||
{isChatEnabledFor(formKey) && (
|
{isChatEnabledFor(formKey) && (
|
||||||
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
|
<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) && (
|
{isChatEnabledFor(formKey) && (
|
||||||
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
|
<RequestChat context={context} formKey={formKey} itemId={itemId} listId={listId} />
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
import { isChatEnabledFor } from './chatEnabled';
|
import { isChatEnabledFor } from './chatEnabled';
|
||||||
|
|
||||||
describe('isChatEnabledFor', () => {
|
describe('isChatEnabledFor', () => {
|
||||||
it('включён для «Обходного листа»', () => {
|
it('включён для Обходного листа, подбора, приёма и заявки в 1С', () => {
|
||||||
expect(isChatEnabledFor('clearance-form')).toBe(true);
|
expect(isChatEnabledFor('clearance-form')).toBe(true);
|
||||||
|
expect(isChatEnabledFor('recruiting-selection')).toBe(true);
|
||||||
|
expect(isChatEnabledFor('recruiting-hire')).toBe(true);
|
||||||
|
expect(isChatEnabledFor('it-1c-ticket')).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('выключен для остальных типов заявок', () => {
|
it('выключен для остальных типов заявок', () => {
|
||||||
expect(isChatEnabledFor('hr-vacation')).toBe(false);
|
expect(isChatEnabledFor('hr-vacation')).toBe(false);
|
||||||
expect(isChatEnabledFor('it-1c-ticket')).toBe(false);
|
expect(isChatEnabledFor('recruiting-referral')).toBe(false);
|
||||||
expect(isChatEnabledFor('recruiting-hire')).toBe(false);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('незнакомый ключ — тоже выключен, а не бросает', () => {
|
it('незнакомый ключ — тоже выключен, а не бросает', () => {
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import { RequestTypeId } from '../../models/types';
|
|||||||
/**
|
/**
|
||||||
* Типы заявок, для которых показывается чат (shared/chat).
|
* Типы заявок, для которых показывается чат (shared/chat).
|
||||||
*
|
*
|
||||||
* Пилот: только «Обходной лист» (forms/Clearance, FORM_ID = 'clearance-form').
|
* Включаем по одному типу, а не сразу на все: «Обходной лист» — первый пилот,
|
||||||
* Остальным формам чат пока не нужен — решение сузить область до одного типа,
|
* с 2026-10-14 добавлены «Заявка на подбор», «Заявка на приём» и «Заявка в
|
||||||
* а не включать сразу на все девять.
|
* отдел 1С».
|
||||||
*
|
*
|
||||||
* Ключ — строковый литерал, а не импорт FORM_ID из forms/Clearance/model:
|
* Ключ — строковый литерал, а не импорт FORM_ID из forms/Clearance/model:
|
||||||
* shared/* не должен зависеть от forms/* (зависимость идёт в обратную сторону
|
* shared/* не должен зависеть от forms/* (зависимость идёт в обратную сторону
|
||||||
@@ -13,7 +13,12 @@ import { RequestTypeId } from '../../models/types';
|
|||||||
* так что литерал здесь не менее надёжен, чем в LIST_TITLE_BASE
|
* так что литерал здесь не менее надёжен, чем в LIST_TITLE_BASE
|
||||||
* (shared/listTitles.ts), где тем же приёмом перечислены все типы заявок.
|
* (shared/listTitles.ts), где тем же приёмом перечислены все типы заявок.
|
||||||
*/
|
*/
|
||||||
const CHAT_ENABLED_FORM_IDS: ReadonlySet<RequestTypeId> = new Set<RequestTypeId>(['clearance-form']);
|
const CHAT_ENABLED_FORM_IDS: ReadonlySet<RequestTypeId> = new Set<RequestTypeId>([
|
||||||
|
'clearance-form',
|
||||||
|
'recruiting-selection',
|
||||||
|
'recruiting-hire',
|
||||||
|
'it-1c-ticket'
|
||||||
|
]);
|
||||||
|
|
||||||
/** Показывать ли чат по заявке для этого типа. Проверяется ДО монтирования
|
/** Показывать ли чат по заявке для этого типа. Проверяется ДО монтирования
|
||||||
* RequestChat — иначе хук useRequestChat опрашивал бы SharePoint (загрузка +
|
* RequestChat — иначе хук useRequestChat опрашивал бы SharePoint (загрузка +
|
||||||
|
|||||||
Reference in New Issue
Block a user