import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { CommonModule } from '@angular/common'; import { KstConfig } from './config/chat.config'; import { HttpClientModule } from '@angular/common/http'; import { StoreModule, ActionReducerMap } from '@ngrx/store'; import { chatReducer, IChatRootState } from './store/reducers/chat.reducer'; import { KstChatComponent } from './chat.component'; import { CharAuthorizeService } from './services/chat-authorize.service'; import { ChatService } from './services/chat.service'; import { ChatSession } from './services/chat-session'; import { ChatSocketClient } from './socket/chat-socket'; import { TranslateMessagePipe } from './pipes/translateMessage'; import { ChatMessageFilterPipe } from './pipes/chatMessageFilter'; import { MessageSenderComponent } from './components/message-sender/message-sender.component'; import { FileImageComponent } from './components/file-image/file-image.component'; import { FileAudioComponent } from './components/file-audio/file-audio.component'; import { FileVideoComponent } from './components/file-video/file-video.component'; import { FileOtherComponent } from './components/file-other/file-other.component'; import { TimeageDirective } from './directives/timeage.directive'; /** * */ export const FEATURE_REDUCER_TOKEN: InjectionToken< ActionReducerMap > = new InjectionToken< ActionReducerMap >('chat'); export function getReducers(): ActionReducerMap { return chatReducer; } @NgModule({ declarations: [ TranslateMessagePipe, ChatMessageFilterPipe, KstChatComponent, MessageSenderComponent, FileImageComponent, FileAudioComponent, FileVideoComponent, FileOtherComponent, TimeageDirective ], imports: [ CommonModule, FormsModule, HttpClientModule ], exports: [KstChatComponent], providers: [ CharAuthorizeService, ChatService, ChatSession, ChatSocketClient, { provide: FEATURE_REDUCER_TOKEN, useFactory: getReducers, }, KstConfig ] }) export class KstChatModule { }