From 4ca7325d1aeb12f8bb686f928490da4e46bcfd05 Mon Sep 17 00:00:00 2001 From: pablonyx Date: Mon, 20 Jan 2025 17:09:16 -0800 Subject: [PATCH] Finalize ux rework (#3720) * colors * nit * finalize chat ux * fix seeding waiting * update chat input bar icons * k * Revert "fix seeding waiting" This reverts commit e1aa93ff0c3c4a6bf77e6875ef5fa1d03dd73359. --- .../status/CCPairIndexingStatusTable.tsx | 4 +- web/src/app/assistants/mine/AssistantCard.tsx | 4 +- .../app/assistants/mine/AssistantModal.tsx | 15 +- web/src/app/chat/ChatPage.tsx | 6 +- web/src/app/chat/input/ChatInputBar.tsx | 161 +++++++++--------- web/src/app/globals.css | 7 - .../components/context/AssistantsContext.tsx | 17 +- web/src/lib/userSS.ts | 1 + 8 files changed, 107 insertions(+), 108 deletions(-) diff --git a/web/src/app/admin/indexing/status/CCPairIndexingStatusTable.tsx b/web/src/app/admin/indexing/status/CCPairIndexingStatusTable.tsx index 3529fe1ab..2d432033c 100644 --- a/web/src/app/admin/indexing/status/CCPairIndexingStatusTable.tsx +++ b/web/src/app/admin/indexing/status/CCPairIndexingStatusTable.tsx @@ -59,7 +59,7 @@ function SummaryRow({ return (
@@ -86,7 +86,7 @@ function SummaryRow({
-
+
= ({ persona, pinned, closeModal }) => { const { user, toggleAssistantPinnedStatus } = useUser(); const router = useRouter(); - const { refreshAssistants } = useAssistants(); + const { refreshAssistants, pinnedAssistants } = useAssistants(); const isOwnedByUser = checkUserOwnsAssistant(user, persona); @@ -319,7 +319,7 @@ const AssistantCard: React.FC<{
{ await toggleAssistantPinnedStatus( - user?.preferences.pinned_assistants || [], + pinnedAssistants.map((a) => a.id), persona.id, !pinned ); diff --git a/web/src/app/assistants/mine/AssistantModal.tsx b/web/src/app/assistants/mine/AssistantModal.tsx index 58fb7162d..f3531df97 100644 --- a/web/src/app/assistants/mine/AssistantModal.tsx +++ b/web/src/app/assistants/mine/AssistantModal.tsx @@ -65,11 +65,8 @@ export default function AssistantModal({ }: { hideModal: () => void; }) { - const [showAllFeaturedAssistants, setShowAllFeaturedAssistants] = - useState(false); - const { assistants, visibleAssistants } = useAssistants(); - const { assistantFilters, toggleAssistantFilter, setAssistantFilters } = - useAssistantFilter(); + const { assistants, pinnedAssistants } = useAssistants(); + const { assistantFilters, toggleAssistantFilter } = useAssistantFilter(); const router = useRouter(); const { user } = useUser(); const [searchQuery, setSearchQuery] = useState(""); @@ -208,11 +205,9 @@ export default function AssistantModal({ featuredAssistants.map((assistant, index) => (
a.id) + .includes(assistant.id)} persona={assistant} closeModal={hideModal} /> diff --git a/web/src/app/chat/ChatPage.tsx b/web/src/app/chat/ChatPage.tsx index a3ad5097d..b234dbefe 100644 --- a/web/src/app/chat/ChatPage.tsx +++ b/web/src/app/chat/ChatPage.tsx @@ -304,11 +304,7 @@ export function ChatPage({ const [presentingDocument, setPresentingDocument] = useState(null); - const { - visibleAssistants: assistants, - recentAssistants, - refreshRecentAssistants, - } = useAssistants(); + const { recentAssistants, refreshRecentAssistants } = useAssistants(); const liveAssistant: Persona | undefined = alternativeAssistant || diff --git a/web/src/app/chat/input/ChatInputBar.tsx b/web/src/app/chat/input/ChatInputBar.tsx index 64009d703..a59e8e30e 100644 --- a/web/src/app/chat/input/ChatInputBar.tsx +++ b/web/src/app/chat/input/ChatInputBar.tsx @@ -653,92 +653,101 @@ export function ChatInputBar({
)} -
- { - const input = document.createElement("input"); - input.type = "file"; - input.multiple = true; - input.onchange = (event: any) => { - const files = Array.from( - event?.target?.files || [] - ) as File[]; - if (files.length > 0) { - handleFileUpload(files); - } - }; - input.click(); - }} - tooltipContent={"Upload files"} - /> - - - - {retrievalEnabled && ( - - } +
+
+ { + const input = document.createElement("input"); + input.type = "file"; + input.multiple = true; + input.onchange = (event: any) => { + const files = Array.from( + event?.target?.files || [] + ) as File[]; + if (files.length > 0) { + handleFileUpload(files); + } + }; + input.click(); + }} + tooltipContent={"Upload files"} /> - )} -
-
- {chatState == "streaming" || - chatState == "toolBuilding" || - chatState == "loading" ? ( + + + {retrievalEnabled && ( + + } + /> + )} +
+
- ) : ( - - )} +
diff --git a/web/src/app/globals.css b/web/src/app/globals.css index aa473556e..f91d7278a 100644 --- a/web/src/app/globals.css +++ b/web/src/app/globals.css @@ -326,13 +326,6 @@ /* Handle color on hover */ } -::-webkit-scrollbar { - width: 0px; - /* Vertical scrollbar width */ - height: 8px; - /* Horizontal scrollbar height */ -} - /* Used to create alternatie to React Markdown */ .preserve-lines { white-space: pre-wrap; diff --git a/web/src/components/context/AssistantsContext.tsx b/web/src/components/context/AssistantsContext.tsx index 956a1b756..eef447b97 100644 --- a/web/src/components/context/AssistantsContext.tsx +++ b/web/src/components/context/AssistantsContext.tsx @@ -57,15 +57,20 @@ export const AssistantsProvider: React.FC<{ const [allAssistants, setAllAssistants] = useState([]); const [pinnedAssistants, setPinnedAssistants] = useState( - assistants.filter((assistant) => - user?.preferences?.pinned_assistants?.includes(assistant.id) - ) + user?.preferences.pinned_assistants + ? assistants.filter((assistant) => + user?.preferences?.pinned_assistants?.includes(assistant.id) + ) + : assistants.filter((a) => a.builtin_persona) ); + useEffect(() => { setPinnedAssistants( - assistants.filter((assistant) => - user?.preferences?.pinned_assistants?.includes(assistant.id) - ) + user?.preferences.pinned_assistants + ? assistants.filter((assistant) => + user?.preferences?.pinned_assistants?.includes(assistant.id) + ) + : assistants.filter((a) => a.builtin_persona) ); }, [user?.preferences?.pinned_assistants, assistants]); diff --git a/web/src/lib/userSS.ts b/web/src/lib/userSS.ts index 94564c65f..1cffb27fd 100644 --- a/web/src/lib/userSS.ts +++ b/web/src/lib/userSS.ts @@ -177,6 +177,7 @@ export const getCurrentUserSS = async (): Promise => { if (!response.ok) { return null; } + const user = await response.json(); return user; } catch (e) {