github.com/argoproj/argo-cd/v2@v2.10.9/ui/src/app/settings/components/project-role-edit-panel/project-role-edit-panel.tsx (about) 1 import {FormField} from 'argo-ui'; 2 import * as React from 'react'; 3 import {Form, FormApi, Text} from 'react-form'; 4 5 import * as models from '../../../shared/models'; 6 import {CreateJWTTokenParams, DeleteJWTTokenParams, ProjectRoleParams} from '../../../shared/services'; 7 import {ProjectRoleGroupsEdit} from '../project-role-groups-edit/project-role-groups-edit'; 8 import {ProjectRoleJWTTokens} from '../project-role-jwt-tokens/project-role-jwt-tokens'; 9 import {ProjectRolePoliciesEdit} from '../project-role-policies-edit/project-role-policies-edit'; 10 11 interface ProjectRoleDefaultParams { 12 projName: string; 13 role?: models.ProjectRole; 14 newRole: boolean; 15 deleteRole: boolean; 16 jwtTokens: models.JwtToken[]; 17 } 18 19 interface ProjectRoleEditPanelProps { 20 nameReadonly?: boolean; 21 submit: (params: ProjectRoleParams) => any; 22 createJWTToken: (params: CreateJWTTokenParams) => void; 23 deleteJWTToken: (params: DeleteJWTTokenParams) => void; 24 hideJWTToken: () => void; 25 token: string; 26 getApi?: (formApi: FormApi) => void; 27 defaultParams: ProjectRoleDefaultParams; 28 } 29 30 export const ProjectRoleEditPanel = (props: ProjectRoleEditPanelProps) => { 31 return ( 32 <div className='project-role-edit-panel'> 33 <Form 34 onSubmit={props.submit} 35 getApi={props.getApi} 36 defaultValues={{ 37 projName: props.defaultParams.projName, 38 roleName: (props.defaultParams.role && props.defaultParams.role.name) || '', 39 description: (props.defaultParams.role && props.defaultParams.role.description) || '', 40 policies: (props.defaultParams.role && props.defaultParams.role.policies) || [], 41 jwtTokens: (props.defaultParams.role && props.defaultParams.jwtTokens) || [], 42 groups: (props.defaultParams.role && props.defaultParams.role.groups) || [] 43 }} 44 validateError={(params: ProjectRoleParams) => ({ 45 projName: !params.projName && 'Project Name is required', 46 roleName: !params.roleName && 'Role Name is required' 47 })}> 48 {api => ( 49 <form onSubmit={api.submitForm} role='form' className='width-control'> 50 <div className='white-box'> 51 <p>GENERAL</p> 52 <div className='argo-form-row'> 53 <FormField formApi={api} label='Role Name' componentProps={{readOnly: props.nameReadonly}} field='roleName' component={Text} /> 54 </div> 55 <div className='argo-form-row'> 56 <FormField formApi={api} label='Role Description' field='description' component={Text} /> 57 </div> 58 </div> 59 <div className='white-box'> 60 <ProjectRolePoliciesEdit 61 projName={api.values.projName} 62 roleName={api.values.roleName} 63 formApi={api} 64 policies={api.values.policies} 65 newRole={props.defaultParams.newRole} 66 /> 67 </div> 68 <div className='white-box'> 69 <ProjectRoleGroupsEdit 70 projName={api.values.projName} 71 roleName={api.values.roleName} 72 formApi={api} 73 groups={api.values.groups} 74 newRole={props.defaultParams.newRole} 75 /> 76 </div> 77 </form> 78 )} 79 </Form> 80 {!props.defaultParams.newRole && props.defaultParams.role !== undefined ? ( 81 <ProjectRoleJWTTokens 82 projName={props.defaultParams.projName} 83 roleName={props.defaultParams.role.name} 84 tokens={props.defaultParams.jwtTokens as models.JwtToken[]} 85 token={props.token} 86 createJWTToken={props.createJWTToken} 87 deleteJWTToken={props.deleteJWTToken} 88 hideJWTToken={props.hideJWTToken} 89 /> 90 ) : null} 91 </div> 92 ); 93 };