From b026a57fad4053303721180619f1f99cd37c2b2e Mon Sep 17 00:00:00 2001 From: IRBorisov <8611739+IRBorisov@users.noreply.github.com> Date: Sat, 2 Dec 2023 00:15:56 +0300 Subject: [PATCH] Minor UI improvements --- .../frontend/src/components/Common/Modal.tsx | 12 +- .../Help/HelpTerminologyControl.tsx | 2 +- .../DlgConstituentaTemplate/ArgumentsTab.tsx | 64 ++++-- .../frontend/src/dialogs/DlgEditWordForms.tsx | 5 +- .../ConstituentaToolbar.tsx | 9 +- .../RSFormPage/EditorRSList/EditorRSList.tsx | 198 ++++-------------- .../pages/RSFormPage/EditorRSList/RSTable.tsx | 159 ++++++++++++++ 7 files changed, 252 insertions(+), 197 deletions(-) create mode 100644 rsconcept/frontend/src/pages/RSFormPage/EditorRSList/RSTable.tsx 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()} + > + Создать новую конституенту +
+ + } + /> +