diff --git a/src/components/EditSections/EditUserRoles/EditUserRoles.js b/src/components/EditSections/EditUserRoles/EditUserRoles.js index 328709883..b3dc34284 100644 --- a/src/components/EditSections/EditUserRoles/EditUserRoles.js +++ b/src/components/EditSections/EditUserRoles/EditUserRoles.js @@ -36,7 +36,7 @@ function EditUserRoles({ accordionId, form:{ change }, user, setAssignedRoleIds, } else { refetch(); } - }, [affiliations, stripes.okapi.tenant, tenantId]); + }, [affiliations, stripes.okapi.tenant, setTenantId, tenantId, refetch]); const changeUserRoles = (roleIds) => { change(`assignedRoleIds[${tenantId}]`, roleIds); @@ -50,12 +50,12 @@ function EditUserRoles({ accordionId, form:{ change }, user, setAssignedRoleIds, const listItemsData = useMemo(() => { if (isEmpty(assignedRoleIds[tenantId]) || isAllRolesDataLoading) return []; - return assignedRoleIds[tenantId].map(i => { - const foundUserRole = allRolesMapStructure.get(i.roleId); + return assignedRoleIds[tenantId].map(roleId => { + const foundUserRole = allRolesMapStructure.get(roleId); return { name: foundUserRole?.name, id: foundUserRole?.id }; }); - }, [assignedRoleIds, isAllRolesDataLoading, allRolesMapStructure]); + }, [assignedRoleIds, isAllRolesDataLoading, allRolesMapStructure, tenantId]); const unassignAllMessage = ; const renderRoleComponent = (fields) => (_, index) => { - const tenantValue = fields.value[tenantId]; + const tenantValue = fields.value; if (isEmpty(tenantValue)) return null; const roleId = tenantValue[index]; @@ -106,7 +106,7 @@ function EditUserRoles({ accordionId, form:{ change }, user, setAssignedRoleIds, return ( @@ -173,8 +173,11 @@ EditUserRoles.propTypes = { match: PropTypes.shape({ params: { id: PropTypes.string } }), accordionId: PropTypes.string, form: PropTypes.object.isRequired, + user: PropTypes.object.isRequired, assignedRoleIds: PropTypes.object.isRequired, setAssignedRoleIds: PropTypes.func.isRequired, + tenantId: PropTypes.string.isRequired, + setTenantId: PropTypes.func.isRequired }; export default withRouter(EditUserRoles); diff --git a/src/components/EditSections/EditUserRoles/components/UserRolesList/UserRolesList.js b/src/components/EditSections/EditUserRoles/components/UserRolesList/UserRolesList.js index 1efd1192b..f0155efbe 100644 --- a/src/components/EditSections/EditUserRoles/components/UserRolesList/UserRolesList.js +++ b/src/components/EditSections/EditUserRoles/components/UserRolesList/UserRolesList.js @@ -82,6 +82,7 @@ UserRolesList.propTypes = { ).isRequired, toggleRole: PropTypes.func.isRequired, toggleAllRoles: PropTypes.func.isRequired, + tenantId: PropTypes.string.isRequired }; export default UserRolesList; diff --git a/src/components/EditSections/EditUserRoles/components/UserRolesModal/UserRolesModal.js b/src/components/EditSections/EditUserRoles/components/UserRolesModal/UserRolesModal.js index 48a6d57b9..d64ebef2c 100644 --- a/src/components/EditSections/EditUserRoles/components/UserRolesModal/UserRolesModal.js +++ b/src/components/EditSections/EditUserRoles/components/UserRolesModal/UserRolesModal.js @@ -47,18 +47,17 @@ export default function UserRolesModal({ isOpen, const toggleRole = (id) => { if (assignedRoleIds[tenantId]?.includes(id)) { - setAssignedRoleIds({...assignedRoleIds, [tenantId]: assignedRoleIds[tenantId].filter(role => role !== id)}); + setAssignedRoleIds({ ...assignedRoleIds, [tenantId]: assignedRoleIds[tenantId].filter(role => role !== id) }); } else { - setAssignedRoleIds({...assignedRoleIds, [tenantId]: assignedRoleIds[tenantId].concat(id)}); + setAssignedRoleIds({ ...assignedRoleIds, [tenantId]: assignedRoleIds[tenantId].concat(id) }); } }; const toggleAllRoles = (checked) => { if (checked) { - setAssignedRoleIds({...assignedRoleIds, [tenantId]: allRolesData?.roles.map(role => role.id)}); - } - else { - setAssignedRoleIds({...assignedRoleIds, [tenantId]: []}); + setAssignedRoleIds({ ...assignedRoleIds, [tenantId]: allRolesData?.roles.map(role => role.id) }); + } else { + setAssignedRoleIds({ ...assignedRoleIds, [tenantId]: [] }); } }; @@ -188,4 +187,5 @@ UserRolesModal.propTypes = { onClose: PropTypes.func.isRequired, initialRoleIds: PropTypes.object, changeUserRoles: PropTypes.func.isRequired, + tenantId: PropTypes.string.isRequired, }; diff --git a/src/components/Wrappers/withUserRoles.js b/src/components/Wrappers/withUserRoles.js index 9d09ad48b..81c74e231 100644 --- a/src/components/Wrappers/withUserRoles.js +++ b/src/components/Wrappers/withUserRoles.js @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useState } from 'react'; -//import { groupBy, keyBy, keys, merge, union, values } from 'lodash'; +// import { groupBy, keyBy, keys, merge, union, values } from 'lodash'; import { useStripes, useOkapiKy, useCallout } from '@folio/stripes/core'; import isEqual from 'lodash/isEqual'; @@ -43,8 +43,8 @@ const withUserRoles = (WrappedComponent) => (props) => { }).sort((a, b) => a.name.localeCompare(b.name)).map(r => r.id); setTenantsLoaded(tenantsLoaded.concat(tenantId)); - setAssignedRoleIds({...assignedRoleIds, [tenantId]: assignedRoles}); - setInitialAssignedRoleIds({...assignedRoleIds, [tenantId]: assignedRoles}); + setAssignedRoleIds({ ...assignedRoleIds, [tenantId]: assignedRoles }); + setInitialAssignedRoleIds({ ...assignedRoleIds, [tenantId]: assignedRoles }); }, [allRolesMapStructure]); useEffect(() => { @@ -64,15 +64,17 @@ const withUserRoles = (WrappedComponent) => (props) => { [userId, isAllRolesDataLoading, setAssignedRoleIdsOnLoad, tenantId]); const updateUserRoles = (roleIds) => { - Object.keys(roleIds).forEach(async (tenantIdKey) => { - await api.put( + Object.keys(roleIds).forEach((tenantIdKey) => { + // Using ky so we can override tenant header + ky.put( `roles/users/${userId}`, { json: { userId, roleIds: roleIds[tenantIdKey], - }, headers: { 'X-Okapi-Tenant': tenantIdKey } }, + }, + headers: { 'X-Okapi-Tenant': tenantIdKey } }, ).json() // eslint-disable-next-line no-console - .catch(sendErrorCallout); + .catch(sendErrorCallout); }); }; diff --git a/src/views/UserEdit/UserEdit.js b/src/views/UserEdit/UserEdit.js index 9187fa888..a6818a9ab 100644 --- a/src/views/UserEdit/UserEdit.js +++ b/src/views/UserEdit/UserEdit.js @@ -10,7 +10,7 @@ import { find, omit, get, - compact, + compact } from 'lodash'; import { LoadingView } from '@folio/stripes/components'; @@ -54,6 +54,8 @@ class UserEdit extends React.Component { */ assignedRoleIds: PropTypes.object, setAssignedRoleIds: PropTypes.func, + tenantId: PropTypes.string, + setTenantId: PropTypes.func, isCreateKeycloakUserConfirmationOpen: PropTypes.bool, initialAssignedRoleIds: PropTypes.arrayOf(PropTypes.string), checkAndHandleKeycloakAuthUser: PropTypes.func, diff --git a/src/views/UserEdit/UserForm.js b/src/views/UserEdit/UserForm.js index 2c191747d..46762a39e 100644 --- a/src/views/UserEdit/UserForm.js +++ b/src/views/UserEdit/UserForm.js @@ -26,6 +26,7 @@ import { import { EditCustomFieldsRecord } from '@folio/stripes/smart-components'; import stripesFinalForm from '@folio/stripes/final-form'; +import { set } from 'lodash'; import { USER_TYPES } from '../../constants'; import { EditUserInfo, @@ -110,7 +111,9 @@ class UserForm extends React.Component { onCancelKeycloakConfirmation: PropTypes.func, confirmCreateKeycloakUser: PropTypes.func, setAssignedRoleIds: PropTypes.func, - assignedRoleIds: PropTypes.object + assignedRoleIds: PropTypes.object, + setTenantId: PropTypes.func, + tenantId: PropTypes.string }; static defaultProps = {