Changed view to not show chat

This commit is contained in:
Lucas Oliveira 2024-02-21 21:09:52 +01:00
commit 5b000e6078
4 changed files with 129 additions and 120 deletions

View file

@ -1,7 +1,10 @@
import { ReactNode, useState } from "react"; import { ReactNode, useState } from "react";
import { CHAT_FORM_DIALOG_SUBTITLE } from "../../constants/constants";
import BaseModal from "../../modals/baseModal";
import useFlowStore from "../../stores/flowStore"; import useFlowStore from "../../stores/flowStore";
import { NodeType } from "../../types/flow"; import { NodeType } from "../../types/flow";
import { isInputType, isOutputType } from "../../utils/reactflowUtils"; import { isInputType, isOutputType } from "../../utils/reactflowUtils";
import { cn } from "../../utils/utils";
import AccordionComponent from "../AccordionComponent"; import AccordionComponent from "../AccordionComponent";
import IOInputField from "../IOInputField"; import IOInputField from "../IOInputField";
import IOOutputView from "../IOOutputView"; import IOOutputView from "../IOOutputView";
@ -10,7 +13,7 @@ import NewChatView from "../newChatView";
import { Badge } from "../ui/badge"; import { Badge } from "../ui/badge";
import { Button } from "../ui/button"; import { Button } from "../ui/button";
export default function IOView(): JSX.Element { export default function IOView({ children, open, setOpen }): JSX.Element {
const inputs = useFlowStore((state) => state.inputs); const inputs = useFlowStore((state) => state.inputs);
const outputs = useFlowStore((state) => state.outputs); const outputs = useFlowStore((state) => state.outputs);
const inputIds = inputs.map((obj) => obj.id); const inputIds = inputs.map((obj) => obj.id);
@ -39,7 +42,7 @@ export default function IOView(): JSX.Element {
function getCategories() { function getCategories() {
const categories: CategoriesType[] = []; const categories: CategoriesType[] = [];
if (inputs.length > 0) if (inputs.filter((input) => input.type !== "ChatInput").length > 0)
categories.push({ name: "Inputs", icon: "TextCursorInput" }); categories.push({ name: "Inputs", icon: "TextCursorInput" });
if (outputs.filter((output) => output.type !== "ChatOutput").length > 0) if (outputs.filter((output) => output.type !== "ChatOutput").length > 0)
categories.push({ name: "Outputs", icon: "TerminalSquare" }); categories.push({ name: "Outputs", icon: "TerminalSquare" });
@ -53,7 +56,7 @@ export default function IOView(): JSX.Element {
return <IOInputField inputId={id!} inputType={type} />; return <IOInputField inputId={id!} inputType={type} />;
if (isOutputType(type)) if (isOutputType(type))
return <IOOutputView outputId={id!} outputType={type} />; return <IOOutputView outputId={id!} outputType={type} />;
else return <div>no view selected</div>; else return undefined;
} }
function UpdateAccordion() { function UpdateAccordion() {
@ -61,15 +64,36 @@ export default function IOView(): JSX.Element {
} }
return ( return (
<div className="form-modal-iv-box"> <BaseModal size={handleSelectChange() ? "large" : "small"} open={open} setOpen={setOpen}>
<div className="mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide"> <BaseModal.Trigger>{children}</BaseModal.Trigger>
{/* TODO ADAPT TO ALL TYPES OF INPUTS AND OUTPUTS */}
<BaseModal.Header description={CHAT_FORM_DIALOG_SUBTITLE}>
<div className="flex items-center">
<span className="pr-2">Chat</span>
<IconComponent
name="prompts"
className="h-6 w-6 pl-1 text-foreground"
aria-hidden="true"
/>
</div>
</BaseModal.Header>
<BaseModal.Content>
<div className="flex-max-width mt-2">
<div
className={cn(
"mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide",
handleSelectChange() ? "w-2/6" : "w-full"
)}
>
<div className="flex items-start gap-4 py-2"> <div className="flex items-start gap-4 py-2">
{categories.map((category, index) => { {categories.map((category, index) => {
return ( return (
//hide chat button if chat is alredy on the view //hide chat button if chat is alredy on the view
<Button <Button
onClick={() => setSelectedCategory(index)} onClick={() => setSelectedCategory(index)}
variant={index === selectedCategory ? "primary" : "secondary"} variant={
index === selectedCategory ? "primary" : "secondary"
}
key={index} key={index}
> >
<IconComponent <IconComponent
@ -103,9 +127,14 @@ export default function IOView(): JSX.Element {
)} )}
</div> </div>
{UpdateAccordion() {UpdateAccordion()
.filter((input) => input.type !== "ChatInput") .filter(
(input) =>
input.type !== "ChatInput" && input.type !== "ChatOutput"
)
.map((input, index) => { .map((input, index) => {
const node: NodeType = nodes.find((node) => node.id === input.id)!; const node: NodeType = nodes.find(
(node) => node.id === input.id
)!;
return ( return (
<div className="file-component-accordion-div" key={index}> <div className="file-component-accordion-div" key={index}>
<AccordionComponent <AccordionComponent
@ -118,7 +147,10 @@ export default function IOView(): JSX.Element {
className="-mb-1 pr-4" className="-mb-1 pr-4"
onClick={(event) => { onClick={(event) => {
event.stopPropagation(); event.stopPropagation();
setSelectedView({ type: input.type, id: input.id }); setSelectedView({
type: input.type,
id: input.id,
});
}} }}
> >
<IconComponent <IconComponent
@ -150,7 +182,9 @@ export default function IOView(): JSX.Element {
); );
})} })}
</div> </div>
{handleSelectChange()} {handleSelectChange() && handleSelectChange()}
</div> </div>
</BaseModal.Content>
</BaseModal>
); );
} }

View file

@ -1,12 +1,8 @@
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
import { CHAT_FORM_DIALOG_SUBTITLE } from "../../constants/constants";
import BaseModal from "../../modals/baseModal";
import useFlowStore from "../../stores/flowStore"; import useFlowStore from "../../stores/flowStore";
import { ChatType } from "../../types/chat"; import { ChatType } from "../../types/chat";
import IOView from "../IOview"; import IOView from "../IOview";
import ChatTrigger from "../ViewTriggers/chat"; import ChatTrigger from "../ViewTriggers/chat";
import IconComponent from "../genericIconComponent";
import BuildTrigger from "./buildTrigger";
export default function Chat({ flow }: ChatType): JSX.Element { export default function Chat({ flow }: ChatType): JSX.Element {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
@ -38,27 +34,9 @@ export default function Chat({ flow }: ChatType): JSX.Element {
<div className="flex flex-col"> <div className="flex flex-col">
{/* <BuildTrigger open={open} flow={flow} /> */} {/* <BuildTrigger open={open} flow={flow} /> */}
{hasIO && ( {hasIO && (
<BaseModal open={open} setOpen={setOpen}> <IOView open={open} setOpen={setOpen}>
<BaseModal.Trigger asChild>
<div onClick={() => setOpen(true)}>
<ChatTrigger /> <ChatTrigger />
</div> </IOView>
</BaseModal.Trigger>
{/* TODO ADAPT TO ALL TYPES OF INPUTS AND OUTPUTS */}
<BaseModal.Header description={CHAT_FORM_DIALOG_SUBTITLE}>
<div className="flex items-center">
<span className="pr-2">Chat</span>
<IconComponent
name="prompts"
className="h-6 w-6 pl-1 text-foreground"
aria-hidden="true"
/>
</div>
</BaseModal.Header>
<BaseModal.Content>
<IOView />
</BaseModal.Content>
</BaseModal>
)} )}
</div> </div>
</> </>

View file

@ -439,7 +439,7 @@ export default function FormModal({
<DialogDescription>{CHAT_FORM_DIALOG_SUBTITLE}</DialogDescription> <DialogDescription>{CHAT_FORM_DIALOG_SUBTITLE}</DialogDescription>
</DialogHeader> </DialogHeader>
<div className="form-modal-iv-box "> <div className="flex-max-width mt-2 h-[80vh]">
<div className="form-modal-iv-size"> <div className="form-modal-iv-size">
<div className="file-component-arrangement"> <div className="file-component-arrangement">
<IconComponent <IconComponent

View file

@ -926,9 +926,6 @@
.form-modal-initial-prompt-btn { .form-modal-initial-prompt-btn {
@apply mb-2 flex items-center gap-2 rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold shadow-sm; @apply mb-2 flex items-center gap-2 rounded-md border border-border bg-background px-4 py-2 text-sm font-semibold shadow-sm;
} }
.form-modal-iv-box {
@apply flex-max-width mt-2 h-[80vh];
}
.form-modal-iv-size { .form-modal-iv-size {
@apply mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide; @apply mr-6 flex h-full w-2/6 flex-col justify-start overflow-auto scrollbar-hide;
} }