Сделать подразделение рекомендателя редактируемым

ReferrerDepartment остаётся автозаполняемым из профиля (SPS-Department),
но больше не read-only — как ReferrerPosition, это подстановка-фолбэк,
которую можно поправить вручную. При смене рекомендателя профиль больше
не затирает поле пустым значением, если в новом профиле отдел не указан.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-08-21 17:09:04 +05:00
parent 66481a20a5
commit 69ab08825f
3 changed files with 9 additions and 21 deletions
@@ -29,11 +29,10 @@
рекомендателя — кандидата в тенанте нет, резолвить условия по нему нечем. рекомендателя — кандидата в тенанте нет, резолвить условия по нему нечем.
- **Автоподстановка при создании:** рекомендатель = текущий пользователь, его - **Автоподстановка при создании:** рекомендатель = текущий пользователь, его
должность и подразделение — из профиля SharePoint (`SPS-JobTitle`/`SPS-Department` должность и подразделение — из профиля SharePoint (`SPS-JobTitle`/`SPS-Department`
через `approval.getProfileFields`, как в «Обходном листе»), дата подачи = через `approval.getProfileFields`), дата подачи = сегодня. При выборе другого
сегодня. При выборе другого рекомендателя должность и подразделение рекомендателя должность и подразделение подтягиваются заново — оба поля
подтягиваются заново. **Подразделение — только для чтения** (в отличие от остаются **редактируемыми** (фолбэк, если профиль не синхронизирован или
должности не редактируется вручную: не участвует в условиях маршрута, поэтому подразделение указано не так, как нужно для этой рекомендации).
риска сломать согласование нет, и расхождение с профилем не нужно).
«Подразделение / Объект» вакансии (`VacancyDepartment`) — отдельное поле, «Подразделение / Объект» вакансии (`VacancyDepartment`) — отдельное поле,
свободный текст: это подразделение, КУДА рекомендуют, а не рекомендателя. свободный текст: это подразделение, КУДА рекомендуют, а не рекомендателя.
- **Условное поле:** «Откуда знаете» = «Другое» → появляется обязательное - **Условное поле:** «Откуда знаете» = «Другое» → появляется обязательное
@@ -127,14 +127,10 @@ const ReferralForm: React.FC<IRequestFormProps> = ({
}, [editId]); }, [editId]);
// Выбор другого рекомендателя подтягивает его должность и подразделение из // Выбор другого рекомендателя подтягивает его должность и подразделение из
// профиля. Подразделение поле только для чтения (см. ReferrerSection) — в // профиля — оба поля остаются редактируемыми (фолбэк, если профиль не
// отличие от должности его нельзя поправить вручную, если профиль не // синхронизирован), поэтому не затираем то, что уже введено, пустым значением.
// синхронизирован: колонка не участвует в условиях маршрута, риска сломать
// согласование нет.
const handleReferrerChange = (login: string): void => { const handleReferrerChange = (login: string): void => {
// Подразделение — только для чтения, поэтому сбрасываем сразу (а не ждём setData((prev) => ({ ...prev, Referrer: login }));
// ответа профиля): иначе до резолва в поле виден отдел ПРЕЖНЕГО рекомендателя.
setData((prev) => ({ ...prev, Referrer: login, ReferrerDepartment: '' }));
if (!login) { if (!login) {
return; return;
} }
@@ -144,7 +140,7 @@ const ReferralForm: React.FC<IRequestFormProps> = ({
setData((prev) => ({ setData((prev) => ({
...prev, ...prev,
ReferrerPosition: profile.jobTitle || prev.ReferrerPosition, ReferrerPosition: profile.jobTitle || prev.ReferrerPosition,
ReferrerDepartment: profile.department ReferrerDepartment: profile.department || prev.ReferrerDepartment
})) }))
) )
.catch(() => undefined); .catch(() => undefined);
@@ -2,12 +2,6 @@ import * as React from 'react';
import { CollapseSection, FormField, TextInput, PhoneInput, PeopleField } from '../../../shared/ui'; import { CollapseSection, FormField, TextInput, PhoneInput, PeopleField } from '../../../shared/ui';
import { ISectionProps, REFERRER_PLACEHOLDER } from '../model'; import { ISectionProps, REFERRER_PLACEHOLDER } from '../model';
// Подразделение подтягивается автоматически при выборе рекомендателя (см.
// ReferralForm.handleReferrerChange — SharePoint User Profile, SPS-Department) —
// свободный ввод здесь намеренно убран, чтобы не расходиться с профилем (как в
// «Обходном листе»).
const NOOP = (): void => undefined;
/** Секция 1: кто рекомендует — дата подачи, сам рекомендатель и его контакты. */ /** Секция 1: кто рекомендует — дата подачи, сам рекомендатель и его контакты. */
export const ReferrerSection: React.FC<ISectionProps> = ({ data, set, context, onReferrerChange }) => ( export const ReferrerSection: React.FC<ISectionProps> = ({ data, set, context, onReferrerChange }) => (
<CollapseSection title="Рекомендатель" icon="people"> <CollapseSection title="Рекомендатель" icon="people">
@@ -33,8 +27,7 @@ export const ReferrerSection: React.FC<ISectionProps> = ({ data, set, context, o
<TextInput <TextInput
id="ReferrerDepartment" id="ReferrerDepartment"
value={data.ReferrerDepartment} value={data.ReferrerDepartment}
onChange={NOOP} onChange={(v) => set('ReferrerDepartment', v)}
readOnly
placeholder="Подставится автоматически по выбранному сотруднику" placeholder="Подставится автоматически по выбранному сотруднику"
/> />
</FormField> </FormField>