Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

B_reed/APPEALS-28105 #19264

Closed
wants to merge 67 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
37cbbaa
APPEALS: 25136: refactored conference_client, changed calls to match …
konhilas-ariana Aug 2, 2023
3b51fe7
Updated index.html.erb
breedbah Aug 2, 2023
15743a6
Merge branch 'feature/APPEALS-25109' into b_reed/APPEALS-25137
breedbah Aug 2, 2023
6bb0115
Updated spelling
breedbah Aug 2, 2023
6dfbee3
APPEALS-25137 Added logic for conference selection visibility
breedbah Aug 2, 2023
2fe491e
Merge branch 'feature/APPEALS-25109' into akonhilas/APPEALS-25136
konhilas-ariana Aug 2, 2023
98cc12e
commented out meetingType
breedbah Aug 3, 2023
9877152
APPEALS-25136: updates to the conference client
konhilas-ariana Aug 4, 2023
04e6601
Merge branch 'feature/APPEALS-25109' into akonhilas/APPEALS-25136
konhilas-ariana Aug 4, 2023
0c31822
APPEALS-25137 updated React files to setMeetinType
breedbah Aug 4, 2023
8383fe0
APPEALS-25136: testing current_user vs user
konhilas-ariana Aug 7, 2023
5627adb
Merge branch 'feature/APPEALS-25109' into akonhilas/APPEALS-25136
konhilas-ariana Aug 7, 2023
189bfe5
Merge branch 'feature/APPEALS-25109' of https://github.com/department…
breedbah Aug 7, 2023
1a366e9
APPEALS-25137 completed meetimng type for redux store
breedbah Aug 7, 2023
9b35011
Merge branch 'master' into feature/APPEALS-25109
ThorntonMatthew Aug 7, 2023
6bafefa
APPEALS-25136: updated current user to use requeststore
konhilas-ariana Aug 8, 2023
2609eb5
Merge branch 'feature/APPEALS-25109' into akonhilas/APPEALS-25136
konhilas-ariana Aug 8, 2023
15cb347
APPEALS-25137 start of unit test creation
breedbah Aug 8, 2023
69fc3aa
APPEALS-25137 Added async await to test
breedbah Aug 8, 2023
040212e
Merge branch 'master' into feature/APPEALS-25109
ThorntonMatthew Aug 8, 2023
4c122ca
APPEALS-25137 adding mocking ApiUtil to tests
breedbah Aug 8, 2023
844f60d
Appeals-25137 Completed unit tests
breedbah Aug 9, 2023
50e929f
APPEALS-25137 Updated unit tests
breedbah Aug 9, 2023
8862f5f
APPEALS-25137 D.R.Y. out code in tests
breedbah Aug 9, 2023
6a84567
APPEALS-25137 Linting fixes
breedbah Aug 9, 2023
cfd7400
APPEALS-25136: added error catching on the case statement in client
konhilas-ariana Aug 9, 2023
41516af
Merge branch 'feature/APPEALS-25109' into b_reed/APPEALS-25137
breedbah Aug 9, 2023
9d4e99e
APPEALS-25136: make pexip specific errors and language more general
konhilas-ariana Aug 10, 2023
1f9dc77
APPEALS-25136: cannot get rspec to pass
konhilas-ariana Aug 11, 2023
0bb944b
APPEALS-25136: rspec udpate
konhilas-ariana Aug 11, 2023
599244a
APPEALS-25136: updated tests, all are passing
konhilas-ariana Aug 11, 2023
2d95602
Merge pull request #19109 from department-of-veterans-affairs/b_reed/…
mchbidwell Aug 11, 2023
2777e8d
Merge branch 'feature/APPEALS-25109' into akonhilas/APPEALS-25136
mchbidwell Aug 14, 2023
caf8333
Merge pull request #19107 from department-of-veterans-affairs/akonhil…
mchbidwell Aug 14, 2023
2d1354e
APPEALS-28105 Initial adding of WEBEX Mockservice
breedbah Aug 14, 2023
3508af2
Merge pull request #19191 from department-of-veterans-affairs/feature…
mchbidwell Aug 15, 2023
6f2e8e0
APPEALS-28105 start of webex custom server
breedbah Aug 16, 2023
717b69c
APPEALS-28105 Adding error messages
breedbah Aug 16, 2023
2f671d1
APPEALS-28105 Completed adding errors to server
breedbah Aug 16, 2023
1b8b8fb
APPEALS-28105 changes to webex server
breedbah Aug 17, 2023
05c620b
APPEALS-28105 Started autogenerate data functionality
breedbah Aug 17, 2023
8cf7856
APPEALS-28105 Updated error handling
breedbah Aug 17, 2023
1a55e14
APPEALS-28105 Updated routes
breedbah Aug 17, 2023
9eb4e8c
Merge branch 'master' into b_reed/APPEALS-28105
breedbah Aug 17, 2023
e2858be
APPEALS-28105 Got the api webex-generation working
breedbah Aug 18, 2023
38ddb28
APPEALS-25108 removed dummy data
breedbah Aug 18, 2023
28b27ed
APPEALS-28105 return the conference link object
breedbah Aug 21, 2023
fe87289
APPEALS-28105 Removed webex-mock.json file
breedbah Aug 21, 2023
38d7010
APPEALS-28105 added the webex-mock.json to .gitignore
breedbah Aug 21, 2023
88a7435
APPEALS-28105 update linting errors
breedbah Aug 21, 2023
a45deef
APPEALS-28105 Completed addressing linting errors
breedbah Aug 21, 2023
6802591
APPEALS-28105 Updated the Readme.md
breedbah Aug 21, 2023
94719fe
APPEALS-28105 Addressed Code Climate errors
breedbah Aug 21, 2023
45e6eed
APPEALS-28105 Addressed linting errors
breedbah Aug 21, 2023
55c6410
APPEALS-28105 removed commented code
breedbah Aug 22, 2023
d8ab350
Merge branch 'master' into b_reed/APPEALS-28105
breedbah Aug 22, 2023
0cbb257
Revert "Revert "lthompson/APPEALS-26633""
mchbidwell Aug 23, 2023
c676fc8
Merge branch 'feature/APPEALS-26734' into revert-19239-revert-19112-l…
mchbidwell Aug 23, 2023
ccdef85
Merge pull request #19245 from department-of-veterans-affairs/revert-…
mchbidwell Aug 23, 2023
e4bb5f3
APPEALS-28105 Updated readme.md with installation resolution
breedbah Aug 23, 2023
eb9b151
Merge branch 'feature/APPEALS-26734' into b_reed/APPEALS-28105
breedbah Aug 23, 2023
75f563d
APPEALS-28105 Revert back to Addressed lint errors
breedbah Aug 24, 2023
c625480
Merge branch 'b_reed/APPEALS-28105' of https://github.com/department-…
breedbah Aug 24, 2023
99c1ee9
APPEALS-28105 cleaned up and completed mock server update
breedbah Aug 25, 2023
ffef0db
APPEALS-28105 Updated and modified meeting data
breedbah Aug 25, 2023
afdca04
Merge branch 'master' into b_reed/APPEALS-28105
breedbah Aug 25, 2023
6828546
Merge branch 'master' into b_reed/APPEALS-28105
breedbah Aug 25, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ client/junit.xml
!/reports/sql_queries
!/reports/.keep
credstash.log
client/mocks/webex-mocks/webex-mock.json
# Ignore MS Office temp files
~$*

