diff --git a/rsconcept/backend/apps/users/tests/t_views.py b/rsconcept/backend/apps/users/tests/t_views.py
index ade8143b..9057ecd3 100644
--- a/rsconcept/backend/apps/users/tests/t_views.py
+++ b/rsconcept/backend/apps/users/tests/t_views.py
@@ -54,6 +54,19 @@ class TestUserUserProfileAPIView(APITestCase):
self.assertEqual(response.data['first_name'], self.first_name)
self.assertEqual(response.data['last_name'], '')
+ def test_patch_profile(self):
+ self.client.force_login(user=self.user)
+ data = json.dumps({
+ 'email': '123@mail.ru',
+ 'first_name': 'firstName',
+ 'last_name': 'lastName',
+ })
+ response = self.client.patch('/users/api/profile', data=data, content_type='application/json')
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.data['email'], '123@mail.ru')
+ self.assertEqual(response.data['first_name'], 'firstName')
+ self.assertEqual(response.data['last_name'], 'lastName')
+
def test_edit_profile(self):
newmail = 'newmail@gmail.com'
data = json.dumps({'email': newmail})
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
index 7eb6e1c8..665eb486 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabs.tsx
@@ -7,6 +7,8 @@ import { Loader } from '../../components/Common/Loader';
import { useRSForm } from '../../context/RSFormContext';
import useLocalStorage from '../../hooks/useLocalStorage';
import { type IConstituenta } from '../../utils/models';
+import DlgCloneRSForm from './DlgCloneRSForm';
+import DlgUploadRSForm from './DlgUploadRSForm';
import EditorConstituenta from './EditorConstituenta';
import EditorItems from './EditorItems';
import EditorRSForm from './EditorRSForm';
@@ -24,6 +26,9 @@ function RSTabs() {
const [tabIndex, setTabIndex] = useLocalStorage('rsform_edit_tab', RSTabsList.CARD);
const [init, setInit] = useState(false);
+ const [showUploadDialog, setShowUploadDialog] = useState(false);
+ const [showCloneDialog, setShowCloneDialog] = useState(false);
+
const onEditCst = (cst: IConstituenta) => {
setActiveID(cst.id);
setTabIndex(RSTabsList.CST_EDIT)
@@ -84,6 +89,15 @@ function RSTabs() {
{ loading && }
{ error && }
{ schema && !loading &&
+ <>
+ { setShowUploadDialog(false); }}
+ />
+ { setShowCloneDialog(false); }}
+ />
-
+ setShowCloneDialog(true)}
+ showUploadDialog={() => setShowUploadDialog(true)}
+ />
Паспорт схемы
Конституенты
@@ -112,7 +129,7 @@ function RSTabs() {
-
+ >
}
);
}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
index b8374ba0..f88f70d2 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/RSTabsMenu.tsx
@@ -1,4 +1,4 @@
-import { useCallback, useState } from 'react';
+import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import Button from '../../components/Common/Button';
@@ -10,10 +10,13 @@ import { useAuth } from '../../context/AuthContext';
import { useRSForm } from '../../context/RSFormContext';
import useDropdown from '../../hooks/useDropdown';
import { claimOwnershipProc, deleteRSFormProc, downloadRSFormProc, shareCurrentURLProc } from '../../utils/procedures';
-import DlgCloneRSForm from './DlgCloneRSForm';
-import DlgUploadRSForm from './DlgUploadRSForm';
-function RSTabsMenu() {
+interface RSTabsMenuProps {
+ showUploadDialog: () => void
+ showCloneDialog: () => void
+}
+
+function RSTabsMenu({showUploadDialog, showCloneDialog}: RSTabsMenuProps) {
const navigate = useNavigate();
const { user } = useAuth();
const {
@@ -24,8 +27,7 @@ function RSTabsMenu() {
} = useRSForm();
const schemaMenu = useDropdown();
const editMenu = useDropdown();
- const [showUploadDialog, setShowUploadDialog] = useState(false);
- const [showCloneDialog, setShowCloneDialogl] = useState(false);
+
const handleClaimOwner = useCallback(() => {
editMenu.hide();
@@ -45,29 +47,20 @@ function RSTabsMenu() {
const handleUpload = useCallback(() => {
schemaMenu.hide();
- setShowUploadDialog(true);
- }, [schemaMenu]);
+ showUploadDialog();
+ }, [schemaMenu, showUploadDialog]);
const handleClone = useCallback(() => {
schemaMenu.hide();
- setShowCloneDialogl(true);
- }, [schemaMenu]);
+ showCloneDialog();
+ }, [schemaMenu, showCloneDialog]);
const handleShare = useCallback(() => {
schemaMenu.hide();
shareCurrentURLProc();
}, [schemaMenu]);
- return (
- <>
- { setShowUploadDialog(false); }}
- />
- { setShowCloneDialogl(false); }}
- />
+ return (
- >
);
}
diff --git a/rsconcept/frontend/src/utils/backendAPI.ts b/rsconcept/frontend/src/utils/backendAPI.ts
index eb9b4042..c9345656 100644
--- a/rsconcept/frontend/src/utils/backendAPI.ts
+++ b/rsconcept/frontend/src/utils/backendAPI.ts
@@ -233,7 +233,7 @@ export function patchUploadTRS(target: string, request: FrontExchange({ endpoint, request, title, options }: IAxiosRequest) {
console.log(`REQUEST: [[${title}]]`);
- if (request.setLoading) request?.setLoading(true);
+ if (request.setLoading) request.setLoading(true);
axios.get(endpoint, options)
.then((response) => {
if (request.setLoading) request.setLoading(false);