diff --git a/src/components/CscMainMenuNewFeatures.vue b/src/components/CscMainMenuNewFeatures.vue index 884bf5d3..d8ec87c7 100644 --- a/src/components/CscMainMenuNewFeatures.vue +++ b/src/components/CscMainMenuNewFeatures.vue @@ -56,9 +56,6 @@ export default { return {} }, computed: { - ...mapGetters('user', [ - 'isRtcEngineUiVisible' - ]), items () { return [ { diff --git a/src/components/CscMainMenuTop.vue b/src/components/CscMainMenuTop.vue index bd061b20..ce96e1a6 100644 --- a/src/components/CscMainMenuTop.vue +++ b/src/components/CscMainMenuTop.vue @@ -47,7 +47,6 @@ export default { }, computed: { ...mapGetters('user', [ - 'isRtcEngineUiVisible', 'isPbxEnabled', 'hasFaxCapability', 'hasSubscriberProfileAttribute', diff --git a/src/components/pages/Conference/CscConferenceJoin.vue b/src/components/pages/Conference/CscConferenceJoin.vue deleted file mode 100644 index 794c3995..00000000 --- a/src/components/pages/Conference/CscConferenceJoin.vue +++ /dev/null @@ -1,219 +0,0 @@ - - - - - diff --git a/src/components/pages/Conference/CscConferenceJoined.vue b/src/components/pages/Conference/CscConferenceJoined.vue deleted file mode 100644 index bc52da4a..00000000 --- a/src/components/pages/Conference/CscConferenceJoined.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/src/components/pages/Conference/CscConferenceLocalParticipant.vue b/src/components/pages/Conference/CscConferenceLocalParticipant.vue deleted file mode 100644 index e5fb3831..00000000 --- a/src/components/pages/Conference/CscConferenceLocalParticipant.vue +++ /dev/null @@ -1,95 +0,0 @@ - - - diff --git a/src/components/pages/Conference/CscConferenceParticipants.vue b/src/components/pages/Conference/CscConferenceParticipants.vue deleted file mode 100644 index cb2c5cea..00000000 --- a/src/components/pages/Conference/CscConferenceParticipants.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - - - diff --git a/src/components/pages/Conference/CscConferenceRemoteParticipant.vue b/src/components/pages/Conference/CscConferenceRemoteParticipant.vue deleted file mode 100644 index a4e907d5..00000000 --- a/src/components/pages/Conference/CscConferenceRemoteParticipant.vue +++ /dev/null @@ -1,172 +0,0 @@ - - - diff --git a/src/components/pages/Conference/CscShareConferenceDialog.vue b/src/components/pages/Conference/CscShareConferenceDialog.vue deleted file mode 100644 index 0e809dd0..00000000 --- a/src/components/pages/Conference/CscShareConferenceDialog.vue +++ /dev/null @@ -1,75 +0,0 @@ - - - - - diff --git a/src/i18n/en.json b/src/i18n/en.json index bf86d6be..ba10b994 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -89,12 +89,10 @@ "Close": "Close", "Close filters": "Close filters", "Conference": "Conference", - "Conference name": "Conference name", "Confirm": "Confirm", "Contact": "Contact", "Content": "Content", "Conversations": "Conversations", - "Copy link": "Copy link", "Cost": "Cost", "Could not enable incoming call notifications.": "Could not enable incoming call notifications.", "Could not find any device matching any of the filter criteria": "Could not find any device matching any of the filter criteria", @@ -217,15 +215,12 @@ "Input a valid phone number": "Input a valid phone number", "Interval when the secret key is automatically renewed.": "Interval when the secret key is automatically renewed.", "Italian": "Italian", - "Join conference with name": "Join conference with name", "Lamp/Key": "Lamp/Key", "Lamps/Keys": "Lamps/Keys", "Language": "Language", "Language changed successfully": "Language changed successfully", "Language for voicemail and app server": "Language for voicemail and app server", "Last Modify Time": "Last Modify Time", - "Leave conference": "Leave conference", - "Leave current conference now!": "Leave current conference now!", "List of registered devices for the subscriber": "List of registered devices for the subscriber", "Local Subscriber": "Local Subscriber", "Login": "Login", @@ -245,8 +240,6 @@ "Monthly": "Monthly", "Music on Hold": "Music on Hold", "Music on hold": "Music on hold", - "Mute": "Mute", - "Mute all": "Mute all", "MyNumberList": "MyNumberList", "Name": "Name", "Name in Fax Header for Sendfax": "Name in Fax Header for Sendfax", @@ -393,8 +386,6 @@ "Set your speed dials": "Set your speed dials", "Set your voicebox settings": "Set your voicebox settings", "Settings": "Settings", - "Share": "Share", - "Share conference": "Share conference", "Shared": "Shared", "Sign In": "Sign In", "Slot": "Slot", @@ -444,8 +435,6 @@ "Undo": "Undo", "Unknown error": "Unknown error", "Unknown name": "Unknown name", - "Unmute": "Unmute", - "Unmute all": "Unmute all", "Updated {field} for call queue {callQueue} successfully": "Updated {field} for call queue {callQueue} successfully", "Updated {field} for device {device} successfully": "Updated {field} for device {device} successfully", "Updated {field} for manager secretary config {msConfig} successfully": "Updated {field} for manager secretary config {msConfig} successfully", @@ -496,7 +485,6 @@ "You are about to remove this Voicemail": "You are about to remove this Voicemail", "You are about to reset the custom {type} greeting sound to defaults": "You are about to reset the custom {type} greeting sound to defaults", "You are now able to start and receive calls": "You are now able to start and receive calls", - "You can not join a conference, since the RTC:engine is not active. If you operate a C5 CE then first upgrade to a C5 PRO to be able to use the RTC:engine.": "You can not join a conference, since the RTC:engine is not active. If you operate a C5 CE then first upgrade to a C5 PRO to be able to use the RTC:engine.", "You have blocked incoming call notifications.": "You have blocked incoming call notifications.", "You have invalid form input. Please check and try again.": "You have invalid form input. Please check and try again.", "Your SIP password has been changed successfully": "Your SIP password has been changed successfully", diff --git a/src/layouts/CscLayoutConference.vue b/src/layouts/CscLayoutConference.vue deleted file mode 100644 index cb5e829c..00000000 --- a/src/layouts/CscLayoutConference.vue +++ /dev/null @@ -1,417 +0,0 @@ - - - - - diff --git a/src/layouts/CscLayoutMain.vue b/src/layouts/CscLayoutMain.vue index ab3d7112..5c356b27 100644 --- a/src/layouts/CscLayoutMain.vue +++ b/src/layouts/CscLayoutMain.vue @@ -299,7 +299,6 @@ export default { 'hasSendFaxFeature', 'userDataRequesting', 'userDataSucceeded', - 'isRtcEngineUiVisible', 'isLogoRequesting', 'isLogoRequested' ]), @@ -393,7 +392,7 @@ export default { } }, isCallEnabled (value) { - if (value && this.isRtcEngineUiVisible) { + if (value) { showToast(this.$i18n.t('You are now able to start and receive calls')) } }, diff --git a/src/router/routes.js b/src/router/routes.js index 08b93321..76bf8693 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -1,6 +1,5 @@ import { PROFILE_ATTRIBUTE_MAP, PROFILE_ATTRIBUTES_MAP } from 'src/constants' -import CscLayoutConference from 'src/layouts/CscLayoutConference' import CscLayoutMain from 'src/layouts/CscLayoutMain' import CscLayoutLogin from 'src/layouts/CscLayoutLogin' @@ -63,13 +62,6 @@ export default function routes (app) { get title () { return i18n.t('Start new call') } - }, - beforeEnter (routeTo, routeFrom, next) { - if (app.store.getters['user/isRtcEngineUiVisible']) { - next() - } else { - next('/user/conversations') - } } }, { @@ -411,24 +403,6 @@ export default function routes (app) { } } }, - { - path: '/conference', - component: CscLayoutConference, - meta: { - get title () { - return i18n.t('Conference') - } - } - }, - { - path: '/conference/:id', - component: CscLayoutConference, - meta: { - get title () { - return i18n.t('Conference') - } - } - }, { path: '/recoverpassword', component: CscLayoutLogin, diff --git a/src/rtc-engine-library.js b/src/rtc-engine-library.js deleted file mode 100644 index 06cdc267..00000000 --- a/src/rtc-engine-library.js +++ /dev/null @@ -1,54 +0,0 @@ -import loadScript from 'load-script' - -const RTC_ENGINE_LIBRARY_ID = 'ngcp-rtc-engine-library' - -export const LocalMedia = { - audioOnly: 'audioOnly', - audioVideo: 'audioVideo', - videoOnly: 'videoOnly', - audioScreen: 'audioScreen', - screenOnly: 'screenOnly' -} - -export function loadRtcEngineLibrary ({ scriptUrl }) { - return new Promise((resolve, reject) => { - const script = document.getElementById(RTC_ENGINE_LIBRARY_ID) - if (!script) { - loadScript(scriptUrl, { - attrs: { - id: RTC_ENGINE_LIBRARY_ID - } - }, (err) => { - if (err) { - reject(new Error('Unable to load RTC:Engine client library')) - } else { - resolve() - } - }) - } else { - resolve() - } - }) -} - -export function unloadRtcEngineLibrary () { - const script = document.getElementById(RTC_ENGINE_LIBRARY_ID) - if (script) { - script.remove() - } -} - -export async function rtcEngineCreateMedia (localMedia) { - // eslint-disable-next-line no-undef - const localMediaBuilder = cdk.media.create() - if (localMedia === LocalMedia.audioOnly || localMedia === LocalMedia.audioVideo || - localMedia === LocalMedia.audioScreen) { - localMediaBuilder.enableMicrophone() - } - if (localMedia === LocalMedia.audioVideo || localMedia === LocalMedia.videoOnly) { - localMediaBuilder.enableCamera() - } else if (localMedia === LocalMedia.audioScreen || localMedia === LocalMedia.screenOnly) { - localMediaBuilder.enableScreen() - } - return await localMediaBuilder.build() -} diff --git a/src/store/call/getters.js b/src/store/call/getters.js index 6bd3f155..d98c9491 100644 --- a/src/store/call/getters.js +++ b/src/store/call/getters.js @@ -56,12 +56,6 @@ export default { isEnded (state) { return state.callState === CallState.ended }, - hasRtcEngineCapability (state, getters, rootState, rootGetters) { - return rootGetters['user/hasRtcEngineCapability'] - }, - hasRtcEngineCapabilityEnabled (state, getters, rootState, rootGetters) { - return rootGetters['user/hasRtcEngineCapabilityEnabled'] - }, hasRemoteVideo (state) { if (state.remoteMediaStream !== null) { return callHasRemoteVideo() diff --git a/src/store/conference.js b/src/store/conference.js deleted file mode 100644 index 3619502f..00000000 --- a/src/store/conference.js +++ /dev/null @@ -1,432 +0,0 @@ -import Vue from 'vue' -import { - RequestState -} from './common' - -const MediaTypes = { - mic: 'mic', - micCam: 'micCam', - cam: 'cam', - micScreen: 'micScreen', - screen: 'screen' -} - -export default { - namespaced: true, - state: { - conferencingEnabled: false, - microphoneEnabled: false, - cameraEnabled: false, - screenEnabled: false, - localMediaState: RequestState.initiated, - localMediaError: null, - joinState: RequestState.initiated, - joinError: null, - leaveState: RequestState.initiated, - leaveError: null, - participants: [], - mutedState: {}, - remoteMediaStreams: {}, - selectedParticipant: null, - manualSelection: false - }, - getters: { - username (state, getters, rootState, rootGetters) { - return rootGetters['user/getUsername'] - }, - conferenceId (state, getters, rootState, rootGetters) { - return rootGetters.conferenceId - }, - conferenceUrl (state, getters, rootState, rootGetters) { - return rootGetters.conferenceUrl - }, - hasConferenceId (state, getters, rootState, rootGetters) { - return rootGetters.hasConferenceId - }, - isJoined (state) { - return state.joinState === RequestState.succeeded - }, - isJoining (state) { - return state.joinState === RequestState.requesting - }, - isLeft (state) { - return state.leaveState === RequestState.succeeded - }, - isLeaving (state) { - return state.leaveState === RequestState.requesting - }, - isConferencingEnabled (state) { - return state.conferencingEnabled - }, - isMicrophoneEnabled (state) { - return state.microphoneEnabled - }, - isCameraEnabled (state) { - return state.cameraEnabled - }, - isScreenEnabled (state) { - return state.screenEnabled - }, - isMediaEnabled (state) { - return (state.localMediaState === RequestState.succeeded || - state.localMediaState === RequestState.requesting) && Vue.$conference.hasLocalMediaStream() - }, - localMediaStream (state) { - if ((state.localMediaState === RequestState.succeeded || - state.localMediaState === RequestState.requesting) && Vue.$conference.hasLocalMediaStream()) { - return Vue.$conference.getLocalMediaStreamNative() - } - return null - }, - hasLocalMediaStream (state) { - return (state.localMediaState === RequestState.succeeded || - state.localMediaState === RequestState.requesting) && Vue.$conference.hasLocalMediaStream() - }, - localParticipant (state) { - if (state.joinState === RequestState.succeeded) { - return Vue.$conference.getLocalParticipant() - } - }, - remoteParticipant: () => (participantId) => { - return Vue.$conference.getRemoteParticipant(participantId) - }, - remoteMediaStream: () => (participantId) => { - const participant = Vue.$conference.getRemoteParticipant(participantId) - if (participant) { - return participant.mediaStream ? participant.mediaStream.getStream() : null - } - return null - }, - participantsList (state) { - return state.participants - }, - mutedState (state) { - return state.mutedState - }, - remoteMediaStreams (state) { - return state.remoteMediaStreams - }, - hasRemoteVideo: () => (participantId) => { - const participant = Vue.$conference.getRemoteParticipant(participantId) - if (participant) { - return participant.mediaStream ? participant.mediaStream.hasVideo() : false - } - return false - }, - selectedParticipant (state) { - return state.selectedParticipant - } - }, - mutations: { - enableConferencing (state) { - state.conferencingEnabled = true - }, - disableConferencing (state) { - state.conferencingEnabled = false - }, - enableMicrophone (state) { - state.microphoneEnabled = true - }, - disableMicrophone (state) { - state.microphoneEnabled = false - }, - enableCamera (state) { - state.cameraEnabled = true - }, - disableCamera (state) { - state.cameraEnabled = false - }, - enableScreen (state) { - state.screenEnabled = true - }, - disableScreen (state) { - state.screenEnabled = false - }, - localMediaRequesting (state) { - state.localMediaState = RequestState.requesting - state.localMediaError = null - }, - localMediaSucceeded (state) { - state.localMediaState = RequestState.succeeded - state.localMediaError = null - }, - localMediaFailed (state, error) { - state.localMediaState = RequestState.failed - state.localMediaError = error - }, - isLocalMediaRequesting (state) { - return state.localMediaState === RequestState.requesting - }, - disposeLocalMedia (state) { - Vue.$conference.removeLocalMediaStream() - state.cameraEnabled = false - state.microphoneEnabled = false - state.screenEnabled = false - }, - addRemoteMedia (state, participantId) { - Vue.set(state.remoteMediaStreams, participantId, participantId) - }, - removeRemoteMedia (state, participantId) { - Vue.delete(state.remoteMediaStreams, participantId) - }, - joinRequesting (state) { - state.joinState = RequestState.requesting - state.joinError = null - }, - joinSucceeded (state) { - state.joinState = RequestState.succeeded - state.joinError = null - state.leaveState = null - state.selectedParticipant = 'local' - }, - joinFailed (state, error) { - state.joinState = RequestState.failed - state.joinError = error - }, - leaveRequesting (state) { - state.leaveState = RequestState.requesting - state.leaveError = null - state.joinState = null - }, - leaveSucceeded (state) { - state.leaveState = RequestState.succeeded - state.leaveError = null - state.joinState = RequestState.initiated - state.joinError = null - state.selectedParticipant = null - state.remoteMediaStreams = {} - state.manualSelection = false - state.participants = [] - state.mutedState = {} - }, - leaveFailed (state, error) { - state.leaveState = RequestState.failed - state.leaveError = error - }, - participantJoined (state, participant) { - if (state.participants.includes(participant.getId())) { - state.participants = state.participants.filter(($participant) => { - return participant.getId() !== $participant - }) - } - state.participants.push(participant.getId()) - }, - participantLeft (state, participant) { - state.participants = state.participants.filter(($participant) => { - return participant.getId() !== $participant - }) - }, - setSelectedParticipant (state, participant) { - if (state.selectedParticipant === 'local' && !state.joinState === RequestState.succeeded) { - state.selectedParticipant = null - } else if (state.selectedParticipant === participant && !state.participants.includes(participant)) { - state.selectedParticipant = 'local' - state.manualSelection = false - } else { - state.selectedParticipant = participant - } - }, - setManualSelection (state, val) { - state.manualSelection = val - }, - addMutedState (state, participantId) { - Vue.set(state.mutedState, participantId, participantId) - }, - removeMutedState (state, participantId) { - Vue.delete(state.mutedState, participantId) - } - }, - actions: { - createLocalMedia (context, type) { - const media = Vue.$rtcEngine.createMedia() - context.commit('localMediaRequesting') - switch (type) { - default: - case MediaTypes.mic: - media.enableMicrophone() - break - case MediaTypes.micCam: - media.enableMicrophone() - media.enableCamera() - break - case MediaTypes.micScreen: - media.enableMicrophone() - media.enableScreen() - break - case MediaTypes.cam: - media.enableCamera() - break - case MediaTypes.screen: - media.enableScreen() - break - } - let localMediaStream - return media.build().then(($localMediaStream) => { - localMediaStream = $localMediaStream - Vue.$conference.setLocalMediaStream(localMediaStream) - switch (type) { - default: - case MediaTypes.mic: - context.commit('enableMicrophone') - context.commit('disableCamera') - context.commit('disableScreen') - break - case MediaTypes.micCam: - context.commit('enableMicrophone') - context.commit('enableCamera') - context.commit('disableScreen') - break - case MediaTypes.micScreen: - context.commit('enableMicrophone') - context.commit('disableCamera') - context.commit('enableScreen') - break - case MediaTypes.cam: - context.commit('disableMicrophone') - context.commit('enableCamera') - context.commit('disableScreen') - break - case MediaTypes.screen: - context.commit('disableMicrophone') - context.commit('disableCamera') - context.commit('enableScreen') - break - } - return Promise.resolve() - }).then(() => { - if (context.getters.isJoined) { - return Vue.$conference.changeConferenceMedia() - } else { - return Promise.resolve() - } - }).then(() => { - context.commit('localMediaSucceeded', localMediaStream) - }).catch((err) => { - if (!context.getters.hasLocalMediaStream) { - context.commit('localMediaFailed', err.message) - } - }) - }, - async enableMicrophone (context) { - if (!context.getters.isLocalMediaRequesting) { - let mediaType = MediaTypes.mic - if (context.getters.isCameraEnabled) { - mediaType = MediaTypes.micCam - } else if (context.getters.isScreenEnabled) { - mediaType = MediaTypes.micScreen - } - await context.dispatch('createLocalMedia', mediaType) - } - }, - disableMicrophone (context) { - if (!context.getters.isLocalMediaRequesting) { - let mediaType = null - if (context.getters.isCameraEnabled) { - mediaType = MediaTypes.cam - } else if (context.getters.isScreenEnabled) { - mediaType = MediaTypes.screen - } - if (mediaType === null) { - context.commit('disposeLocalMedia') - } else { - context.dispatch('createLocalMedia', mediaType) - } - } - }, - toggleMicrophone (context) { - if (!context.getters.isMicrophoneEnabled) { - context.dispatch('enableMicrophone') - } else { - context.dispatch('disableMicrophone') - } - }, - enableCamera (context) { - if (!context.getters.isLocalMediaRequesting) { - context.dispatch('createLocalMedia', MediaTypes.micCam) - } - }, - disableCamera (context) { - if (!context.getters.isLocalMediaRequesting) { - let mediaType = null - if (context.getters.isMicrophoneEnabled) { - mediaType = MediaTypes.mic - } - if (mediaType === null) { - context.commit('disposeLocalMedia') - } else { - context.dispatch('createLocalMedia', mediaType) - } - } - }, - toggleCamera (context) { - if (!context.getters.isCameraEnabled) { - context.dispatch('enableCamera') - } else { - context.dispatch('disableCamera') - } - }, - enableScreen (context) { - if (!context.getters.isLocalMediaRequesting) { - context.dispatch('createLocalMedia', MediaTypes.micScreen) - } - }, - disableScreen (context) { - if (!context.getters.isLocalMediaRequesting) { - let mediaType = null - if (context.getters.isMicrophoneEnabled) { - mediaType = MediaTypes.mic - } - if (mediaType === null) { - context.commit('disposeLocalMedia') - } else { - context.dispatch('createLocalMedia', mediaType) - } - } - }, - toggleScreen (context) { - if (!context.getters.isScreenEnabled) { - context.dispatch('enableScreen') - } else { - context.dispatch('disableScreen') - } - }, - async join (context, conferenceId) { - try { - if (!Vue.$conference.hasLocalMediaStream()) { - await context.dispatch('enableMicrophone') - } - context.commit('joinRequesting') - await Vue.$conference.joinConference({ - conferenceName: conferenceId, - displayName: context.getters.username - }) - context.commit('joinSucceeded') - } catch (err) { - context.commit('joinFailed', err.message) - } - }, - async leave (context) { - if (context.getters.isJoined) { - try { - context.commit('leaveRequesting') - await Vue.$conference.leaveConference() - context.commit('leaveSucceeded') - } catch (err) { - context.commit('leaveFailed', err.message) - } finally { - context.commit('disposeLocalMedia') - } - } - }, - muteAll (context) { - for (const participant of context.getters.participantsList) { - context.commit('addMutedState', participant) - } - }, - unMuteAll (context) { - for (const participant of context.getters.participantsList) { - context.commit('removeMutedState', participant) - } - } - } -} diff --git a/src/store/index.js b/src/store/index.js index 53316914..50cb9864 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -25,7 +25,6 @@ import UserModule from './user' import CommunicationModule from './communication' import FaxModule from './fax' import VoiceboxModule from './voicebox' -import ConferenceModule from './conference' import DashboardModule from './dashboard' import { INTERNAL_DATE_FORMAT_SLASH, INTERNAL_DATE_FORMAT_DASH, INTERNAL_DATE_FORMAT_DASH_HOUR } from 'src/constants' @@ -55,7 +54,6 @@ export default function (/* { ssrContext } */) { communication: CommunicationModule, fax: FaxModule, voicebox: VoiceboxModule, - conference: ConferenceModule, pbx: PbxModule, pbxSeats: PbxSeatsModule, pbxGroups: PbxGroupsModule, diff --git a/src/store/user.js b/src/store/user.js index c7a745ad..7ef65d81 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -46,8 +46,6 @@ export default { userDataRequesting: false, userDataSucceeded: false, userDataError: null, - rtcEngineInitState: RequestState.initiated, - rtcEngineInitError: null, changePasswordState: RequestState.initiated, changePasswordError: null, newPasswordRequesting: false, @@ -105,15 +103,6 @@ export default { state.capabilities.faxserver && state.capabilities.faxactive }, - hasRtcEngineCapability (state) { - return state.capabilities !== null && _.has(state.capabilities, 'rtcengine') - }, - hasRtcEngineCapabilityEnabled (state, getters) { - return getters.hasRtcEngineCapability && state.capabilities.rtcengine === true - }, - isRtcEngineUiVisible (state) { - return (state.capabilities !== null && state.capabilities.csc_show_rtcengine_features === true) - }, getSubscriberId (state) { return state.subscriberId }, @@ -252,16 +241,6 @@ export default { state.userDataSucceeded = false state.userDataError = null }, - rtcEngineInitRequesting (state) { - state.rtcEngineInitState = RequestState.requesting - }, - rtcEngineInitSucceeded (state) { - state.rtcEngineInitState = RequestState.succeeded - }, - rtcEngineInitFailed (state, error) { - state.rtcEngineInitState = RequestState.failed - state.rtcEngineInitError = error - }, userPasswordRequesting (state) { state.changePasswordState = RequestState.requesting state.changePasswordError = null @@ -386,8 +365,9 @@ export default { } }, async forwardHome (context) { - if (context.rootState.route?.path === '/user/dashboard' && !context.getters.isRtcEngineUiVisible) { - await this.$router.push({ path: '/user/conversations' }) + const start = '/user/dashboard' + if (context.rootState.route?.path !== start) { + await this.$router.push({ path: start }) } }, async getCustomLogo (context) {