feat: submit roles permission schema.

This commit is contained in:
elforjani13
2021-11-21 17:10:49 +02:00
parent b853eb1e75
commit ddbadb67c8
8 changed files with 47 additions and 39 deletions

View File

@@ -1,7 +1,7 @@
import React from 'react'; import React from 'react';
import intl from 'react-intl-universal'; import intl from 'react-intl-universal';
import { Formik } from 'formik'; import { Formik } from 'formik';
import { mapKeys } from 'lodash'; import { mapKeys, omit, pick } from 'lodash';
import 'style/pages/Preferences/Roles/Form.scss'; import 'style/pages/Preferences/Roles/Form.scss';
@@ -12,6 +12,7 @@ import { AppToaster, FormattedMessage as T } from 'components';
import { CreateRolesFormSchema, EditRolesFormSchema } from './RolesForm.schema'; import { CreateRolesFormSchema, EditRolesFormSchema } from './RolesForm.schema';
import { useRolesFormContext } from './RolesFormProvider'; import { useRolesFormContext } from './RolesFormProvider';
import { mapperPermissionSchema } from './utils';
import RolesFormContent from './RolesFormContent'; import RolesFormContent from './RolesFormContent';
import withDashboardActions from 'containers/Dashboard/withDashboardActions'; import withDashboardActions from 'containers/Dashboard/withDashboardActions';
@@ -31,7 +32,7 @@ function RolesForm({
// #withDashboardActions // #withDashboardActions
changePreferencesPageTitle, changePreferencesPageTitle,
}) { }) {
const { createRoleMutate, editRoleMutate, permissions } = const { createRolePermissionMutate, editRolePermissionMutate, permissions } =
useRolesFormContext(); useRolesFormContext();
// Initial values. // Initial values.
@@ -39,47 +40,29 @@ function RolesForm({
...defaultValues, ...defaultValues,
}; };
const MapperPermissionSchema = (data) => {
return data.map(({ role_name, role_description, permissions }) => {
const permission = mapKeys(permissions, (value, key) => {
// return value;
});
return {
role_name: role_name,
role_description: role_description,
permissions: [permission],
};
});
};
React.useEffect(() => { React.useEffect(() => {
changePreferencesPageTitle(<T id={'roles.label'} />); changePreferencesPageTitle(<T id={'roles.label'} />);
}, [changePreferencesPageTitle]); }, [changePreferencesPageTitle]);
const handleFormSubmit = (values, { setSubmitting, resetForm }) => { const handleFormSubmit = (values, { setSubmitting }) => {
const permission = mapperPermissionSchema(values);
const form = { const form = {
...values, ...values,
permissions: permission,
}; };
setSubmitting(true);
// Handle the request success.
const onSuccess = () => { const onSuccess = () => {
AppToaster.show({ AppToaster.show({
message: '', message: intl.get('roles.permisssion_schema.success_message'),
intent: Intent.SUCCESS, intent: Intent.SUCCESS,
}); });
};
// Handle the request error.
const onError = (
{
// response: {
// data: { errors },
// },
},
) => {
setSubmitting(false); setSubmitting(false);
}; };
createRoleMutate(form).then(onSuccess).catch(onError); const onError = (errors) => {
setSubmitting(false);
};
createRolePermissionMutate(form).then(onSuccess).catch(onError);
}; };
return ( return (
@@ -87,8 +70,9 @@ function RolesForm({
initialValues={initialValues} initialValues={initialValues}
validationSchema={CreateRolesFormSchema} validationSchema={CreateRolesFormSchema}
onSubmit={handleFormSubmit} onSubmit={handleFormSubmit}
component={RolesFormContent} >
/> <RolesFormContent />
</Formik>
); );
} }

View File

@@ -3,7 +3,7 @@ import intl from 'react-intl-universal';
import { DATATYPES_LENGTH } from 'common/dataTypes'; import { DATATYPES_LENGTH } from 'common/dataTypes';
const Schema = Yup.object().shape({ const Schema = Yup.object().shape({
role_name: Yup.string().label(intl.get('name')).required(), role_name: Yup.string().required().label(intl.get('roles.label.role_name')),
role_description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), role_description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT),
permissions: Yup.object().shape({ permissions: Yup.object().shape({

View File

@@ -10,7 +10,7 @@ import {
} from '@blueprintjs/core'; } from '@blueprintjs/core';
import { inputIntent } from 'utils'; import { inputIntent } from 'utils';
import { FormattedMessage as T, FieldRequiredHint } from 'components'; import { FormattedMessage as T, FieldRequiredHint } from 'components';
import { useAutofocus } from 'hooks';
import { RolesPermissionList } from './components'; import { RolesPermissionList } from './components';
/** /**
@@ -19,7 +19,8 @@ import { RolesPermissionList } from './components';
export default function RolesFormContent() { export default function RolesFormContent() {
const history = useHistory(); const history = useHistory();
const { isSubmitting } = useFormikContext(); const { isSubmitting, values } = useFormikContext();
const roleNameFieldRef = useAutofocus();
const handleCloseClick = () => { const handleCloseClick = () => {
history.go(-1); history.go(-1);
@@ -35,10 +36,14 @@ export default function RolesFormContent() {
labelInfo={<FieldRequiredHint />} labelInfo={<FieldRequiredHint />}
className={'form-group--name'} className={'form-group--name'}
intent={inputIntent({ error, touched })} intent={inputIntent({ error, touched })}
helperText={<ErrorMessage name={'role_name'} />} helperText={<ErrorMessage name="role_name" />}
inline={true} inline={true}
> >
<InputGroup medium={true} {...field} /> <InputGroup
medium={true}
inputRef={(ref) => (roleNameFieldRef.current = ref)}
{...field}
/>
</FormGroup> </FormGroup>
)} )}
</FastField> </FastField>

View File

@@ -1,5 +1,4 @@
import React from 'react'; import React from 'react';
import RolesForm from './RolesForm'; import RolesForm from './RolesForm';
import { RolesFormProvider } from './RolesFormProvider'; import { RolesFormProvider } from './RolesFormProvider';

View File

@@ -5,8 +5,9 @@ import { CLASSES } from 'common/classes';
import { import {
useCreateRolePermissionSchema, useCreateRolePermissionSchema,
useEditRole, useEditRolePermissionSchema,
usePermissionsSchema, usePermissionsSchema,
useSaveSettings
} from 'hooks/query'; } from 'hooks/query';
import PreferencesPageLoader from '../../../PreferencesPageLoader'; import PreferencesPageLoader from '../../../PreferencesPageLoader';
@@ -28,6 +29,9 @@ function RolesFormProvider({ ...props }) {
isFetching: isPermissionsSchemaFetching, isFetching: isPermissionsSchemaFetching,
} = usePermissionsSchema(); } = usePermissionsSchema();
// Save Organization Settings.
const { mutateAsync: saveSettingMutate } = useSaveSettings();
// Provider state. // Provider state.
const provider = { const provider = {
permissionsSchema, permissionsSchema,
@@ -35,6 +39,7 @@ function RolesFormProvider({ ...props }) {
isPermissionsSchemaFetching, isPermissionsSchemaFetching,
createRolePermissionMutate, createRolePermissionMutate,
editRolePermissionMutate, editRolePermissionMutate,
saveSettingMutate
}; };
return ( return (

View File

@@ -0,0 +1,12 @@
export const mapperPermissionSchema = (data) => {
return [data].map(({ permissions }) =>
Object.keys(permissions).map((item) => {
const [value, key] = item.split('/');
return {
subject: value,
ability: key,
value: permissions[item],
};
}),
);
};

View File

@@ -1473,6 +1473,8 @@
"roles.column.description":"description", "roles.column.description":"description",
"roles.edit_roles":"Edit Roles", "roles.edit_roles":"Edit Roles",
"roles.delete_roles":"Delete Roles", "roles.delete_roles":"Delete Roles",
"roles.label.role_name":"Role name",
"sidebar.transactions_locaking":"Transactions Locaking", "sidebar.transactions_locaking":"Transactions Locaking",
"transactions_locking.dialog.label":"Transactions locking" "transactions_locking.dialog.label":"Transactions locking",
"roles.permisssion_schema.success_message":"The given role hsa been created successfully"
} }