Merge pull request #114 from ajaythapliyal/main

Show error message when error occurs during conversation
pull/111/head^2
Alex 2 years ago committed by GitHub
commit 2210412ed2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,3 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.16669 11.5H9.83335V13.1666H8.16669V11.5ZM8.16669 4.83329H9.83335V9.83329H8.16669V4.83329ZM8.99169 0.666626C4.39169 0.666626 0.666687 4.39996 0.666687 8.99996C0.666687 13.6 4.39169 17.3333 8.99169 17.3333C13.6 17.3333 17.3334 13.6 17.3334 8.99996C17.3334 4.39996 13.6 0.666626 8.99169 0.666626ZM9.00002 15.6666C5.31669 15.6666 2.33335 12.6833 2.33335 8.99996C2.33335 5.31663 5.31669 2.33329 9.00002 2.33329C12.6834 2.33329 15.6667 5.31663 15.6667 8.99996C15.6667 12.6833 12.6834 15.6666 9.00002 15.6666Z" fill="#F44336"/>
</svg>

After

Width:  |  Height:  |  Size: 636 B

@ -1,6 +1,7 @@
import { forwardRef } from 'react'; import { forwardRef } from 'react';
import Avatar from '../Avatar'; import Avatar from '../Avatar';
import { MESSAGE_TYPE } from './conversationModels'; import { MESSAGE_TYPE } from './conversationModels';
import Alert from './../assets/alert.svg';
const ConversationBubble = forwardRef< const ConversationBubble = forwardRef<
HTMLDivElement, HTMLDivElement,
@ -14,11 +15,26 @@ const ConversationBubble = forwardRef<
<div <div
ref={ref} ref={ref}
className={`flex rounded-3xl ${ className={`flex rounded-3xl ${
type === 'QUESTION' ? '' : 'bg-gray-1000' type === 'ANSWER'
? 'bg-gray-1000'
: type === 'ERROR'
? 'bg-red-1000'
: ''
} py-7 px-5 ${className}`} } py-7 px-5 ${className}`}
> >
<Avatar avatar={type === 'QUESTION' ? '👤' : '🦖'}></Avatar> <Avatar avatar={type === 'QUESTION' ? '👤' : '🦖'}></Avatar>
<p className="ml-5">{message}</p> <div
className={`ml-5 flex items-center ${
type === 'ERROR'
? 'rounded-lg border border-red-2000 p-2 text-red-3000'
: ''
}`}
>
{type === 'ERROR' && (
<img src={Alert} alt="alert" className="mr-2 inline" />
)}
<span>{message}</span>
</div>
</div> </div>
); );
}); });

@ -5,7 +5,7 @@ export function fetchAnswerApi(
apiKey: string, apiKey: string,
): Promise<Answer> { ): Promise<Answer> {
// a mock answer generator, this is going to be replaced with real http call // a mock answer generator, this is going to be replaced with real http call
return new Promise((resolve) => { return new Promise((resolve, reject) => {
setTimeout(() => { setTimeout(() => {
let result = ''; let result = '';
const characters = const characters =
@ -18,7 +18,16 @@ export function fetchAnswerApi(
); );
counter += 1; counter += 1;
} }
resolve({ answer: result, query: question, result }); const randNum = getRandomInt(0, 10);
randNum < 5
? reject()
: resolve({ answer: result, query: question, result });
}, 3000); }, 3000);
}); });
} }
function getRandomInt(min: number, max: number) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min); // The maximum is exclusive and the minimum is inclusive
}

@ -1,4 +1,4 @@
export type MESSAGE_TYPE = 'QUESTION' | 'ANSWER'; export type MESSAGE_TYPE = 'QUESTION' | 'ANSWER' | 'ERROR';
export type Status = 'idle' | 'loading' | 'failed'; export type Status = 'idle' | 'loading' | 'failed';
export interface Message { export interface Message {

@ -38,8 +38,12 @@ export const conversationSlice = createSlice({
type: 'ANSWER', type: 'ANSWER',
}); });
}) })
.addCase(fetchAnswer.rejected, (state) => { .addCase(fetchAnswer.rejected, (state, action) => {
state.status = 'failed'; state.status = 'failed';
state.conversation.push({
text: 'Something went wrong. Please try again later.',
type: 'ERROR',
});
}); });
}, },
}); });

@ -12,6 +12,9 @@ module.exports = {
jet: '#343541', jet: '#343541',
'gray-alpha': 'rgba(0,0,0, .1)', 'gray-alpha': 'rgba(0,0,0, .1)',
'gray-1000': '#F6F6F6', 'gray-1000': '#F6F6F6',
'red-1000': 'rgb(254, 202, 202)',
'red-2000' : '#F44336',
'red-3000': '#621B16',
}, },
}, },
}, },

Loading…
Cancel
Save