Expand Down
9 changes: 9 additions & 0 deletions app/controllers/organizations/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ def update
adjust_admin_rights
end

update_user_meeting_type
render json: { users: json_administered_users([user_to_modify]) }, status: :ok
end

Expand Down Expand Up @@ -67,6 +68,14 @@ def adjust_admin_rights
end
end

def update_user_meeting_type
new_meeting_type = params.dig(:attributes, :meeting_type)

if organization["url"] == HearingsManagement.singleton.url && new_meeting_type
OrganizationsUser.update_user_conference_type(user_to_modify, new_meeting_type)
end
end

def organization_url
params[:organization_url]
end
Expand Down
29 changes: 29 additions & 0 deletions app/jobs/virtual_hearings/conference_client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# frozen_string_literal: true

module VirtualHearings::ConferenceClient
def client
case RequestStore.store[:current_user].meeting_type
when "pexip"
@client ||= PexipService.new(
host: ENV["PEXIP_MANAGEMENT_NODE_HOST"],
port: ENV["PEXIP_MANAGEMENT_NODE_PORT"],
user_name: ENV["PEXIP_USERNAME"],
password: ENV["PEXIP_PASSWORD"],
client_host: ENV["PEXIP_CLIENT_HOST"]
)
when "webex"
msg = "You hit the Webex Service!"
fail Caseflow::Error::WebexApiError, message: msg
# @client ||= WebexService.new(
# host: ENV["WEBEX_MANAGEMENT_NODE_HOST"],
# port: ENV["WEBEX_MANAGEMENT_NODE_PORT"],
# user_name: ENV["WEBEX_USERNAME"],
# password: ENV["WEBEX_PASSWORD"],
# client_host: ENV["WEBEX_CLIENT_HOST"]
# )
else
msg = "Meeting type for the user is invalid"
fail Caseflow::Error::MeetingTypeNotFoundError, message: msg
end
end
end
2 changes: 1 addition & 1 deletion app/jobs/virtual_hearings/conference_job.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# frozen_string_literal: true

