This commit is contained in:
@@ -15,10 +15,15 @@ export interface ISubmitFeatureProps {
|
||||
/** Активная категория. Вкладки теперь рендерятся на уровне портала (RequestPortal),
|
||||
* чтобы оставаться на экране и в режиме согласования — эта фича их только слушает. */
|
||||
activeCategoryId: string;
|
||||
/** Открыть сразу форму с предзаполнением (производная заявка), минуя плитки. */
|
||||
initialForm?: { formKey: string; sourceId: number };
|
||||
/** Открыть сразу форму, минуя плитки — с предзаполнением (производная заявка,
|
||||
* sourceId задан) или без него (пустая новая форма конкретного типа).
|
||||
* positionId/nomenclatureId — параметры внешней ссылки (только форма ТМЦ). */
|
||||
initialForm?: { formKey: string; sourceId?: number; positionId?: string; nomenclatureId?: string; storeName?: string };
|
||||
/** Открыть сразу форму на РЕДАКТИРОВАНИЕ существующей заявки (черновик/возвращена). */
|
||||
editForm?: { formKey: string; itemId: number };
|
||||
/** Пользователь выбрал плитку — сообщаем наверх, чтобы адрес страницы стал
|
||||
* ссылкой на эту пустую форму (см. newRequestLinkUrl в shared/routing). */
|
||||
onFormSelected?: (formKey: string) => void;
|
||||
}
|
||||
|
||||
// Фича «Подать заявку»: плитки → беспоук-форма (категории/вкладки — в RequestPortal).
|
||||
@@ -28,6 +33,7 @@ const SubmitFeature: React.FC<ISubmitFeatureProps> = ({
|
||||
activeCategoryId,
|
||||
initialForm,
|
||||
editForm,
|
||||
onFormSelected,
|
||||
}) => {
|
||||
// «Создать на основе» и «редактировать» оба сразу открывают нужную форму, минуя плитки.
|
||||
const preOpen = initialForm ?? editForm;
|
||||
@@ -84,6 +90,9 @@ const SubmitFeature: React.FC<ISubmitFeatureProps> = ({
|
||||
const sourceId =
|
||||
initialForm && request.id === initialForm.formKey ? initialForm.sourceId : undefined;
|
||||
const editId = editForm && request.id === editForm.formKey ? editForm.itemId : undefined;
|
||||
// Параметры внешней ссылки — только когда открыта именно та форма, для
|
||||
// которой они пришли (formKey совпал).
|
||||
const external = initialForm && request.id === initialForm.formKey ? initialForm : undefined;
|
||||
|
||||
// Ленивый рендер формы: её код подтягивается только сейчас, при открытии.
|
||||
return (
|
||||
@@ -95,17 +104,30 @@ const SubmitFeature: React.FC<ISubmitFeatureProps> = ({
|
||||
onSaved={emitRequestsChanged}
|
||||
sourceId={sourceId}
|
||||
editId={editId}
|
||||
positionId={external?.positionId}
|
||||
nomenclatureId={external?.nomenclatureId}
|
||||
storeName={external?.storeName}
|
||||
/>
|
||||
</React.Suspense>
|
||||
);
|
||||
};
|
||||
|
||||
// Выбор плитки — переключаем и локальный стейт (форма рисуется сразу же), и
|
||||
// сообщаем наверх formKey, чтобы адрес страницы стал ссылкой на эту форму
|
||||
// (см. onFormSelected). RequestPortal в ответ вызовет navigate(), отчего
|
||||
// SubmitFeature пересоздастся (другой key) — initialForm подхватит тот же
|
||||
// formKey, так что видимый результат не изменится, просто через новый инстанс.
|
||||
const handleSelect = (request: IRequestType): void => {
|
||||
setSelectedRequest(request);
|
||||
onFormSelected?.(request.id);
|
||||
};
|
||||
|
||||
return (
|
||||
<div className={styles.content}>
|
||||
{selectedRequest ? (
|
||||
renderSelected(selectedRequest)
|
||||
) : (
|
||||
<RequestGrid requests={requests} onSelect={setSelectedRequest} />
|
||||
<RequestGrid requests={requests} onSelect={handleSelect} />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user