Skip to content

Commit

Permalink
Merge pull request #941 from factly/fix-939
Browse files Browse the repository at this point in the history
Fix 939 - Dependent entities should be pre-checked in policies form
  • Loading branch information
shreeharsha-factly authored Jun 27, 2024
2 parents c59a08f + a2a0b03 commit ad1ad95
Showing 1 changed file with 54 additions and 10 deletions.
64 changes: 54 additions & 10 deletions studio/src/pages/policies/components/PolicyForm.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,7 @@ const entities = [
label: 'Ratings',
options: options,
},
{
name: 'policies',
label: 'Policies',
options: options,
},

{
name: 'podcasts',
label: 'Podcasts',
Expand All @@ -87,11 +83,27 @@ const entities = [
options: options,
},
];
const dependencies = {
posts: ['categories', 'tags', 'media'],
categories: ['media'],
tags: ['media'],
formats: ['media'],
factchecks: ['categories', 'tags', 'media', 'claims'],
claims: ['claimants', 'ratings'],
claimants: ['media'],
ratings: ['media'],
podcasts: ['categories', 'media'],
episodes: ['podcasts', 'media'],
menus: [],
pages: ['categories', 'tags', 'media'],
webhooks: ['podcasts'],
};

function PolicyForm({ data = {}, onCreate }) {
const [form] = Form.useForm();
const [valueChange, setValueChange] = React.useState(false);
const [isMobileScreen, setIsMobileScreen] = React.useState(false);
const [checkedValues, setCheckedValues] = React.useState({});

React.useEffect(() => {
const handleResize = () => {
Expand All @@ -105,6 +117,41 @@ function PolicyForm({ data = {}, onCreate }) {
handleResize();
return () => window.removeEventListener('resize', handleResize);
}, []);

const updateDependencies = (newState, entityName) => {
if (dependencies[entityName]) {
dependencies[entityName].forEach((dependency) => {
newState[dependency] = Array.from(new Set([...(newState[dependency] || []), 'get']));
updateDependencies(newState, dependency);
});
}
};

const handleCheckboxChange = (newCheckedValues, entityName) => {
let updatedCheckedValues = [...newCheckedValues];

if (
newCheckedValues.includes('create') ||
newCheckedValues.includes('update') ||
newCheckedValues.includes('delete') ||
newCheckedValues.includes('publish')
) {
updatedCheckedValues = Array.from(new Set([...newCheckedValues, 'get']));
}

setCheckedValues((prevState) => {
const newState = {
...prevState,
[entityName]: updatedCheckedValues,
};

updateDependencies(newState, entityName);

return newState;
});

setValueChange(true);
};
return (
<ConfigProvider
theme={{
Expand Down Expand Up @@ -175,12 +222,9 @@ function PolicyForm({ data = {}, onCreate }) {
<Col md={18} xs={24}>
<Checkbox.Group
style={{ flexWrap: 'wrap', justifyContent: 'space-between' }}
defaultValue={
data.permissions && data.permissions[entity.name]
? data.permissions[entity.name]
: []
}
value={checkedValues[entity.name] || []}
options={entity.options}
onChange={(checkedValues) => handleCheckboxChange(checkedValues, entity.name)}
/>
</Col>
</Row>
Expand Down

0 comments on commit ad1ad95

Please sign in to comment.