class VirtualHearings::ConferenceJob < ApplicationJob
include VirtualHearings::PexipClient
include VirtualHearings::ConferenceClient

private

Expand Down
16 changes: 8 additions & 8 deletions app/jobs/virtual_hearings/create_conference_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -138,25 +138,25 @@ def create_conference
"[#{virtual_hearing.hearing_id}])..."
)

pexip_response = create_pexip_conference
create_conference_response = create_new_conference

Rails.logger.info("Pexip response: #{pexip_response.inspect}")
Rails.logger.info("Create Conference Response: #{create_conference_response.inspect}")

if pexip_response.error
error_display = pexip_error_display(pexip_response)
if create_conference_response.error
error_display = error_display(create_conference_response)

Rails.logger.error("CreateConferenceJob failed: #{error_display}")

virtual_hearing.establishment.update_error!(error_display)

DataDogService.increment_counter(metric_name: "created_conference.failed", **create_conference_datadog_tags)

fail pexip_response.error
fail create_conference_response.error
end

DataDogService.increment_counter(metric_name: "created_conference.successful", **create_conference_datadog_tags)

virtual_hearing.update(conference_id: pexip_response.data[:conference_id])
virtual_hearing.update(conference_id: create_conference_response.data[:conference_id])
end
end

Expand All @@ -172,11 +172,11 @@ def send_emails(email_type)
end
end

def pexip_error_display(response)
def error_display(response)
"(#{response.error.code}) #{response.error.message}"
end

