From 48af65c41cc25eadb724d9de8e2406728cd9aac5 Mon Sep 17 00:00:00 2001 From: Hendrik de Graaf Date: Thu, 18 Feb 2021 17:11:59 +0100 Subject: [PATCH 1/4] fix(user-group): remove users field from form to prevent app freezing --- i18n/en.pot | 9 +++----- src/api/index.js | 10 +++++++++ src/containers/GroupForm/GroupForm.js | 21 +++++++++---------- src/containers/GroupForm/collectValidators.js | 8 ++----- src/containers/GroupForm/config.js | 21 +++++++++++-------- 5 files changed, 37 insertions(+), 32 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index 52d55c1ec..90f70d8f7 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2021-02-11T14:12:34.322Z\n" -"PO-Revision-Date: 2021-02-11T14:12:34.322Z\n" +"POT-Creation-Date: 2021-02-18T14:57:42.088Z\n" +"PO-Revision-Date: 2021-02-18T14:57:42.088Z\n" msgid "Use database locale / no translation" msgstr "" @@ -422,10 +422,7 @@ msgstr "" msgid "Code" msgstr "" -msgid "Available users" -msgstr "" - -msgid "Group members" +msgid "You can assign users to this user group in the user section." msgstr "" msgid "Available user groups" diff --git a/src/api/index.js b/src/api/index.js index c5fdd0f1f..2583a76b5 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -301,6 +301,16 @@ class Api { ***** USER GROUPS ******** **************************/ + saveUserGroup(data) { + if (data.id) { + return this.d2Api.update( + `/userGroups/${data.id}?mergeMode=MERGE`, + data + ) + } + return this.d2Api.post('/userGroups', data) + } + getManagedUsers = () => { const data = { fields: ['id', 'displayName', 'userCredentials[username]'], diff --git a/src/containers/GroupForm/GroupForm.js b/src/containers/GroupForm/GroupForm.js index 6178a3699..f4baff0a2 100644 --- a/src/containers/GroupForm/GroupForm.js +++ b/src/containers/GroupForm/GroupForm.js @@ -8,17 +8,13 @@ import CircularProgress from 'material-ui/CircularProgress' import makeTrashable from 'trashable' import navigateTo from '../../utils/navigateTo' import { asyncValidatorSwitch } from '../../utils/validatorsAsync' -import { renderSearchableGroupEditor } from '../../utils/fieldRenderers' +import { + renderSearchableGroupEditor, + renderText, +} from '../../utils/fieldRenderers' import createHumanErrorMessage from '../../utils/createHumanErrorMessage' import { clearItem, showSnackbar, getList } from '../../actions' -import { - FORM_NAME, - NAME, - CODE, - USERS, - MANAGED_GROUPS, - getFields, -} from './config' +import { FORM_NAME, NAME, CODE, MANAGED_GROUPS, getFields } from './config' import { userGroupFormInitialValuesSelector } from '../../selectors' import { USER_GROUP } from '../../constants/entityTypes' import detectCurrentUserChanges from '../../utils/detectCurrentUserChanges' @@ -90,7 +86,6 @@ class GroupForm extends Component { group[NAME] = values[NAME] group[CODE] = values[CODE] - group[USERS] = values[USERS].map(this.createIdValueObject) group[MANAGED_GROUPS] = values[MANAGED_GROUPS].map( this.createIdValueObject ) @@ -100,7 +95,7 @@ class GroupForm extends Component { ) try { - await group.save() + await api.saveUserGroup(group.toJSON()) const msg = i18n.t( 'User group "{{displayName}}" saved successfully', { @@ -142,6 +137,10 @@ class GroupForm extends Component { const labelText = label + suffix const validators = [] + if (fieldRenderer === renderText) { + return renderText(fieldConfig) + } + if (fieldRenderer === renderSearchableGroupEditor) { conf.availableItemsQuery = api[conf.availableItemsQuery] if (isRequiredField) { diff --git a/src/containers/GroupForm/collectValidators.js b/src/containers/GroupForm/collectValidators.js index d83620501..135628404 100644 --- a/src/containers/GroupForm/collectValidators.js +++ b/src/containers/GroupForm/collectValidators.js @@ -1,7 +1,7 @@ /* eslint-disable max-params */ -import { required, requiredArray, code } from '../../utils/validators' -import { USERS, NAME, CODE } from './config' +import { required, code } from '../../utils/validators' +import { NAME, CODE } from './config' export default function collectValidators( props, @@ -17,10 +17,6 @@ export default function collectValidators( validatorsToApply.push(required) } - if (name === USERS) { - validatorsToApply.push(requiredArray) - } - if (name === CODE) { validatorsToApply.push(code) } diff --git a/src/containers/GroupForm/config.js b/src/containers/GroupForm/config.js index 10a765bd9..84965b115 100644 --- a/src/containers/GroupForm/config.js +++ b/src/containers/GroupForm/config.js @@ -1,4 +1,5 @@ import { + renderText, renderTextField, renderSearchableGroupEditor, } from '../../utils/fieldRenderers' @@ -7,11 +8,10 @@ import i18n from '@dhis2/d2-i18n' export const FORM_NAME = 'groupForm' export const NAME = 'name' -export const USERS = 'users' export const CODE = 'code' export const MANAGED_GROUPS = 'managedGroups' -export const GROUP_PROPS = [NAME, CODE, USERS, MANAGED_GROUPS] +export const GROUP_PROPS = [NAME, CODE, MANAGED_GROUPS] export const STYLES = { loaderWrap: { @@ -33,13 +33,16 @@ export const getFields = () => [ fieldRenderer: renderTextField, }, { - name: USERS, - fieldRenderer: renderSearchableGroupEditor, - isRequiredField: true, - initialItemsSelector: group => asArray(group[USERS]), - availableItemsQuery: 'getManagedUsers', - availableItemsLabel: i18n.t('Available users'), - assignedItemsLabel: i18n.t('Group members'), + name: 'manage_users_info', + fieldRenderer: renderText, + label: i18n.t( + 'You can assign users to this user group in the user section.' + ), + style: { + border: '3px solid #2c6693', + backgroundColor: '#d2e5f4', + padding: 12, + }, }, { name: MANAGED_GROUPS, From 1d6eaeff7a5d938ce5fb4fd0a29c9e35ba6265c2 Mon Sep 17 00:00:00 2001 From: Hendrik de Graaf Date: Thu, 18 Feb 2021 20:08:42 +0100 Subject: [PATCH 2/4] fix(user-groups): exclude users field when getting user-group details --- src/constants/queryFields.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/constants/queryFields.js b/src/constants/queryFields.js index a81d5d5de..c919feb20 100644 --- a/src/constants/queryFields.js +++ b/src/constants/queryFields.js @@ -38,6 +38,7 @@ export const USER_ROLE_DETAILS = [ 'access', 'authorities', 'displayName', + '!users', ] export const USER_GROUP_DETAILS = [':owner', 'access', 'displayName'] From 9ae39ca81dc3519e309fb1d8d9709531383dfaf6 Mon Sep 17 00:00:00 2001 From: Austin McGee <947888+amcgee@users.noreply.github.com> Date: Fri, 19 Feb 2021 10:31:37 +0100 Subject: [PATCH 3/4] fix: exclude users from group queries, not role queries --- src/constants/queryFields.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/constants/queryFields.js b/src/constants/queryFields.js index c919feb20..0bd8aeabf 100644 --- a/src/constants/queryFields.js +++ b/src/constants/queryFields.js @@ -38,10 +38,9 @@ export const USER_ROLE_DETAILS = [ 'access', 'authorities', 'displayName', - '!users', ] -export const USER_GROUP_DETAILS = [':owner', 'access', 'displayName'] +export const USER_GROUP_DETAILS = [':owner', 'access', 'displayName', '!users'] export const CURRENT_USER_ORG_UNITS_FIELDS = { fields: [ From c1589696373d1216a2f360408dbd922e36a39c6a Mon Sep 17 00:00:00 2001 From: Hendrik de Graaf Date: Fri, 19 Feb 2021 12:24:06 +0100 Subject: [PATCH 4/4] chore(user-group): tweak users info block style and text --- i18n/en.pot | 8 +++++--- src/containers/GroupForm/config.js | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/i18n/en.pot b/i18n/en.pot index 90f70d8f7..85d5ba339 100644 --- a/i18n/en.pot +++ b/i18n/en.pot @@ -5,8 +5,8 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" -"POT-Creation-Date: 2021-02-18T14:57:42.088Z\n" -"PO-Revision-Date: 2021-02-18T14:57:42.088Z\n" +"POT-Creation-Date: 2021-02-19T11:14:25.649Z\n" +"PO-Revision-Date: 2021-02-19T11:14:25.649Z\n" msgid "Use database locale / no translation" msgstr "" @@ -422,7 +422,9 @@ msgstr "" msgid "Code" msgstr "" -msgid "You can assign users to this user group in the user section." +msgid "" +"To add a user to this group, go to the User section and edit the user group " +"settings for a specific user." msgstr "" msgid "Available user groups" diff --git a/src/containers/GroupForm/config.js b/src/containers/GroupForm/config.js index 84965b115..cdd63f205 100644 --- a/src/containers/GroupForm/config.js +++ b/src/containers/GroupForm/config.js @@ -36,11 +36,11 @@ export const getFields = () => [ name: 'manage_users_info', fieldRenderer: renderText, label: i18n.t( - 'You can assign users to this user group in the user section.' + 'To add a user to this group, go to the User section and edit the user group settings for a specific user.' ), style: { - border: '3px solid #2c6693', - backgroundColor: '#d2e5f4', + border: '1px solid #bdbdbd', + backgroundColor: '#e5e5e5', padding: 12, }, },