Skip to content

[BUGFIXES] | GH -1781 | critical mf bugfixes #1795

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import logging
from dataall.base.context import get_context
from dataall.base.db import exceptions, paginate
from dataall.core.permissions.services.resource_policy_service import ResourcePolicyService
from dataall.modules.metadata_forms.db.metadata_form_repository import MetadataFormRepository
from dataall.modules.metadata_forms.services.metadata_form_access_service import MetadataFormAccessService
from dataall.modules.metadata_forms.services.metadata_form_permissions import ATTACH_METADATA_FORM

log = logging.getLogger(__name__)


class AttachedMetadataFormValidationService:
@staticmethod
Expand Down Expand Up @@ -47,10 +50,13 @@ def create_or_update_attached_metadata_form(uri, data):
if data.get('attachedUri'):
with get_context().db_engine.scoped_session() as session:
existingAMF = MetadataFormRepository.get_attached_metadata_form(session, data.get('attachedUri'))
log.info(f'Found an existing metadata form with uri: {existingAMF.uri}')
if existingAMF and new_form:
log.info(f'Deleting older existing metadata form attachement with uri: {existingAMF.uri}')
session.delete(existingAMF)
return new_form
except Exception as e:
log.error(f'Error occurred while creating / updating attached metadata forms due to: {e}')
if new_form:
AttachedMetadataFormService.delete_attached_metadata_form(uri=new_form.uri)
raise e
Expand All @@ -74,8 +80,10 @@ def create_attached_metadata_form(uri, data):
MetadataFormRepository.create_attached_metadata_form_field(
session, amf.uri, f.get('field'), f.get('value')
)
log.info(f'Returning new attached metadata forms with uri: {amf.uri}')
return amf
except Exception as e:
log.error(f'Error while creating attached meta form fields due to: {e}')
AttachedMetadataFormService.delete_attached_metadata_form(uri=amf.uri)
raise e

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ export const AttachedFormCard = (props) => {
ml: 5
}}
>
{field.value}
{field.value?.toString()}
</Typography>
</ListItem>
))}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import { DataGrid } from '@mui/x-data-grid';
import { AttachedFormCard } from './AttachedFormCard';
import CircularProgress from '@mui/material/CircularProgress';
import { useTheme } from '@mui/styles';
import { DeleteObjectWithFrictionModal } from '../../../design';

export const MetadataFormAttachedEntities = (props) => {
const { metadataForm, userRolesMF } = props;
Expand All @@ -44,13 +45,23 @@ export const MetadataFormAttachedEntities = (props) => {
page: 0
});
const [selectedEntity, setSelectedEntity] = useState(null);
const [isDeleteRoleModalOpen, setIsDeleteRoleModalOpen] = useState(false);

const header = [
{ field: 'entityType', width: 200, headerName: 'Type', editable: false },
{ field: 'entityName', width: 200, headerName: 'Name', editable: false },
{ field: 'entityOwner', width: 200, headerName: 'Owner', editable: false }
];

const handleDeleteRoleModalOpen = (uri) => {
setIsDeleteRoleModalOpen(true);
setSelectedVersion(uri);
};
const handleDeleteRoleModalClosed = () => {
setIsDeleteRoleModalOpen(false);
setSelectedVersion(null);
};

const fetchVersions = async () => {
setLoadingVersions(true);
const response = await client.query(
Expand Down Expand Up @@ -99,7 +110,8 @@ export const MetadataFormAttachedEntities = (props) => {
}
}, [client, dispatch]);

