From b311eb6e462f39a5673c554883c0412e76a4a17c Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Fri, 7 Jun 2024 15:24:02 +0300 Subject: [PATCH 1/3] #10414: Remove the list of associated groups of logged in user from the User Details modal window Description: - handle hide group info in user details modal by adding a cfg in Login plugin 'hideGroupUserInfo' - add unit test --- .../security/modals/UserDetailsModal.jsx | 21 ++++++--- .../__tests__/UserDetailsModal-test.jsx | 45 +++++++++++++++++++ 2 files changed, 59 insertions(+), 7 deletions(-) diff --git a/web/client/components/security/modals/UserDetailsModal.jsx b/web/client/components/security/modals/UserDetailsModal.jsx index eb73083452..35c869480f 100644 --- a/web/client/components/security/modals/UserDetailsModal.jsx +++ b/web/client/components/security/modals/UserDetailsModal.jsx @@ -18,6 +18,7 @@ import { isArray, isObject, isString } from 'lodash'; /** * A Modal window to show password reset form + * @prop {bool} hideGroupUserInfo It is a flag from Login plugin (cfg.toolsCfg[0].hideGroupUserInfo): to show/hide user group in user details info, by default `false` */ class UserDetails extends React.Component { static propTypes = { @@ -26,7 +27,8 @@ class UserDetails extends React.Component { show: PropTypes.bool, options: PropTypes.object, onClose: PropTypes.func, - includeCloseButton: PropTypes.bool + includeCloseButton: PropTypes.bool, + hideGroupUserInfo: PropTypes.bool }; static defaultProps = { @@ -35,23 +37,28 @@ class UserDetails extends React.Component { }, onClose: () => {}, options: {}, - includeCloseButton: true + includeCloseButton: true, + hideGroupUserInfo: false }; getUserInfo = () => { - return { + let mainUserInfo = { name: v => {v}, role: v => {this.capitalCase(v)}, email: v => {v}, company: v => {v}, - notes: v => {v}, - groups: groups => { + notes: v => {v} + }; + + if (!this.props.hideGroupUserInfo) { + mainUserInfo.groups = groups => { const gr = isArray(groups) && [...groups] || groups.group && isArray(groups.group) && [...groups.group] || groups.group && isObject(groups.group) && [{...groups.group}]; return gr && gr.map(group => { return group.groupName &&
{group.groupName}
|| null; }).filter(v => v) || null; - } - }; + }; + } + return mainUserInfo; } renderAttributes = () => { diff --git a/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx b/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx index 5a82ff6dcf..cb9245173b 100644 --- a/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx +++ b/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx @@ -75,4 +75,49 @@ describe("Test user details modal", () => { expect(modalDOM.getElementsByClassName('row').length).toEqual(6); }); + it('test hide group user info if hideGroupUserInfo = true', () => { + let testUser = { + "attribute": [ + { + "name": "company", + "value": "Some Company" + }, + { + "name": "email", + "value": "user@email.com" + }, + { + "name": "notes", + "value": "some notes" + }, + { + "name": "UUID", + "value": "260a670e-4dc0-4719-8bc9-85555d7dcbe1" + } + ], + "enabled": true, + "groups": { + "group": { + "enabled": true, + "groupName": "everyone", + "id": 3 + } + }, + "id": 6, + "name": "admin", + "role": "ADMIN" + }; + let displayAttributes = (attr) => { + return attr.name && attr.name === "email" || attr.name === "company"; + }; + const cmpNormal = ReactDOM.render(, document.getElementById("container")); + expect(cmpNormal).toExist(); + const modalDOMNormal = document.getElementsByClassName('ms-resizable-modal')[0]; + expect(modalDOMNormal.getElementsByClassName('row').length).toEqual(6); // includes group info + + const cmpWithHide = ReactDOM.render(, document.getElementById("container")); + expect(cmpWithHide).toExist(); + const modalDOM = document.getElementsByClassName('ms-resizable-modal')[0]; + expect(modalDOM.getElementsByClassName('row').length).toEqual(5); // not include group info + }); }); From 4c27e18fbf808620d98db8060d7ac3dca47db6fa Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Fri, 14 Jun 2024 09:13:58 +0300 Subject: [PATCH 2/3] #10414: Remove the list of associated groups of logged in user from the User Details modal window Description: - add migration guide notes related to the PR changes - edit in unit tests --- .../mapstore-migration-guide.md | 19 +++++++++++++++++++ .../security/modals/UserDetailsModal.jsx | 2 +- .../__tests__/UserDetailsModal-test.jsx | 4 ++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/developer-guide/mapstore-migration-guide.md b/docs/developer-guide/mapstore-migration-guide.md index 984100e0bb..5af5714a09 100644 --- a/docs/developer-guide/mapstore-migration-guide.md +++ b/docs/developer-guide/mapstore-migration-guide.md @@ -20,6 +20,25 @@ This is a list of things to check if you want to update from a previous version - Optionally check also accessory files like `.eslinrc`, if you want to keep aligned with lint standards. - Follow the instructions below, in order, from your version to the one you want to update to. +## Migration from 2024.01.00 to 2024.01.01 + +### Option to hide the group info of logged in user from user details modal window + +Recently, we have added the option to hide the `user group info` from the user details modal. To enable this, you have to add a cfg in all `Login` plugin into localConfig like: + +```json +{ + "name": "Login", + "cfg": { "toolsCfg": [{"hideGroupUserInfo": true}] } +} +``` + +where the first index of toolsCfg is for `userDetails` component that is responsible for displaying the user details including `user group info` + +- Important notes should be considered: + - If the mentioned cfg is put into an index rather than the 1st one, it will not work as expected, so the index should be respected. + - This may not work if the project includes a customized Login plugin. + ## Migration from 2023.02.02 to 2024.01.00 ### TOC plugin refactor diff --git a/web/client/components/security/modals/UserDetailsModal.jsx b/web/client/components/security/modals/UserDetailsModal.jsx index 35c869480f..7242193f2c 100644 --- a/web/client/components/security/modals/UserDetailsModal.jsx +++ b/web/client/components/security/modals/UserDetailsModal.jsx @@ -54,7 +54,7 @@ class UserDetails extends React.Component { mainUserInfo.groups = groups => { const gr = isArray(groups) && [...groups] || groups.group && isArray(groups.group) && [...groups.group] || groups.group && isObject(groups.group) && [{...groups.group}]; return gr && gr.map(group => { - return group.groupName &&
{group.groupName}
|| null; + return group.groupName &&
{group.groupName}
|| null; }).filter(v => v) || null; }; } diff --git a/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx b/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx index cb9245173b..b2a778c500 100644 --- a/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx +++ b/web/client/components/security/modals/__tests__/UserDetailsModal-test.jsx @@ -113,11 +113,11 @@ describe("Test user details modal", () => { const cmpNormal = ReactDOM.render(, document.getElementById("container")); expect(cmpNormal).toExist(); const modalDOMNormal = document.getElementsByClassName('ms-resizable-modal')[0]; - expect(modalDOMNormal.getElementsByClassName('row').length).toEqual(6); // includes group info + expect(modalDOMNormal.querySelector('.user-group-info')).toExist(); // includes group info const cmpWithHide = ReactDOM.render(, document.getElementById("container")); expect(cmpWithHide).toExist(); const modalDOM = document.getElementsByClassName('ms-resizable-modal')[0]; - expect(modalDOM.getElementsByClassName('row').length).toEqual(5); // not include group info + expect(modalDOM.querySelector('.user-group-info')).toNotExist(); // not include group info }); }); From 08a2c90384ed9c0964d1b78556b104969c3e879e Mon Sep 17 00:00:00 2001 From: mahmoudadel54 Date: Tue, 25 Jun 2024 23:31:47 +0300 Subject: [PATCH 3/3] #10414: Remove the list of associated groups of logged in user from the User Details modal window Description: - resolve review comments related to edits in migration file --- docs/developer-guide/mapstore-migration-guide.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/developer-guide/mapstore-migration-guide.md b/docs/developer-guide/mapstore-migration-guide.md index 5c961e5e52..37b4da6b92 100644 --- a/docs/developer-guide/mapstore-migration-guide.md +++ b/docs/developer-guide/mapstore-migration-guide.md @@ -20,11 +20,12 @@ This is a list of things to check if you want to update from a previous version - Optionally check also accessory files like `.eslinrc`, if you want to keep aligned with lint standards. - Follow the instructions below, in order, from your version to the one you want to update to. -## Migration from 2024.01.00 to 2024.02.00 +## Migration from 2024.01.00 to 2024.01.02 ### Option to hide the group info of logged in user from user details modal window -Recently, we have added the option to hide the `user group info` from the user details modal. To enable this, you have to add a cfg in all `Login` plugin into localConfig like: +Recently, we have added the option to hide the `user group info` from the user details modal. +To enable this, you have to add a cfg in all `Login` plugin into `localConfig.json` like: ```json { @@ -35,9 +36,9 @@ Recently, we have added the option to hide the `user group info` from the user d where the first index of toolsCfg is for `userDetails` component that is responsible for displaying the user details including `user group info` -- Important notes should be considered: - - If the mentioned cfg is put into an index rather than the 1st one, it will not work as expected, so the index should be respected. - - This may not work if the project includes a customized Login plugin. +!!! note important notes should be considered: + +- if you have customized the Login plugin and in particular the order of toolsCfg, make sure to override the correct one as the propagation of cfg for the tools is based on index value. ### Integration with openID Connect