diff --git a/rsconcept/frontend/src/context/RSFormContext.tsx b/rsconcept/frontend/src/context/RSFormContext.tsx index 266d7459..8fcaf01f 100644 --- a/rsconcept/frontend/src/context/RSFormContext.tsx +++ b/rsconcept/frontend/src/context/RSFormContext.tsx @@ -16,7 +16,9 @@ import { ICstSubstituteData, ICstTarget, ICstUpdateData, + IInlineSynthesisData, IRSForm, + IRSFormData, IRSFormUploadData } from '@/models/rsform'; import { @@ -26,6 +28,7 @@ import { getTRSFile, patchConstituenta, patchDeleteConstituenta, + patchInlineSynthesis, patchLibraryItem, patchMoveConstituenta, patchProduceStructure, @@ -65,6 +68,7 @@ interface IRSFormContext { resetAliases: (callback: () => void) => void; produceStructure: (data: ICstTarget, callback?: DataCallback) => void; + inlineSynthesis: (data: IInlineSynthesisData, callback?: DataCallback) => void; cstCreate: (data: ICstCreateData, callback?: DataCallback) => void; cstRename: (data: ICstRenameData, callback?: DataCallback) => void; @@ -464,6 +468,24 @@ export const RSFormState = ({ schemaID, versionID, children }: RSFormStateProps) [setError, schema, setSchema] ); + const inlineSynthesis = useCallback( + (data: IInlineSynthesisData, callback?: DataCallback) => { + setError(undefined); + patchInlineSynthesis({ + data: data, + showError: true, + setLoading: setProcessing, + onError: setError, + onSuccess: newData => { + setSchema(newData); + library.localUpdateTimestamp(Number(schemaID)); + if (callback) callback(newData); + } + }); + }, + [setError, library, schemaID, setSchema] + ); + return ( { receiver: IRSForm; - onInlineSynthesis: (data: IRSFormInlineData) => void; + onInlineSynthesis: (data: IInlineSynthesisData) => void; } export enum TabID { @@ -40,7 +40,7 @@ function DlgInlineSynthesis({ hideWindow, receiver, onInlineSynthesis }: DlgInli if (!source.schema) { return; } - const data: IRSFormInlineData = { + const data: IInlineSynthesisData = { source: source.schema?.id, receiver: receiver.id, items: selected, diff --git a/rsconcept/frontend/src/models/rsform.ts b/rsconcept/frontend/src/models/rsform.ts index d01b18bb..6f0fe1ce 100644 --- a/rsconcept/frontend/src/models/rsform.ts +++ b/rsconcept/frontend/src/models/rsform.ts @@ -247,7 +247,7 @@ export interface IVersionCreatedResponse { /** * Represents input data for inline synthesis. */ -export interface IRSFormInlineData { +export interface IInlineSynthesisData { receiver: LibraryItemID; source: LibraryItemID; items: ConstituentaID[]; diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx index 48218658..bd6b1180 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/RSEditContext.tsx @@ -38,6 +38,7 @@ import { ICstSubstituteData, ICstTarget, ICstUpdateData, + IInlineSynthesisData, IRSForm, TermForm } from '@/models/rsform'; @@ -263,6 +264,19 @@ export const RSEditState = ({ [model] ); + const handleInlineSynthesis = useCallback( + (data: IInlineSynthesisData) => { + if (!model.schema) { + return; + } + const oldCount = model.schema.items.length; + model.inlineSynthesis(data, newSchema => + toast.success(`Конституенты добавлены: ${newSchema['items'].length - oldCount}`) + ); + }, + [model] + ); + const moveUp = useCallback(() => { if (!model.schema?.items || selected.length === 0) { return; @@ -557,7 +571,7 @@ export const RSEditState = ({ setShowInlineSynthesis(false)} - onInlineSynthesis={() => toast('Testing')} + onInlineSynthesis={handleInlineSynthesis} /> ) : null} diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx index b7964090..3f860d33 100644 --- a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx +++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx @@ -215,7 +215,7 @@ function RSTabsMenu({ onDestroy }: RSTabsMenuProps) { onClick={handleTemplates} /> } diff --git a/rsconcept/frontend/src/utils/backendAPI.ts b/rsconcept/frontend/src/utils/backendAPI.ts index e7bce728..9fc45f74 100644 --- a/rsconcept/frontend/src/utils/backendAPI.ts +++ b/rsconcept/frontend/src/utils/backendAPI.ts @@ -32,6 +32,7 @@ import { ICstSubstituteData, ICstTarget, ICstUpdateData, + IInlineSynthesisData, IProduceStructureResponse, IRSFormCreateData, IRSFormData, @@ -379,6 +380,13 @@ export function patchUploadTRS(target: string, request: FrontExchange) { + AxiosPatch({ + title: 'Processing inline synthesis', + endpoint: `/api/operations/inline-synthesis`, + request: request + }); +} export function postResolveText(schema: string, request: FrontExchange) { AxiosPost({