mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
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:
@@ -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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -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();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@@ -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: {
|
||||||
|
|||||||
@@ -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);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user