const deleteVersion = async (version) => {
const deleteVersion = async () => {
const version = selectedVersion;
setLoading(true);
const response = await client.mutate(
deleteMetadataFormVersion(version.metadataFormUri, version.version)
Expand All @@ -109,6 +121,7 @@ export const MetadataFormAttachedEntities = (props) => {
response.data &&
response.data.deleteMetadataFormVersion !== null
) {
handleDeleteRoleModalClosed();
await fetchVersions();
enqueueSnackbar('Version deleted', {
anchorOrigin: {
Expand Down Expand Up @@ -243,7 +256,7 @@ export const MetadataFormAttachedEntities = (props) => {
onMouseOut={(e) => {
e.currentTarget.style.opacity = 0.5;
}}
onClick={() => deleteVersion(version)}
onClick={() => handleDeleteRoleModalOpen(version)}
/>
)}
</Grid>
Expand Down Expand Up @@ -341,6 +354,23 @@ export const MetadataFormAttachedEntities = (props) => {
))}
</Grid>
</Grid>
<div>
<DeleteObjectWithFrictionModal
objectName={metadataForm.name}
onApply={handleDeleteRoleModalClosed}
onClose={handleDeleteRoleModalClosed}
deleteMessage={
<>
<Typography align={'center'} variant="subtitle2" color="error">
Are you sure you want to delete this version of metadata form ?{' '}
</Typography>
</>
}
open={isDeleteRoleModalOpen}
isAWSResource={false}
deleteFunction={deleteVersion}
/>
</div>
</Box>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ import {
TextField,
Typography
} from '@mui/material';
import { Defaults, Label, PlusIcon } from 'design';
import {
Defaults,
DeleteObjectWithFrictionModal,
Label,
PlusIcon
} from 'design';
import React, { useEffect, useState } from 'react';
import DoNotDisturbAltOutlinedIcon from '@mui/icons-material/DoNotDisturbAltOutlined';
import { fetchEnums, listValidEnvironments, useClient } from 'services';
Expand Down Expand Up @@ -434,6 +439,8 @@ export const MetadataFormEnforcement = (props) => {
pageSize: 5,
page: 0
});
const [selectedRuleUri, setSelectedRuleUri] = useState(null);
const [isDeleteRoleModalOpen, setIsDeleteRoleModalOpen] = useState(false);
const [selectedEntity, setSelectedEntity] = useState([]);
const [loading, setLoading] = useState(true);
const [loadingAffected, setLoadingAffected] = useState(true);
Expand All @@ -457,6 +464,15 @@ export const MetadataFormEnforcement = (props) => {
}
];

const handleDeleteRoleModalOpen = (uri) => {
setIsDeleteRoleModalOpen(true);
setSelectedRuleUri(uri);
};
const handleDeleteRoleModalClosed = () => {
setIsDeleteRoleModalOpen(false);
setSelectedRuleUri(null);
};

const fetchEntityTypesWithScope = async () => {
const response = await client.query(listEntityTypesWithScope());
if (
Expand Down Expand Up @@ -495,11 +511,13 @@ export const MetadataFormEnforcement = (props) => {
setLoading(false);
};

const deleteRule = async (rule_uri) => {
const deleteRule = async () => {
const rule_uri = selectedRuleUri;
const response = await client.mutate(
deleteMetadataFormEnforcementRule(metadataForm.uri, rule_uri)
);
if (!response.errors) {
handleDeleteRoleModalClosed();
if (selectedRule.uri === rule_uri) {
setSelectedRule(null);
setAffectedEntities([]);
Expand Down Expand Up @@ -673,19 +691,21 @@ export const MetadataFormEnforcement = (props) => {
</Grid>
<Grid item lg={1} xl={1}>
{canEdit && (
<DeleteIcon
sx={{ color: 'primary.main', opacity: 0.5 }}
onMouseOver={(e) => {
e.currentTarget.style.opacity = 1;
}}
onMouseOut={(e) => {
e.currentTarget.style.opacity = 0.5;
}}
onClick={(e) => {
e.stopPropagation();
deleteRule(rule.uri);
}}
/>
<>
<DeleteIcon
sx={{ color: 'primary.main', opacity: 0.5 }}
onMouseOver={(e) => {
e.currentTarget.style.opacity = 1;
}}
onMouseOut={(e) => {
e.currentTarget.style.opacity = 0.5;
}}
onClick={(e) => {
e.stopPropagation();
handleDeleteRoleModalOpen(rule.uri);
}}
/>
</>
)}
</Grid>
</Grid>
Expand Down Expand Up @@ -716,18 +736,16 @@ export const MetadataFormEnforcement = (props) => {
<DataGrid
rows={affectedEntities.nodes}
columns={header}
paginationMode="server"
pageSize={paginationModel.pageSize}
rowsPerPageOptions={[5, 10, 20]}
onPageSizeChange={async (newPageSize) => {
setPaginationModel({
...paginationModel,
pageSize: newPageSize
pageSize: newPageSize,
page: 0
});
await fetchAffectedEntities(
selectedRule,
paginationModel.page,
newPageSize
);
await fetchAffectedEntities(selectedRule, 0, newPageSize);
}}
page={paginationModel.page}
onPageChange={async (newPage) => {
Expand Down Expand Up @@ -776,6 +794,23 @@ export const MetadataFormEnforcement = (props) => {
onCancel={() => setShowCreateRuleModal(false)}
/>
)}
<div>
<DeleteObjectWithFrictionModal
objectName={metadataForm.name}
onApply={handleDeleteRoleModalClosed}
onClose={handleDeleteRoleModalClosed}
deleteMessage={
<>
<Typography align={'center'} variant="subtitle2" color="error">
Are you sure you want to delete this enforcement rule ?{' '}
</Typography>
</>
}
open={isDeleteRoleModalOpen}
isAWSResource={false}
deleteFunction={deleteRule}
/>
</div>
</Box>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ const EditTable = (props) => {
const addField = () => {
localFields.push({
id: uuidv4(),
name: 'New Field',
name: '',
required: false,
metadataFormUri: formUri,
type: fieldTypeOptions[0].value,
Expand Down Expand Up @@ -178,8 +178,8 @@ const EditTable = (props) => {
<TableCell>
<TextField
disabled={field.deleted}
defaultValue={field.name}
onKeyUp={(event) => {
value={field.name}
onChange={(event) => {
updateField(index, 'name', event.target.value);
}}
sx={{ width: '100%' }}
Expand Down Expand Up @@ -211,9 +211,9 @@ const EditTable = (props) => {
<TableCell>
<TextField
disabled={field.deleted}
defaultValue={field.description}
value={field?.description}
sx={{ width: '100%' }}
onKeyUp={(event) => {
onChange={(event) => {
updateField(index, 'description', event.target.value);
}}
/>
Expand Down
4 changes: 3 additions & 1 deletion frontend/src/modules/Metadata_Forms/components/fields.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ export const BooleanField = (props) => {
control={
<Checkbox
id={field.name}
defaultChecked={JSON.parse(field.value)}
defaultChecked={
field.value !== undefined ? JSON.parse(field.value) : false
}
onChange={(event, checked) => onChange(checked)}
/>
}
Expand Down
Loading
Loading