diff --git a/src/app/core/chat/entity/message.ts b/src/app/core/chat/entity/message.ts index 58827fccc..e2b06250c 100644 --- a/src/app/core/chat/entity/message.ts +++ b/src/app/core/chat/entity/message.ts @@ -62,6 +62,7 @@ export const MessageEntitySchema = z.object({ safeFile: z.any().optional(), description: z.string().nullable().optional() })).optional(), + origin: z.enum(['history', 'local', 'incoming']).optional() }) export type IMessage = z.infer; @@ -99,4 +100,8 @@ export class MessageEntity { return this.attachments.length >= 1 } + static haveSeen(info: typeof MessageEntitySchema._type.info) { + return info.filter(e => typeof e.readAt != 'string') + } + } diff --git a/src/app/core/chat/repository/member/member-local-repository.ts b/src/app/core/chat/repository/member/member-local-repository.ts index e00e8fc72..6643a0301 100644 --- a/src/app/core/chat/repository/member/member-local-repository.ts +++ b/src/app/core/chat/repository/member/member-local-repository.ts @@ -3,7 +3,7 @@ import { Observable as DexieObservable, PromiseExtended } from 'Dexie'; import { AttachmentTable } from "src/app/infra/database/dexie/instance/chat/schema/attachment"; import { Result } from "neverthrow"; import { MemberTable, MemberTableSchema } from "src/app/infra/database/dexie/instance/chat/schema/members"; -import { RepositoryResult } from "src/app/infra/repository"; +import { RepositoryResult, RepositoryResultNew } from "src/app/infra/repository"; import { z } from "zod"; import { MemberListUPdateStatusInputDTO } from "src/app/module/chat/domain/use-case/socket/member-list-update-status-use-case.service"; import { Observable } from "rxjs"; @@ -26,15 +26,15 @@ export type IGetMemberLive = z.infer export abstract class IMemberLocalRepository extends DexieRepository { abstract directMember(input:IDirectMemberInput): Promise> - abstract addMember(data: MemberTable): Promise> + abstract addMember(data: MemberTable): Promise> abstract updateMemberRole(data: MemberTable): Promise> abstract updateMembersStatus(data: MemberListUPdateStatusInputDTO): Promise> abstract allMemberOnline(roomId:string): DexieObservable - abstract removeMemberFromRoom(roomId:string): Promise> + abstract removeMemberFromRoom(roomId:string): Promise> abstract getMemberLive(input: IGetMemberLive): DexieObservable - abstract getRoomMemberById(roomId:string): Promise - abstract getRoomMemberByIdLive(roomId:string): Observable + abstract getRoomMemberById(roomId:string): Promise + abstract getRoomMemberByIdLive(roomId:string): Observable abstract getRoomMemberNoneAdminByIdLive(roomId:string): DexieObservable -} \ No newline at end of file +} diff --git a/src/app/infra/database/dexie/instance/chat/schema/message.ts b/src/app/infra/database/dexie/instance/chat/schema/message.ts index 345688444..399838985 100644 --- a/src/app/infra/database/dexie/instance/chat/schema/message.ts +++ b/src/app/infra/database/dexie/instance/chat/schema/message.ts @@ -42,7 +42,8 @@ export const MessageTableSchema = z.object({ id: z.string().optional(), description: z.string().nullable().optional(), mimeType: z.string().optional() - })).optional() + })).optional(), + origin: z.enum(['history', 'local', 'incoming']).optional() }) export type MessageTable = z.infer diff --git a/src/app/infra/repository/adapter.ts b/src/app/infra/repository/adapter.ts index efcb51406..fbdc6cb51 100644 --- a/src/app/infra/repository/adapter.ts +++ b/src/app/infra/repository/adapter.ts @@ -1,26 +1,27 @@ import { Result } from 'neverthrow'; import { ZodError} from 'zod'; +import { IDBError } from './types'; // Define a type for the Result of repository operations export type RepositoryResult = Result>; - +export type RepositoryResultNew = Result>; export abstract class IDexieRepository { - abstract insert(document: T): Promise> + abstract insert(document: T): Promise> abstract insertMany(documents: T[]): Promise>> - abstract update(id: any, updatedDocument: Partial) : Promise> + abstract update(id: any, updatedDocument: Partial) : Promise> - abstract delete(id: any): Promise> + abstract delete(id: any): Promise> abstract findById(id: any) : Promise> - abstract find(filter: Partial): Promise> + abstract find(filter: Partial): Promise> - abstract findOne(filter: Partial): Promise> + abstract findOne(filter: Partial): Promise> - abstract findAll(): Promise> + abstract findAll(): Promise> - abstract count(filter?: Object): Promise> + abstract count(filter?: Object): Promise> } diff --git a/src/app/infra/repository/dexie/dexie-repository.service.ts b/src/app/infra/repository/dexie/dexie-repository.service.ts index 0bd468dcb..4750c8c47 100644 --- a/src/app/infra/repository/dexie/dexie-repository.service.ts +++ b/src/app/infra/repository/dexie/dexie-repository.service.ts @@ -2,9 +2,30 @@ import { Result, ok, err } from 'neverthrow'; import { EntityTable } from 'Dexie'; import { ZodError, ZodObject, ZodSchema } from 'zod'; import { Logger } from 'src/app/services/logger/main/service'; -import { IDexieRepository } from '../adapter' +import { IDexieRepository, RepositoryResultNew } from '../adapter' +import { IDBError } from '../types'; // Define a type for the Result of repository operations + +class DBError extends Error implements IDBError { + zodError?: ZodError; + parameters: T; + error?: any; + + constructor(data: IDBError) { + super(data.message); + this.zodError = data.zodError; + this.parameters = data.parameters; + this.error = data.error; + + // // Manually capture the stack trace if needed + // if (Error.captureStackTrace) { + // Error.captureStackTrace(this, DBError); + // } + } +} + + type RepositoryResult = Result>; export class DexieRepository implements IDexieRepository { @@ -18,7 +39,7 @@ export class DexieRepository implements IDexieRepository { this.ZodPartialSchema = (ZodSchema as ZodObject).partial() as any; } - async insert(document: T): Promise> { + async insert(document: T): Promise> { const dataValidation = this.ZodSchema.safeParse(document) @@ -28,14 +49,22 @@ export class DexieRepository implements IDexieRepository { return ok(id); } catch (error) { console.log(error) - return err(new Error('Failed to insert document: ' + error)); + return err(new DBError({ + message: `dexie.js failed to insert into ${this.table.name}`, + parameters: document, + error: error + })) } } else { Logger.error(`dexie.js failed to insert into ${this.table.name}, invalid data`, { data: document, zodError: dataValidation.error.issues }); - return err((dataValidation as unknown as ZodError)) + return err(new DBError({ + message: `dexie.js failed to insert into ${this.table.name}, invalid data`, + parameters: document, + zodError: dataValidation.error + })) } } diff --git a/src/app/infra/repository/types.ts b/src/app/infra/repository/types.ts index 717f1b715..de8b11c47 100644 --- a/src/app/infra/repository/types.ts +++ b/src/app/infra/repository/types.ts @@ -6,6 +6,8 @@ // upsertedCount: number; // }; +import { ZodError } from "zod" + // export type RemovedModel = { // deletedCount: number; // deleted: boolean; @@ -34,3 +36,11 @@ // value: unknown[]; // command: DatabaseOperationEnum; // }; + + +export type IDBError = { + message: string, + zodError?: ZodError, + parameters?: T, + error?: any +} diff --git a/src/app/module/chat/chat.module.ts b/src/app/module/chat/chat.module.ts index dcdc26e78..aff0dca43 100644 --- a/src/app/module/chat/chat.module.ts +++ b/src/app/module/chat/chat.module.ts @@ -36,7 +36,6 @@ import { DistributionLocalRepository } from './data/repository/destribution/dest import { DistributionService } from './domain/service/distribution.service' import { BoldLocalRepository } from './data/repository/bold/bold-local-repository'; import { IBoldLocalRepository } from 'src/app/core/chat/repository/bold/bold-local-repository'; -import { BoldService } from 'src/app/module/chat/domain/service/bold.service' import { RoomLastMessageService } from 'src/app/module/chat/domain/service/room-last-message.service' @NgModule({ imports: [HttpModule], @@ -119,7 +118,6 @@ export class ChatModule { private UserTypingRemoteRepositoryService: UserTypingRemoteRepositoryService, private RoomService: RoomService, private DistributionService: DistributionService, - private BoldService: BoldService, private RoomLastMessageService: RoomLastMessageService ) { diff --git a/src/app/module/chat/data/repository/message/message-local-data-source.service.ts b/src/app/module/chat/data/repository/message/message-local-data-source.service.ts index fd7a45bc6..003635a76 100644 --- a/src/app/module/chat/data/repository/message/message-local-data-source.service.ts +++ b/src/app/module/chat/data/repository/message/message-local-data-source.service.ts @@ -6,14 +6,15 @@ import { Observable as DexieObservable, PromiseExtended } from 'Dexie'; import { MessageTable, MessageTableSchema } from 'src/app/infra/database/dexie/instance/chat/schema/message'; import { chatDatabase } from 'src/app/infra/database/dexie/service'; import { IMessageLocalRepository } from 'src/app/core/chat/repository/message/message-local-repository'; -import { combineLatest, from, Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { BehaviorSubject, combineLatest, from, Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; @Injectable({ providedIn: 'root' }) export class MessageLocalDataSourceService extends DexieRepository implements IMessageLocalRepository { + private creatingSubject : BehaviorSubject = new BehaviorSubject(null); constructor() { super(chatDatabase.message, MessageTableSchema) @@ -21,6 +22,20 @@ export class MessageLocalDataSourceService extends DexieRepository { + console.log('A new friend is being added:', obj); + + }); + + } + + // onCreateObservable() { + // return this.creatingSubject.asObservable().pipe( + // filter(e => e?.sender?.wxFullName) + // ) + // } + async setAllSenderToFalse() { try { await chatDatabase.transaction('rw', chatDatabase.message, async () => { diff --git a/src/app/module/chat/domain/chat-service.service.ts b/src/app/module/chat/domain/chat-service.service.ts index 01ce406b2..47bcb77d9 100644 --- a/src/app/module/chat/domain/chat-service.service.ts +++ b/src/app/module/chat/domain/chat-service.service.ts @@ -40,7 +40,7 @@ import { MessageSocketRepositoryService } from 'src/app/module/chat/data/reposit import { MessageMarkAsReadInput } from "src/app/module/chat/domain/use-case/message/message-mark-as-read-use-case.service"; import { BoldRemoveByRoomIdInput, BoldRemoveByRoomIdService } from 'src/app/module/chat/domain/use-case/bold/bold-remove-by-room-id.service'; import { MemberListHttpSyncUseCase } from 'src/app/module/chat/domain/use-case/member/member-list-http-sync-use-case.ts.service' -import { RoomSetLastMessageService } from 'src/app/module/chat/domain/use-case/room/room-set-last-message.service' +import { RoomBoldSyncUseCaseService } from 'src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service' export const InstanceId = uuidv4(); @Injectable({ @@ -82,7 +82,7 @@ export class ChatServiceService { private MessageSocketRepositoryService: MessageSocketRepositoryService, private BoldRemoveByRoomIdService: BoldRemoveByRoomIdService, private MemberListHttpSyncUseCase: MemberListHttpSyncUseCase, - private RoomSetLastMessageService: RoomSetLastMessageService + private RoomBoldSyncUseCaseService: RoomBoldSyncUseCaseService ) { this.MessageSocketRepositoryService.listenToDeleteMessages() .pipe() diff --git a/src/app/module/chat/domain/service/bold.service.spec.ts b/src/app/module/chat/domain/service/bold.service.spec.ts deleted file mode 100644 index 6ac95d9a2..000000000 --- a/src/app/module/chat/domain/service/bold.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { BoldService } from './bold.service'; - -describe('BoldService', () => { - let service: BoldService; - - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(BoldService); - }); - - it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); diff --git a/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts b/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts index d05ed6bac..eb4337800 100644 --- a/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-attachment-by-message-id.service.ts @@ -7,7 +7,8 @@ import { err, Result } from 'neverthrow'; import { Logger } from 'src/app/services/logger/main/service'; import { MessageEntity } from '../../../../../core/chat/entity/message'; import { AttachmentTableSchema } from 'src/app/infra/database/dexie/instance/chat/schema/attachment'; -import { XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; +import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; +import { isHttpResponse } from 'src/app/infra/http/http.service'; const MessageAttachmentByMessageIdSchema = AttachmentTableSchema.pick({ $messageId: true, @@ -27,7 +28,7 @@ export class MessageAttachmentByMessageIdUseCase { ) { } @XTracerAsync({name:'Message-Attachment-By-MessageIdUseCase', module:'chat', bugPrint: true, waitNThrow: 15000}) - async execute(input: MessageEntity): Promise> { + async execute(input: MessageEntity, tracing?: TracingType): Promise> { const getLocalAttachment = await this.AttachmentLocalDataSource.findOne({ $messageId: input.$id @@ -47,7 +48,7 @@ export class MessageAttachmentByMessageIdUseCase { } else { // has data url return getLocalAttachment.map((e) => { - + // Logger.info('restored file .', { // data: e.base64.slice(0, 100)+'...' // }) @@ -56,18 +57,22 @@ export class MessageAttachmentByMessageIdUseCase { }) } - - } else { - console.log('donwload') - const result = await this.AttachmentRemoteDataSourceService.getAttachment(input.attachments[0].id) + } else { + tracing.setAttribute('download', 'true') + const result = await this.AttachmentRemoteDataSourceService.getAttachment(input.attachments[0].id) + tracing.setAttribute('attachmentId', input.attachments[0].id.toString()) if(result.isErr()) { - Logger.error('failed to download message attachment', { + tracing.hasError('failed to download message attachment', { error: result.error, data: 'document id '+ input.attachments[0].id, messageId: input.id, $messageId: input.$id }) + + if(isHttpResponse(result.error)) { + tracing.setAttribute('attachmentUrl', result.error.message) + } } @@ -79,9 +84,9 @@ export class MessageAttachmentByMessageIdUseCase { if(dataUrl.isOk()) { //console.log('done convert') - Logger.info('downloaded file .', { + //Logger.info('downloaded file .', { // data: dataUrl.value.slice(0, 100)+'...' - }) + //}) this.AttachmentLocalDataSource.insert({ $messageId: input.$id, @@ -94,7 +99,7 @@ export class MessageAttachmentByMessageIdUseCase { mimeType: input.attachments[0].mimeType, }).then((e) => { if(e.isErr()) { - Logger.error('failed to create attachment locally on send message', { + tracing.hasError('failed to create attachment locally on send message', { error: e.error, // data: dataUrl.value.slice(0, 100)+'...' }) diff --git a/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts b/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts index aa3378b53..2448402c4 100644 --- a/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts +++ b/src/app/module/chat/domain/use-case/message/message-create-use-case.service.ts @@ -214,7 +214,7 @@ export class MessageCreateUseCaseService { } else { Logger.error('failed to insert locally', { - error: createMessageLocally.error + error: createMessageLocally.error.message }) } } else { diff --git a/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts b/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts index 07f677e0f..3b8d5fb91 100644 --- a/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts +++ b/src/app/module/chat/domain/use-case/message/sync-all-room-messages.service.ts @@ -41,19 +41,19 @@ export class SyncAllRoomMessagesService { this.messageRemoteDataSourceService.getMessagesFromRoom(room.id), this.messageLocalDataSourceService.getItems(room.id) ]); - + tracing.addEvent('async n ' + n); n++; - + if (result.isOk()) { const { addedItems, changedItems, deletedItems } = messageListDetermineChanges(result.value.data, localResult); - + for (const message of changedItems) { let clone: MessageTable = { ...message, roomId: room.id }; await this.messageLocalDataSourceService.update(clone.$id, clone); - + const me = message.info.find(e => e.memberId === SessionStore.user.UserId && typeof e.deliverAt === 'string'); - + if (!me) { this.MessageSocketRepositoryService.sendDeliverAt({ memberId: SessionStore.user.UserId, @@ -61,22 +61,25 @@ export class SyncAllRoomMessagesService { roomId: message.roomId, requestId: uuidv4() }); - + tracing.addEvent('send deliver roomId ' + room.id); } } - + for (const message of addedItems) { let clone: MessageTable = { ...message, roomId: room.id }; // You can perform operations with addedItems here if needed } - - await this.messageLocalDataSourceService.insertMany(addedItems.reverse()); + + await this.messageLocalDataSourceService.insertMany(addedItems.reverse().map(e => { + e.origin = 'history' + return e + })); } else { Logger.error('failed to get room message ' + room.id); } }); - + // Wait for all the promises to resolve await Promise.all(roomPromises); diff --git a/src/app/module/chat/domain/service/bold.service.ts b/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts similarity index 53% rename from src/app/module/chat/domain/service/bold.service.ts rename to src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts index d8497224c..4b0d6c1b4 100644 --- a/src/app/module/chat/domain/service/bold.service.ts +++ b/src/app/module/chat/domain/use-case/room/room-bold-sync-use-case.service.ts @@ -1,28 +1,33 @@ import { Injectable } from '@angular/core'; import { filter, map } from 'rxjs/operators'; import { IMessageSocketRepository } from 'src/app/core/chat/repository/message/message-socket-repository'; -import { InstanceId } from '../chat-service.service'; import { MessageEntity } from 'src/app/core/chat/entity/message'; import { IBoldLocalRepository } from 'src/app/core/chat/repository/bold/bold-local-repository'; +import { InstanceId } from '../../chat-service.service'; +import { IMessageGetAllByRoomIdOutPut } from 'src/app/core/chat/usecase/message/message-get-all-by-room-Id'; +import { HttpAdapter } from 'src/app/infra/http/adapter'; + @Injectable({ providedIn: 'root' }) -export class BoldService { +export class RoomBoldSyncUseCaseService { constructor( private MessageSocketRepositoryService: IMessageSocketRepository, - private boldLocalRepository: IBoldLocalRepository + private boldLocalRepository: IBoldLocalRepository, + private http: HttpAdapter, ) { this.listenToIncomingMessage(); - } + this.loadHistory() + } - listenToIncomingMessage() { + private listenToIncomingMessage() { return this.MessageSocketRepositoryService.listenToMessages().pipe( filter((message) => !message?.requestId?.startsWith(InstanceId)), map(message => Object.assign(new MessageEntity(), message)) ).subscribe(async (message) => { - + const result = await this.boldLocalRepository.findOne({roomId: message.roomId}) if(result.isOk() && !result.value) { @@ -32,6 +37,24 @@ export class BoldService { } }); + } + private loadHistory() { + const regex = new RegExp("Room\\/([0-9a-fA-F]{8})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{12})\\/Messages"); + + return this.http.listen().pipe( + filter((response: any)=> { + return response?.isOk() && regex.test(response.value.url) + }), + map((response: any) => response.value.data as IMessageGetAllByRoomIdOutPut) + ).subscribe(async (data)=> { + + if(data.data.length >= 1) { + for(const message of data.data) { + const haveSeen = MessageEntity.haveSeen(message.info) + } + } + + }) } } diff --git a/src/app/services/monitoring/opentelemetry/tracer.ts b/src/app/services/monitoring/opentelemetry/tracer.ts index 1a71da1c0..2d0a38457 100644 --- a/src/app/services/monitoring/opentelemetry/tracer.ts +++ b/src/app/services/monitoring/opentelemetry/tracer.ts @@ -10,6 +10,7 @@ import { openTelemetryLogging } from './logging'; import { SpanStatus, SpanStatusCode } from '@opentelemetry/api'; +import { Logger } from '../../logger/main/service'; const tracerInstance = OpentelemetryAgendaProvider.getTracer('example-tracer-hole', '111', {}) const tracerNotificationInstance = OpentelemetryNotificationProvider.getTracer('example-tracer-hole', '111', {}) const tracerChat = OpentelemetryChatProvider.getTracer('OpentelemetryChatProvider','some' ,{}) @@ -154,10 +155,13 @@ const createTracingInstance = ({bugPrint, name, module, autoFinish, waitNThrow = finish = true }, - hasError:(message: string) => { + hasError:(message: string, obj:Object = {}) => { + const spanId = span.spanContext().spanId; + data.errors.push(message) data.status = {code: SpanStatusCode.ERROR, message} span.setStatus({code: SpanStatusCode.ERROR, message}) + Logger.error(message, {...obj, spanId, name}) }, createSpan: (name, parent?: any) => { return tracerInstance.startSpan(name, { root: false }, parent) as Span; @@ -279,7 +283,7 @@ export type TracingType = { getAttribute: (key: string) => string; LocalLogEvent: (name: string, attributesOrStartTime: any, obj?:any) => void; finish: () => void; - hasError:(message: string) => void; + hasError:(message: string, obj?: Object) => void; createSpan:(name, parent?: any) => Span; }; diff --git a/src/app/ui/chat/chat.page.ts b/src/app/ui/chat/chat.page.ts index 486db94a6..a66597855 100644 --- a/src/app/ui/chat/chat.page.ts +++ b/src/app/ui/chat/chat.page.ts @@ -13,16 +13,13 @@ import { TimeService } from 'src/app/services/functions/time.service'; import { ThemeService } from 'src/app/services/theme.service' import { DataService } from 'src/app/services/data.service'; import { RouteService } from 'src/app/services/route.service'; -// import { RoomRemoteDataSourceState } from 'src/app/module/chat/data/repository/room-memory-data-source'; - -import { Observable as DexieObservable } from 'Dexie'; import { EditGroupPage } from './modal/edit-group/edit-group.page'; import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service' import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room/room-local-repository.service' -import { map, switchMap, tap } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; import { BehaviorSubject, interval, Subscription } from 'rxjs'; import { RoomTable } from 'src/app/infra/database/dexie/instance/chat/schema/room'; -import { RoomEntity, RoomType } from 'src/app/core/chat/entity/group'; +import { RoomType } from 'src/app/core/chat/entity/group'; import { BoldLocalRepository } from 'src/app/module/chat/data/repository/bold/bold-local-repository' import { BoldTable } from 'src/app/infra/database/dexie/instance/chat/schema/bold'; import { RoomViewModel } from './store/model/room'; @@ -122,9 +119,9 @@ export class ChatPage implements OnInit { new Date(b.messages?.[0]?.sentAt as string).getTime() - new Date(a.messages?.[0]?.sentAt as string).getTime() ); - this.RoomSelected = this.rooms.filter(e => e.id == this.idSelected)[0] + // this.RoomSelected = this.rooms.filter(e => e.id == this.idSelected)[0] } ngOnInit() { // this.subscription = this.roomListSubject.pipe( diff --git a/src/app/ui/chat/component/messages/messages.page.html b/src/app/ui/chat/component/messages/messages.page.html index 2fb29756f..0ba296045 100644 --- a/src/app/ui/chat/component/messages/messages.page.html +++ b/src/app/ui/chat/component/messages/messages.page.html @@ -3,6 +3,7 @@
+ {{ room.roomName }} {{ roomData.roomName }} @@ -22,9 +23,9 @@
- + - {{ user.wxFullName }}, + {{ user.wxFullName }}, diff --git a/src/app/ui/chat/component/messages/messages.page.ts b/src/app/ui/chat/component/messages/messages.page.ts index 16eec9a33..840ddea40 100644 --- a/src/app/ui/chat/component/messages/messages.page.ts +++ b/src/app/ui/chat/component/messages/messages.page.ts @@ -50,6 +50,7 @@ import { RoomTable } from 'src/app/infra/database/dexie/instance/chat/schema/roo import { TypingTable } from 'src/app/infra/database/dexie/instance/chat/schema/typing'; import { HttpClient } from '@angular/common/http'; import { v4 as uuidv4 } from 'uuid' +import { RoomViewModel } from '../../store/model/room'; @Component({ selector: 'app-messages', templateUrl: './messages.page.html', @@ -69,6 +70,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy roomType!: RoomType RoomTypeEnum = RoomType + @Input() room!: RoomViewModel @Input() roomId: string; @Input() showMessages: string; @@ -112,7 +114,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy @ViewChild('array') myInputRef!: ElementRef; userName = ""; - room: any = new Array(); roomName: any; isAdmin = true; roomCountDownDate: string; @@ -276,6 +277,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.chatServiceService.removeBoldFromRoom({roomId: this.roomId}) + this.chatServiceService.getRoomById(this.roomId) } messageStatus(message: MessageEntity) { @@ -423,7 +425,10 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy this.scrollToBottomClicked() }, 100) - this.chatServiceService.removeBoldFromRoom({roomId: this.roomId}) + + setTimeout(() => { + this.chatServiceService.removeBoldFromRoom({roomId: this.roomId}) + }, 1000) }); }