{"version":3,"sources":["webpack:///./node_modules/reactstrap/es/FormGroup.js","webpack:///./node_modules/reactstrap/es/FormFeedback.js","webpack:///./app/containers/UserManagement/messages.js","webpack:///./app/components/RolesDisplay/FriendlyScope.js","webpack:///./app/components/RolesDisplay/index.js","webpack:///./app/components/ScopeAssignmentForm/messages.js","webpack:///./app/components/ScopeAssignmentForm/index.js","webpack:///./app/containers/UserManagement/RoleAssignmentForm.js","webpack:///./app/containers/UserManagement/AddEditInviteModal.js","webpack:///./app/containers/UserProfileView/messages.js","webpack:///./app/containers/UserProfileView/constants.js","webpack:///./app/containers/UserProfileView/actions.js","webpack:///./app/containers/UserProfileView/sagas.js","webpack:///./app/containers/UserProfileView/reducer.js","webpack:///./app/containers/UserProfileView/selectors.js","webpack:///./app/containers/UserProfileView/index.js"],"names":["propTypes","children","node","row","bool","check","inline","disabled","tag","className","string","cssModule","object","FormGroup","props","Tag","attributes","classes","createElement","defaultProps","valid","tooltip","undefined","FormFeedback","validMode","defineMessages","UserTitle","id","defaultMessage","PendingTitle","EditAssignments","CancelInvite","CancellingInvite","ResendInvite","ResendingInvite","InviteUser","AddRoleAssignmentHeader","RoleLable","HidePermissionsLabel","ViewPermissionsLabel","AllowPlatformPermissionsLabel","SelectAllSwimlanes","SelectAllSwimlaneMessage","ScopeLabel","userActivityLink","FriendlyScope","scope","roles","swimlanes","roleSrn","includes","role","get","List","find","style","fontStyle","isPlatformRole","swimlane","TextLink","color","to","pathname","search","qs","stringify","srn","RolesDisplay","data","removeRole","Table","marginBottom","borderTop","map","index","title","onClick","ScopeAssignmentForm","scopeInputValue","platformPerm","handleScopeInputChange","handlePlatformPermClick","canSelectAllSwimlanes","isDisabled","scopeOptions","toList","sortBy","toJS","value","resourceId","label","FormLabel","required","margin","messages","Select","menuPlacement","isClearable","isMulti","options","onChange","checked","newVal","Tooltip","anchor","Icon","fontSize","fa","name","tooltipContent","getSelectedRole","roleOption","console","warn","styles","inlineform","display","gridTemplateColumns","alignItems","RoleAssignmentForm","useState","handleRoleOptionChange","hasNonSwimlanePerms","roleAssignments","user","getIn","filter","assignment","Map","getRoleAssignmentsForUser","userScopes","Set","ass","Object","values","forEach","option","push","selectedRoles","restrictToSwimlanes","platformRoles","swimlaneRoles","userRoleAssignments","allUsers","currentUser","userOrg","getCurrentOrg","specialOrgScope","userHasSpecialOrgScope","permissions","idisabled","updatingUserInvite","placeholder","params","onRoleAssignmentSelectionChange","findIndex","selected","concat","getOptionValue","getOptionLabel","gridColumnGap","paddingRight","getRoleLabel","matchingAssignments","length","getValidSwimlaneScopes","Button","thingsToAdd","addToRoleData","_","isEmpty","closeRoleForm","roleData","marginLeft","permissionChecker","SectionHeader","small","spin","AddEditInviteModal","table","height","fontWeight","marginTop","banner","width","backgroundColor","setState","existingScopeMsg","newEmail","newName","shouldClear","showRoleForm","scopeGuy","setTimeout","event","state","scopes","showExistingScopeMsg","key","createOption","preventDefault","email","validFormatting","test","isExisting","unavailableEmails","existing","isPending","pending","emailIsValid","emailMsg","bruh","validateEmail","target","guy","inputValue","type","action","rows","api","getSelectedRows","fromJS","quickCheckValidEmail","inviteUser","getOuttaHereDumbos","urCoolLetsAddYa","existingAssignments","existingUser","assState","ea","updatePendingRoleAssignments","remove","add","dabba","prevState","filterNot","isValid","Input","handleEmailChange","invitingUser","invalid","handleNameChange","canViewData","noTitle","size","isDifferent","roleboi","exists","otherguy","debounce","leading","trailing","roleList","this","clearForm","isOpen","error","toggle","Modal","minWidth","ModalHeader","ModalBody","Error","description","getEditBody","getAddBody","ModalFooter","compareRollyBois","saveInvite","submitInvite","React","Component","mapStateToProps","createStructuredSelector","selectSonraiUserSrn","selectSonraiUsers","selectAllRoles","selectSwimlanes","withConnect","connect","compose","EnableUser","DisableUser","ResetPassword","RoleTitle","UnassignRole","OpenModal","RESET_PASSWORD","resetPassword","createAction","resetPasswordSuccess","userProfileViewSaga","Promise","resolve","done","put","takeLatest","initialState","togglingUser","unassigningRole","userProfileViewReducer","handleActions","set","selectUserProfileViewDomain","selectResettingPassword","createSelector","selectTogglingUser","SquareLoadingAnimation","Breadcrumb","UserProfileView","container","gridTemplateRows","padding","overflow","breadcrumbs","header","columnGap","actionButton","button","border","theme","primary","justifyContent","marginRight","neutralDark","darken","input","paddingLeft","whiteSpace","overflowX","isModalOpen","gridApi","assignments","newVisibility","menuOpen","updateSonraiUser","variables","isActive","users","me","currentUserSrn","WithPermission","multiPermissions","permissionName","openRoleModal","textAlign","info","toggleUserEnabled","updatingSonraiUsers","fail","success","selectedSrns","selectedRows","updateUserRoles","deselectAll","val","parse","location","loading","parseRoles","canAssignUsers","userHasPermission","canEditUser","cursor","BorderedCard","ProfileIcon","img","InlineEditableText","onSubmit","updateName","saving","getActions","DataTable","onLoad","onTableLoad","checkboxSelectedRows","bulkActions","unassignRoles","bulkActionWorking","unassigningRoles","updatingUserRoles","hasCheckBoxes","autosize","selectionChanged","handleSelectionChange","customColumnConfig","headerName","field","hide","flex","cellRendererFramework","closeModal","Helmet","selectSonraiUsersLoading","resettingPassword","selectUnassigningRoles","selectUpdatingSonraiUsers","selectUpdatingUserRoles","dispatch","bindActionCreators","withSaga","injectSaga","saga","withReducer","injectReducer","reducer","themeable"],"mappings":"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","file":"24.a3745acaa255940e5c39.chunk.js","sourcesContent":["import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n row: PropTypes.bool,\n check: PropTypes.bool,\n inline: PropTypes.bool,\n disabled: PropTypes.bool,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object\n};\nvar defaultProps = {\n tag: 'div'\n};\n\nvar FormGroup = function FormGroup(props) {\n var className = props.className,\n cssModule = props.cssModule,\n row = props.row,\n disabled = props.disabled,\n check = props.check,\n inline = props.inline,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"row\", \"disabled\", \"check\", \"inline\", \"tag\"]);\n\n var classes = mapToCssModules(classNames(className, row ? 'row' : false, check ? 'form-check' : 'form-group', check && inline ? 'form-check-inline' : false, check && disabled ? 'disabled' : false), cssModule);\n\n if (Tag === 'fieldset') {\n attributes.disabled = disabled;\n }\n\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormGroup.propTypes = propTypes;\nFormGroup.defaultProps = defaultProps;\nexport default FormGroup;","import _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { mapToCssModules, tagPropType } from './utils';\nvar propTypes = {\n children: PropTypes.node,\n tag: tagPropType,\n className: PropTypes.string,\n cssModule: PropTypes.object,\n valid: PropTypes.bool,\n tooltip: PropTypes.bool\n};\nvar defaultProps = {\n tag: 'div',\n valid: undefined\n};\n\nvar FormFeedback = function FormFeedback(props) {\n var className = props.className,\n cssModule = props.cssModule,\n valid = props.valid,\n tooltip = props.tooltip,\n Tag = props.tag,\n attributes = _objectWithoutPropertiesLoose(props, [\"className\", \"cssModule\", \"valid\", \"tooltip\", \"tag\"]);\n\n var validMode = tooltip ? 'tooltip' : 'feedback';\n var classes = mapToCssModules(classNames(className, valid ? \"valid-\" + validMode : \"invalid-\" + validMode), cssModule);\n return React.createElement(Tag, _extends({}, attributes, {\n className: classes\n }));\n};\n\nFormFeedback.propTypes = propTypes;\nFormFeedback.defaultProps = defaultProps;\nexport default FormFeedback;","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n UserTitle: {\n id: 'app.containers.UserManagement.userTitle',\n defaultMessage: 'All Users',\n },\n PendingTitle: {\n id: 'app.containers.UserManagement.pendingTitle',\n defaultMessage: 'Pending User Invitations',\n },\n EditAssignments: {\n id: 'app.containers.UserManagement.editAssignments',\n defaultMessage: 'Edit Role Assignments',\n },\n CancelInvite: {\n id: 'app.containers.UserManagement.cancelInvite',\n defaultMessage: 'Cancel',\n },\n CancellingInvite: {\n id: 'app.containers.UserManagement.cancellingInvite',\n defaultMessage: 'Canceling...',\n },\n ResendInvite: {\n id: 'app.containers.UserManagement.resendInvite',\n defaultMessage: 'Resend Invitation',\n },\n ResendingInvite: {\n id: 'app.containers.UserManagement.resendingInvite',\n defaultMessage: 'Resending...',\n },\n InviteUser: {\n id: 'app.containers.UserManagement.invitedUser',\n defaultMessage: 'Invite User',\n },\n AddRoleAssignmentHeader: {\n id: 'app.containers.UserManagement.AddRoleAssignmentHeader',\n defaultMessage: 'Add Role Assignment',\n },\n RoleLable: {\n id: 'app.containers.UserManagement.RoleLable',\n defaultMessage: 'Role',\n },\n HidePermissionsLabel: {\n id: 'app.containers.UserManagement.ViewPermissionsLabel',\n defaultMessage: 'hide permissions',\n },\n ViewPermissionsLabel: {\n id: 'app.containers.UserManagement.ViewPermissionsLabel',\n defaultMessage: 'view permissions',\n },\n AllowPlatformPermissionsLabel: {\n id: 'app.containers.UserManagement.AllowPlatformPermissionsLabel',\n defaultMessage: 'Allow Platform Permissions',\n },\n SelectAllSwimlanes: {\n id: 'app.containers.UserManagement.SelectAllSwimlanes',\n defaultMessage: 'All Swimlanes',\n },\n SelectAllSwimlaneMessage: {\n id: 'app.containers.UserManagement.SelectAllSwimlaneMessage',\n defaultMessage:\n 'Assign this role for all swimlanes, including swimlanes created in the future',\n },\n ScopeLabel: {\n id: 'app.containers.UserManagement.ScopeLabel',\n defaultMessage: 'Swimlane(s)',\n },\n userActivityLink: {\n id: 'app.containers.UserManagement.userActivityLink',\n defaultMessage: 'User Activity Logs',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List } from 'immutable'\nimport qs from 'query-string'\n\nimport TextLink from 'components/TextLink'\nimport { isPlatformRole } from 'utils/sonraiUtils'\n\nconst FriendlyScope = ({ scope, roles, swimlanes, roleSrn }) => {\n if (!scope.includes('/Swimlane')) {\n const role = roles\n .get('data', List())\n .find(role => role.get('srn') === roleSrn)\n\n if (!role) {\n return scope\n }\n\n const roleIsPlatform = isPlatformRole(role)\n if (roleIsPlatform) {\n return (Platform)\n } else {\n return (All Swimlanes)\n }\n }\n\n const swimlane = swimlanes.find(\n swimlane => swimlane.get('resourceId') === scope\n )\n\n if (!swimlane) {\n return scope\n }\n\n return (\n \n {swimlane.get('title')}\n \n )\n}\n\nFriendlyScope.propTypes = {\n scope: PropTypes.string,\n roleSrn: PropTypes.string,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n roles: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default FriendlyScope\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { Table } from 'reactstrap'\n\nimport TextLink from 'components/TextLink'\n\nimport FriendlyScope from './FriendlyScope'\n\nconst RolesDisplay = ({ data, swimlanes, removeRole, roles }) => {\n return (\n \n \n \n \n \n \n \n \n {data.map((row, index) => (\n \n \n \n \n \n ))}\n \n
RoleScope\n
{row.role}\n \n \n {\n removeRole(row)\n }\n : undefined\n }\n >\n remove\n \n
\n )\n}\n\nRolesDisplay.propTypes = {\n data: PropTypes.array,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n removeRole: PropTypes.func,\n roles: ImmutablePropTypes.iterable.isRequired,\n}\n\nexport default RolesDisplay\nexport { default as FriendlyScope } from './FriendlyScope'\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n SelectAllSwimlanes: {\n id: 'app.components.ScopeAssignmentForm.SelectAllSwimlanes',\n defaultMessage: 'All Swimlanes',\n },\n SelectAllSwimlaneMessage: {\n id: 'app.components.ScopeAssignmentForm.SelectAllSwimlaneMessage',\n defaultMessage:\n 'Assign this role for all swimlanes, including swimlanes created in the future',\n },\n ScopeLabel: {\n id: 'app.components.ScopeAssignmentForm.ScopeLabel',\n defaultMessage: 'Swimlane(s)',\n },\n})\n","import React from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { FormattedMessage } from 'react-intl'\nimport { FormGroup } from 'reactstrap'\n\nimport FormLabel from 'components/FormLabel'\nimport Select from 'components/Select'\nimport { PlainCheckbox } from 'components/Checkbox'\nimport Icon from 'components/Icon'\nimport Tooltip from 'components/Tooltip'\n\nimport messages from './messages'\n\nexport function ScopeAssignmentForm({\n swimlanes,\n scopeInputValue,\n platformPerm,\n handleScopeInputChange,\n handlePlatformPermClick,\n canSelectAllSwimlanes,\n isDisabled,\n}) {\n const onChangeCheckbox = newVal => {\n handleScopeInputChange([])\n handlePlatformPermClick(newVal)\n }\n\n const scopeOptions = swimlanes\n .toList()\n .sortBy(swimlane => swimlane.get('title'))\n .toJS()\n .map(({ resourceId: value, title: label }) => ({ value, label }))\n\n return (\n
\n \n \n \n \n
\n \n
\n
\n \n
\n {canSelectAllSwimlanes && (\n
\n {' '}\n \n  {' '}\n \n }\n tooltipContent={\n \n }\n />\n
\n )}\n \n
\n )\n}\n\nScopeAssignmentForm.propTypes = {\n swimlanes: ImmutablePropTypes.map.isRequired,\n scopeInputValue: PropTypes.array,\n platformPerm: PropTypes.bool,\n handleScopeInputChange: PropTypes.func,\n handlePlatformPermClick: PropTypes.func,\n canSelectAllSwimlanes: PropTypes.bool,\n isDisabled: PropTypes.bool,\n}\n\nexport default ScopeAssignmentForm\n","import React, { useState } from 'react'\nimport PropTypes from 'prop-types'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport { List, Map, Set } from 'immutable'\nimport { FormattedMessage } from 'react-intl'\nimport { FormGroup } from 'reactstrap'\n\nimport Select from 'components/Select'\nimport permissionChecker from 'containers/PermissionChecker'\nimport Button from 'components/Button'\nimport Icon from 'components/Icon'\nimport Tooltip from 'components/Tooltip'\nimport ScopeAssignmentForm from 'components/ScopeAssignmentForm'\nimport FormLabel from 'components/FormLabel'\nimport { getCurrentOrg } from 'auth/current-org'\nimport { isPlatformRole } from 'utils/sonraiUtils'\nimport _ from 'lodash'\nimport messages from './messages'\nimport TextLink from 'components/TextLink'\n\nfunction getRoleOptions({ roles, selectedRoles, restrictToSwimlanes }) {\n const platformRoles = []\n const swimlaneRoles = []\n\n if (restrictToSwimlanes) {\n roles.get('data', List()).forEach(role => {\n if (!isPlatformRole(role)) {\n swimlaneRoles.push({\n label: role.get('name'),\n value: role.get('srn'),\n })\n }\n })\n\n return swimlaneRoles\n }\n\n roles.get('data', List()).forEach(role => {\n if (isPlatformRole(role)) {\n platformRoles.push({\n label: role.get('name'),\n value: role.get('srn'),\n })\n } else {\n swimlaneRoles.push({\n label: role.get('name'),\n value: role.get('srn'),\n })\n }\n })\n\n return platformRoles\n .filter(\n role =>\n selectedRoles.findIndex(selected => selected.roleSrn === role.value) ===\n -1\n )\n .concat(swimlaneRoles)\n}\n\nfunction getSelectedRole({ roles, roleOption }) {\n if (!roleOption) {\n return null // TODO is this right?\n }\n\n // find the role that is selected\n const role = roles\n .get('data', List())\n .find(role => role.get('srn') === roleOption.value)\n\n if (!role) {\n // eslint-disable-next-line no-console\n console.warn(\n 'could not find role ' +\n roleOption.value +\n ' in list of roles ' +\n roles.toJS()\n )\n return null\n }\n return role\n}\n\nfunction getRoleAssignmentsForUser({ user, role }) {\n if (!user) {\n return []\n }\n const assignments = role\n .getIn(['roleAssignments', 'items'], List())\n .filter(assignment => {\n // we might wanna consider moving this to graphql\n const assUser = assignment.getIn(['user', 'items', 0], Map())\n return assUser.get('srn') === user.get('srn')\n })\n return assignments\n}\n\nconst styles = {\n inlineform: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n alignItems: 'center',\n },\n}\n\nexport function RoleAssignmentForm(props) {\n const [roleOption, handleRoleOptionChange] = useState(null)\n const [scopeInputValue, handleScopeInputChange] = useState(null)\n const [platformPerm, handlePlatformPermClick] = useState(false)\n\n const addRole = () => {\n const thingsToAdd = []\n if (roleOption) {\n if (scopeInputValue) {\n scopeInputValue.forEach(scope => {\n if (scope.value !== 'All') {\n thingsToAdd.push({\n role: roleOption.label,\n roleSrn: roleOption.value,\n scope: scope.value,\n })\n }\n })\n }\n\n const role = getSelectedRole({ ...props, roleOption })\n\n if (role && (platformPerm || isPlatformRole(role))) {\n const specialOrgScope = `/org/${getCurrentOrg()}/*`\n thingsToAdd.push({\n role: roleOption.label,\n roleSrn: roleOption.value,\n scope: specialOrgScope,\n })\n }\n\n props.addToRoleData(thingsToAdd)\n handleScopeInputChange(null)\n handleRoleOptionChange(null)\n handlePlatformPermClick(false)\n }\n }\n\n const role = getSelectedRole({ ...props, roleOption })\n const scopeOptions = []\n const hasNonSwimlanePerms = role ? isPlatformRole(role) : false\n\n if (role != null) {\n const roleAssignments = getRoleAssignmentsForUser({ ...props, role })\n const userScopes = new Set(roleAssignments.map(ass => ass.get('scope')))\n\n if (!hasNonSwimlanePerms) {\n Object.values(props.swimlanes.toJS())\n .filter(({ srn }) => !userScopes.includes(srn))\n .map(({ resourceId: value, title: label }) => ({ value, label }))\n .forEach(option => scopeOptions.push(option))\n }\n }\n\n const getRoleLabel = roleSrn => {\n if (!roleSrn) {\n return\n }\n const role = props.roles\n .get('data', List())\n .find(role => role.get('srn') === roleSrn)\n\n return (\n \n {role.get('name')}\n \n ({isPlatformRole(role) ? 'Platform Role' : 'Swimlane Role'})\n \n }\n tooltipContent={role.get('description')}\n />\n
\n )\n }\n\n const getValidSwimlaneScopes = () => {\n if (platformPerm) {\n return Map()\n }\n\n const matchingAssignments =\n props.selectedRoles.filter(\n assignment => assignment.roleSrn === role.get('srn')\n ) || []\n\n if (matchingAssignments.length === 0) {\n return props.swimlanes\n }\n\n return props.swimlanes.filter(swimlane => {\n const resourceId = swimlane.get('resourceId')\n return !matchingAssignments.find(\n assignment => assignment.scope === resourceId\n )\n })\n }\n\n const isDisabled = () => {\n if (role && !props.updatingUserInvite) {\n if (hasNonSwimlanePerms) {\n if (roleOption) {\n return false\n }\n } else {\n if (!_.isEmpty(scopeInputValue) || platformPerm) {\n return false\n }\n }\n }\n return true\n }\n\n const clearRoleForm = () => {\n handleRoleOptionChange(null)\n handleScopeInputChange(null)\n handlePlatformPermClick(false)\n props.closeRoleForm()\n }\n\n const onOptionChange = params => {\n handleRoleOptionChange(params)\n props.onRoleAssignmentSelectionChange(params)\n }\n\n const userRoleAssignments = props.allUsers.getIn(\n [props.currentUser || '', 'roleAssignments', 'items'],\n List()\n )\n\n const userOrg = getCurrentOrg()\n const specialOrgScope = `/org/${userOrg}/*`\n\n const userHasSpecialOrgScope = !!userRoleAssignments.find(role => {\n const permissions = role.getIn(['role', 'items', 0, 'permissions'])\n return (\n (permissions.includes('edit.roleassignments') ||\n permissions.includes('*')) &&\n role.get('scope') === specialOrgScope\n )\n })\n\n return (\n
\n \n \n \n \n\n option.value}\n getOptionLabel={option => getRoleLabel(option.value)}\n />\n \n\n {roleOption && !hasNonSwimlanePerms && (\n \n )}\n\n \n \n {props.closeRoleForm && !props.roleData.isEmpty() && (\n clearRoleForm()}\n >\n Close Role Form\n \n )}\n \n
\n )\n}\n\nRoleAssignmentForm.defaultProps = {\n style: {},\n}\n\nRoleAssignmentForm.propTypes = {\n // these props are all passed from parent\n addToRoleData: PropTypes.func,\n roles: ImmutablePropTypes.map.isRequired,\n selectedRoles: PropTypes.array,\n style: PropTypes.object,\n swimlanes: ImmutablePropTypes.map,\n closeRoleForm: PropTypes.func,\n roleData: ImmutablePropTypes.iterable,\n onRoleAssignmentSelectionChange: PropTypes.func,\n currentUser: PropTypes.string,\n allUsers: ImmutablePropTypes.iterable,\n\n //Used in getRoleAssignmentsForUser\n user: ImmutablePropTypes.map, //eslint-disable-line react/no-unused-prop-types\n updatingUserInvite: PropTypes.bool,\n restrictToSwimlanes: PropTypes.bool,\n}\n\nexport default permissionChecker(RoleAssignmentForm)\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { FormattedMessage } from 'react-intl'\nimport { createStructuredSelector } from 'reselect'\nimport { compose } from 'redux'\nimport { List, fromJS } from 'immutable'\nimport { connect } from 'react-redux'\nimport Button from 'components/Button'\nimport TextLink from 'components/TextLink'\nimport FormLabel from 'components/FormLabel'\nimport RolesDisplay from 'components/RolesDisplay'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\nimport { selectSonraiUsers } from 'containers/SonraiData/selectors'\nimport {\n selectAllRoles,\n selectSwimlanes,\n} from 'containers/SonraiData/selectors'\nimport {\n Modal,\n ModalHeader,\n ModalBody,\n ModalFooter,\n Input,\n FormGroup,\n FormFeedback,\n} from 'reactstrap'\nimport Icon from 'components/Icon'\nimport SectionHeader from 'components/SectionHeader'\nimport RoleAssignmentForm from './RoleAssignmentForm'\nimport _ from 'lodash'\nimport Error from 'components/Error'\nimport messages from './messages'\n\nexport class AddEditInviteModal extends React.Component {\n styles = {\n table: {\n height: '350px',\n },\n label: {\n fontSize: '1em',\n fontWeight: '400',\n marginTop: '5px',\n },\n banner: {\n width: '100%',\n backgroundColor: 'red',\n },\n }\n\n constructor(props) {\n super(props)\n this.validateEmail = _.debounce(this.validateEmail, 1000, {\n leading: false,\n trailing: true,\n })\n const roleList = []\n if (props.user) {\n if (props.existingUser) {\n props.user.getIn(['roleAssignments', 'items']).forEach(assignment => {\n roleList.push({\n role: assignment.getIn(['role', 'items', 0, 'name']),\n roleSrn: assignment.getIn(['role', 'items', 0, 'srn']),\n scope: assignment.get('scope'),\n })\n })\n } else {\n props.user\n .getIn(['pendingRoleAssignments', 'items'])\n .forEach(assignment => {\n roleList.push({\n role: assignment.getIn(['role', 'items', 0, 'name']),\n roleSrn: assignment.getIn(['role', 'items', 0, 'srn']),\n scope: assignment.get('scope'),\n })\n })\n }\n }\n this.state = {\n roleOption: null,\n emailIsValid: true,\n isValid: true,\n emailMsg: null,\n scopeOptions: [],\n scopeInputValue: '',\n existingScopeMsg: null,\n newEmail: '',\n newName: '',\n roleData: fromJS(roleList),\n selectedRoles: List(),\n shouldClear: false,\n showRoleForm: false,\n }\n }\n\n clearForm = () => {\n this.setState({\n roleOption: null,\n scopeInputValue: '',\n existingScopeMsg: null,\n scopeOptions: [],\n newEmail: '',\n newName: '',\n roleData: List(),\n selectedRoles: List(),\n shouldClear: false,\n showRoleForm: false,\n })\n }\n\n showRoleForm = () => {\n this.setState({\n showRoleForm: true,\n })\n }\n\n createOption = label => ({\n label,\n value: label,\n })\n\n componentDidUpdate() {\n const pending =\n this.props.updatingUserInvite !== undefined\n ? this.props.updatingUserInvite\n : this.props.invitingUser\n\n if (this.state.shouldClear && !pending) {\n this.clearForm()\n if (this.props.isOpen && !this.props.error) {\n this.props.toggle()\n }\n }\n }\n\n showExistingScopeMsg = scopeGuy => {\n this.setState({\n existingScopeMsg: `Role with scope of \"${scopeGuy}\" already exists...`,\n })\n setTimeout(() => {\n this.setState({\n existingScopeMsg: null,\n })\n }, 3000)\n }\n\n handleScopeKeyDown = event => {\n const { scopeInputValue, scopeOptions } = this.state\n if (!scopeInputValue) return\n if (\n scopeOptions &&\n scopeOptions.find(scopes => scopes.label === scopeInputValue)\n ) {\n this.showExistingScopeMsg(scopeInputValue)\n this.setState({ scopeInputValue: '' })\n return\n }\n switch (event.key) {\n case 'Enter':\n case 'Tab':\n this.setState({\n scopeInputValue: '',\n scopeOptions: [...scopeOptions, this.createOption(scopeInputValue)],\n })\n event.preventDefault()\n }\n }\n\n validateEmail = email => {\n // eslint-disable-next-line\n const validFormatting = /^([a-zA-Z0-9+_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$/.test(\n email\n )\n const isExisting = this.props.unavailableEmails.existing.includes(email)\n const isPending = this.props.unavailableEmails.pending.includes(email)\n\n if (!validFormatting || isExisting || isPending) {\n this.setState({\n emailIsValid: false,\n emailMsg: !validFormatting\n ? 'Please enter a valid email.'\n : isExisting\n ? 'This email address is already associated with a user.'\n : isPending\n ? 'This email address already has a pending invite.'\n : null,\n })\n } else {\n this.setState({\n emailIsValid: true,\n emailMsg: null,\n })\n }\n }\n\n handleEmailChange = bruh => {\n this.validateEmail(bruh.target.value)\n this.setState({ newEmail: bruh.target.value })\n }\n\n handleNameChange = bruh => {\n this.setState({ newName: bruh.target.value })\n }\n\n handleRoleOptionChange = guy => {\n this.setState({ roleOption: guy })\n }\n\n handleScopeInputChange = inputValue => {\n this.setState({ scopeInputValue: inputValue })\n }\n\n handleScopeOptionChange = (guy, type) => {\n if (\n (type.action = 'remove-value') &&\n this.state.scopeOptions.length === 1\n ) {\n this.setState({ scopeOptions: [] })\n } else {\n this.setState({ scopeOptions: guy })\n }\n }\n\n handleSelectionChange = event => {\n const rows = event.api.getSelectedRows() || []\n this.setState({ selectedRoles: fromJS(rows) })\n }\n\n quickCheckValidEmail = () => {\n // eslint-disable-next-line\n const validFormatting = /^([a-zA-Z0-9+_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]+)\\.([a-zA-Z]{2,5})$/.test(\n this.state.newEmail\n )\n const isExisting = this.props.unavailableEmails.existing.includes(\n this.state.newEmail\n )\n const isPending = this.props.unavailableEmails.pending.includes(\n this.state.newEmail\n )\n if (!validFormatting || isExisting || isPending) {\n return false\n } else {\n return true\n }\n }\n\n submitInvite = () => {\n if (this.quickCheckValidEmail()) {\n this.props.inviteUser({\n name: this.state.newName,\n email: this.state.newEmail,\n roleAssignments: this.state.roleData\n .toJS()\n .map(role => ({ role: role.roleSrn, scope: role.scope })),\n })\n this.setState({ shouldClear: true })\n }\n }\n\n saveInvite = () => {\n // remove the goons and add the coolguys\n const getOuttaHereDumbos = []\n const urCoolLetsAddYa = []\n const existingAssignments = this.props.existingUser\n ? this.props.user.getIn(['roleAssignments', 'items'], List())\n : this.props.user.getIn(['pendingRoleAssignments', 'items'], List())\n\n this.state.roleData.forEach(assState => {\n if (\n !existingAssignments.find(\n ea =>\n assState.get('roleSrn') ===\n ea.getIn(['role', 'items', 0, 'srn'], null) &&\n assState.get('scope') === ea.getIn(['scope'], null)\n )\n ) {\n urCoolLetsAddYa.push(assState.toJS())\n }\n })\n\n existingAssignments.forEach(existing => {\n if (\n !this.state.roleData.find(\n data =>\n data.get('roleSrn') ===\n existing.getIn(['role', 'items', 0, 'srn'], null) &&\n data.get('scope') === existing.getIn(['scope'], null)\n )\n ) {\n getOuttaHereDumbos.push(existing.get('srn'))\n }\n })\n\n this.props.updatePendingRoleAssignments({\n srn: this.props.user.get('srn'),\n remove: getOuttaHereDumbos,\n add: urCoolLetsAddYa,\n })\n this.setState({ shouldClear: true })\n }\n\n getRoleOptions = () => {\n return this.props.roles\n .get('data')\n .toJS()\n .map(role => {\n return {\n label: role.name,\n value: role.srn,\n }\n })\n }\n\n // TOREMOVE\n addRole = () => {\n const thingsToAdd = []\n if (this.state.roleOption && this.state.scopeOptions) {\n this.state.scopeOptions.forEach(scope => {\n if (\n this.state.roleData.find(\n dabba =>\n dabba.roleSrn === this.state.roleOption.value &&\n dabba.scope === scope.value\n )\n ) {\n return\n } else {\n thingsToAdd.push({\n role: this.state.roleOption.label,\n roleSrn: this.state.roleOption.value,\n scope: scope.value,\n })\n }\n })\n this.setState(prevState => ({\n roleData: prevState.roleData.concat(fromJS(thingsToAdd)),\n }))\n this.setState({ roleOption: null, scopeOptions: [] })\n }\n }\n\n removeRole = data => {\n this.setState(prevState => ({\n roleData: prevState.roleData.filterNot(\n dabba =>\n dabba.get('scope') === data.scope &&\n dabba.get('roleSrn') === data.roleSrn\n ),\n }))\n }\n\n addToRoleData = thingsToAdd => {\n this.setState(prevState => ({\n roleData: prevState.roleData.concat(fromJS(thingsToAdd)),\n showRoleForm: false,\n isValid: true,\n }))\n }\n\n getEditBody = () => {\n const data = this.state.roleData.toJS().map(role => {\n return {\n ...role,\n removeRole: 'remove',\n }\n })\n\n return (\n
\n Assigned Roles\n
\n \n
\n
\n \n \n \n\n \n
\n
\n )\n }\n\n getNoRows = () => {\n return '
No roles added
'\n }\n\n onRoleAssignmentSelectionChange = params => {\n if (params) {\n this.setState({ isValid: false })\n } else {\n this.setState({ isValid: true })\n }\n }\n\n getAddBody = () => {\n const data = (this.state.roleData ? this.state.roleData.toJS() : []).map(\n role => {\n return {\n ...role,\n removeRole: 'remove',\n }\n }\n )\n\n return (\n
\n \n Email Address\n \n \n \n {this.state.emailMsg}\n \n\n Name\n \n \n \n {this.props.canViewData && (\n \n
\n {data.length === 0 && (\n You must assign at least one role.\n )}\n
\n\n {data.length > 0 && (\n \n )}\n\n {data.length > 0 && !this.state.showRoleForm && (\n \n Add Another Role\n \n )}\n\n {(data.length === 0 || this.state.showRoleForm) && (\n \n this.setState({ showRoleForm: false, isValid: true })\n }\n onRoleAssignmentSelectionChange={\n this.onRoleAssignmentSelectionChange\n }\n allUsers={this.props.allUsers}\n currentUser={this.props.currentUser}\n />\n )}\n
\n )}\n
\n )\n }\n\n compareRollyBois = user => {\n const roleSize = this.props.existingUser\n ? user.getIn(['roleAssignments', 'items'], List()).size\n : user.getIn(['pendingRoleAssignments', 'items'], List()).size\n // must be diff\n if (roleSize !== this.state.roleData.size) {\n return true\n } else {\n // loop em and check if they are the same\n let isDifferent = false\n\n const existingBoiz = (this.props.existingUser\n ? user.getIn(['roleAssignments', 'items'], List())\n : user.getIn(['pendingRoleAssignments', 'items'], List())\n ).map(assignment => ({\n roleSrn: assignment.getIn(['role', 'items', 0, 'srn']),\n scope: assignment.get('scope'),\n }))\n\n existingBoiz.forEach(roleboi => {\n let exists = false\n this.state.roleData.forEach(otherguy => {\n if (\n roleboi.roleSrn === otherguy.get('roleSrn') &&\n roleboi.scope === otherguy.get('scope')\n ) {\n exists = true\n }\n })\n if (!exists) {\n isDifferent = true\n }\n })\n\n return isDifferent\n }\n }\n\n render() {\n const { toggle, isOpen, user, error } = this.props\n\n return (\n \n \n {user\n ? `${\n this.props.existingUser ? `User` : `Pending User`\n } ${this.props.user.get('email')}`\n : 'Invite New User'}\n \n \n {!error ? (\n user ? (\n this.getEditBody()\n ) : (\n this.getAddBody()\n )\n ) : (\n \n )}\n \n \n \n Cancel\n \n {user ? (\n \n Save Roles\n \n ) : (\n \n Send Invite\n {this.props.invitingUser && (\n \n \n \n )}\n \n )}\n \n \n )\n }\n}\n\nconst mapStateToProps = createStructuredSelector({\n currentUser: selectSonraiUserSrn,\n allUsers: selectSonraiUsers,\n roles: selectAllRoles,\n swimlanes: selectSwimlanes,\n})\n\nconst withConnect = connect(mapStateToProps)\n\nAddEditInviteModal.propTypes = {\n unavailableEmails: PropTypes.object,\n user: ImmutablePropTypes.map,\n toggle: PropTypes.func,\n isOpen: PropTypes.bool,\n existingUser: PropTypes.bool,\n roles: ImmutablePropTypes.map,\n inviteUser: PropTypes.func,\n invitingUser: PropTypes.bool,\n swimlanes: ImmutablePropTypes.map,\n updatePendingRoleAssignments: PropTypes.func,\n updatingUserInvite: PropTypes.bool,\n canViewData: PropTypes.bool,\n restrictToSwimlanes: PropTypes.bool,\n error: PropTypes.string,\n allUsers: ImmutablePropTypes.iterable,\n currentUser: PropTypes.string,\n}\n\nexport default compose(withConnect)(AddEditInviteModal)\n","import { defineMessages } from 'react-intl'\n\nexport default defineMessages({\n EnableUser: {\n id: 'app.containers.UserProfileView.enableUser',\n defaultMessage: 'Enable User',\n },\n DisableUser: {\n id: 'app.containers.UserProfileView.disableUser',\n defaultMessage: 'Disable User',\n },\n ResetPassword: {\n id: 'app.containers.UserProfileView.resetPasssword',\n defaultMessage: 'Reset Password',\n },\n RoleTitle: {\n id: 'app.containers.UserProfileView.roleTitle',\n defaultMessage: 'Roles for ',\n },\n UnassignRole: {\n id: 'app.containers.UserProfileView.unassignRole',\n defaultMessage: 'Unassign Role(s)',\n },\n OpenModal: {\n id: 'app.containers.UserProfileView.openModal',\n defaultMessage: 'Manage Roles',\n },\n})\n","export const TOGGLE_USER = 'app/UserProfileView/TOGGLE_USER'\nexport const TOGGLE_USER_SUCCESS = 'app/UserProfileView/TOGGLE_USER_SUCCESS'\nexport const UPDATE_USER_ROLES = 'app/UserProfileView/UPDATE_USER_ROLES'\nexport const UPDATE_USER_ROLES_SUCCESS =\n 'app/UserProfileView/UPDATE_USER_ROLES_SUCCESS'\nexport const RESET_PASSWORD = 'app/UserProfileView/RESET_PASSWORD'\nexport const RESET_PASSWORD_SUCCESS =\n 'app/UserProfileView/RESET_PASSWORD_SUCCESS'\n","import { createAction } from 'redux-actions'\nimport { RESET_PASSWORD, RESET_PASSWORD_SUCCESS } from './constants'\n\nexport const resetPassword = createAction(RESET_PASSWORD)\nexport const resetPasswordSuccess = createAction(RESET_PASSWORD_SUCCESS)\n","import { takeLatest, put } from 'redux-saga/effects'\n\n// import { getClient } from 'apolloClient'\n// import gql from 'graphql-tag'\n// import _ from 'lodash'\n\nimport { RESET_PASSWORD } from './constants'\nimport { resetPasswordSuccess } from './actions'\n\nfunction* resetPassword() {\n // const RESET_PASSWORD_MUTATION = `\n // put a query in here pal\n // `\n\n try {\n // const client = getClient()\n // const data = yield client.query({\n // query: gql`\n // ${RESET_PASSWORD_MUTATION}\n // `,\n // variables: {\n // srn: action.payload.srn,\n // },\n // })\n const data = yield new Promise(resolve => {\n setTimeout(() => {\n resolve({ done: true })\n }, 1000)\n })\n if (data) {\n yield put(resetPasswordSuccess())\n }\n } catch (e) {\n //eslint-disable-next-line no-console\n console.error('Error saving user profile', e)\n }\n}\n\nfunction* userProfileViewSaga() {\n yield takeLatest(RESET_PASSWORD, resetPassword)\n}\n\nexport default userProfileViewSaga\n","import { fromJS } from 'immutable'\nimport { handleActions } from 'redux-actions'\nimport { RESET_PASSWORD, RESET_PASSWORD_SUCCESS } from './constants'\n\nconst initialState = fromJS({\n togglingUser: false,\n unassigningRole: false,\n})\n\nconst userProfileViewReducer = handleActions(\n {\n [RESET_PASSWORD]: state => state.set('resettingPassword', true),\n [RESET_PASSWORD_SUCCESS]: state => state.set('resettingPassword', false),\n },\n initialState\n)\n\nexport default userProfileViewReducer\n","import { createSelector } from 'reselect'\nimport { Map, fromJS } from 'immutable'\n\nconst selectUserProfileViewDomain = state =>\n state !== undefined ? state.get('userProfileView', Map()) : fromJS({})\n\n// export const selectUser = createSelector(\n// selectUserProfileViewDomain,\n// data => data.get('user') || Map()\n// )\n\nexport const selectFetchingUser = createSelector(\n selectUserProfileViewDomain,\n data => data.get('fetchingUser')\n)\n\nexport const selectResettingPassword = createSelector(\n selectUserProfileViewDomain,\n data => data.get('resettingPassword')\n)\n\nexport const selectTogglingUser = createSelector(\n selectUserProfileViewDomain,\n data => data.get('togglingUser')\n)\n","import React, { Fragment } from 'react'\nimport ImmutablePropTypes from 'react-immutable-proptypes'\nimport PropTypes from 'prop-types'\nimport { createStructuredSelector } from 'reselect'\nimport { compose, bindActionCreators } from 'redux'\nimport { connect } from 'react-redux'\nimport { push } from 'connected-react-router'\nimport qs from 'query-string'\nimport { FormattedMessage } from 'react-intl'\nimport _ from 'lodash'\n\nimport messages from './messages'\nimport { Helmet } from 'react-helmet'\nimport { ToolbarItem } from 'components/ActionToolbar'\nimport ProfileIcon from 'components/ProfileIcon'\nimport BorderedCard from 'components/BorderedCard'\nimport injectReducer from 'utils/injectReducer'\nimport injectSaga from 'utils/injectSaga'\nimport userProfileViewSaga from './sagas'\nimport userProfileViewReducer from './reducer'\nimport color from 'color'\nimport { resetPassword } from './actions'\nimport { updateUserRoles } from 'containers/SonraiData/actions'\nimport { selectResettingPassword, selectTogglingUser } from './selectors'\nimport {\n selectUpdatingUserRoles,\n selectUnassigningRoles,\n selectSonraiUsers,\n selectSonraiUsersLoading,\n selectUpdatingSonraiUsers,\n selectAllRoles,\n selectSwimlanes,\n} from 'containers/SonraiData/selectors'\nimport { selectSonraiUserSrn } from 'containers/UserProfileData/selectors'\nimport { updateSonraiUser } from 'containers/SonraiData/actions'\nimport { List, fromJS } from 'immutable'\nimport permissionChecker from 'containers/PermissionChecker'\nimport WithPermission from 'containers/PermissionChecker/WithPermission'\nimport Icon from 'components/Icon'\nimport DataTable from 'components/DataTable'\nimport Button from 'components/Button'\nimport SectionHeader from 'components/SectionHeader'\nimport themeable, { themeShape } from 'containers/ThemeManager/Themeable'\nimport Breadcrumb, { BreadcrumbItem } from 'components/Breadcrumb'\nimport SquareLoadingAnimation from 'components/SquareLoadingAnimation'\nimport InlineEditableText from 'components/InlineEditableText'\nimport AddEditInviteModal from 'containers/UserManagement/AddEditInviteModal'\nimport { FriendlyScope } from 'components/RolesDisplay'\n\nexport class UserProfileView extends React.Component {\n styles = {\n container: {\n width: '100%',\n height: '100%',\n display: 'grid',\n gridTemplateRows: 'auto auto 1fr',\n padding: '1rem',\n overflow: 'auto',\n },\n breadcrumbs: {\n fontSize: '1rem',\n margin: '0rem 0rem 0.5rem 0rem',\n },\n header: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr auto',\n columnGap: '0.5em',\n marginBottom: '0.5em',\n },\n actionButton: {\n display: 'grid',\n gridTemplateColumns: '1fr 15px',\n columnGap: '0.35em',\n },\n name: {\n fontSize: '1.5rem',\n marginTop: '-0.3rem',\n },\n email: {\n fontSize: '1rem',\n marginTop: '-0.5rem',\n },\n button: {\n height: '1.85rem',\n fontSize: '0.85rem',\n border: `1px solid ${this.props.theme.primary}`,\n padding: '0.25rem 0.5rem',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n marginRight: '5px',\n color: color(this.props.theme.neutralDark).darken(0.6),\n },\n input: {\n paddingLeft: '0.3em',\n width: '100%',\n whiteSpace: 'nowrap',\n overflowX: 'hidden',\n alignItems: 'center',\n },\n }\n\n constructor(props) {\n super(props)\n this.state = {\n menuOpen: false,\n selectedSrns: List(),\n selectedRows: [],\n isModalOpen: false,\n }\n }\n\n componentWillUnmount() {\n this.gridApi = null\n }\n\n openRoleModal = () => {\n this.setState({ isModalOpen: true })\n }\n\n closeModal = () => {\n this.setState({ isModalOpen: false })\n }\n\n onTableLoad = ({ api }) => {\n this.gridApi = api\n }\n\n parseRoles = assignments => {\n const data = []\n\n assignments.forEach(assignment => {\n data.push({\n srn: assignment.srn,\n scope: assignment.scope,\n role: _.get(assignment, ['role', 'items', 0, 'name']),\n roleSrn: _.get(assignment, ['role', 'items', 0, 'srn']),\n description: _.get(assignment, ['role', 'items', 0, 'description']),\n })\n })\n return data\n }\n\n onPopoverToggle = newVisibility => {\n this.setState({\n menuOpen: newVisibility,\n })\n }\n\n resetPassword = srn => {\n this.props.resetPassword({ srn: srn })\n }\n\n toggleUserEnabled = srn => {\n this.props.updateSonraiUser({\n srn: srn,\n variables: { isActive: !this.props.users.getIn([srn, 'isActive']) },\n me: this.props.currentUserSrn === srn ? true : false,\n })\n }\n\n getActions = srn => {\n return (\n \n
\n {/* \n {\n this.resetPassword(srn)\n }}\n style={this.styles.button}\n disabled={this.props.resettingPassword}\n >\n
\n
\n \n
\n {this.props.resettingPassword ? (\n \n ) : (\n \n )}\n
\n \n */}\n
\n
\n \n \n
\n
\n \n
\n \n
\n \n \n
\n
\n \n {\n this.toggleUserEnabled(srn)\n }}\n style={this.styles.button}\n disabled={this.props.updatingSonraiUsers.get(srn)}\n >\n
\n
\n {this.props.users.getIn([srn, 'isActive']) ? (\n \n ) : (\n \n )}\n
\n {this.props.updatingSonraiUsers.get(srn) ? (\n \n ) : this.props.users.getIn([srn, 'isActive']) ? (\n \n ) : (\n \n )}\n
\n \n \n
\n \n )\n }\n\n handleSelectionChange = event => {\n const rows = event.api.getSelectedRows() || []\n const selectedSrns = []\n rows.forEach(row => {\n selectedSrns.push(row.srn)\n })\n this.setState({ selectedSrns: fromJS(selectedSrns), selectedRows: rows })\n }\n\n unassignRoles = srn => {\n if (this.state.selectedSrns.toJS().length > 0) {\n this.props.updateUserRoles({\n srn: srn,\n remove: this.state.selectedSrns.toJS(),\n })\n this.setState({ selectedSrns: List(), selectedRows: [] })\n if (this.gridApi) {\n this.gridApi.deselectAll()\n }\n }\n }\n\n updateName = val => {\n const srn = qs.parse(this.props.location.search).srn\n this.props.updateSonraiUser({\n srn: srn,\n variables: { name: val },\n me: this.props.currentUserSrn === srn ? true : false,\n })\n }\n\n render() {\n const srn = qs.parse(this.props.location.search).srn\n const user = this.props.users.get(srn)\n if (this.props.loading || !user) {\n return (\n \n \n \n )\n }\n\n const data = this.parseRoles(\n user.getIn(['roleAssignments', 'items'], List()).toJS()\n )\n\n const canAssignUsers = this.props.userHasPermission({\n permissionName: 'edit.roleassignments',\n })\n\n const canEditUser = this.props.userHasPermission({\n permissionName: 'edit.users',\n resourceId: user.get('resourceId'),\n })\n\n return (\n
\n
\n {canEditUser && (\n \n \n this.props.push({ pathname: '/App/UserManagement' })\n }\n >\n All Users\n \n User Profile\n \n )}\n
\n \n
\n \n
\n
\n {canEditUser || srn === this.props.currentUserSrn ? (\n \n \n
\n {user.get('email')}\n
\n
\n ) : (\n \n
{user.get('name')}
\n
{user.get('email')}
\n
\n )}\n
\n
{this.getActions(srn)}
\n
\n\n \n \n \n {user.get('name')}\n \n {this.props.permissions.get('loading') ? (\n \n \n
\n ) : (\n {\n this.unassignRoles(srn)\n }}\n >\n \n ,\n ]\n : undefined\n }\n bulkActionWorking={\n canEditUser &&\n (this.props.unassigningRoles || this.props.updatingUserRoles)\n }\n hasCheckBoxes={canEditUser}\n autosize={false}\n data={data}\n selectionChanged={this.handleSelectionChange}\n customColumnConfig={{\n srn: { headerName: 'srn', field: 'srn', hide: 'true' },\n description: {\n flex: 1,\n },\n roleSrn: { hide: true },\n scope: {\n minWidth: 100,\n cellRendererFramework: params => {\n if (!params.value) {\n return ''\n }\n\n return (\n \n )\n },\n },\n }}\n />\n )}\n \n {this.state.isModalOpen && (\n \n )}\n \n \n )\n }\n}\n\nUserProfileView.propTypes = {\n users: ImmutablePropTypes.map,\n permissions: ImmutablePropTypes.map,\n theme: themeShape,\n loading: PropTypes.bool,\n resettingPassword: PropTypes.bool,\n updatingUserRoles: PropTypes.bool,\n resetPassword: PropTypes.func,\n roles: ImmutablePropTypes.iterable.isRequired,\n swimlanes: ImmutablePropTypes.iterable.isRequired,\n unassigningRoles: PropTypes.bool,\n updateUserRoles: PropTypes.func,\n updatingSonraiUsers: ImmutablePropTypes.map,\n updateSonraiUser: PropTypes.func,\n push: PropTypes.func,\n location: PropTypes.object,\n userHasPermission: PropTypes.func.isRequired,\n currentUserSrn: PropTypes.string,\n}\n\nconst mapStateToProps = createStructuredSelector({\n users: selectSonraiUsers,\n loading: selectSonraiUsersLoading,\n resettingPassword: selectResettingPassword,\n togglingUser: selectTogglingUser,\n roles: selectAllRoles,\n swimlanes: selectSwimlanes,\n unassigningRoles: selectUnassigningRoles,\n updatingSonraiUsers: selectUpdatingSonraiUsers,\n updatingUserRoles: selectUpdatingUserRoles,\n currentUserSrn: selectSonraiUserSrn,\n})\n\nfunction mapDispatchToProps(dispatch) {\n return bindActionCreators(\n {\n resetPassword,\n updateUserRoles,\n updateSonraiUser,\n push,\n },\n dispatch\n )\n}\n\nconst withConnect = connect(mapStateToProps, mapDispatchToProps)\n\nconst withSaga = injectSaga({\n key: 'userProfileView',\n saga: userProfileViewSaga,\n})\n\nconst withReducer = injectReducer({\n key: 'userProfileView',\n reducer: userProfileViewReducer,\n})\n\nexport default compose(\n withReducer,\n permissionChecker,\n withSaga,\n withConnect,\n themeable\n)(UserProfileView)\n"],"sourceRoot":""}