def create_pexip_conference
def create_new_conference
client.create_conference(
host_pin: virtual_hearing.host_pin,
guest_pin: virtual_hearing.guest_pin,
Expand Down
13 changes: 0 additions & 13 deletions app/jobs/virtual_hearings/pexip_client.rb

This file was deleted.

6 changes: 6 additions & 0 deletions app/models/organizations_user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ def remove_admin_rights_from_user(user, organization)
existing_record(user, organization)&.update!(admin: false)
end

def update_user_conference_type(user, new_meeting_type)
if user.meeting_type
user.update!(meeting_type: new_meeting_type)
end
end

def remove_user_from_organization(user, organization)
if user_is_judge_of_team?(user, organization)
fail Caseflow::Error::ActionForbiddenError, message: COPY::JUDGE_TEAM_REMOVE_JUDGE_ERROR
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ class WorkQueue::AdministeredUserSerializer < WorkQueue::UserSerializer
params[:organization].dvc&.eql?(object)
end
end
attribute :meeting_type
end
4 changes: 3 additions & 1 deletion app/views/queue/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
canEditCavcDashboards: current_user.can_edit_cavc_dashboards?,
canViewCavcDashboards: current_user.can_view_cavc_dashboards?,
userIsCobAdmin: ClerkOfTheBoard.singleton.admins.include?(current_user),
meetingType: current_user.meeting_type,
featureToggles: {
collect_video_and_central_emails: FeatureToggle.enabled?(:collect_video_and_central_emails, user: current_user),
enable_hearing_time_slots: FeatureToggle.enabled?(:enable_hearing_time_slots, user: current_user),
Expand Down Expand Up @@ -53,7 +54,8 @@
cavc_remand_granted_substitute_appellant: FeatureToggle.enabled?(:cavc_remand_granted_substitute_appellant, user: current_user),
cavc_dashboard_workflow: FeatureToggle.enabled?(:cavc_dashboard_workflow, user: current_user),
cc_appeal_workflow: FeatureToggle.enabled?(:cc_appeal_workflow, user: current_user),
cc_vacatur_visibility: FeatureToggle.enabled?(:cc_vacatur_visibility, user: current_user)
cc_vacatur_visibility: FeatureToggle.enabled?(:cc_vacatur_visibility, user: current_user),
conference_selection_visibility: FeatureToggle.enabled?(:conference_selection_visibility,user: current_user)
}
}) %>
<% end %>
1 change: 1 addition & 0 deletions client/COPY.json
Original file line number Diff line number Diff line change
Expand Up @@ -772,6 +772,7 @@
"USER_MANAGEMENT_GIVE_USER_ADMIN_RIGHTS_BUTTON_TEXT": "Add admin rights",
"USER_MANAGEMENT_REMOVE_USER_ADMIN_RIGHTS_BUTTON_TEXT": "Remove admin rights",
"USER_MANAGEMENT_REMOVE_USER_FROM_ORG_BUTTON_TEXT": "Remove from team",
"USER_MANAGEMENT_SELECT_HEARINGS_CONFERENCE_TYPE": "Schedule hearings using:",
"MEMBERSHIP_REQUEST_ACTION_SUCCESS_TITLE": "You successfully %s %s's request",
"MEMBERSHIP_REQUEST_ACTION_SUCCESS_MESSAGE": "The user was %s regular member access to %s.",
"VHA_MEMBERSHIP_REQUEST_AUTOMATIC_VHA_ACCESS_NOTE": "Note: If you are requesting specialized access and are not a member of the general VHA group, you will automatically be given access to the general VHA group if your request is approved.",
Expand Down
58 changes: 41 additions & 17 deletions client/app/queue/OrganizationUsers.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import { LOGO_COLORS } from '../constants/AppConstants';
import COPY from '../../COPY';
import LoadingDataDisplay from '../components/LoadingDataDisplay';
import MembershipRequestTable from './MembershipRequestTable';
import SelectConferenceTypeRadioField from './SelectConferenceTypeRadioField';

