fix: Redirect after contact delete [CW-2397] (#7740)

Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
Co-authored-by: Shivam Mishra <scm.mymail@gmail.com>
Co-authored-by: Pranav Raj S <pranav@chatwoot.com>
This commit is contained in:
Liam
2023-09-04 14:18:30 +01:00
committed by GitHub
parent 2483d99d3c
commit e5f7807833
5 changed files with 89 additions and 26 deletions

View File

@@ -49,3 +49,38 @@ export const validateLoggedInRoutes = (to, user, roleWiseRoutes) => {
// Proceed to the route if none of the above conditions are met // Proceed to the route if none of the above conditions are met
return null; return null;
}; };
export const isAConversationRoute = routeName =>
[
'inbox_conversation',
'conversation_through_mentions',
'conversation_through_unattended',
'conversation_through_inbox',
'conversations_through_label',
'conversations_through_team',
'conversations_through_folders',
'conversation_through_participating',
].includes(routeName);
export const getConversationDashboardRoute = routeName => {
switch (routeName) {
case 'inbox_conversation':
return 'home';
case 'conversation_through_mentions':
return 'conversation_mentions';
case 'conversation_through_unattended':
return 'conversation_unattended';
case 'conversations_through_label':
return 'label_conversations';
case 'conversations_through_team':
return 'team_conversations';
case 'conversations_through_folders':
return 'folder_conversations';
case 'conversation_through_participating':
return 'conversation_participating';
case 'conversation_through_inbox':
return 'inbox_dashboard';
default:
return null;
}
};

View File

@@ -1,6 +1,8 @@
import { import {
getConversationDashboardRoute,
getCurrentAccount, getCurrentAccount,
getUserRole, getUserRole,
isAConversationRoute,
routeIsAccessibleFor, routeIsAccessibleFor,
validateLoggedInRoutes, validateLoggedInRoutes,
} from '../routeHelpers'; } from '../routeHelpers';
@@ -94,3 +96,41 @@ describe('#validateLoggedInRoutes', () => {
}); });
}); });
}); });
describe('isAConversationRoute', () => {
it('returns true if conversation route name is provided', () => {
expect(isAConversationRoute('inbox_conversation')).toBe(true);
expect(isAConversationRoute('conversation_through_inbox')).toBe(true);
expect(isAConversationRoute('conversations_through_label')).toBe(true);
expect(isAConversationRoute('conversations_through_team')).toBe(true);
expect(isAConversationRoute('dashboard')).toBe(false);
});
});
describe('getConversationDashboardRoute', () => {
it('returns dashboard route for conversation', () => {
expect(getConversationDashboardRoute('inbox_conversation')).toEqual('home');
expect(
getConversationDashboardRoute('conversation_through_mentions')
).toEqual('conversation_mentions');
expect(
getConversationDashboardRoute('conversation_through_unattended')
).toEqual('conversation_unattended');
expect(
getConversationDashboardRoute('conversations_through_label')
).toEqual('label_conversations');
expect(getConversationDashboardRoute('conversations_through_team')).toEqual(
'team_conversations'
);
expect(
getConversationDashboardRoute('conversations_through_folders')
).toEqual('folder_conversations');
expect(
getConversationDashboardRoute('conversation_through_participating')
).toEqual('conversation_participating');
expect(getConversationDashboardRoute('conversation_through_inbox')).toEqual(
'inbox_dashboard'
);
expect(getConversationDashboardRoute('non_existent_route')).toBeNull();
});
});

View File

@@ -29,19 +29,7 @@ import {
UNMUTE_ACTION, UNMUTE_ACTION,
MUTE_ACTION, MUTE_ACTION,
} from './commandBarActions'; } from './commandBarActions';
import { isAConversationRoute } from '../../../helper/routeHelpers';
export const isAConversationRoute = routeName =>
[
'inbox_conversation',
'conversation_through_mentions',
'conversation_through_unattended',
'conversation_through_inbox',
'conversations_through_label',
'conversations_through_team',
'conversations_through_folders',
'conversation_through_unattended',
'conversation_through_participating',
].includes(routeName);
export default { export default {
watch: { watch: {

View File

@@ -1,11 +0,0 @@
import { isAConversationRoute } from '../conversationHotKeys';
describe('isAConversationRoute', () => {
it('returns true if conversation route name is provided', () => {
expect(isAConversationRoute('inbox_conversation')).toBe(true);
expect(isAConversationRoute('conversation_through_inbox')).toBe(true);
expect(isAConversationRoute('conversations_through_label')).toBe(true);
expect(isAConversationRoute('conversations_through_team')).toBe(true);
expect(isAConversationRoute('dashboard')).toBe(false);
});
});

View File

@@ -177,6 +177,10 @@ import alertMixin from 'shared/mixins/alertMixin';
import adminMixin from '../../../../mixins/isAdmin'; import adminMixin from '../../../../mixins/isAdmin';
import { mapGetters } from 'vuex'; import { mapGetters } from 'vuex';
import { getCountryFlag } from 'dashboard/helper/flag'; import { getCountryFlag } from 'dashboard/helper/flag';
import {
isAConversationRoute,
getConversationDashboardRoute,
} from '../../../../helper/routeHelpers';
export default { export default {
components: { components: {
@@ -290,8 +294,15 @@ export default {
await this.$store.dispatch('contacts/delete', id); await this.$store.dispatch('contacts/delete', id);
this.$emit('panel-close'); this.$emit('panel-close');
this.showAlert(this.$t('DELETE_CONTACT.API.SUCCESS_MESSAGE')); this.showAlert(this.$t('DELETE_CONTACT.API.SUCCESS_MESSAGE'));
if (this.$route.name !== 'contacts_dashboard') {
this.$router.push({ name: 'contacts_dashboard' }); if (isAConversationRoute(this.$route.name)) {
this.$router.push({
name: getConversationDashboardRoute(this.$route.name),
});
} else if (this.$route.name !== 'contacts_dashboard') {
this.$router.push({
name: 'contacts_dashboard',
});
} }
} catch (error) { } catch (error) {
this.showAlert( this.showAlert(