update: canned responses permission on

This commit is contained in:
Gerzon Z 2022-05-04 09:32:52 -04:00
parent 730162fec9
commit 416be2b755
3 changed files with 27 additions and 31 deletions

View File

@ -314,7 +314,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
tshow, tshow,
mentionLoading, mentionLoading,
trackingType, trackingType,
permissionToUpload permissionToUpload,
canViewCannedResponse
} = this.state; } = this.state;
const { roomType, replying, editing, isFocused, message, theme, usedCannedResponse, uploadFilePermission } = this.props; const { roomType, replying, editing, isFocused, message, theme, usedCannedResponse, uploadFilePermission } = this.props;
@ -373,8 +374,11 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
} }
componentDidUpdate(prevProps: IMessageBoxProps) { componentDidUpdate(prevProps: IMessageBoxProps) {
const { uploadFilePermission } = this.props; const { uploadFilePermission, viewCannedResponsesPermission } = this.props;
if (!dequal(prevProps.uploadFilePermission, uploadFilePermission)) { if (
!dequal(prevProps.uploadFilePermission, uploadFilePermission) ||
prevProps.viewCannedResponsesPermission !== viewCannedResponsesPermission
) {
this.setOptions(); this.setOptions();
} }
} }
@ -412,12 +416,12 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
canViewCannedResponse = async () => { canViewCannedResponse = async () => {
const { viewCannedResponsesPermission, rid } = this.props; const { viewCannedResponsesPermission, rid } = this.props;
const permissions = await RocketChat.hasPermission([viewCannedResponsesPermission], rid); const permissions = await hasPermission([viewCannedResponsesPermission], rid);
return permissions[0]; return permissions[0];
}; };
setOptions = async () => { setOptions = async () => {
const { uploadFilePermission, rid } = this.props; const { uploadFilePermission, viewCannedResponsesPermission, rid } = this.props;
// Servers older than 4.2 // Servers older than 4.2
if (!uploadFilePermission) { if (!uploadFilePermission) {
@ -425,8 +429,8 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
return; return;
} }
const permissionToUpload = await hasPermission([uploadFilePermission], rid); const permissions = await hasPermission([uploadFilePermission, viewCannedResponsesPermission], rid);
this.setState({ permissionToUpload: permissionToUpload[0] }); this.setState({ permissionToUpload: permissions[0], canViewCannedResponse: permissions[1] });
}; };
onChangeText: any = (text: string): void => { onChangeText: any = (text: string): void => {
@ -795,11 +799,11 @@ class MessageBox extends Component<IMessageBoxProps, IMessageBoxState> {
showMessageBoxActions = () => { showMessageBoxActions = () => {
logEvent(events.ROOM_SHOW_BOX_ACTIONS); logEvent(events.ROOM_SHOW_BOX_ACTIONS);
const { permissionToUpload, canViewCannedResponse } = this.state; const { permissionToUpload } = this.state;
const { showActionSheet, goToCannedResponses } = this.props; const { showActionSheet, goToCannedResponses, roomType } = this.props;
const options = []; const options = [];
if (canViewCannedResponse) { if (roomType === 'l' && goToCannedResponses) {
options.push({ options.push({
title: I18n.t('Canned_Responses'), title: I18n.t('Canned_Responses'),
icon: 'canned-response', icon: 'canned-response',

View File

@ -69,7 +69,6 @@ interface IRoomActionsViewProps extends IBaseScreen<ChatsStackParamList, 'RoomAc
addTeamChannelPermission?: string[]; addTeamChannelPermission?: string[];
convertTeamPermission?: string[]; convertTeamPermission?: string[];
viewCannedResponsesPermission?: string[]; viewCannedResponsesPermission?: string[];
livechatAllowManualOnHold?: boolean;
} }
interface IRoomActionsViewState { interface IRoomActionsViewState {
@ -347,13 +346,6 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
return result; return result;
}; };
canPlaceLivechatOnHold = (): boolean => {
const { livechatAllowManualOnHold } = this.props;
const { room } = this.state;
return !!(livechatAllowManualOnHold && !room?.lastMessage?.token && room?.lastMessage?.u && !room.onHold);
};
renderEncryptedSwitch = () => { renderEncryptedSwitch = () => {
const { room, canToggleEncryption, canEdit } = this.state; const { room, canToggleEncryption, canEdit } = this.state;
const { encrypted } = room; const { encrypted } = room;
@ -1034,7 +1026,7 @@ class RoomActionsView extends React.Component<IRoomActionsViewProps, IRoomAction
event: this.placeOnHoldLivechat event: this.placeOnHoldLivechat
}) })
} }
left={() => <List.Icon name='pause' />} left={() => <List.Icon name='pause' color={themes[theme].titleText} />}
showActionIndicator showActionIndicator
/> />
<List.Separator /> <List.Separator />

View File

@ -344,7 +344,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
shouldComponentUpdate(nextProps: IRoomViewProps, nextState: IRoomViewState) { shouldComponentUpdate(nextProps: IRoomViewProps, nextState: IRoomViewState) {
const { state } = this; const { state } = this;
const { roomUpdate, member } = state; const { roomUpdate, member, isOnHold } = state;
const { appState, theme, insets, route } = this.props; const { appState, theme, insets, route } = this.props;
if (theme !== nextProps.theme) { if (theme !== nextProps.theme) {
return true; return true;
@ -355,7 +355,9 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
if (member.statusText !== nextState.member.statusText) { if (member.statusText !== nextState.member.statusText) {
return true; return true;
} }
if (isOnHold !== nextState.isOnHold) {
return true;
}
const stateUpdated = stateAttrsUpdate.some(key => nextState[key] !== state[key]); const stateUpdated = stateAttrsUpdate.some(key => nextState[key] !== state[key]);
if (stateUpdated) { if (stateUpdated) {
return true; return true;
@ -370,8 +372,8 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
} }
componentDidUpdate(prevProps: IRoomViewProps, prevState: IRoomViewState) { componentDidUpdate(prevProps: IRoomViewProps, prevState: IRoomViewState) {
const { roomUpdate, joined, isOnHold } = this.state; const { roomUpdate, joined, room } = this.state;
const { appState, insets, route, livechatAllowManualOnHold } = this.props; const { appState, insets, route } = this.props;
if (route?.params?.jumpToMessageId && route?.params?.jumpToMessageId !== prevProps.route?.params?.jumpToMessageId) { if (route?.params?.jumpToMessageId && route?.params?.jumpToMessageId !== prevProps.route?.params?.jumpToMessageId) {
this.jumpToMessage(route?.params?.jumpToMessageId); this.jumpToMessage(route?.params?.jumpToMessageId);
@ -396,16 +398,14 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
// If it's a livechat room // If it's a livechat room
if (this.t === 'l') { if (this.t === 'l') {
if ( if (
!room.lastMessage?.token ||
!dequal(prevState.roomUpdate.visitor, roomUpdate.visitor) || !dequal(prevState.roomUpdate.visitor, roomUpdate.visitor) ||
!dequal(prevState.roomUpdate.status, roomUpdate.status) || !dequal(prevState.roomUpdate.status, roomUpdate.status) ||
prevState.joined !== joined prevState.joined !== joined
) { ) {
this.setHeader();
}
if (isOnHold !== prevState.isOnHold || prevProps.livechatAllowManualOnHold !== livechatAllowManualOnHold) {
const canPlaceLivechatOnHold = this.canPlaceLivechatOnHold(); const canPlaceLivechatOnHold = this.canPlaceLivechatOnHold();
this.setState({ canPlaceLivechatOnHold }); this.setState({ canPlaceLivechatOnHold });
this.setHeader();
} }
} }
if (roomUpdate.teamMain !== prevState.roomUpdate.teamMain || roomUpdate.teamId !== prevState.roomUpdate.teamId) { if (roomUpdate.teamMain !== prevState.roomUpdate.teamMain || roomUpdate.teamId !== prevState.roomUpdate.teamId) {
@ -489,7 +489,6 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
canPlaceLivechatOnHold = () => { canPlaceLivechatOnHold = () => {
const { livechatAllowManualOnHold } = this.props; const { livechatAllowManualOnHold } = this.props;
const { room } = this.state; const { room } = this.state;
return !!(livechatAllowManualOnHold && !room?.lastMessage?.token && room?.lastMessage?.u && !room.onHold); return !!(livechatAllowManualOnHold && !room?.lastMessage?.token && room?.lastMessage?.u && !room.onHold);
}; };
@ -1278,7 +1277,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
dateSeparator = item.ts; dateSeparator = item.ts;
} }
} }
console.log({ item });
let content = null; let content = null;
if (item.t && MESSAGE_TYPE_ANY_LOAD.includes(item.t as MessageTypeLoad)) { if (item.t && MESSAGE_TYPE_ANY_LOAD.includes(item.t as MessageTypeLoad)) {
content = ( content = (
@ -1346,7 +1345,8 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
}; };
renderFooter = () => { renderFooter = () => {
const { joined, room, selectedMessage, editing, replying, replyWithMention, readOnly, loading } = this.state; const { joined, room, selectedMessage, editing, replying, replyWithMention, readOnly, loading, canViewCannedResponse } =
this.state;
const { navigation, theme, route } = this.props; const { navigation, theme, route } = this.props;
const usedCannedResponse = route?.params?.usedCannedResponse; const usedCannedResponse = route?.params?.usedCannedResponse;
@ -1413,7 +1413,7 @@ class RoomView extends React.Component<IRoomViewProps, IRoomViewState> {
return ( return (
<MessageBox <MessageBox
ref={this.messagebox} ref={this.messagebox}
goToCannedResponses={this.goToCannedResponses} goToCannedResponses={canViewCannedResponse ? this.goToCannedResponses : null}
onSubmit={this.handleSendMessage} onSubmit={this.handleSendMessage}
rid={this.rid} rid={this.rid}
tmid={this.tmid} tmid={this.tmid}