diff --git a/rsconcept/frontend/src/components/Common/Modal.tsx b/rsconcept/frontend/src/components/Common/Modal.tsx index eccdec55..f144ec7c 100644 --- a/rsconcept/frontend/src/components/Common/Modal.tsx +++ b/rsconcept/frontend/src/components/Common/Modal.tsx @@ -35,17 +35,16 @@ function Modal({ if (onSubmit) onSubmit(); }; - return ( - <> + return (<>
Портал позволяет контролировать употребление терминов, привязанных к сущностям в концептуальных схемах.
Для этого используется механизм текстовых отсылок: использование термина и связывание слов.
diff --git a/rsconcept/frontend/src/dialogs/DlgConstituentaTemplate/ArgumentsTab.tsx b/rsconcept/frontend/src/dialogs/DlgConstituentaTemplate/ArgumentsTab.tsx index ee6075bd..90bc8170 100644 --- a/rsconcept/frontend/src/dialogs/DlgConstituentaTemplate/ArgumentsTab.tsx +++ b/rsconcept/frontend/src/dialogs/DlgConstituentaTemplate/ArgumentsTab.tsx @@ -3,7 +3,7 @@ import { Dispatch, useCallback, useEffect, useMemo, useState } from 'react'; import MiniButton from '../../components/Common/MiniButton'; import DataTable, { IConditionalStyle } from '../../components/DataTable'; -import { CheckIcon, CrossIcon } from '../../components/Icons'; +import { ArrowsRotateIcon, CheckIcon, CrossIcon } from '../../components/Icons'; import RSInput from '../../components/RSInput'; import ConstituentaPicker from '../../components/Shared/ConstituentaPicker'; import { useConceptTheme } from '../../context/ThemeContext'; @@ -32,6 +32,15 @@ function ArgumentsTab({ state, schema, partialUpdate }: ArgumentsTabProps) { const [argumentValue, setArgumentValue] = useState(''); + const selectedClearable = useMemo( + () => { + return argumentValue && !!selectedArgument && !!selectedArgument.value; + }, [argumentValue, selectedArgument]); + + const isModified = useMemo( + () => (selectedArgument && argumentValue !== selectedArgument.value), + [selectedArgument, argumentValue]); + useEffect( () => { if (!selectedArgument && state.arguments.length > 0) { @@ -55,24 +64,25 @@ function ArgumentsTab({ state, schema, partialUpdate }: ArgumentsTabProps) { const handleClearArgument = useCallback( (target: IArgumentValue) => { - target.value = ''; + const newArg = { ...target, value: '' } partialUpdate({ - arguments: [ - target, - ...state.arguments.filter(arg => arg.alias !== target.alias) - ] + arguments: state.arguments.map((arg) => (arg.alias !== target.alias ? arg : newArg)) }); + setSelectedArgument(newArg); }, [partialUpdate, state.arguments]); + const handleReset = useCallback( + () => { + setArgumentValue(selectedArgument?.value ?? ''); + }, [selectedArgument]); + const handleAssignArgument = useCallback( (target: IArgumentValue, value: string) => { - target.value = value; + const newArg = { ...target, value: value } partialUpdate({ - arguments: [ - target, - ...state.arguments.filter(arg => arg.alias !== target.alias) - ] + arguments: state.arguments.map((arg) => (arg.alias !== target.alias ? arg : newArg)) }); + setSelectedArgument(newArg); }, [partialUpdate, state.arguments]); const columns = useMemo( @@ -148,21 +158,31 @@ function ArgumentsTab({ state, schema, partialUpdate }: ArgumentsTabProps) { {selectedArgument?.alias || 'ARG'} = -Список пуст
-handleCreateCst()} - > - Создать новую конституенту -
- - } - /> -Список пуст
+onCreateNew()} + > + Создать новую конституенту +
+ + } + /> +