2021-02-13 13:30:51 +08:00
// Copyright 2021 The casbin Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2021-02-13 12:15:19 +08:00
import React from "react" ;
2021-02-14 13:43:55 +08:00
import { Button , Card , Col , Input , Row , Select , Switch } from 'antd' ;
2021-02-13 12:15:19 +08:00
import * as UserBackend from "./backend/UserBackend" ;
import * as OrganizationBackend from "./backend/OrganizationBackend" ;
import * as Setting from "./Setting" ;
2021-02-13 14:49:31 +08:00
import { LinkOutlined } from "@ant-design/icons" ;
2021-02-19 23:23:59 +08:00
import i18next from "i18next" ;
2021-03-14 15:50:36 +08:00
import CropperDiv from "./CropperDiv.js" ;
2021-04-19 01:14:41 +08:00
import * as ApplicationBackend from "./backend/ApplicationBackend" ;
2021-05-09 19:54:20 +08:00
import PasswordModal from "./PasswordModal" ;
2021-05-12 21:38:31 +08:00
import ResetModal from "./ResetModal" ;
2021-06-04 20:47:27 +08:00
import AffiliationSelect from "./common/AffiliationSelect" ;
2021-06-20 00:42:32 +08:00
import OAuthWidget from "./common/OAuthWidget" ;
2022-01-01 10:56:08 +08:00
import SamlWidget from "./common/SamlWidget" ;
2021-07-31 16:02:48 +08:00
import SelectRegionBox from "./SelectRegionBox" ;
2021-02-13 12:15:19 +08:00
2021-08-01 14:48:29 +08:00
import { Controlled as CodeMirror } from 'react-codemirror2' ;
import "codemirror/lib/codemirror.css" ;
2021-05-30 18:35:05 +08:00
require ( 'codemirror/theme/material-darker.css' ) ;
require ( "codemirror/mode/javascript/javascript" ) ;
2021-02-13 12:15:19 +08:00
const { Option } = Select ;
class UserEditPage extends React . Component {
constructor ( props ) {
super ( props ) ;
this . state = {
classes : props ,
2021-02-13 17:56:58 +08:00
organizationName : props . organizationName !== undefined ? props . organizationName : props . match . params . organizationName ,
userName : props . userName !== undefined ? props . userName : props . match . params . userName ,
2021-02-13 12:15:19 +08:00
user : null ,
2021-04-19 01:14:41 +08:00
application : null ,
2021-02-13 12:15:19 +08:00
organizations : [ ] ,
} ;
}
2021-03-27 11:38:15 +08:00
UNSAFE _componentWillMount ( ) {
2021-02-13 12:15:19 +08:00
this . getUser ( ) ;
this . getOrganizations ( ) ;
2021-07-11 23:49:06 +08:00
this . getUserApplication ( ) ;
2021-02-13 12:15:19 +08:00
}
getUser ( ) {
UserBackend . getUser ( this . state . organizationName , this . state . userName )
. then ( ( user ) => {
this . setState ( {
user : user ,
} ) ;
} ) ;
}
getOrganizations ( ) {
OrganizationBackend . getOrganizations ( "admin" )
. then ( ( res ) => {
this . setState ( {
2021-03-28 00:48:34 +08:00
organizations : ( res . msg === undefined ) ? res : [ ] ,
2021-02-13 12:15:19 +08:00
} ) ;
} ) ;
}
2021-07-11 23:49:06 +08:00
getUserApplication ( ) {
ApplicationBackend . getUserApplication ( this . state . organizationName , this . state . userName )
2021-04-19 01:14:41 +08:00
. then ( ( application ) => {
this . setState ( {
application : application ,
} ) ;
} ) ;
}
2021-02-13 12:15:19 +08:00
parseUserField ( key , value ) {
// if ([].includes(key)) {
// value = Setting.myParseInt(value);
// }
return value ;
}
updateUserField ( key , value ) {
value = this . parseUserField ( key , value ) ;
let user = this . state . user ;
user [ key ] = value ;
this . setState ( {
user : user ,
} ) ;
}
2021-06-20 00:42:32 +08:00
unlinked ( ) {
this . getUser ( ) ;
2021-04-18 23:14:46 +08:00
}
2021-05-31 01:42:03 +08:00
isSelfOrAdmin ( ) {
return ( this . state . user . id === this . props . account ? . id ) || Setting . isAdminUser ( this . props . account ) ;
}
2021-02-13 12:15:19 +08:00
renderUser ( ) {
return (
< Card size = "small" title = {
< div >
2021-02-19 23:23:59 +08:00
{ i18next . t ( "user:Edit User" ) } & nbsp ; & nbsp ; & nbsp ; & nbsp ;
2021-12-12 18:51:12 +08:00
< Button onClick = { ( ) => this . submitUserEdit ( false ) } > { i18next . t ( "general:Save" ) } < / B u t t o n >
< Button style = { { marginLeft : '20px' } } type = "primary" onClick = { ( ) => this . submitUserEdit ( true ) } > { i18next . t ( "general:Save & Exit" ) } < / B u t t o n >
2021-02-13 12:15:19 +08:00
< / d i v >
2021-07-25 23:13:34 +08:00
} style = { ( Setting . isMobile ( ) ) ? { margin : '5px' } : { } } type = "inner" >
2021-02-13 12:15:19 +08:00
< Row style = { { marginTop : '10px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Organization" ) , i18next . t ( "general:Organization - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
< Col span = { 22 } >
2021-05-16 21:52:50 +08:00
< Select virtual = { false } style = { { width : '100%' } } disabled = { ! Setting . isAdminUser ( this . props . account ) } value = { this . state . user . owner } onChange = { ( value => { this . updateUserField ( 'owner' , value ) ; } ) } >
2021-02-13 12:15:19 +08:00
{
this . state . organizations . map ( ( organization , index ) => < Option key = { index } value = { organization . name } > { organization . name } < / O p t i o n > )
}
< / S e l e c t >
< / C o l >
< / R o w >
2021-02-13 20:10:41 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( "ID" , i18next . t ( "general:ID - Tooltip" ) ) } :
2021-02-13 20:10:41 +08:00
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . id } disabled = { true } / >
< / C o l >
< / R o w >
2021-02-13 12:15:19 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Name" ) , i18next . t ( "general:Name - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
< Col span = { 22 } >
2022-01-13 23:19:36 +08:00
< Input value = { this . state . user . name } disabled = { ! Setting . isAdminUser ( this . props . account ) } onChange = { e => {
2021-02-13 12:15:19 +08:00
this . updateUserField ( 'name' , e . target . value ) ;
} } / >
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Display name" ) , i18next . t ( "general:Display name - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
< Col span = { 22 } >
2021-02-13 14:49:31 +08:00
< Input value = { this . state . user . displayName } onChange = { e => {
this . updateUserField ( 'displayName' , e . target . value ) ;
2021-02-13 12:15:19 +08:00
} } / >
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Avatar" ) , i18next . t ( "general:Avatar - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
< Col span = { 22 } >
2021-02-13 14:49:31 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-04-27 20:59:50 +08:00
{ i18next . t ( "general:URL" ) } :
2021-02-13 14:49:31 +08:00
< / C o l >
2021-04-26 18:21:28 +08:00
< Col span = { 22 } >
2021-02-13 14:49:31 +08:00
< Input prefix = { < LinkOutlined / > } value = { this . state . user . avatar } onChange = { e => {
this . updateUserField ( 'avatar' , e . target . value ) ;
} } / >
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-02-19 23:23:59 +08:00
{ i18next . t ( "general:Preview" ) } :
2021-02-13 14:49:31 +08:00
< / C o l >
2021-04-26 18:21:28 +08:00
< Col span = { 22 } >
2021-03-27 11:38:15 +08:00
< a target = "_blank" rel = "noreferrer" href = { this . state . user . avatar } >
2021-02-13 14:49:31 +08:00
< img src = { this . state . user . avatar } alt = { this . state . user . avatar } height = { 90 } style = { { marginBottom : '20px' } } / >
< / a >
< / C o l >
< / R o w >
2021-03-14 15:50:36 +08:00
< Row style = { { marginTop : '20px' } } >
2021-08-15 00:17:53 +08:00
< CropperDiv buttonText = { ` ${ i18next . t ( "user:Upload a photo" ) } ... ` } title = { i18next . t ( "user:Upload a photo" ) } user = { this . state . user } account = { this . props . account } / >
2021-03-14 15:50:36 +08:00
< / R o w >
2021-02-13 14:49:31 +08:00
< / C o l >
< / R o w >
2021-04-26 19:00:23 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:User type" ) , i18next . t ( "general:User type - Tooltip" ) ) } :
2021-04-26 19:00:23 +08:00
< / C o l >
< Col span = { 22 } >
< Select virtual = { false } style = { { width : '100%' } } value = { this . state . user . type } onChange = { ( value => { this . updateUserField ( 'type' , value ) ; } ) } >
{
[ 'normal-user' ]
. map ( ( item , index ) => < Option key = { index } value = { item } > { item } < / O p t i o n > )
}
< / S e l e c t >
< / C o l >
< / R o w >
2021-02-13 12:15:19 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Password" ) , i18next . t ( "general:Password - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
< Col span = { 22 } >
2021-12-12 19:15:24 +08:00
< PasswordModal user = { this . state . user } account = { this . props . account } / >
2021-02-13 12:15:19 +08:00
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Email" ) , i18next . t ( "general:Email - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
2021-05-15 20:44:40 +08:00
< Col style = { { paddingRight : '20px' } } span = { 11 } >
2021-05-12 21:38:31 +08:00
< Input value = { this . state . user . email } disabled / >
2021-05-15 20:44:40 +08:00
< / C o l >
< Col span = { 11 } >
2021-11-28 20:57:14 +08:00
{ this . state . user . id === this . props . account ? . id ? ( < ResetModal org = { this . state . application ? . organizationObj } buttonText = { i18next . t ( "user:Reset Email..." ) } destType = { "email" } / > ) : null }
2021-02-13 12:15:19 +08:00
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "general:Phone" ) , i18next . t ( "general:Phone - Tooltip" ) ) } :
2021-02-13 12:15:19 +08:00
< / C o l >
2021-05-15 20:44:40 +08:00
< Col style = { { paddingRight : '20px' } } span = { 11 } >
2021-05-14 17:39:53 +08:00
< Input value = { this . state . user . phone } addonBefore = { ` + ${ this . state . application ? . organizationObj . phonePrefix } ` } disabled / >
2021-05-15 20:44:40 +08:00
< / C o l >
< Col span = { 11 } >
2021-11-28 20:57:14 +08:00
{ this . state . user . id === this . props . account ? . id ? ( < ResetModal org = { this . state . application ? . organizationObj } buttonText = { i18next . t ( "user:Reset Phone..." ) } destType = { "phone" } / > ) : null }
2021-02-13 12:15:19 +08:00
< / C o l >
< / R o w >
2021-07-31 16:02:48 +08:00
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Country/Region" ) , i18next . t ( "user:Country/Region - Tooltip" ) ) } :
< / C o l >
< Col span = { 22 } >
< SelectRegionBox defaultValue = { this . state . user . region } onChange = { ( value ) => {
this . updateUserField ( "region" , value ) ;
} } / >
< / C o l >
< / R o w >
2021-08-21 10:58:34 +08:00
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Location" ) , i18next . t ( "user:Location - Tooltip" ) ) } :
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . location } onChange = { e => {
this . updateUserField ( 'location' , e . target . value ) ;
} } / >
< / C o l >
< / R o w >
2021-06-04 20:47:27 +08:00
{
( this . state . application === null || this . state . user === null ) ? null : (
2021-07-25 23:13:34 +08:00
< AffiliationSelect labelSpan = { ( Setting . isMobile ( ) ) ? 22 : 2 } application = { this . state . application } user = { this . state . user } onUpdateUserField = { ( key , value ) => { return this . updateUserField ( key , value ) } } / >
2021-06-04 20:47:27 +08:00
)
}
2021-08-21 10:58:34 +08:00
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Title" ) , i18next . t ( "user:Title - Tooltip" ) ) } :
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . title } onChange = { e => {
this . updateUserField ( 'title' , e . target . value ) ;
} } / >
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Homepage" ) , i18next . t ( "user:Homepage - Tooltip" ) ) } :
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . homepage } onChange = { e => {
this . updateUserField ( 'homepage' , e . target . value ) ;
} } / >
< / C o l >
2021-08-25 08:07:08 +08:00
< / R o w >
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Bio" ) , i18next . t ( "user:Bio - Tooltip" ) ) } :
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . bio } onChange = { e => {
this . updateUserField ( 'bio' , e . target . value ) ;
} } / >
< / C o l >
2021-08-21 10:58:34 +08:00
< / R o w >
2021-02-14 21:21:42 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "user:Tag" ) , i18next . t ( "user:Tag - Tooltip" ) ) } :
2021-02-14 21:21:42 +08:00
< / C o l >
< Col span = { 22 } >
< Input value = { this . state . user . tag } onChange = { e => {
this . updateUserField ( 'tag' , e . target . value ) ;
} } / >
< / C o l >
< / R o w >
2021-05-30 18:35:05 +08:00
{
2021-05-31 01:42:03 +08:00
! this . isSelfOrAdmin ( ) ? null : (
2021-05-30 18:35:05 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-08-06 23:03:41 +08:00
{ Setting . getLabel ( i18next . t ( "user:3rd-party logins" ) , i18next . t ( "user:3rd-party logins - Tooltip" ) ) } :
2021-05-30 18:35:05 +08:00
< / C o l >
< Col span = { 22 } >
2021-05-31 01:42:03 +08:00
< div style = { { marginBottom : 20 } } >
{
2021-06-20 02:02:08 +08:00
( this . state . application === null || this . state . user === null ) ? null : (
2021-12-13 19:49:30 +08:00
this . state . application ? . providers . filter ( providerItem => Setting . isProviderVisible ( providerItem ) ) . map ( ( providerItem , index ) =>
2021-12-20 01:11:42 +08:00
( providerItem . provider . category === "OAuth" ) ? (
2021-12-13 19:49:30 +08:00
< OAuthWidget key = { providerItem . name } labelSpan = { ( Setting . isMobile ( ) ) ? 10 : 3 } user = { this . state . user } application = { this . state . application } providerItem = { providerItem } onUnlinked = { ( ) => { return this . unlinked ( ) } } / >
) : (
< SamlWidget key = { providerItem . name } labelSpan = { ( Setting . isMobile ( ) ) ? 10 : 3 } user = { this . state . user } application = { this . state . application } providerItem = { providerItem } onUnlinked = { ( ) => { return this . unlinked ( ) } } / >
)
)
2021-06-20 02:02:08 +08:00
)
2021-05-31 01:42:03 +08:00
}
< / d i v >
2021-05-30 18:35:05 +08:00
< / C o l >
< / R o w >
)
}
2021-02-15 22:14:19 +08:00
{
! Setting . isAdminUser ( this . props . account ) ? null : (
< React . Fragment >
2021-05-31 01:42:03 +08:00
{ /*<Row style={{marginTop: '20px'}} >*/ }
2021-07-25 23:13:34 +08:00
{ /* <Col style={{marginTop: '5px'}} span={(Setting.isMobile()) ? 22 : 2}>*/ }
2021-05-31 01:42:03 +08:00
{ /* {i18next.t("user:Properties")}:*/ }
{ /* </Col>*/ }
{ /* <Col span={22} >*/ }
{ /* <CodeMirror*/ }
{ /* value={JSON.stringify(this.state.user.properties, null, 4)}*/ }
{ /* options={{mode: 'javascript', theme: "material-darker"}}*/ }
{ /* />*/ }
{ /* </Col>*/ }
{ /*</Row>*/ }
2021-02-15 22:14:19 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "user:Is admin" ) , i18next . t ( "user:Is admin - Tooltip" ) ) } :
2021-02-15 22:14:19 +08:00
< / C o l >
2021-07-25 23:13:34 +08:00
< Col span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-02-15 22:14:19 +08:00
< Switch checked = { this . state . user . isAdmin } onChange = { checked => {
this . updateUserField ( 'isAdmin' , checked ) ;
} } / >
< / C o l >
< / R o w >
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "user:Is global admin" ) , i18next . t ( "user:Is global admin - Tooltip" ) ) } :
2021-02-15 22:14:19 +08:00
< / C o l >
2021-07-25 23:13:34 +08:00
< Col span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-02-15 22:14:19 +08:00
< Switch checked = { this . state . user . isGlobalAdmin } onChange = { checked => {
this . updateUserField ( 'isGlobalAdmin' , checked ) ;
} } / >
< / C o l >
< / R o w >
2021-05-02 12:18:28 +08:00
< Row style = { { marginTop : '20px' } } >
2021-07-25 23:13:34 +08:00
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-06-30 00:58:25 +08:00
{ Setting . getLabel ( i18next . t ( "user:Is forbidden" ) , i18next . t ( "user:Is forbidden - Tooltip" ) ) } :
2021-05-02 12:18:28 +08:00
< / C o l >
2021-07-25 23:13:34 +08:00
< Col span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
2021-05-02 12:18:28 +08:00
< Switch checked = { this . state . user . isForbidden } onChange = { checked => {
this . updateUserField ( 'isForbidden' , checked ) ;
} } / >
< / C o l >
< / R o w >
2021-11-06 15:52:03 +08:00
< Row style = { { marginTop : '20px' } } >
< Col style = { { marginTop : '5px' } } span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
{ Setting . getLabel ( i18next . t ( "user:Is deleted" ) , i18next . t ( "user:Is deleted - Tooltip" ) ) } :
< / C o l >
< Col span = { ( Setting . isMobile ( ) ) ? 22 : 2 } >
< Switch checked = { this . state . user . isDeleted } onChange = { checked => {
this . updateUserField ( 'isDeleted' , checked ) ;
} } / >
< / C o l >
< / R o w >
2021-02-15 22:14:19 +08:00
< / R e a c t . F r a g m e n t >
)
}
2021-02-13 12:15:19 +08:00
< / C a r d >
)
}
2021-12-12 18:51:12 +08:00
submitUserEdit ( willExist ) {
2021-02-13 12:15:19 +08:00
let user = Setting . deepCopy ( this . state . user ) ;
UserBackend . updateUser ( this . state . organizationName , this . state . userName , user )
. then ( ( res ) => {
2021-03-28 00:48:34 +08:00
if ( res . msg === "" ) {
2021-02-13 12:15:19 +08:00
Setting . showMessage ( "success" , ` Successfully saved ` ) ;
this . setState ( {
organizationName : this . state . user . owner ,
userName : this . state . user . name ,
} ) ;
2021-02-13 17:56:58 +08:00
if ( this . props . history !== undefined ) {
2021-12-12 18:51:12 +08:00
if ( willExist ) {
this . props . history . push ( ` /users ` ) ;
} else {
this . props . history . push ( ` /users/ ${ this . state . user . owner } / ${ this . state . user . name } ` ) ;
}
2021-02-13 17:56:58 +08:00
}
2021-02-13 12:15:19 +08:00
} else {
2021-03-28 00:48:34 +08:00
Setting . showMessage ( "error" , res . msg ) ;
2021-02-13 12:15:19 +08:00
this . updateUserField ( 'owner' , this . state . organizationName ) ;
this . updateUserField ( 'name' , this . state . userName ) ;
}
} )
. catch ( error => {
2021-03-28 08:59:12 +08:00
Setting . showMessage ( "error" , ` Failed to connect to server: ${ error } ` ) ;
2021-02-13 12:15:19 +08:00
} ) ;
}
render ( ) {
return (
< div >
2021-07-23 09:46:01 +08:00
{
this . state . user !== null ? this . renderUser ( ) : null
}
< div style = { { marginTop : '20px' , marginLeft : '40px' } } >
2021-12-12 18:51:12 +08:00
< Button size = "large" onClick = { ( ) => this . submitUserEdit ( false ) } > { i18next . t ( "general:Save" ) } < / B u t t o n >
< Button style = { { marginLeft : '20px' } } type = "primary" size = "large" onClick = { ( ) => this . submitUserEdit ( true ) } > { i18next . t ( "general:Save & Exit" ) } < / B u t t o n >
2021-02-13 12:15:19 +08:00
< / d i v >
2021-07-23 09:46:01 +08:00
< / d i v >
2021-02-13 12:15:19 +08:00
) ;
}
}
export default UserEditPage ;