2023-05-15 14:36:38 +03:00

71 lines
2.3 KiB
TypeScript

import { inject } from '@angular/core';
import { ActivatedRouteSnapshot, Router, RouterStateSnapshot, Routes } from '@angular/router';
import { ChatComponent } from 'app/modules/admin/apps/chat/chat.component';
import { ChatService } from 'app/modules/admin/apps/chat/chat.service';
import { ChatsComponent } from 'app/modules/admin/apps/chat/chats/chats.component';
import { ConversationComponent } from 'app/modules/admin/apps/chat/conversation/conversation.component';
import { EmptyConversationComponent } from 'app/modules/admin/apps/chat/empty-conversation/empty-conversation.component';
import { catchError, throwError } from 'rxjs';
/**
* Conversation resolver
*
* @param route
* @param state
*/
const conversationResolver = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) =>
{
const chatService = inject(ChatService);
const router = inject(Router);
return chatService.getChatById(route.paramMap.get('id')).pipe(
// Error here means the requested chat is not available
catchError((error) =>
{
// Log the error
console.error(error);
// Get the parent url
const parentUrl = state.url.split('/').slice(0, -1).join('/');
// Navigate to there
router.navigateByUrl(parentUrl);
// Throw an error
return throwError(error);
}),
);
};
export default [
{
path : '',
component: ChatComponent,
resolve : {
chats : () => inject(ChatService).getChats(),
contacts: () => inject(ChatService).getContacts(),
profile : () => inject(ChatService).getProfile(),
},
children : [
{
path : '',
component: ChatsComponent,
children : [
{
path : '',
pathMatch: 'full',
component: EmptyConversationComponent,
},
{
path : ':id',
component: ConversationComponent,
resolve : {
conversation: conversationResolver,
},
},
],
},
],
},
] as Routes;