workin session managment in playground, need to add tooltips

This commit is contained in:
anovazzi1 2024-06-06 18:54:00 -03:00
commit 6fcf99aed9
6 changed files with 124 additions and 35 deletions

View file

@ -1030,7 +1030,6 @@ export async function getMessagesTable(
): Promise<{ ): Promise<{
rows: Array<Message>; rows: Array<Message>;
columns: Array<ColDef | ColGroupDef>; columns: Array<ColDef | ColGroupDef>;
sessions: Array<string>;
}> { }> {
const config = {}; const config = {};
if (id) { if (id) {
@ -1045,7 +1044,7 @@ export async function getMessagesTable(
rows.data.forEach((row) => { rows.data.forEach((row) => {
sessions.add(row.session_id); sessions.add(row.session_id);
}); });
return { rows: rows.data, columns, sessions: Array.from(sessions) }; return { rows: rows.data, columns };
} }
export async function deleteMessagesFn(ids: number[]) { export async function deleteMessagesFn(ids: number[]) {

View file

@ -0,0 +1,29 @@
import { deleteMessagesFn } from "../../../../../controllers/API";
import { useMessagesStore } from "../../../../../stores/messagesStore";
const useRemoveSession = (setSuccessData, setErrorData) => {
const deleteSession = useMessagesStore((state) => state.deleteSession);
const messages = useMessagesStore((state) => state.messages);
const handleRemoveSession = async (session_id: string) => {
try {
await deleteMessagesFn(
messages
.filter((msg) => msg.session_id === session_id)
.map((msg) => msg.index),
);
deleteSession(session_id);
setSuccessData({
title: "Session deleted successfully.",
});
} catch (error) {
setErrorData({
title: "Error deleting Session.",
});
}
};
return { handleRemoveSession };
};
export default useRemoveSession;

View file

@ -11,17 +11,13 @@ import useAlertStore from "../../../../stores/alertStore";
import { useMessagesStore } from "../../../../stores/messagesStore"; import { useMessagesStore } from "../../../../stores/messagesStore";
import useUpdateMessage from "../../../../pages/SettingsPage/pages/messagesPage/hooks/use-updateMessage"; import useUpdateMessage from "../../../../pages/SettingsPage/pages/messagesPage/hooks/use-updateMessage";
import useRemoveMessages from "../../../../pages/SettingsPage/pages/messagesPage/hooks/use-remove-messages"; import useRemoveMessages from "../../../../pages/SettingsPage/pages/messagesPage/hooks/use-remove-messages";
import useMessagesTable from "../../../../pages/SettingsPage/pages/messagesPage/hooks/use-messages-table";
import HeaderMessagesComponent from "../../../../pages/SettingsPage/pages/messagesPage/components/headerMessages"; import HeaderMessagesComponent from "../../../../pages/SettingsPage/pages/messagesPage/components/headerMessages";
import { Button } from "../../../../components/ui/button";
import ForwardedIconComponent from "../../../../components/genericIconComponent";
import { cn } from "../../../../utils/utils";
export default function SessionView({ export default function SessionView({ rows }: { rows: Array<any> }) {
session, const columns = useMessagesStore((state) => state.columns);
columns,
}: {
session: string;
columns: Array<ColDef | ColGroupDef>;
}) {
const messages = useMessagesStore((state) => state.messages);
const setErrorData = useAlertStore((state) => state.setErrorData); const setErrorData = useAlertStore((state) => state.setErrorData);
const setSuccessData = useAlertStore((state) => state.setSuccessData); const setSuccessData = useAlertStore((state) => state.setSuccessData);
@ -48,21 +44,43 @@ export default function SessionView({
} }
return ( return (
<TableComponent <div className="flex h-full w-full flex-col justify-between gap-6">
readOnlyEdit <>
onCellEditRequest={(event) => { <div className="flex w-full items-center justify-end gap-4 space-y-0.5">
handleUpdateMessage(event); <div className="flex flex-shrink-0 items-center gap-2">
}} <Button
editable={["Sender Name", "Message"]} data-testid="api-key-button-store"
overlayNoRowsTemplate="No data available" variant="primary"
onSelectionChanged={(event: SelectionChangedEvent) => { className="group px-2"
setSelectedRows(event.api.getSelectedRows().map((row) => row.index)); disabled={selectedRows.length === 0}
}} onClick={handleRemoveMessages}
rowSelection="multiple" >
suppressRowClickSelection={true} <ForwardedIconComponent
pagination={true} name="Trash2"
columnDefs={columns} className={cn(
rowData={messages.filter((message) => message.session_id === session)} "h-5 w-5 text-destructive group-disabled:text-primary",
/> )}
/>
</Button>
</div>
</div>
</>
<TableComponent
readOnlyEdit
onCellEditRequest={(event) => {
handleUpdateMessage(event);
}}
editable={["Sender Name", "Message"]}
overlayNoRowsTemplate="No data available"
onSelectionChanged={(event: SelectionChangedEvent) => {
setSelectedRows(event.api.getSelectedRows().map((row) => row.index));
}}
rowSelection="multiple"
suppressRowClickSelection={true}
pagination={true}
columnDefs={columns}
rowData={rows}
/>
</div>
); );
} }

View file

@ -27,8 +27,9 @@ import IOFieldView from "./components/IOFieldView";
import ChatView from "./components/chatView"; import ChatView from "./components/chatView";
import { getMessagesTable } from "../../controllers/API"; import { getMessagesTable } from "../../controllers/API";
import { useMessagesStore } from "../../stores/messagesStore"; import { useMessagesStore } from "../../stores/messagesStore";
import { ColDef, ColGroupDef } from "ag-grid-community";
import SessionView from "./components/SessionView"; import SessionView from "./components/SessionView";
import useRemoveSession from "./components/SessionView/hooks";
import useAlertStore from "../../stores/alertStore";
export default function IOModal({ export default function IOModal({
children, children,
@ -59,6 +60,8 @@ export default function IOModal({
const [selectedTab, setSelectedTab] = useState( const [selectedTab, setSelectedTab] = useState(
inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0, inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0,
); );
const setErrorData = useAlertStore((state) => state.setErrorData);
const setSuccessData = useAlertStore((state) => state.setSuccessData);
function startView() { function startView() {
if (!chatInput && !chatOutput) { if (!chatInput && !chatOutput) {
@ -84,8 +87,8 @@ export default function IOModal({
const currentFlow = useFlowsManagerStore((state) => state.currentFlow); const currentFlow = useFlowsManagerStore((state) => state.currentFlow);
const setNode = useFlowStore((state) => state.setNode); const setNode = useFlowStore((state) => state.setNode);
const [sessions, setSessions] = useState<string[]>([]); const [sessions, setSessions] = useState<string[]>([]);
const [columns, setColumns] = useState<Array<ColDef | ColGroupDef>>([]); const messages = useMessagesStore((state) => state.messages);
const setColumns = useMessagesStore((state) => state.setColumns);
async function updateVertices() { async function updateVertices() {
return updateVerticesOrder(currentFlow!.id, null); return updateVerticesOrder(currentFlow!.id, null);
} }
@ -114,6 +117,11 @@ export default function IOModal({
} }
} }
const { handleRemoveSession } = useRemoveSession(
setSuccessData,
setErrorData,
);
useEffect(() => { useEffect(() => {
setSelectedTab(inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0); setSelectedTab(inputs.length > 0 ? 1 : outputs.length > 0 ? 2 : 0);
}, [allNodes.length]); }, [allNodes.length]);
@ -131,14 +139,22 @@ export default function IOModal({
useEffect(() => { useEffect(() => {
setSelectedViewField(startView()); setSelectedViewField(startView());
if (haveChat) { if (haveChat) {
getMessagesTable("union").then(({ sessions, rows, columns }) => { getMessagesTable("union").then(({ rows, columns }) => {
setSessions(sessions);
setMessages(rows); setMessages(rows);
setColumns(columns); setColumns(columns);
}); });
} }
}, [open]); }, [open]);
useEffect(() => {
const sessions = new Set<string>();
messages.forEach((row) => {
sessions.add(row.session_id);
});
setSessions(Array.from(sessions));
sessions;
}, [messages]);
return ( return (
<BaseModal size={"md-thin"} open={open} setOpen={setOpen} disable={disable}> <BaseModal size={"md-thin"} open={open} setOpen={setOpen} disable={disable}>
<BaseModal.Trigger>{children}</BaseModal.Trigger> <BaseModal.Trigger>{children}</BaseModal.Trigger>
@ -322,7 +338,16 @@ export default function IOModal({
{session} {session}
</Badge> </Badge>
<div className="flex items-center justify-center gap-2 align-middle"> <div className="flex items-center justify-center gap-2 align-middle">
<Button variant="ghost" onClick={() => {}}> <Button
variant="ghost"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
handleRemoveSession(session);
if (selectedViewField?.id === session)
setSelectedViewField(undefined);
}}
>
<ShadTooltip content={"delete"}> <ShadTooltip content={"delete"}>
<IconComponent <IconComponent
name="Trash2" name="Trash2"
@ -400,8 +425,10 @@ export default function IOModal({
(session) => session === selectedViewField.id, (session) => session === selectedViewField.id,
) && ( ) && (
<SessionView <SessionView
columns={columns} rows={messages.filter(
session={selectedViewField.id} (message) =>
message.session_id === selectedViewField.id,
)}
/> />
)} )}
</div> </div>

View file

@ -2,6 +2,18 @@ import { create } from "zustand";
import { MessagesStoreType } from "../types/zustand/messages"; import { MessagesStoreType } from "../types/zustand/messages";
export const useMessagesStore = create<MessagesStoreType>((set, get) => ({ export const useMessagesStore = create<MessagesStoreType>((set, get) => ({
deleteSession: (id) => {
set((state) => {
const updatedMessages = state.messages.filter(
(msg) => msg.session_id !== id,
);
return { messages: updatedMessages };
});
},
columns: [],
setColumns: (columns) => {
set(() => ({ columns: columns }));
},
messages: [], messages: [],
setMessages: (messages) => { setMessages: (messages) => {
set(() => ({ messages: messages })); set(() => ({ messages: messages }));

View file

@ -1,3 +1,4 @@
import { ColDef, ColGroupDef } from "ag-grid-community";
import { Message } from "../../messages"; import { Message } from "../../messages";
export type MessagesStoreType = { export type MessagesStoreType = {
@ -8,4 +9,7 @@ export type MessagesStoreType = {
updateMessage: (message: Message) => void; updateMessage: (message: Message) => void;
clearMessages: () => void; clearMessages: () => void;
removeMessages: (ids: number[]) => void; removeMessages: (ids: number[]) => void;
columns: Array<ColDef | ColGroupDef>;
setColumns: (columns: Array<ColDef | ColGroupDef>) => void;
deleteSession: (id: string) => void;
}; };