mirror of
https://github.com/danny-avila/LibreChat.git
synced 2026-01-06 10:38:50 +01:00
adds dark mode and logs errors in message response
This commit is contained in:
parent
58498ed951
commit
b5042a738e
13 changed files with 13873 additions and 536 deletions
|
|
@ -1,5 +1,4 @@
|
|||
import React from 'react';
|
||||
import NavLink from './NavLink';
|
||||
import TrashIcon from '../svg/TrashIcon';
|
||||
import manualSWR from '~/utils/fetchers';
|
||||
import { useDispatch } from 'react-redux';
|
||||
|
|
|
|||
19
src/components/Nav/DarkMode.jsx
Normal file
19
src/components/Nav/DarkMode.jsx
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import React, { useState, useContext } from 'react';
|
||||
import DarkModeIcon from '../svg/DarkModeIcon';
|
||||
import { ThemeContext } from '~/hooks/ThemeContext';
|
||||
|
||||
export default function DarkMode() {
|
||||
const { theme, setTheme } = useContext(ThemeContext);
|
||||
|
||||
const clickHandler = () => setTheme(theme === 'dark' ? 'light' : 'dark');
|
||||
|
||||
return (
|
||||
<a
|
||||
className="flex cursor-pointer items-center gap-3 rounded-md py-3 px-3 text-sm text-white transition-colors duration-200 hover:bg-gray-500/10"
|
||||
onClick={clickHandler}
|
||||
>
|
||||
<DarkModeIcon />
|
||||
Dark mode
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
|
@ -1,17 +1,14 @@
|
|||
import React from 'react';
|
||||
import ClearConvos from './ClearConvos';
|
||||
import NavLink from './NavLink';
|
||||
import DarkModeIcon from '../svg/DarkModeIcon';
|
||||
import LogOutIcon from '../svg/LogOutIcon';
|
||||
import ClearConvos from './ClearConvos';
|
||||
import DarkMode from './DarkMode';
|
||||
|
||||
export default function NavLinks() {
|
||||
return (
|
||||
<>
|
||||
<ClearConvos />
|
||||
<NavLink
|
||||
svg={DarkModeIcon}
|
||||
text="Dark mode"
|
||||
/>
|
||||
<DarkMode />
|
||||
<NavLink
|
||||
svg={LogOutIcon}
|
||||
text="Log out"
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ export default function Message({ sender, text, last = false, error = false }) {
|
|||
const { isSubmitting } = useSelector((state) => state.submit);
|
||||
const props = {
|
||||
className:
|
||||
'group w-full border-b border-black/10 text-gray-800 dark:border-gray-900/50 dark:bg-gray-800 dark:text-gray-100'
|
||||
'w-full border-b border-black/10 dark:border-gray-900/50 text-gray-800 dark:text-gray-100 group dark:bg-gray-800'
|
||||
};
|
||||
|
||||
if (sender === 'GPT') {
|
||||
props.className =
|
||||
'group w-full border-b border-black/10 bg-gray-100 text-gray-800 dark:border-gray-900/50 dark:bg-[#444654] dark:text-gray-100';
|
||||
'w-full border-b border-black/10 dark:border-gray-900/50 text-gray-800 dark:text-gray-100 group bg-gray-50 dark:bg-[#444654]';
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
|
|||
|
|
@ -3,10 +3,9 @@ import Message from './Message';
|
|||
import Landing from './Landing';
|
||||
|
||||
export default function Messages({ messages }) {
|
||||
|
||||
if (messages.length === 0) {
|
||||
return <Landing />
|
||||
};
|
||||
return <Landing />;
|
||||
}
|
||||
|
||||
const messagesEndRef = useRef(null);
|
||||
|
||||
|
|
@ -25,17 +24,22 @@ export default function Messages({ messages }) {
|
|||
// </div>
|
||||
// <div className="flex h-full text-sm dark:bg-gray-800"></div>;
|
||||
return (
|
||||
<div className="flex-1 overflow-y-auto ">
|
||||
{messages.map((message, i) => (
|
||||
<Message
|
||||
key={i}
|
||||
sender={message.sender}
|
||||
text={message.text}
|
||||
last={i === messages.length - 1}
|
||||
error={!!message.error ? true : false}
|
||||
/>
|
||||
))}
|
||||
<div ref={messagesEndRef} />
|
||||
// <div className="flex-1 overflow-y-auto ">
|
||||
<div className="flex-1 overflow-hidden">
|
||||
<div className="h-full dark:bg-gray-800">
|
||||
<div className="flex h-full flex-col items-center text-sm dark:bg-gray-800">
|
||||
{messages.map((message, i) => (
|
||||
<Message
|
||||
key={i}
|
||||
sender={message.sender}
|
||||
text={message.text}
|
||||
last={i === messages.length - 1}
|
||||
error={!!message.error ? true : false}
|
||||
/>
|
||||
))}
|
||||
<div ref={messagesEndRef} />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,11 +36,11 @@ export default function TextChat({ messages, reloadConvos }) {
|
|||
dispatch(setSubmitState(false));
|
||||
};
|
||||
|
||||
const errorHandler = (data) => {
|
||||
console.log('Error:', data);
|
||||
const errorHandler = (event) => {
|
||||
console.log('Error:', event);
|
||||
const errorResponse = {
|
||||
...initialResponse,
|
||||
text: 'An error occurred. Please try again in a few moments.',
|
||||
text: `An error occurred. Please try again in a few moments.\n\nError message: ${event.data}`,
|
||||
error: true
|
||||
};
|
||||
dispatch(setSubmitState(false));
|
||||
|
|
@ -80,7 +80,7 @@ export default function TextChat({ messages, reloadConvos }) {
|
|||
};
|
||||
|
||||
return (
|
||||
<div className="md:bg-vert-light-gradient dark:md:bg-vert-dark-gradient w-full border-t bg-white dark:border-white/20 dark:bg-gray-800 md:border-t-0 md:border-transparent md:!bg-transparent md:dark:border-transparent">
|
||||
<div className="md:bg-vert-light-gradient dark:md:bg-vert-dark-gradient absolute bottom-0 left-0 w-full border-t bg-white dark:border-white/20 dark:bg-gray-800 md:border-t-0 md:border-transparent md:!bg-transparent md:dark:border-transparent">
|
||||
<form className="stretch mx-2 flex flex-row gap-3 pt-2 last:mb-2 md:last:mb-6 lg:mx-auto lg:max-w-3xl lg:pt-6">
|
||||
<div className="relative flex h-full flex-1 md:flex-col">
|
||||
<div className="ml-1 mt-1.5 flex justify-center gap-0 md:m-auto md:mb-2 md:w-full md:gap-2" />
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue