diff --git a/opencti-platform/opencti-front/lang/front/de.json b/opencti-platform/opencti-front/lang/front/de.json
index fb8f308b30ff..573808026e83 100644
--- a/opencti-platform/opencti-front/lang/front/de.json
+++ b/opencti-platform/opencti-front/lang/front/de.json
@@ -1,6 +1,7 @@
{
" (reversed)": "(umgedreht)",
" & ": "&",
+ "... successfully deleted": "{entity_type} erfolgreich gelöscht",
"+ N override(s)": "+ {count} Überschreibung(en)",
"0 equals no maximum": "0 entspricht keinem Maximum",
"24 hours": "24 Stunden",
diff --git a/opencti-platform/opencti-front/lang/front/en.json b/opencti-platform/opencti-front/lang/front/en.json
index 4c0418be5ad0..6822c960b279 100644
--- a/opencti-platform/opencti-front/lang/front/en.json
+++ b/opencti-platform/opencti-front/lang/front/en.json
@@ -1,6 +1,7 @@
{
" (reversed)": " (reversed)",
" & ": " & ",
+ "... successfully deleted": "{entity_type} successfully deleted",
"+ N override(s)": "+ {count} override(s)",
"0 equals no maximum": "0 equals no maximum",
"24 hours": "24 hours",
diff --git a/opencti-platform/opencti-front/lang/front/es.json b/opencti-platform/opencti-front/lang/front/es.json
index 44e1483d1b30..8e51a3b8e7b7 100644
--- a/opencti-platform/opencti-front/lang/front/es.json
+++ b/opencti-platform/opencti-front/lang/front/es.json
@@ -1,6 +1,7 @@
{
" (reversed)": "(invertido)",
" & ": "&",
+ "... successfully deleted": "{entity_type} eliminado exitosamente",
"+ N override(s)": "+ {count} anulación(es)",
"0 equals no maximum": "0 es igual a ningún máximo",
"24 hours": "24 horas",
diff --git a/opencti-platform/opencti-front/lang/front/fr.json b/opencti-platform/opencti-front/lang/front/fr.json
index 6ab583f0518b..4b446aa34637 100644
--- a/opencti-platform/opencti-front/lang/front/fr.json
+++ b/opencti-platform/opencti-front/lang/front/fr.json
@@ -1,6 +1,7 @@
{
" (reversed)": "(inversé)",
" & ": " & ",
+ "... successfully deleted": "{entity_type} supprimé·e avec succès",
"+ N override(s)": "+ {count} surcharge(s)",
"0 equals no maximum": "0 pour aucun maximum",
"24 hours": "24 heures",
diff --git a/opencti-platform/opencti-front/lang/front/ja.json b/opencti-platform/opencti-front/lang/front/ja.json
index ba0b101e8117..c87da48372be 100644
--- a/opencti-platform/opencti-front/lang/front/ja.json
+++ b/opencti-platform/opencti-front/lang/front/ja.json
@@ -1,6 +1,7 @@
{
" (reversed)": "(逆)",
" & ": "&;",
+ "... successfully deleted": "{entity_type} 正常に削除されました",
"+ N override(s)": "+ {count} オーバーライド(複数可)",
"0 equals no maximum": "0 は最大値なし",
"24 hours": "24時間",
diff --git a/opencti-platform/opencti-front/lang/front/ko.json b/opencti-platform/opencti-front/lang/front/ko.json
index 366dd881fb44..610d30fbc241 100644
--- a/opencti-platform/opencti-front/lang/front/ko.json
+++ b/opencti-platform/opencti-front/lang/front/ko.json
@@ -1,6 +1,7 @@
{
" (reversed)": " (역순)",
" & ": " & ",
+ "... successfully deleted": "{entity_type} 성공적으로 삭제되었습니다",
"+ N override(s)": "+ {count} 재정의",
"0 equals no maximum": "0은 최대치 없음",
"24 hours": "24시간",
diff --git a/opencti-platform/opencti-front/lang/front/zh.json b/opencti-platform/opencti-front/lang/front/zh.json
index be9d932ef0e8..13e7686cdcf7 100644
--- a/opencti-platform/opencti-front/lang/front/zh.json
+++ b/opencti-platform/opencti-front/lang/front/zh.json
@@ -1,6 +1,7 @@
{
" (reversed)": "(反向)",
" & ": "&;",
+ "... successfully deleted": "{entity_type} 成功删除",
"+ N override(s)": "+ {count} 覆盖",
"0 equals no maximum": "0 等于没有最大值",
"24 hours": "24小时",
diff --git a/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaDeletion.tsx
new file mode 100644
index 000000000000..83228819f5d6
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaDeletion.tsx
@@ -0,0 +1,93 @@
+import React from 'react';
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import { graphql } from 'react-relay';
+import { useNavigate } from 'react-router-dom';
+import { useFormatter } from '../../../../components/i18n';
+import Security from '../../../../utils/Security';
+import Transition from '../../../../components/Transition';
+import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import useDeletion from '../../../../utils/hooks/useDeletion';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+
+const AdministrativeAreaDeletionDeleteMutation = graphql`
+ mutation AdministrativeAreaDeletionDeleteMutation($id: ID!) {
+ administrativeAreaDelete(id: $id)
+ }
+`;
+
+const AdministrativeAreaDeletion = ({ id }: { id: string }) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_Administrative-Area') },
+ });
+ const [commit] = useApiMutation(
+ AdministrativeAreaDeletionDeleteMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+ const handleClose = () => {};
+ const {
+ deleting,
+ handleOpenDelete,
+ displayDelete,
+ handleCloseDelete,
+ setDeleting,
+ } = useDeletion({ handleClose });
+ const submitDelete = () => {
+ setDeleting(true);
+ commit({
+ variables: {
+ id,
+ },
+ onCompleted: () => {
+ setDeleting(false);
+ handleClose();
+ navigate('/dashboard/locations/administrative_areas');
+ },
+ });
+ };
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default AdministrativeAreaDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaEditionOverview.tsx b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaEditionOverview.tsx
index ae293141fc10..d22a4899aa5a 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaEditionOverview.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaEditionOverview.tsx
@@ -4,6 +4,7 @@ import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup';
import { FormikConfig } from 'formik/dist/types';
import ConfidenceField from '@components/common/form/ConfidenceField';
+import useHelper from 'src/utils/hooks/useHelper';
import TextField from '../../../../components/TextField';
import { SubscriptionFocus } from '../../../../components/Subscription';
import CreatedByField from '../../common/form/CreatedByField';
@@ -21,6 +22,7 @@ import useFormEditor, { GenericData } from '../../../../utils/hooks/useFormEdito
import { fieldSpacingContainerStyle } from '../../../../utils/field';
import { GenericContext } from '../../common/model/GenericContextModel';
import AlertConfidenceForEntity from '../../../../components/AlertConfidenceForEntity';
+import AdministrativeAreaDeletion from './AdministrativeAreaDeletion';
const administrativeAreaMutationFieldPatch = graphql`
mutation AdministrativeAreaEditionOverviewFieldPatchMutation(
@@ -230,6 +232,8 @@ AdministrativeAreaEditionOverviewProps
x_opencti_workflow_id: convertStatus(t_i18n, administrativeArea) as Option,
references: [],
};
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
return (
)}
+ {isFABReplaced && (
+
+ )}
)}
diff --git a/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaPopover.tsx b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaPopover.tsx
index e153fb27e9e4..ccb53a80abbc 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaPopover.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/administrative_areas/AdministrativeAreaPopover.tsx
@@ -20,6 +20,7 @@ import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted'
import { AdministrativeAreaEditionContainerQuery } from './__generated__/AdministrativeAreaEditionContainerQuery.graphql';
import useDeletion from '../../../../utils/hooks/useDeletion';
import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import useHelper from '../../../../utils/hooks/useHelper';
const AdministrativeAreaPopoverDeletionMutation = graphql`
mutation AdministrativeAreaPopoverDeletionMutation($id: ID!) {
@@ -67,53 +68,58 @@ const AdministrativeAreaPopover = ({ id }: { id: string }) => {
},
});
};
- return (
- <>
-
-
-
-
-
- {queryRef && (
- }>
-
-
- )}
- >
- );
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+
+ return isFABReplaced
+ ? (<>>)
+ : (
+ <>
+
+
+
+
+
+ {queryRef && (
+ }>
+
+
+ )}
+ >
+ );
};
export default AdministrativeAreaPopover;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/cities/CityDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/cities/CityDeletion.tsx
new file mode 100644
index 000000000000..8b29625761c2
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/cities/CityDeletion.tsx
@@ -0,0 +1,96 @@
+import React from 'react';
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import { graphql } from 'react-relay';
+import { useNavigate } from 'react-router-dom';
+import { useFormatter } from '../../../../components/i18n';
+import Security from '../../../../utils/Security';
+import Transition from '../../../../components/Transition';
+import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import useDeletion from '../../../../utils/hooks/useDeletion';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+
+const CityDeletionDeleteMutation = graphql`
+ mutation CityDeletionDeleteMutation($id: ID!) {
+ cityEdit(id: $id) {
+ delete
+ }
+ }
+`;
+
+const CityDeletion = ({ id }: { id: string }) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_City') },
+ });
+ const [commit] = useApiMutation(
+ CityDeletionDeleteMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+ const handleClose = () => { };
+ const {
+ deleting,
+ handleOpenDelete,
+ displayDelete,
+ handleCloseDelete,
+ setDeleting,
+ } = useDeletion({ handleClose });
+
+ const submitDelete = () => {
+ setDeleting(true);
+ commit({
+ variables: {
+ id,
+ },
+ onCompleted: () => {
+ setDeleting(false);
+ handleClose();
+ navigate('/dashboard/locations/cities');
+ },
+ });
+ };
+ return (
+
+
+
+
+
+
+ );
+};
+
+export default CityDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/cities/CityEditionOverview.tsx b/opencti-platform/opencti-front/src/private/components/locations/cities/CityEditionOverview.tsx
index a8de69230a0f..f91306d3319c 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/cities/CityEditionOverview.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/cities/CityEditionOverview.tsx
@@ -5,6 +5,7 @@ import * as Yup from 'yup';
import { FormikConfig } from 'formik/dist/types';
import { GenericContext } from '@components/common/model/GenericContextModel';
import ConfidenceField from '@components/common/form/ConfidenceField';
+import useHelper from 'src/utils/hooks/useHelper';
import TextField from '../../../../components/TextField';
import { SubscriptionFocus } from '../../../../components/Subscription';
import CreatedByField from '../../common/form/CreatedByField';
@@ -21,6 +22,7 @@ import { useSchemaEditionValidation } from '../../../../utils/hooks/useEntitySet
import useFormEditor, { GenericData } from '../../../../utils/hooks/useFormEditor';
import { fieldSpacingContainerStyle } from '../../../../utils/field';
import AlertConfidenceForEntity from '../../../../components/AlertConfidenceForEntity';
+import CityDeletion from './CityDeletion';
const cityMutationFieldPatch = graphql`
mutation CityEditionOverviewFieldPatchMutation(
@@ -217,6 +219,8 @@ const CityEditionOverview: FunctionComponent = ({
objectMarking: convertMarkings(city),
x_opencti_workflow_id: convertStatus(t_i18n, city) as Option,
};
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
return (
= ({
id={city.id}
/>
)}
+ {isFABReplaced && (
+
+ )}
)}
diff --git a/opencti-platform/opencti-front/src/private/components/locations/cities/CityPopover.tsx b/opencti-platform/opencti-front/src/private/components/locations/cities/CityPopover.tsx
index 915eb5d72093..02177dd65c1c 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/cities/CityPopover.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/cities/CityPopover.tsx
@@ -21,6 +21,7 @@ import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted'
import { CityEditionContainerQuery } from './__generated__/CityEditionContainerQuery.graphql';
import useDeletion from '../../../../utils/hooks/useDeletion';
import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import useHelper from '../../../../utils/hooks/useHelper';
// Deprecated - https://mui.com/system/styles/basics/
// Do not use it for new code.
@@ -80,53 +81,58 @@ const CityPopover = ({ id }: { id: string }) => {
},
});
};
- return (
-
-
-
-
-
-
- {queryRef && (
- }>
-
-
- )}
-
- );
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+
+ return isFABReplaced
+ ? (<>>)
+ : (
+
+
+
+
+
+
+ {queryRef && (
+ }>
+
+
+ )}
+
+ );
};
export default CityPopover;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/countries/CountryDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryDeletion.tsx
new file mode 100644
index 000000000000..f705e1726e4f
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryDeletion.tsx
@@ -0,0 +1,96 @@
+import React, { useState } from 'react';
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import { graphql } from 'react-relay';
+import { useNavigate } from 'react-router-dom';
+import { useFormatter } from '../../../../components/i18n';
+import Security from '../../../../utils/Security';
+import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import Transition from '../../../../components/Transition';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+
+const CountryDeletionDeleteMutation = graphql`
+ mutation CountryDeletionDeleteMutation($id: ID!) {
+ countryEdit(id: $id) {
+ delete
+ }
+ }
+`;
+
+const CountryDeletion = ({ id }: { id: string }) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const [deleting, setDeleting] = useState(false);
+ const [displayDelete, setDisplayDelete] = useState(false);
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_Country') },
+ });
+ const [commit] = useApiMutation(
+ CountryDeletionDeleteMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+ const handleClose = () => {};
+ const handleOpenDelete = () => {
+ setDisplayDelete(true);
+ handleClose();
+ };
+ const handleCloseDelete = () => {
+ setDisplayDelete(false);
+ };
+ const submitDelete = () => {
+ setDeleting(true);
+ commit({
+ variables: {
+ id,
+ },
+ onCompleted: () => {
+ setDeleting(false);
+ handleClose();
+ navigate('/dashboard/locations/countries');
+ },
+ });
+ };
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default CountryDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/countries/CountryEditionOverview.tsx b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryEditionOverview.tsx
index 511895451dd7..e7e7c381d444 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/countries/CountryEditionOverview.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryEditionOverview.tsx
@@ -4,6 +4,7 @@ import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup';
import { FormikConfig } from 'formik/dist/types';
import ConfidenceField from '@components/common/form/ConfidenceField';
+import useHelper from 'src/utils/hooks/useHelper';
import { useFormatter } from '../../../../components/i18n';
import TextField from '../../../../components/TextField';
import { SubscriptionFocus } from '../../../../components/Subscription';
@@ -21,6 +22,7 @@ import useFormEditor, { GenericData } from '../../../../utils/hooks/useFormEdito
import { fieldSpacingContainerStyle } from '../../../../utils/field';
import { GenericContext } from '../../common/model/GenericContextModel';
import AlertConfidenceForEntity from '../../../../components/AlertConfidenceForEntity';
+import CountryDeletion from './CountryDeletion';
const countryMutationFieldPatch = graphql`
mutation CountryEditionOverviewFieldPatchMutation(
@@ -213,6 +215,8 @@ CountryEditionOverviewProps
objectMarking: convertMarkings(country),
x_opencti_workflow_id: convertStatus(t_i18n, country) as Option,
};
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
return (
)}
+ {isFABReplaced && (
+
+ )}
)}
diff --git a/opencti-platform/opencti-front/src/private/components/locations/countries/CountryPopover.tsx b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryPopover.tsx
index 812f56cf9ce2..64870afee52f 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/countries/CountryPopover.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/countries/CountryPopover.tsx
@@ -18,6 +18,7 @@ import { CountryEditionContainerQuery } from './__generated__/CountryEditionCont
import Transition from '../../../../components/Transition';
import CountryEditionContainer, { countryEditionQuery } from './CountryEditionContainer';
import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import useHelper from '../../../../utils/hooks/useHelper';
const CountryPopoverDeletionMutation = graphql`
mutation CountryPopoverDeletionMutation($id: ID!) {
@@ -69,53 +70,59 @@ const CountryPopover = ({ id }: { id: string }) => {
},
});
};
- return (
- <>
-
-
-
-
-
- {queryRef && (
- }>
-
-
- )}
- >
- );
+
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+
+ return isFABReplaced
+ ? (<>>)
+ : (
+ <>
+
+
+
+
+
+ {queryRef && (
+ }>
+
+
+ )}
+ >
+ );
};
export default CountryPopover;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionDeletion.tsx
new file mode 100644
index 000000000000..eea2de2e59b5
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionDeletion.tsx
@@ -0,0 +1,97 @@
+import React, { FunctionComponent, useState } from 'react';
+import { graphql } from 'react-relay';
+import { useNavigate } from 'react-router-dom';
+import { Button, Dialog, DialogActions, DialogContent, DialogContentText } from '@mui/material';
+import { useFormatter } from '../../../../components/i18n';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import Security from '../../../../utils/Security';
+import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import Transition from '../../../../components/Transition';
+
+const positionDeletionMutation = graphql`
+ mutation PositionDeletionMutation($id: ID!) {
+ positionEdit(id: $id) {
+ delete
+ }
+ }
+`;
+
+interface PositionDeletionProps {
+ positionId: string;
+ handleClose?: () => void;
+}
+
+const PositionDeletion: FunctionComponent = ({
+ positionId,
+ handleClose,
+}) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const [displayDelete, setDisplayDelete] = useState(false);
+ const [deleting, setDeleting] = useState(false);
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_Position') },
+ });
+ const [commitMutation] = useApiMutation(
+ positionDeletionMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+
+ const handleOpenDelete = () => setDisplayDelete(true);
+ const handleCloseDelete = () => {
+ setDeleting(false);
+ setDisplayDelete(false);
+ };
+
+ const submitDelete = () => {
+ setDeleting(true);
+ commitMutation({
+ variables: { id: positionId },
+ onCompleted: () => {
+ setDeleting(false);
+ if (typeof handleClose === 'function') handleClose();
+ navigate('/dashboard/locations/positions');
+ },
+ });
+ };
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default PositionDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionEditionContainer.jsx b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionEditionContainer.jsx
index 8bae158b6f2f..913a09f560b4 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionEditionContainer.jsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionEditionContainer.jsx
@@ -5,11 +5,12 @@ import PositionEditionOverview from './PositionEditionOverview';
import { useIsEnforceReference } from '../../../../utils/hooks/useEntitySettings';
import Drawer, { DrawerVariant } from '../../common/drawer/Drawer';
import useHelper from '../../../../utils/hooks/useHelper';
+import PositionDeletion from './PositionDeletion';
const PositionEditionContainer = (props) => {
const { t_i18n } = useFormatter();
const { isFeatureEnable } = useHelper();
- const FABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
const { handleClose, position, open, controlledDial } = props;
const { editContext } = position;
return (
@@ -17,16 +18,23 @@ const PositionEditionContainer = (props) => {
title={t_i18n('Update a position')}
open={open}
onClose={handleClose}
- variant={!FABReplaced && open == null ? DrawerVariant.update : undefined}
+ variant={!isFABReplaced && open == null ? DrawerVariant.update : undefined}
context={editContext}
- controlledDial={FABReplaced ? controlledDial : undefined}
+ controlledDial={isFABReplaced ? controlledDial : undefined}
>
-
+ <>
+
+ {isFABReplaced && (
+
+ )}
+ >
);
};
diff --git a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopover.jsx b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopover.jsx
index 15b50f65c77d..a697a28e59f1 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopover.jsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopover.jsx
@@ -1,144 +1,76 @@
-import React, { Component } from 'react';
-import * as PropTypes from 'prop-types';
-import { compose } from 'ramda';
+import React, { useState } from 'react';
import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem';
-import Button from '@mui/material/Button';
import ToggleButton from '@mui/material/ToggleButton';
-import Dialog from '@mui/material/Dialog';
-import DialogActions from '@mui/material/DialogActions';
-import DialogContent from '@mui/material/DialogContent';
-import DialogContentText from '@mui/material/DialogContentText';
import Slide from '@mui/material/Slide';
import MoreVert from '@mui/icons-material/MoreVert';
-import { graphql } from 'react-relay';
-import withRouter from '../../../../utils/compat_router/withRouter';
-import inject18n from '../../../../components/i18n';
-import { commitMutation, QueryRenderer } from '../../../../relay/environment';
+import { useFormatter } from '../../../../components/i18n';
import { positionEditionQuery } from './PositionEdition';
import PositionEditionContainer from './PositionEditionContainer';
import Security from '../../../../utils/Security';
import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import useHelper from '../../../../utils/hooks/useHelper';
+import { QueryRenderer } from '../../../../relay/environment';
+import PositionPopoverDeletion from './PositionPopoverDeletion';
const Transition = React.forwardRef((props, ref) => (
));
Transition.displayName = 'TransitionSlide';
-const PositionPopoverDeletionMutation = graphql`
- mutation PositionPopoverDeletionMutation($id: ID!) {
- positionEdit(id: $id) {
- delete
- }
- }
-`;
+const PositionPopover = ({ id }) => {
+ const { t_i18n } = useFormatter();
+ const [anchorEl, setAnchorEl] = useState(null);
+ const [displayDelete, setDisplayDelete] = useState(false);
+ const [displayEdit, setDisplayEdit] = useState(false);
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+ const handleOpen = (event) => setAnchorEl(event.currentTarget);
+ const handleClose = () => setAnchorEl(null);
+ const handleOpenDelete = () => {
+ setDisplayDelete(true);
+ handleClose();
+ };
+ const handleCloseDelete = () => {
+ setDisplayDelete(false);
+ };
+ const handleOpenEdit = () => {
+ setDisplayEdit(true);
+ handleClose();
+ };
+ const handleCloseEdit = () => setDisplayEdit(false);
-class PositionPopover extends Component {
- constructor(props) {
- super(props);
- this.state = {
- anchorEl: null,
- displayDelete: false,
- displayEdit: false,
- deleting: false,
- };
- }
-
- handleOpen(event) {
- this.setState({ anchorEl: event.currentTarget });
- }
-
- handleClose() {
- this.setState({ anchorEl: null });
- }
-
- handleOpenDelete() {
- this.setState({ displayDelete: true });
- this.handleClose();
- }
-
- handleCloseDelete() {
- this.setState({ displayDelete: false });
- }
-
- submitDelete() {
- this.setState({ deleting: true });
- commitMutation({
- mutation: PositionPopoverDeletionMutation,
- variables: {
- id: this.props.id,
- },
- onCompleted: () => {
- this.setState({ deleting: false });
- this.handleClose();
- this.props.navigate('/dashboard/locations/positions');
- },
- });
- }
-
- handleOpenEdit() {
- this.setState({ displayEdit: true });
- this.handleClose();
- }
-
- handleCloseEdit() {
- this.setState({ displayEdit: false });
- }
-
- render() {
- const { t, id } = this.props;
- return (
+ return isFABReplaced
+ ? (<>>)
+ : (
<>
-
+
);
}
@@ -157,13 +89,5 @@ class PositionPopover extends Component {
/>
>
);
- }
-}
-
-PositionPopover.propTypes = {
- id: PropTypes.string,
- t: PropTypes.func,
- navigate: PropTypes.func,
};
-
-export default compose(inject18n, withRouter)(PositionPopover);
+export default PositionPopover;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopoverDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopoverDeletion.tsx
new file mode 100644
index 000000000000..ad60da3f6b8a
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/positions/PositionPopoverDeletion.tsx
@@ -0,0 +1,81 @@
+import { graphql } from 'react-relay';
+import DialogContent from '@mui/material/DialogContent';
+import DialogActions from '@mui/material/DialogActions';
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import React, { FunctionComponent, useState } from 'react';
+import { useNavigate } from 'react-router-dom';
+import DialogContentText from '@mui/material/DialogContentText';
+import { useFormatter } from '../../../../components/i18n';
+import Transition from '../../../../components/Transition';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+
+const PositionPopoverDeletionMutation = graphql`
+ mutation PositionPopoverDeletionMutation($id: ID!) {
+ positionEdit(id: $id) {
+ delete
+ }
+ }
+`;
+
+interface PositionPopoverDeletionProps {
+ positionId: string;
+ displayDelete: boolean;
+ handleClose: () => void;
+ handleCloseDelete: () => void;
+}
+
+const PositionPopoverDeletion: FunctionComponent = ({
+ positionId,
+ displayDelete,
+ handleClose,
+ handleCloseDelete,
+}) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const [deleting, setDeleting] = useState(false);
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_Position') },
+ });
+ const [commitMutation] = useApiMutation(
+ PositionPopoverDeletionMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+ const submitDelete = () => {
+ setDeleting(true);
+ commitMutation({
+ variables: { id: positionId },
+ onCompleted: () => {
+ setDeleting(false);
+ handleClose();
+ navigate('/dashboard/locations/positions');
+ },
+ });
+ };
+ return (
+
+ );
+};
+
+export default PositionPopoverDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/positions/Root.tsx b/opencti-platform/opencti-front/src/private/components/locations/positions/Root.tsx
index 3bd6e88f728a..1813fde0eb13 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/positions/Root.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/positions/Root.tsx
@@ -141,7 +141,7 @@ const RootPosition = ({ positionId, queryRef }: RootPositionProps) => {
entityType="Position"
disableSharing={true}
stixDomainObject={position}
- PopoverComponent={}
+ PopoverComponent={}
EditComponent={isFABReplaced && (
diff --git a/opencti-platform/opencti-front/src/private/components/locations/regions/RegionDeletion.tsx b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionDeletion.tsx
new file mode 100644
index 000000000000..4f15d3e255a1
--- /dev/null
+++ b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionDeletion.tsx
@@ -0,0 +1,97 @@
+import React, { useState } from 'react';
+import Button from '@mui/material/Button';
+import Dialog from '@mui/material/Dialog';
+import DialogActions from '@mui/material/DialogActions';
+import DialogContent from '@mui/material/DialogContent';
+import DialogContentText from '@mui/material/DialogContentText';
+import { graphql } from 'react-relay';
+import { useNavigate } from 'react-router-dom';
+import { useFormatter } from '../../../../components/i18n';
+import Security from '../../../../utils/Security';
+import { KNOWLEDGE_KNUPDATE_KNDELETE } from '../../../../utils/hooks/useGranted';
+import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import Transition from '../../../../components/Transition';
+
+const RegionDeletionDeleteMutation = graphql`
+ mutation RegionDeletionDeleteMutation($id: ID!) {
+ regionEdit(id: $id) {
+ delete
+ }
+ }
+`;
+
+const RegionDeletion = ({ id }: { id: string }) => {
+ const { t_i18n } = useFormatter();
+ const navigate = useNavigate();
+ const [deleting, setDeleting] = useState(false);
+ const [displayDelete, setDisplayDelete] = useState(false);
+ const deleteSuccessMessage = t_i18n('', {
+ id: '... successfully deleted',
+ values: { entity_type: t_i18n('entity_Region') },
+ });
+ const [commit] = useApiMutation(
+ RegionDeletionDeleteMutation,
+ undefined,
+ { successMessage: deleteSuccessMessage },
+ );
+ const handleClose = () => {};
+ const handleOpenDelete = () => {
+ setDisplayDelete(true);
+ handleClose();
+ };
+ const handleCloseDelete = () => {
+ setDisplayDelete(false);
+ };
+ const submitDelete = () => {
+ setDeleting(true);
+ commit({
+ variables: {
+ id,
+ },
+ onCompleted: () => {
+ setDeleting(false);
+ handleClose();
+ navigate('/dashboard/locations/regions');
+ },
+ });
+ };
+
+ return (
+
+
+
+
+
+
+ );
+};
+
+export default RegionDeletion;
diff --git a/opencti-platform/opencti-front/src/private/components/locations/regions/RegionEditionOverview.tsx b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionEditionOverview.tsx
index 28220dda0ae8..9b48a24d37cd 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/regions/RegionEditionOverview.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionEditionOverview.tsx
@@ -4,6 +4,7 @@ import { Field, Form, Formik } from 'formik';
import * as Yup from 'yup';
import { FormikConfig } from 'formik/dist/types';
import ConfidenceField from '@components/common/form/ConfidenceField';
+import useHelper from 'src/utils/hooks/useHelper';
import TextField from '../../../../components/TextField';
import { SubscriptionFocus } from '../../../../components/Subscription';
import CreatedByField from '../../common/form/CreatedByField';
@@ -21,6 +22,7 @@ import useFormEditor, { GenericData } from '../../../../utils/hooks/useFormEdito
import { fieldSpacingContainerStyle } from '../../../../utils/field';
import { GenericContext } from '../../common/model/GenericContextModel';
import AlertConfidenceForEntity from '../../../../components/AlertConfidenceForEntity';
+import RegionDeletion from './RegionDeletion';
const regionMutationFieldPatch = graphql`
mutation RegionEditionOverviewFieldPatchMutation(
@@ -213,6 +215,8 @@ RegionEdititionOverviewProps
x_opencti_workflow_id: convertStatus(t_i18n, region) as Option,
references: [],
};
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
return (
)}
+ {isFABReplaced && (
+
+ )}
)}
diff --git a/opencti-platform/opencti-front/src/private/components/locations/regions/RegionPopover.tsx b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionPopover.tsx
index c09250301c7a..e601829aa9ed 100644
--- a/opencti-platform/opencti-front/src/private/components/locations/regions/RegionPopover.tsx
+++ b/opencti-platform/opencti-front/src/private/components/locations/regions/RegionPopover.tsx
@@ -19,6 +19,7 @@ import { RegionEditionContainerQuery } from './__generated__/RegionEditionContai
import Transition from '../../../../components/Transition';
import RegionEditionContainer, { regionEditionQuery } from './RegionEditionContainer';
import useApiMutation from '../../../../utils/hooks/useApiMutation';
+import useHelper from '../../../../utils/hooks/useHelper';
// Deprecated - https://mui.com/system/styles/basics/
// Do not use it for new code.
@@ -80,53 +81,59 @@ const RegionPopover = ({ id }: { id: string }) => {
},
});
};
- return (
-
-
-
-
-
-
- {queryRef && (
- }>
-
-
- )}
-
- );
+
+ const { isFeatureEnable } = useHelper();
+ const isFABReplaced = isFeatureEnable('FAB_REPLACEMENT');
+
+ return isFABReplaced
+ ? (<>>)
+ : (
+
+
+
+
+
+
+ {queryRef && (
+ }>
+
+
+ )}
+
+ );
};
export default RegionPopover;