From c139e129bf8a1e8e8c944480361a30f3efca5fdc Mon Sep 17 00:00:00 2001 From: elforjani13 <39470382+elforjani13@users.noreply.github.com> Date: Sun, 21 Nov 2021 01:13:41 +0200 Subject: [PATCH] feat: roles permission & style & component. --- src/common/classes.js | 1 + .../Users/Roles/RolesForm/RolesForm.js | 94 +++++++++++ .../Users/Roles/RolesForm/RolesForm.schema.js | 17 ++ .../Users/Roles/RolesForm/RolesFormContent.js | 72 +++++++++ .../Users/Roles/RolesForm/RolesFormPage.js | 15 ++ .../Roles/RolesForm/RolesFormProvider.js | 60 +++++++ .../Users/Roles/RolesForm/components.js | 150 ++++++++++++++++++ .../Roles/RolesLanding/RolesDataTable.js | 28 ++++ .../Users/Roles/RolesLanding/RolesList.js | 18 +++ .../Roles/RolesLanding/RolesListProvider.js | 28 ++++ .../Users/Roles/RolesLanding/components.js | 54 +++++++ src/containers/Preferences/Users/RolesList.js | 0 src/containers/Preferences/Users/Users.js | 13 +- .../Preferences/Users/UsersActions.js | 33 ++-- src/hooks/query/index.js | 1 + src/hooks/query/roles.js | 77 +++++++++ src/hooks/query/types.js | 7 + src/routes/preferences.js | 8 +- src/routes/preferencesTabs.js | 22 +-- src/style/pages/Preferences/Roles/Form.scss | 58 +++++++ src/style/pages/Preferences/Users.scss | 18 ++- 21 files changed, 730 insertions(+), 44 deletions(-) create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/RolesForm.js create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/RolesForm.schema.js create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/RolesFormContent.js create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/RolesFormPage.js create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/RolesFormProvider.js create mode 100644 src/containers/Preferences/Users/Roles/RolesForm/components.js create mode 100644 src/containers/Preferences/Users/Roles/RolesLanding/RolesDataTable.js create mode 100644 src/containers/Preferences/Users/Roles/RolesLanding/RolesList.js create mode 100644 src/containers/Preferences/Users/Roles/RolesLanding/RolesListProvider.js create mode 100644 src/containers/Preferences/Users/Roles/RolesLanding/components.js delete mode 100644 src/containers/Preferences/Users/RolesList.js create mode 100644 src/hooks/query/roles.js create mode 100644 src/style/pages/Preferences/Roles/Form.scss diff --git a/src/common/classes.js b/src/common/classes.js index bea33a718..e1df0b33f 100644 --- a/src/common/classes.js +++ b/src/common/classes.js @@ -67,6 +67,7 @@ const CLASSES = { PREFERENCES_PAGE_INSIDE_CONTENT_CURRENCIES: 'preferences-page__inside-content--currencies', PREFERENCES_PAGE_INSIDE_CONTENT_ACCOUNTANT: 'preferences-page__inside-content--accountant', PREFERENCES_PAGE_INSIDE_CONTENT_SMS_INTEGRATION: 'preferences-page__inside-content--sms-integration', + PREFERENCES_PAGE_INSIDE_CONTENT_ROLES_FORM: 'preferences-page__inside-content--roles-form', FINANCIAL_REPORT_INSIDER: 'dashboard__insider--financial-report', diff --git a/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.js b/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.js new file mode 100644 index 000000000..fbbd63d51 --- /dev/null +++ b/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.js @@ -0,0 +1,94 @@ +import React from 'react'; +import intl from 'react-intl-universal'; +import { Formik } from 'formik'; + +import 'style/pages/Preferences/Roles/Form.scss'; + +import { Intent } from '@blueprintjs/core'; + +import { AppToaster, FormattedMessage as T } from 'components'; + +import { CreateRolesFormSchema, EditRolesFormSchema } from './RolesForm.schema'; + +import { useRolesFormContext } from './RolesFormProvider'; + +import RolesFormContent from './RolesFormContent'; +import withDashboardActions from 'containers/Dashboard/withDashboardActions'; + +import { compose } from 'utils'; + +const defaultValues = { + role_name: 'Default', + role_description: '', + permissions: {}, +}; + +/** + * Preferences - Roles Form. + */ +function RolesForm({ + // #withDashboardActions + changePreferencesPageTitle, +}) { + const { createRoleMutate, editRoleMutate, permissions } = + useRolesFormContext(); + + // Initial values. + const initialValues = { + ...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(() => { + changePreferencesPageTitle(); + }, [changePreferencesPageTitle]); + + const handleFormSubmit = (values, { setSubmitting, resetForm }) => { + const form = { + ...values, + }; + + // Handle the request success. + const onSuccess = () => { + AppToaster.show({ + message: '', + intent: Intent.SUCCESS, + }); + }; + // Handle the request error. + const onError = ( + { + // response: { + // data: { errors }, + // }, + }, + ) => { + setSubmitting(false); + }; + + createRoleMutate(form).then(onSuccess).catch(onError); + }; + + return ( + + ); +} + +export default compose(withDashboardActions)(RolesForm); diff --git a/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.schema.js b/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.schema.js new file mode 100644 index 000000000..dce8eb3cc --- /dev/null +++ b/src/containers/Preferences/Users/Roles/RolesForm/RolesForm.schema.js @@ -0,0 +1,17 @@ +import * as Yup from 'yup'; +import intl from 'react-intl-universal'; +import { DATATYPES_LENGTH } from 'common/dataTypes'; + +const Schema = Yup.object().shape({ + role_name: Yup.string().label(intl.get('name')).required(), + role_description: Yup.string().nullable().max(DATATYPES_LENGTH.TEXT), + + permissions: Yup.object().shape({ + subject: Yup.string(), + ability: Yup.string(), + value: Yup.boolean(), + }), +}); + +export const CreateRolesFormSchema = Schema; +export const EditRolesFormSchema = Schema; diff --git a/src/containers/Preferences/Users/Roles/RolesForm/RolesFormContent.js b/src/containers/Preferences/Users/Roles/RolesForm/RolesFormContent.js new file mode 100644 index 000000000..539989c6a --- /dev/null +++ b/src/containers/Preferences/Users/Roles/RolesForm/RolesFormContent.js @@ -0,0 +1,72 @@ +import React from 'react'; +import { useHistory } from 'react-router-dom'; +import { ErrorMessage, FastField, Form, useFormikContext } from 'formik'; +import { + Button, + FormGroup, + InputGroup, + Intent, + TextArea, +} from '@blueprintjs/core'; +import { inputIntent } from 'utils'; +import { FormattedMessage as T, FieldRequiredHint } from 'components'; + +import { RolesPermissionList } from './components'; + +/** + * Preferences - Roles Form content. + */ +export default function RolesFormContent() { + const history = useHistory(); + + const { isSubmitting } = useFormikContext(); + + const handleCloseClick = () => { + history.go(-1); + }; + + return ( +
+ {/* ---------- name ---------- */} + + {({ field, meta: { error, touched } }) => ( + } + labelInfo={} + className={'form-group--name'} + intent={inputIntent({ error, touched })} + helperText={} + inline={true} + > + + + )} + + + {/* ---------- description ---------- */} + + {({ field, meta: { error, touched } }) => ( + } + className={'form-group--description'} + intent={inputIntent({ error, touched })} + helperText={} + inline={true} + > +