* fix(UI): #250 better chat left side bar Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai>
70 lines
1.6 KiB
TypeScript
70 lines
1.6 KiB
TypeScript
export enum MessageType {
|
|
Text = "Text",
|
|
Image = "Image",
|
|
ImageWithText = "ImageWithText",
|
|
Error = "Error",
|
|
}
|
|
|
|
export enum MessageSenderType {
|
|
Ai = "assistant",
|
|
User = "user",
|
|
}
|
|
|
|
export enum MessageStatus {
|
|
Ready = "ready",
|
|
Pending = "pending",
|
|
}
|
|
|
|
export interface ChatMessage {
|
|
id: string;
|
|
conversationId: string;
|
|
messageType: MessageType;
|
|
messageSenderType: MessageSenderType;
|
|
senderUid: string;
|
|
senderName: string;
|
|
senderAvatarUrl: string;
|
|
text: string | undefined;
|
|
imageUrls?: string[] | undefined;
|
|
createdAt: number;
|
|
status: MessageStatus;
|
|
}
|
|
|
|
export interface RawMessage {
|
|
_id?: string;
|
|
conversationId?: string;
|
|
user?: string;
|
|
message?: string;
|
|
createdAt?: string;
|
|
updatedAt?: string;
|
|
}
|
|
|
|
export const toChatMessage = (m: RawMessage): ChatMessage => {
|
|
const createdAt = new Date(m.createdAt ?? "").getTime();
|
|
const imageUrls: string[] = [];
|
|
const imageUrl = undefined;
|
|
if (imageUrl) {
|
|
imageUrls.push(imageUrl);
|
|
}
|
|
|
|
const messageType = MessageType.Text;
|
|
const messageSenderType =
|
|
m.user === "user" ? MessageSenderType.User : MessageSenderType.Ai;
|
|
|
|
const content = m.message ?? "";
|
|
|
|
return {
|
|
id: (m._id ?? 0).toString(),
|
|
conversationId: (m.conversationId ?? 0).toString(),
|
|
messageType: messageType,
|
|
messageSenderType: messageSenderType,
|
|
senderUid: m.user?.toString() || "0",
|
|
senderName: m.user === "user" ? "You" : "Assistant",
|
|
senderAvatarUrl:
|
|
m.user === "user" ? "icons/avatar.svg" : "icons/app_icon.svg",
|
|
text: content,
|
|
imageUrls: imageUrls,
|
|
createdAt: createdAt,
|
|
status: MessageStatus.Ready,
|
|
};
|
|
};
|