diff --git a/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts b/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts index 402f0f50..5a7f1b87 100644 --- a/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts +++ b/projects/ucap-webmessenger-app/src/app/layouts/messenger/components/messages.component.ts @@ -102,6 +102,9 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewChecked { files: File[]; fileItems: DataTransferItemList; + /** Timer 대화방의 대화 삭제를 위한 interval */ + interval: any; + constructor( private store: Store, private sessionStorageService: SessionStorageService, @@ -173,6 +176,12 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewChecked { ); this.psChatContent.directiveRef.scrollToBottom(0, 0); + + this.interval = setInterval(() => { + if (!!this.roomInfo.isTimeRoom) { + this.store.dispatch(EventStore.infoIntervalClear({})); + } + }, 1000); } ngOnDestroy(): void { @@ -185,6 +194,8 @@ export class MessagesComponent implements OnInit, OnDestroy, AfterViewChecked { if (!!this.userInfoListSubscription) { this.userInfoListSubscription.unsubscribe(); } + + clearInterval(this.interval); } ngAfterViewChecked(): void { diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/event/actions.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/event/actions.ts index a06301c8..4ffe65af 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/event/actions.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/event/actions.ts @@ -37,6 +37,11 @@ export const infoMoreSuccess = createAction( }>() ); +export const infoIntervalClear = createAction( + '[Messenger::Event] Info Interval Clear', + props() +); + export const infoFailure = createAction( '[Messenger::Event] Info Failure', props<{ error: any }>() @@ -182,6 +187,6 @@ export const delNotification = createAction( export const delInfoList = createAction( '[Messenger::Event] Delete InfoList', props<{ - eventSeq: number; + eventSeqs: number[]; }>() ); diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/event/effects.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/event/effects.ts index e82da5aa..db1efa13 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/event/effects.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/event/effects.ts @@ -68,7 +68,8 @@ import { forwardAfterRoomOpen, sendMass, sendMassFailure, - infoMoreSuccess + infoMoreSuccess, + infoIntervalClear } from './actions'; import { SessionStorageService } from '@ucap-webmessenger/web-storage'; import { @@ -158,6 +159,45 @@ export class Effects { { dispatch: false } ); + infoIntervalClear$ = createEffect( + () => { + return this.actions$.pipe( + ofType(infoIntervalClear), + withLatestFrom( + this.store.pipe( + select((state: any) => state.messenger.room.roomInfo as RoomInfo) + ), + this.store.pipe( + select( + (state: any) => + state.messenger.event.infoList.entities as Dictionary + ) + ) + ), + map(([action, roomInfo, eventList]) => { + if (roomInfo.isTimeRoom && roomInfo.timeRoomInterval > 0) { + const delEventSeq: number[] = []; + // tslint:disable-next-line: forin + for (const key in eventList) { + const event: Info = eventList[key]; + if ( + new Date().getTime() - new Date(event.sendDate).getTime() >= + roomInfo.timeRoomInterval * 1000 + ) { + delEventSeq.push(event.seq); + } + } + + if (delEventSeq.length > 0) { + this.store.dispatch(delInfoList({ eventSeqs: delEventSeq })); + } + } + }) + ); + }, + { dispatch: false } + ); + read$ = createEffect(() => this.actions$.pipe( ofType(read), @@ -533,7 +573,7 @@ export class Effects { tap(([noti, roomInfo]) => { // 현재 방이 오픈되어 있으면 방내용 갱신 if (!!roomInfo && roomInfo.roomSeq === noti.roomSeq) { - this.store.dispatch(delInfoList({ eventSeq: noti.eventSeq })); + this.store.dispatch(delInfoList({ eventSeqs: [noti.eventSeq] })); } // 대화 > 리스트의 항목 갱신 diff --git a/projects/ucap-webmessenger-app/src/app/store/messenger/event/reducers.ts b/projects/ucap-webmessenger-app/src/app/store/messenger/event/reducers.ts index ee6c3be2..a357c4b4 100644 --- a/projects/ucap-webmessenger-app/src/app/store/messenger/event/reducers.ts +++ b/projects/ucap-webmessenger-app/src/app/store/messenger/event/reducers.ts @@ -97,11 +97,11 @@ export const reducer = createReducer( }), on(delInfoList, (state, action) => { - const eventSeq = action.eventSeq; - return { ...state, - infoList: adapterInfoList.removeOne(eventSeq, { ...state.infoList }) + infoList: adapterInfoList.removeMany(action.eventSeqs, { + ...state.infoList + }) }; }),