);
diff --git a/rsconcept/frontend/src/pages/NotFoundPage.tsx b/rsconcept/frontend/src/pages/NotFoundPage.tsx
index 27a23c8a..f8906642 100644
--- a/rsconcept/frontend/src/pages/NotFoundPage.tsx
+++ b/rsconcept/frontend/src/pages/NotFoundPage.tsx
@@ -1,8 +1,11 @@
+import TextURL from '../components/Common/TextURL';
+
export function NotFoundPage() {
return (
-
-
Error 404 - Not Found
-
Данная страница не существует или запрашиваемый объект отсутствует в базы данных
+
+
Ошибка 404 - Страница не найдена
+
Данная страница не существует или запрашиваемый объект отсутствует в базе данных
+
);
}
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta.tsx
index abb37287..cea063aa 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorConstituenta.tsx
@@ -9,6 +9,7 @@ import TextArea from '../../components/Common/TextArea';
import HelpConstituenta from '../../components/Help/HelpConstituenta';
import { DumpBinIcon, HelpIcon, PenIcon, SaveIcon, SmallPlusIcon } from '../../components/Icons';
import { useRSForm } from '../../context/RSFormContext';
+import useModificationPrompt from '../../hooks/useModificationPrompt';
import { CstType, EditMode, ICstCreateData, ICstRenameData, ICstUpdateData, SyntaxTree } from '../../utils/models';
import { getCstTypificationLabel } from '../../utils/staticUI';
import EditorRSExpression from './EditorRSExpression';
@@ -33,7 +34,8 @@ function EditorConstituenta({ activeID, onShowAST, onCreateCst, onRenameCst, onO
return schema?.items?.find((cst) => cst.id === activeID);
}, [schema?.items, activeID]);
- const [isModified, setIsModified] = useState(false);
+ const { isModified, setIsModified } = useModificationPrompt();
+
const [editMode, setEditMode] = useState(EditMode.TEXT);
const [alias, setAlias] = useState('');
@@ -59,7 +61,7 @@ function EditorConstituenta({ activeID, onShowAST, onCreateCst, onRenameCst, onO
);
}, [activeCst, activeCst?.term, activeCst?.definition.formal,
activeCst?.definition.text.raw, activeCst?.convention,
- term, textDefinition, expression, convention]);
+ term, textDefinition, expression, convention, setIsModified]);
useLayoutEffect(
() => {
diff --git a/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm.tsx b/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm.tsx
index a2682356..ef1d81aa 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/EditorRSForm.tsx
@@ -13,6 +13,7 @@ import { CrownIcon, DownloadIcon, DumpBinIcon, HelpIcon, SaveIcon, ShareIcon } f
import { useAuth } from '../../context/AuthContext';
import { useRSForm } from '../../context/RSFormContext';
import { useUsers } from '../../context/UsersContext';
+import useModificationPrompt from '../../hooks/useModificationPrompt';
import { IRSFormCreateData, LibraryItemType } from '../../utils/models';
interface EditorRSFormProps {
@@ -37,7 +38,7 @@ function EditorRSForm({ onDestroy, onClaim, onShare, onDownload }: EditorRSFormP
const [common, setCommon] = useState(false);
const [canonical, setCanonical] = useState(false);
- const [isModified, setIsModified] = useState(true);
+ const { isModified, setIsModified } = useModificationPrompt();
useLayoutEffect(() => {
if (!schema) {
@@ -53,7 +54,7 @@ function EditorRSForm({ onDestroy, onClaim, onShare, onDownload }: EditorRSFormP
);
}, [schema, schema?.title, schema?.alias, schema?.comment,
schema?.is_common, schema?.is_canonical,
- title, alias, comment, common, canonical]);
+ title, alias, comment, common, canonical, setIsModified]);
useLayoutEffect(() => {
if (schema) {
diff --git a/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx b/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
index 5e3cac26..14a15cea 100644
--- a/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
+++ b/rsconcept/frontend/src/pages/UserProfilePage/EditorProfile.tsx
@@ -4,6 +4,7 @@ import { toast } from 'react-toastify';
import SubmitButton from '../../components/Common/SubmitButton';
import TextInput from '../../components/Common/TextInput';
import { useUserProfile } from '../../context/UserProfileContext';
+import useModificationPrompt from '../../hooks/useModificationPrompt';
import { IUserUpdateData } from '../../utils/models';
function EditorProfile() {
@@ -14,7 +15,7 @@ function EditorProfile() {
const [first_name, setFirstName] = useState('');
const [last_name, setLastName] = useState('');
- const [isModified, setIsModified] = useState(true);
+ const { isModified, setIsModified } = useModificationPrompt();
useLayoutEffect(() => {
if (!user) {
@@ -26,7 +27,7 @@ function EditorProfile() {
user.first_name !== first_name ||
user.last_name !== last_name
);
- }, [user, user?.email, user?.first_name, user?.last_name, email, first_name, last_name]);
+ }, [user, user?.email, user?.first_name, user?.last_name, email, first_name, last_name, setIsModified]);
useLayoutEffect(() => {
if (user) {