diff --git a/rsconcept/frontend/src/pages/RSFormPage/TablistTools.tsx b/rsconcept/frontend/src/pages/RSFormPage/TablistTools.tsx
index e480e45e..0f7d7d8a 100644
--- a/rsconcept/frontend/src/pages/RSFormPage/TablistTools.tsx
+++ b/rsconcept/frontend/src/pages/RSFormPage/TablistTools.tsx
@@ -1,13 +1,32 @@
+import { useCallback } from 'react';
import Button from '../../components/Common/Button';
import Dropdown from '../../components/Common/Dropdown';
-import { EyeIcon, EyeOffIcon, MenuIcon, PenIcon } from '../../components/Icons';
+import { CrownIcon, DumpBinIcon, EyeIcon, EyeOffIcon, MenuIcon, PenIcon } from '../../components/Icons';
import { useRSForm } from '../../context/RSFormContext';
import useDropdown from '../../hooks/useDropdown';
+import DropdownButton from '../../components/Common/DropdownButton';
+import Checkbox from '../../components/Common/Checkbox';
+import { useAuth } from '../../context/AuthContext';
+import { claimOwnershipProc, deleteRSFormProc } from '../../utils/procedures';
+import { useNavigate } from 'react-router-dom';
function TablistTools() {
- const { isEditable, isTracking, toggleTracking } = useRSForm();
+ const navigate = useNavigate();
+ const {user} = useAuth();
+ const {
+ isOwned, isEditable, isTracking, readonly, forceAdmin,
+ toggleTracking, toggleForceAdmin, toggleReadonly,
+ claim, reload, destroy
+ } = useRSForm();
const schemaMenu = useDropdown();
const editMenu = useDropdown();
+
+ const handleClaimOwner = useCallback(() => {
+ claimOwnershipProc(claim, reload)
+ }, [claim, reload]);
+
+ const handleDelete =
+ useCallback(() => deleteRSFormProc(destroy, navigate), [destroy, navigate]);
return (
@@ -21,10 +40,14 @@ function TablistTools() {
/>
{ schemaMenu.isActive &&
- стать владельцем
клонировать
поделиться
- удалить
+
+
+
}
@@ -38,9 +61,22 @@ function TablistTools() {
/>
{ editMenu.isActive &&
- стать владельцем / уже владелец
- ридонли
- админ оверрайд
+
+
+
+
+ { isOwned && Владелец схемы }
+ { !isOwned && Стать владельцем }
+
+
+
+
+
+
+ {user?.is_staff &&
+
+
+ }
}
diff --git a/rsconcept/frontend/src/utils/procedures.ts b/rsconcept/frontend/src/utils/procedures.ts
new file mode 100644
index 00000000..11b3b70b
--- /dev/null
+++ b/rsconcept/frontend/src/utils/procedures.ts
@@ -0,0 +1,34 @@
+import { toast } from 'react-toastify';
+import { BackendCallback } from './backendAPI';
+
+export function shareCurrentURLProc() {
+ const url = window.location.href + '&share';
+ navigator.clipboard.writeText(url);
+ toast.success(`Ссылка скопирована: ${url}`);
+}
+
+export function claimOwnershipProc(
+ claim: (callback: BackendCallback) => void,
+ reload: Function
+) {
+ if (!window.confirm('Вы уверены, что хотите стать владельцем данной схемы?')) {
+ return;
+ }
+ claim(() => {
+ toast.success('Вы стали владельцем схемы');
+ reload();
+ });
+}
+
+export function deleteRSFormProc(
+ destroy: (callback: BackendCallback) => void,
+ navigate: Function
+) {
+ if (!window.confirm('Вы уверены, что хотите удалить данную схему?')) {
+ return;
+ }
+ destroy(() => {
+ toast.success('Схема удалена');
+ navigate('/rsforms?filter=personal');
+ });
+}