[FIX] Permissions to edit livechat when the user is a livechat-agent (#3294)
* [FIX] Permissions to edit livechat * Added the permission to edit livechat room custom fields Co-authored-by: Levy Costa <levycosta471@gmail.com> Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
parent
8e3b79ed7c
commit
8f1036f57e
|
@ -48,7 +48,9 @@ const PERMISSIONS = [
|
|||
'view-user-administration',
|
||||
'view-all-teams',
|
||||
'view-all-team-channels',
|
||||
'convert-team'
|
||||
'convert-team',
|
||||
'edit-omnichannel-contact',
|
||||
'edit-livechat-room-customfields'
|
||||
];
|
||||
|
||||
export async function setPermissions() {
|
||||
|
|
|
@ -37,10 +37,11 @@ Title.propTypes = {
|
|||
};
|
||||
|
||||
const LivechatEditView = ({
|
||||
user, navigation, route, theme
|
||||
user, navigation, route, theme, editOmnichannelContact, editLivechatRoomCustomfields
|
||||
}) => {
|
||||
const [customFields, setCustomFields] = useState({});
|
||||
const [availableUserTags, setAvailableUserTags] = useState([]);
|
||||
const [permissions, setPermissions] = useState([]);
|
||||
|
||||
const params = {};
|
||||
const inputs = {};
|
||||
|
@ -139,9 +140,15 @@ const LivechatEditView = ({
|
|||
|
||||
const onChangeText = (key, text) => { params[key] = text; };
|
||||
|
||||
const getPermissions = async() => {
|
||||
const permissionsArray = await RocketChat.hasPermission([editOmnichannelContact, editLivechatRoomCustomfields], livechat.rid);
|
||||
setPermissions(permissionsArray);
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
getAgentDepartments();
|
||||
getCustomFields();
|
||||
getPermissions();
|
||||
}, []);
|
||||
|
||||
return (
|
||||
|
@ -162,6 +169,7 @@ const LivechatEditView = ({
|
|||
onChangeText={text => onChangeText('name', text)}
|
||||
onSubmitEditing={() => { inputs.name.focus(); }}
|
||||
theme={theme}
|
||||
editable={!!permissions[0]}
|
||||
/>
|
||||
<TextInput
|
||||
label={I18n.t('Email')}
|
||||
|
@ -170,6 +178,7 @@ const LivechatEditView = ({
|
|||
onChangeText={text => onChangeText('email', text)}
|
||||
onSubmitEditing={() => { inputs.phone.focus(); }}
|
||||
theme={theme}
|
||||
editable={!!permissions[0]}
|
||||
/>
|
||||
<TextInput
|
||||
label={I18n.t('Phone')}
|
||||
|
@ -186,6 +195,7 @@ const LivechatEditView = ({
|
|||
}
|
||||
}}
|
||||
theme={theme}
|
||||
editable={!!permissions[0]}
|
||||
/>
|
||||
{Object.entries(customFields?.visitor || {}).map(([key, value], index, array) => (
|
||||
<TextInput
|
||||
|
@ -200,6 +210,7 @@ const LivechatEditView = ({
|
|||
inputs.topic.focus();
|
||||
}}
|
||||
theme={theme}
|
||||
editable={!!permissions[0]}
|
||||
/>
|
||||
))}
|
||||
<Title
|
||||
|
@ -213,6 +224,7 @@ const LivechatEditView = ({
|
|||
onChangeText={text => onChangeText('topic', text)}
|
||||
onSubmitEditing={() => inputs.tags.focus()}
|
||||
theme={theme}
|
||||
editable={!!permissions[1]}
|
||||
/>
|
||||
|
||||
<TextInput
|
||||
|
@ -236,6 +248,7 @@ const LivechatEditView = ({
|
|||
}
|
||||
}}
|
||||
theme={theme}
|
||||
editable={!!permissions[1]}
|
||||
/>
|
||||
<Chips
|
||||
items={tagParam.map(tag => ({ text: { text: tag }, value: tag }))}
|
||||
|
@ -257,6 +270,7 @@ const LivechatEditView = ({
|
|||
submit();
|
||||
}}
|
||||
theme={theme}
|
||||
editable={!!permissions[1]}
|
||||
/>
|
||||
))}
|
||||
|
||||
|
@ -274,7 +288,9 @@ LivechatEditView.propTypes = {
|
|||
user: PropTypes.object,
|
||||
navigation: PropTypes.object,
|
||||
route: PropTypes.object,
|
||||
theme: PropTypes.string
|
||||
theme: PropTypes.string,
|
||||
editOmnichannelContact: PropTypes.array,
|
||||
editLivechatRoomCustomfields: PropTypes.array
|
||||
};
|
||||
LivechatEditView.navigationOptions = ({
|
||||
title: I18n.t('Livechat_edit')
|
||||
|
@ -282,7 +298,9 @@ LivechatEditView.navigationOptions = ({
|
|||
|
||||
const mapStateToProps = state => ({
|
||||
server: state.server.server,
|
||||
user: getUserSelector(state)
|
||||
user: getUserSelector(state),
|
||||
editOmnichannelContact: state.permissions['edit-omnichannel-contact'],
|
||||
editLivechatRoomCustomfields: state.permissions['edit-livechat-room-customfields']
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(withTheme(LivechatEditView));
|
||||
|
|
|
@ -55,6 +55,8 @@ class RoomInfoView extends React.Component {
|
|||
isMasterDetail: PropTypes.bool,
|
||||
jitsiEnabled: PropTypes.bool,
|
||||
editRoomPermission: PropTypes.array,
|
||||
editOmnichannelContact: PropTypes.array,
|
||||
editLivechatRoomCustomfields: PropTypes.array,
|
||||
roles: PropTypes.array
|
||||
}
|
||||
|
||||
|
@ -184,7 +186,9 @@ class RoomInfoView extends React.Component {
|
|||
|
||||
loadRoom = async() => {
|
||||
const { room: roomState } = this.state;
|
||||
const { route, editRoomPermission } = this.props;
|
||||
const {
|
||||
route, editRoomPermission, editOmnichannelContact, editLivechatRoomCustomfields
|
||||
} = this.props;
|
||||
let room = route.params?.room;
|
||||
if (room && room.observe) {
|
||||
this.roomObservable = room.observe();
|
||||
|
@ -204,8 +208,10 @@ class RoomInfoView extends React.Component {
|
|||
}
|
||||
}
|
||||
|
||||
const permissions = await RocketChat.hasPermission([editRoomPermission], room.rid);
|
||||
if (permissions[0]) {
|
||||
const permissionToEdit = this.isLivechat ? [editOmnichannelContact, editLivechatRoomCustomfields] : [editRoomPermission];
|
||||
|
||||
const permissions = await RocketChat.hasPermission(permissionToEdit, room.rid);
|
||||
if (permissions.some(Boolean)) {
|
||||
this.setState({ showEdit: true }, () => this.setHeader());
|
||||
}
|
||||
}
|
||||
|
@ -370,6 +376,8 @@ const mapStateToProps = state => ({
|
|||
isMasterDetail: state.app.isMasterDetail,
|
||||
jitsiEnabled: state.settings.Jitsi_Enabled || false,
|
||||
editRoomPermission: state.permissions['edit-room'],
|
||||
editOmnichannelContact: state.permissions['edit-omnichannel-contact'],
|
||||
editLivechatRoomCustomfields: state.permissions['edit-livechat-room-customfields'],
|
||||
roles: state.roles
|
||||
});
|
||||
|
||||
|
|
Loading…
Reference in New Issue