Skip to content

Commit

Permalink
Do not show daily analysis chat unless the user loads the application…
Browse files Browse the repository at this point in the history
… with its uuid in the query parameter
  • Loading branch information
harishmohanraj committed Apr 23, 2024
1 parent d2d5ec9 commit 6fdec4b
Show file tree
Hide file tree
Showing 7 changed files with 121 additions and 39 deletions.
1 change: 1 addition & 0 deletions app/main.wasp
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ entity Chat {=psl
team_name String?
team_status String?
chatType String?
shouldShowChat Boolean @default(false)
proposedUserAction String[] @default([])
userRespondedWithNextAction Boolean @default(false)
emailContent String?
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE "Chat" ADD COLUMN "shouldShowChat" BOOLEAN NOT NULL DEFAULT false;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- This migration sets the shouldShowChat value to true for all existing daily analysis chats.
UPDATE "Chat" SET "shouldShowChat" = TRUE WHERE "chatType" = 'daily_analysis';
16 changes: 15 additions & 1 deletion app/src/client/app/ChatPage.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { useState } from 'react';
import { useState, useEffect } from 'react';
import { useSocket, useSocketListener } from 'wasp/client/webSocket';
import { type User } from 'wasp/entities';

Expand Down Expand Up @@ -54,6 +54,20 @@ const ChatPage = ({ user }: { user: User }) => {
{ enabled: !!activeChatId }
);

useEffect(() => {
if (
currentChatDetails &&
currentChatDetails.chatType === 'daily_analysis'
) {
updateCurrentChat({
id: activeChatId,
data: {
shouldShowChat: true,
},
});
}
}, [activeChatUUId, currentChatDetails]);

useSocketListener('smartSuggestionsAddedToDB', updateState);
useSocketListener('streamFromTeamFinished', updateState);

Expand Down
75 changes: 39 additions & 36 deletions app/src/client/components/ChatSidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Link, useHistory } from 'react-router-dom';
import { NavLink, useLocation } from 'react-router-dom';
import Logo from '../static/logo-for-dark-bg.png';
import EditableChatName from './EditableChatName';

import { shouldRenderChat } from '../utils/chatUtils';
import { updateCurrentChat } from 'wasp/client/operations';

interface ChatSidebarProps {
Expand Down Expand Up @@ -189,41 +189,44 @@ const ChatSidebar = ({
{/* <!-- Menu Item Dashboard --> */}
<li>
{chats &&
chats.map((chat: Chat, idx) => (
<NavLink
key={chat.id}
to={`/chat/${chat.uuid}?`}
className={`chat-link relative no-underline group relative flex items-center gap-2.5 rounded-sm py-2 px-4 font-medium text-bodydark1 duration-300 ease-in-out ${
pathname === '/' && 'bg-gray-700 dark:bg-meta-4'
} ${
chat.uuid === activeChat
? 'bg-captn-light-cream text-captn-dark-blue hover:bg-captn-light-blue hover:text-captn-dark-blue'
: 'text-captn-light-cream hover:bg-captn-light-blue hover:text-captn-dark-blue'
}`}
>
<svg
stroke='currentColor'
fill='none'
strokeWidth='2'
viewBox='0 0 24 24'
strokeLinecap='round'
strokeLinejoin='round'
className='icon-sm'
height='1em'
width='1em'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'></path>
</svg>
<span>
<EditableChatName
chatId={chat.id}
chatName={chat.name ? chat.name : ''}
onValueChange={handlechatNameChange}
/>
</span>
</NavLink>
))}
chats.map(
(chat: Chat, idx) =>
shouldRenderChat(chat) && (
<NavLink
key={chat.id}
to={`/chat/${chat.uuid}?`}
className={`chat-link relative no-underline group relative flex items-center gap-2.5 rounded-sm py-2 px-4 font-medium text-bodydark1 duration-300 ease-in-out ${
pathname === '/' && 'bg-gray-700 dark:bg-meta-4'
} ${
chat.uuid === activeChat
? 'bg-captn-light-cream text-captn-dark-blue hover:bg-captn-light-blue hover:text-captn-dark-blue'
: 'text-captn-light-cream hover:bg-captn-light-blue hover:text-captn-dark-blue'
}`}
>
<svg
stroke='currentColor'
fill='none'
strokeWidth='2'
viewBox='0 0 24 24'
strokeLinecap='round'
strokeLinejoin='round'
className='icon-sm'
height='1em'
width='1em'
xmlns='http://www.w3.org/2000/svg'
>
<path d='M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z'></path>
</svg>
<span>
<EditableChatName
chatId={chat.id}
chatName={chat.name ? chat.name : ''}
onValueChange={handlechatNameChange}
/>
</span>
</NavLink>
)
)}
</li>
</ul>
</div>
Expand Down
58 changes: 57 additions & 1 deletion app/src/client/tests/chatUtils.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { test, expect, vi, describe } from 'vitest';
import { test, expect, vi, describe, it } from 'vitest';

import * as operations from 'wasp/client/operations';
import { type Conversation } from 'wasp/entities';
Expand All @@ -12,7 +12,9 @@ import {
handleAgentResponse,
handleChatError,
exceptionMessage,
shouldRenderChat,
} from '../utils/chatUtils';
import { type Chat } from 'wasp/entities';

vi.mock('wasp/client/operations', async (importOriginal) => {
const mod = await importOriginal<typeof import('wasp/client/operations')>();
Expand Down Expand Up @@ -486,3 +488,57 @@ describe('chatUtils', () => {
});
});
});

const patialTestChatFields = {
id: 0,
uuid: null,
createdAt: new Date(),
updatedAt: new Date(),
team_id: null,
team_name: null,
team_status: null,
proposedUserAction: [],
userRespondedWithNextAction: false,
emailContent: null,
agentChatHistory: null,
isExceptionOccured: false,
showLoader: false,
smartSuggestions: null,
streamAgentResponse: false,
customerBrief: null,
userId: null,
name: null,
isChatNameUpdated: false,
};

describe('shouldRenderChat', () => {
it('should return true if chatType is "daily_analysis" and shouldShowChat is true', () => {
const chat: Chat = {
chatType: 'daily_analysis',
shouldShowChat: true,
...patialTestChatFields,
};

expect(shouldRenderChat(chat)).toBe(true);
});

it('should return true if chatType is not "daily_analysis"', () => {
const chat = {
chatType: 'other_type',
shouldShowChat: false,
...patialTestChatFields,
};

expect(shouldRenderChat(chat)).toBe(true);
});

it('should return false if shouldShowChat is false', () => {
const chat = {
chatType: 'daily_analysis',
shouldShowChat: false,
...patialTestChatFields,
};

expect(shouldRenderChat(chat)).toBe(false);
});
});
6 changes: 5 additions & 1 deletion app/src/client/utils/chatUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
deleteLastConversationInChat,
} from 'wasp/client/operations';

import { type Conversation } from 'wasp/entities';
import { type Conversation, type Chat } from 'wasp/entities';

export const exceptionMessage =
"Ahoy, mate! It seems our voyage hit an unexpected squall. Let's trim the sails and set a new course. Cast off once more by clicking the button below.";
Expand Down Expand Up @@ -236,3 +236,7 @@ export const handleChatError = async (
});
}
};

export const shouldRenderChat = (chat: Chat): boolean => {
return chat.chatType !== 'daily_analysis' || chat.shouldShowChat;
};

0 comments on commit 6fdec4b

Please sign in to comment.