@@ -4,7 +4,7 @@ import "./Profile.scss";
44import I18n from "../locale/I18n" ;
55import ConfirmationDialog from "../components/ConfirmationDialog.jsx" ;
66import DOMPurify from "dompurify" ;
7- import { Button , ButtonType } from "@surfnet/sds" ;
7+ import { Button , ButtonType , Checkbox , Tooltip } from "@surfnet/sds" ;
88import { dateFromEpoch } from "../utils/Date.js" ;
99import { isEmpty , stopEvent } from "../utils/Utils.js" ;
1010import { deleteUser , logout } from "../api/index.js" ;
@@ -61,6 +61,10 @@ const Profile = ({setIsAuthenticated}) => {
6161 }
6262
6363 const { open, cancel, action, question, okButton} = confirmation ;
64+ const applicationMemberships = ( user . organizationMemberships || [ ] )
65+ . map ( orgMembership => orgMembership . applicationMemberships )
66+ . flat ( ) ;
67+ const externalUser = user . externalUser ;
6468 return (
6569 < div
6670 className = "profile-outer-container" >
@@ -104,10 +108,49 @@ const Profile = ({setIsAuthenticated}) => {
104108 ) }
105109
106110 { ! isEmpty ( user . organizationMemberships ) &&
107- < InputField name = { I18n . t ( "profile.organization" ) }
108- value = { user . organizationMemberships . map ( m => m . organization . name ) . join ( ", " ) }
109- noInput = { true }
110- /> }
111+ < div className = "multi-list" >
112+ < p > { I18n . t ( `profile.organization${ user . organizationMemberships . length > 1 ? "Multiple" : "" } ` ) } </ p >
113+ < ul >
114+ { user . organizationMemberships . map ( ( orgMembership , index ) =>
115+ < li key = { index } >
116+ < span > { `${ orgMembership . organization . name } ` }
117+ < em > { " - " + I18n . t ( `roles.${ orgMembership . authority . toLowerCase ( ) } ` ) } </ em >
118+ </ span >
119+ </ li >
120+ ) }
121+ </ ul >
122+ </ div > }
123+ { ! isEmpty ( applicationMemberships ) &&
124+ < div className = "multi-list" >
125+ < p > { I18n . t ( `profile.application${ applicationMemberships . length > 1 ? "Multiple" : "" } ` ) } </ p >
126+ < ul >
127+ { applicationMemberships . map ( ( appMembership , index ) =>
128+ < li key = { index } >
129+ < span > { `${ appMembership . applicationName } ` }
130+ < em > { " - " + I18n . t ( `roles.${ appMembership . authority . toLowerCase ( ) } ` ) } </ em >
131+ </ span >
132+ </ li >
133+ ) }
134+ </ ul >
135+ </ div > }
136+ { externalUser &&
137+ < div className = "multi-list" >
138+ < div className = "external-user-container" >
139+ < p > { I18n . t ( "profile.externalUser" ) } </ p >
140+ < Tooltip tip = { I18n . t ( "profile.externalUserTooltip" ) } />
141+ </ div >
142+ < Checkbox value = { externalUser }
143+ readOnly = { true } />
144+ </ div > }
145+ { ! externalUser &&
146+ < div className = "multi-list" >
147+ < div className = "external-user-container" >
148+ < p > { I18n . t ( "profile.internalUser" ) } </ p >
149+ < Tooltip tip = { I18n . t ( "profile.internalUserTooltip" ) } />
150+ </ div >
151+ < Checkbox value = { ! externalUser }
152+ readOnly = { true } />
153+ </ div > }
111154 </ div >
112155 < div className = "delete-container" >
113156 < Button onClick = { e => doDelete ( e , true ) }
0 commit comments