const userStyle = css({
margin: '.5rem 0 .5rem',
Expand All @@ -38,11 +39,17 @@ const buttonStyle = css({
const buttonContainerStyle = css({
borderBottom: '1rem solid gray',
borderWidth: '1px',
padding: '.5rem 0 2rem',
padding: '.5rem 7rem 2rem 0',
display: 'flex',
justifyContent: 'space-between',
flexWrap: 'wrap'
});
const listStyle = css({
listStyle: 'none'
});
const radioContainerStyle = css({
padding: '-5rem 5rem 2rem 2rem',
});

export default class OrganizationUsers extends React.PureComponent {
constructor(props) {
Expand Down Expand Up @@ -248,18 +255,34 @@ export default class OrganizationUsers extends React.PureComponent {
const style = i === 0 ? topUserStyle : userStyle;

return <React.Fragment key={user.id}>
<li key={user.id} {...style}>{this.formatName(user)}
{ judgeTeam && admin && <strong> ( {COPY.USER_MANAGEMENT_JUDGE_LABEL} )</strong> }
{ dvcTeam && dvc && <strong> ( {COPY.USER_MANAGEMENT_DVC_LABEL} )</strong> }
{ judgeTeam && !admin && <strong> ( {COPY.USER_MANAGEMENT_ATTORNEY_LABEL} )</strong> }
{ (judgeTeam || dvcTeam) && admin && <strong> ( {COPY.USER_MANAGEMENT_ADMIN_LABEL} )</strong> }
</li>
{ (judgeTeam || dvcTeam) && admin ?
<div {...topUserBorder}></div> :
<div {...buttonContainerStyle}>
{ (judgeTeam || dvcTeam) ? '' : this.adminButton(user, admin) }
{ this.removeUserButton(user) }
</div> }
<div>
<ul>
<li key={user.id} {...style}>{this.formatName(user)}
{ judgeTeam && admin && <strong> ( {COPY.USER_MANAGEMENT_JUDGE_LABEL} )</strong> }
{ dvcTeam && dvc && <strong> ( {COPY.USER_MANAGEMENT_DVC_LABEL} )</strong> }
{ judgeTeam && !admin && <strong> ( {COPY.USER_MANAGEMENT_ATTORNEY_LABEL} )</strong> }
{ (judgeTeam || dvcTeam) && admin && <strong> ( {COPY.USER_MANAGEMENT_ADMIN_LABEL} )</strong> }
</li>
{ (judgeTeam || dvcTeam) && admin ?
<div {...topUserBorder}></div > :
<div {...buttonContainerStyle}>
<div>
{ (judgeTeam || dvcTeam) ? '' : this.adminButton(user, admin) }
{ this.removeUserButton(user) }
</div>
{ this.state.organizationName === 'Hearings Management' &&
<div {...radioContainerStyle}>
<SelectConferenceTypeRadioField
key={`${user.id}-conference-selection`}
name={user.id}
meetingType={user.attributes.meeting_type}
organization={this.props.organization}
user={user} />
</div>
}
</div> }
</ul>
</div>
</React.Fragment>;
});

Expand All @@ -285,10 +308,10 @@ export default class OrganizationUsers extends React.PureComponent {
<div>
<h2>{COPY.USER_MANAGEMENT_EDIT_USER_IN_ORG_LABEL}</h2>
<ul {...listStyle}>
{ (judgeTeam || dvcTeam) ? '' : <li><strong>{COPY.USER_MANAGEMENT_ADMIN_RIGHTS_HEADING}</strong>{COPY.USER_MANAGEMENT_ADMIN_RIGHTS_DESCRIPTION}</li> }
<li><strong>{COPY.USER_MANAGEMENT_REMOVE_USER_HEADING}</strong>{ judgeTeam ?
{ (judgeTeam || dvcTeam) ? '' : <ul><li><strong>{COPY.USER_MANAGEMENT_ADMIN_RIGHTS_HEADING}</strong>{COPY.USER_MANAGEMENT_ADMIN_RIGHTS_DESCRIPTION}</li></ul> }
<ul><li><strong>{COPY.USER_MANAGEMENT_REMOVE_USER_HEADING}</strong>{ judgeTeam ?
COPY.USER_MANAGEMENT_JUDGE_TEAM_REMOVE_USER_DESCRIPTION :
COPY.USER_MANAGEMENT_REMOVE_USER_DESCRIPTION }</li>
COPY.USER_MANAGEMENT_REMOVE_USER_DESCRIPTION }</li></ul>
</ul>
</div>
<ul>{listOfUsers}</ul>
Expand Down Expand Up @@ -363,5 +386,6 @@ export default class OrganizationUsers extends React.PureComponent {
}

OrganizationUsers.propTypes = {
organization: PropTypes.string
organization: PropTypes.string,
conferenceSelectionVisibility: PropTypes.bool
};
29 changes: 18 additions & 11 deletions client/app/queue/QueueApp.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
setCanEditCavcDashboards,
setCanViewCavcDashboards,
setFeatureToggles,
setMeetingType,
setUserId,
setUserRole,
setUserCssId,
Expand Down Expand Up @@ -111,6 +112,7 @@ class QueueApp extends React.PureComponent {
this.props.setCanEditAod(this.props.canEditAod);
this.props.setCanEditNodDate(this.props.userCanViewEditNodDate);
this.props.setUserIsCobAdmin(this.props.userIsCobAdmin);
this.props.setMeetingType(this.props.meetingType);
this.props.setCanEditCavcRemands(this.props.canEditCavcRemands);
this.props.setCanEditCavcDashboards(this.props.canEditCavcDashboards);
this.props.setCanViewCavcDashboards(this.props.canViewCavcDashboards);
Expand Down Expand Up @@ -582,7 +584,9 @@ class QueueApp extends React.PureComponent {
};

routedOrganizationUsers = (props) => (
<OrganizationUsers {...props.match.params} />
<OrganizationUsers {...props.match.params}
conferenceSelectionVisibility = {this.props.featureToggles.conference_selection_visibility}
/>
);

routedTeamManagement = (props) => <TeamManagement {...props.match.params} />;
Expand Down Expand Up @@ -755,15 +759,15 @@ class QueueApp extends React.PureComponent {

// eslint-disable-next-line default-case
switch (this.props.reviewActionType) {
case DECISION_TYPES.OMO_REQUEST:
reviewActionType = 'OMO';
break;
case DECISION_TYPES.DRAFT_DECISION:
reviewActionType = 'Draft Decision';
break;
case DECISION_TYPES.DISPATCH:
reviewActionType = 'to Dispatch';
break;
case DECISION_TYPES.OMO_REQUEST:
reviewActionType = 'OMO';
break;
case DECISION_TYPES.DRAFT_DECISION:
reviewActionType = 'Draft Decision';
break;
case DECISION_TYPES.DISPATCH:
reviewActionType = 'to Dispatch';
break;
}

return `Draft Decision | Submit ${reviewActionType}`;
Expand Down Expand Up @@ -1215,7 +1219,7 @@ class QueueApp extends React.PureComponent {
/>
<PageRoute
path={`/queue/appeals/:appealId/tasks/:taskId/${TASK_ACTIONS.
CANCEL_ADDRESS_VERIFY_TASK_AND_ASSIGN_REGIONAL_OFFICE.value
CANCEL_ADDRESS_VERIFY_TASK_AND_ASSIGN_REGIONAL_OFFICE.value
}`}
title={`${PAGE_TITLES.CANCEL_AND_ASSIGN_TO_RO} | Caseflow`}
render={this.routedUpdateTaskAndAssignRegionalOfficeModal(
Expand Down Expand Up @@ -1418,6 +1422,8 @@ QueueApp.propTypes = {
canEditCavcDashboards: PropTypes.bool,
canViewCavcDashboards: PropTypes.bool,
userIsCobAdmin: PropTypes.bool,
meetingType: PropTypes.string,
setMeetingType: PropTypes.string
};

const mapStateToProps = (state) => ({
Expand All @@ -1430,6 +1436,7 @@ const mapDispatchToProps = (dispatch) =>
setCanEditAod,
setCanEditNodDate,
setUserIsCobAdmin,
setMeetingType,
setCanEditCavcRemands,
setCanEditCavcDashboards,
setCanViewCavcDashboards,
Expand Down
48 changes: 48 additions & 0 deletions client/app/queue/SelectConferenceTypeRadioField.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import ApiUtil from '../util/ApiUtil';

import RadioField from '../components/RadioField';
import COPY from '../../COPY';

const radioOptions = [
{ displayText: 'Pexip',
value: 'pexip' },
{ displayText: 'Webex',
value: 'webex' }
];

const SelectConferenceTypeRadioField = ({ name, meetingType, organization, user }) => {
const [value, setValue] = useState(meetingType);

const modifyConferenceType = (newMeetingType) => {
const payload = { data: { ...user, attributes: { ...user.attributes, meeting_type: newMeetingType } } };

ApiUtil.patch(`/organizations/${organization}/users/${user.id}`, payload);
};

return (
<>
<RadioField
label={COPY.USER_MANAGEMENT_SELECT_HEARINGS_CONFERENCE_TYPE}
name={name}
options={radioOptions}
value={value}
onChange={((newValue) => setValue(newValue) || modifyConferenceType(newValue))}
vertical
/></>
);
};

SelectConferenceTypeRadioField.propTypes = {
name: PropTypes.string,
onClick: PropTypes.func,
meetingType: PropTypes.string,
organization: PropTypes.string,
user: PropTypes.shape({
id: PropTypes.string,
attributes: PropTypes.object
})
};

export default SelectConferenceTypeRadioField;
Loading
Loading