({
+ resolver: zodResolver(schemaUpdateBlock),
+ defaultValues: {
+ target: target.id,
+ item_data: {
+ title: target.title,
+ description: target.description,
+ parent: target.parent
+ },
+ layout: layout
+ },
+ mode: 'onChange'
+ });
+
+ function onSubmit(data: IUpdateBlockDTO) {
+ return updateBlock({ itemID: oss.id, data });
+ }
+
+ return (
+ void handleSubmit(onSubmit)(event)}
+ className='w-160 px-6 h-fit cc-column'
+ >
+
+ (
+ block.id !== target.id)}
+ value={field.value ? oss.blockByID.get(field.value) ?? null : null}
+ placeholder='Блок содержания не выбран'
+ onChange={value => field.onChange(value ? value.id : null)}
+ />
+ )}
+ />
+
+
+
+ );
+}
diff --git a/rsconcept/frontend/src/features/oss/dialogs/dlg-edit-operation/tab-operation.tsx b/rsconcept/frontend/src/features/oss/dialogs/dlg-edit-operation/tab-operation.tsx
index 7503cac2..356262b9 100644
--- a/rsconcept/frontend/src/features/oss/dialogs/dlg-edit-operation/tab-operation.tsx
+++ b/rsconcept/frontend/src/features/oss/dialogs/dlg-edit-operation/tab-operation.tsx
@@ -4,7 +4,7 @@ import { TextArea, TextInput } from '@/components/input';
import { useDialogsStore } from '@/stores/dialogs';
import { type IUpdateOperationDTO } from '../../backend/types';
-import { SelectBlock } from '../../components/select-block';
+import { SelectParent } from '../../components/select-parent';
import { type DlgEditOperationProps } from './dlg-edit-operation';
@@ -24,37 +24,35 @@ export function TabOperation() {
{...register('item_data.title')}
error={errors.item_data?.title}
/>
-
-
-
+ (
+ field.onChange(value ? value.id : null)}
/>
- (
- field.onChange(value ? value.id : null)}
- />
- )}
- />
-
-
-
+ )}
+ />
+
+
);
}
diff --git a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/graph/block-node.tsx b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/graph/block-node.tsx
index b1a2b6c3..5ed22755 100644
--- a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/graph/block-node.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/graph/block-node.tsx
@@ -44,10 +44,10 @@ export function BlockNode(node: BlockInternalNode) {
>
diff --git a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/oss-flow.tsx b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/oss-flow.tsx
index e0501e40..84c043c0 100644
--- a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/oss-flow.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/oss-flow.tsx
@@ -18,6 +18,7 @@ import { type IOperationSchema } from '@/features/oss/models/oss';
import { useMainHeight } from '@/stores/app-layout';
import { useDialogsStore } from '@/stores/dialogs';
import { PARAMETER } from '@/utils/constants';
+import { promptText } from '@/utils/labels';
import { useMutatingOss } from '../../../backend/use-mutating-oss';
import { useUpdateLayout } from '../../../backend/use-update-layout';
@@ -190,6 +191,9 @@ export function OssFlow() {
if (!block) {
return;
}
+ if (!window.confirm(promptText.deleteBlock)) {
+ return;
+ }
void deleteBlock({ itemID: schema.id, data: { target: block.id, layout: getLayout() } });
}
}
diff --git a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/toolbar-oss-graph.tsx b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/toolbar-oss-graph.tsx
index 3276ff1b..4171d45a 100644
--- a/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/toolbar-oss-graph.tsx
+++ b/rsconcept/frontend/src/features/oss/pages/oss-page/editor-oss-graph/toolbar-oss-graph.tsx
@@ -69,10 +69,11 @@ export function ToolbarOssGraph({
const toggleEdgeAnimate = useOSSGraphStore(state => state.toggleEdgeAnimate);
const toggleEdgeStraight = useOSSGraphStore(state => state.toggleEdgeStraight);
- const { updateLayout: updatePositions } = useUpdateLayout();
- const { executeOperation: operationExecute } = useExecuteOperation();
+ const { updateLayout } = useUpdateLayout();
+ const { executeOperation } = useExecuteOperation();
const showEditOperation = useDialogsStore(state => state.showEditOperation);
+ const showEditBlock = useDialogsStore(state => state.showEditBlock);
const readyForSynthesis = (() => {
if (!selectedOperation || selectedOperation.operation_type !== OperationType.SYNTHESIS) {
@@ -100,28 +101,33 @@ export function ToolbarOssGraph({
}
function handleSavePositions() {
- void updatePositions({ itemID: schema.id, data: getLayout() });
+ void updateLayout({ itemID: schema.id, data: getLayout() });
}
function handleOperationExecute() {
if (!readyForSynthesis || !selectedOperation) {
return;
}
- void operationExecute({
+ void executeOperation({
itemID: schema.id, //
data: { target: selectedOperation.id, layout: getLayout() }
});
}
function handleEditItem() {
- if (!selectedOperation) {
- return;
+ if (selectedOperation) {
+ showEditOperation({
+ oss: schema,
+ target: selectedOperation,
+ layout: getLayout()
+ });
+ } else if (selectedBlock) {
+ showEditBlock({
+ oss: schema,
+ target: selectedBlock,
+ layout: getLayout()
+ });
}
- showEditOperation({
- oss: schema,
- target: selectedOperation,
- layout: getLayout()
- });
}
return (
diff --git a/rsconcept/frontend/src/stores/dialogs.ts b/rsconcept/frontend/src/stores/dialogs.ts
index d71785ed..801330a1 100644
--- a/rsconcept/frontend/src/stores/dialogs.ts
+++ b/rsconcept/frontend/src/stores/dialogs.ts
@@ -9,6 +9,7 @@ import { type DlgChangeInputSchemaProps } from '@/features/oss/dialogs/dlg-chang
import { type DlgCreateBlockProps } from '@/features/oss/dialogs/dlg-create-block/dlg-create-block';
import { type DlgCreateOperationProps } from '@/features/oss/dialogs/dlg-create-operation/dlg-create-operation';
import { type DlgDeleteOperationProps } from '@/features/oss/dialogs/dlg-delete-operation';
+import { type DlgEditBlockProps } from '@/features/oss/dialogs/dlg-edit-block';
import { type DlgEditOperationProps } from '@/features/oss/dialogs/dlg-edit-operation/dlg-edit-operation';
import { type DlgRelocateConstituentsProps } from '@/features/oss/dialogs/dlg-relocate-constituents';
import { type DlgCreateCstProps } from '@/features/rsform/dialogs/dlg-create-cst/dlg-create-cst';
@@ -36,6 +37,7 @@ export const DialogType = {
RENAME_CONSTITUENTA: 6,
CREATE_BLOCK: 7,
+ EDIT_BLOCK: 25,
CREATE_OPERATION: 8,
EDIT_OPERATION: 9,
@@ -76,6 +78,7 @@ interface DialogsStore {
showDeleteCst: (props: DlgDeleteCstProps) => void;
showEditEditors: (props: DlgEditEditorsProps) => void;
showEditOperation: (props: DlgEditOperationProps) => void;
+ showEditBlock: (props: DlgEditBlockProps) => void;
showEditReference: (props: DlgEditReferenceProps) => void;
showEditVersions: (props: DlgEditVersionsProps) => void;
showEditWordForms: (props: DlgEditWordFormsProps) => void;
@@ -112,6 +115,7 @@ export const useDialogsStore = create()(set => ({
showDeleteCst: props => set({ active: DialogType.DELETE_CONSTITUENTA, props: props }),
showEditEditors: props => set({ active: DialogType.EDIT_EDITORS, props: props }),
showEditOperation: props => set({ active: DialogType.EDIT_OPERATION, props: props }),
+ showEditBlock: props => set({ active: DialogType.EDIT_BLOCK, props: props }),
showEditReference: props => set({ active: DialogType.EDIT_REFERENCE, props: props }),
showEditVersions: props => set({ active: DialogType.EDIT_VERSIONS, props: props }),
showEditWordForms: props => set({ active: DialogType.EDIT_WORD_FORMS, props: props }),
diff --git a/rsconcept/frontend/src/utils/labels.ts b/rsconcept/frontend/src/utils/labels.ts
index db10f044..1c76c912 100644
--- a/rsconcept/frontend/src/utils/labels.ts
+++ b/rsconcept/frontend/src/utils/labels.ts
@@ -79,6 +79,7 @@ export const tooltipText = {
export const promptText = {
promptUnsaved: 'Присутствуют несохраненные изменения. Продолжить без их учета?',
deleteLibraryItem: 'Вы уверены, что хотите удалить данную схему?',
+ deleteBlock: 'Вы уверены, что хотите удалить данный блок?',
deleteOSS:
'Внимание!!\nУдаление операционной схемы приведет к удалению всех операций и собственных концептуальных схем.\nДанное действие нельзя отменить.\nВы уверены, что хотите удалить данную ОСС?',
generateWordforms: 'Данное действие приведет к перезаписи словоформ при совпадении граммем. Продолжить?',