refactor: Add create knowledge button (#9520)

* refactor: Simplify KnowledgeBaseEmptyState component and integrate handleCreateKnowledge function into KnowledgeBasesTab

- Refactored KnowledgeBaseEmptyState to accept handleCreateKnowledge as a prop, removing internal logic for flow creation.
- Updated KnowledgeBasesTab to implement handleCreateKnowledge, enhancing the flow creation process and improving component interaction.

* [autofix.ci] apply automated fixes

---------

Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
This commit is contained in:
Deon Sanchez 2025-08-25 13:09:47 -06:00 • committed by GitHub
commit 24ec2bd299
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 46 additions and 33 deletions

View file

@ -1,38 +1,11 @@
import { useParams } from "react-router-dom";
import ForwardedIconComponent from "@/components/common/genericIconComponent"; import ForwardedIconComponent from "@/components/common/genericIconComponent";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { useCustomNavigate } from "@/customization/hooks/use-custom-navigate";
import { track } from "@/customization/utils/analytics";
import useAddFlow from "@/hooks/flows/use-add-flow";
import useFlowsManagerStore from "@/stores/flowsManagerStore";
import { useFolderStore } from "@/stores/foldersStore";
import { updateIds } from "@/utils/reactflowUtils";
const KnowledgeBaseEmptyState = () => {
const examples = useFlowsManagerStore((state) => state.examples);
const addFlow = useAddFlow();
const navigate = useCustomNavigate();
const { folderId } = useParams();
const myCollectionId = useFolderStore((state) => state.myCollectionId);
const folderIdUrl = folderId ?? myCollectionId;
const handleCreateKnowledge = async () => {
const knowledgeBasesExample = examples.find(
(example) => example.name === "Knowledge Ingestion",
);
if (knowledgeBasesExample && knowledgeBasesExample.data) {
updateIds(knowledgeBasesExample.data);
addFlow({ flow: knowledgeBasesExample }).then((id) => {
navigate(`/flow/${id}/folder/${folderIdUrl}`);
});
track("New Flow Created", {
template: `${knowledgeBasesExample.name} Template`,
});
}
};
const KnowledgeBaseEmptyState = ({
handleCreateKnowledge,
}: {
handleCreateKnowledge: () => void;
}) => {
return ( return (
<div className="flex h-full w-full flex-col items-center justify-center gap-8 pb-8"> <div className="flex h-full w-full flex-col items-center justify-center gap-8 pb-8">
<div className="flex flex-col items-center gap-2"> <div className="flex flex-col items-center gap-2">

View file

@ -5,7 +5,10 @@ import type {
} from "ag-grid-community"; } from "ag-grid-community";
import type { AgGridReact } from "ag-grid-react"; import type { AgGridReact } from "ag-grid-react";
import { useRef, useState } from "react"; import { useRef, useState } from "react";
import { useParams } from "react-router-dom";
import ForwardedIconComponent from "@/components/common/genericIconComponent";
import TableComponent from "@/components/core/parameterRenderComponent/components/tableComponent"; import TableComponent from "@/components/core/parameterRenderComponent/components/tableComponent";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import Loading from "@/components/ui/loading"; import Loading from "@/components/ui/loading";
import { useDeleteKnowledgeBase } from "@/controllers/API/queries/knowledge-bases/use-delete-knowledge-base"; import { useDeleteKnowledgeBase } from "@/controllers/API/queries/knowledge-bases/use-delete-knowledge-base";
@ -13,8 +16,14 @@ import {
type KnowledgeBaseInfo, type KnowledgeBaseInfo,
useGetKnowledgeBases, useGetKnowledgeBases,
} from "@/controllers/API/queries/knowledge-bases/use-get-knowledge-bases"; } from "@/controllers/API/queries/knowledge-bases/use-get-knowledge-bases";
import { useCustomNavigate } from "@/customization/hooks/use-custom-navigate";
import { track } from "@/customization/utils/analytics";
import useAddFlow from "@/hooks/flows/use-add-flow";
import DeleteConfirmationModal from "@/modals/deleteConfirmationModal"; import DeleteConfirmationModal from "@/modals/deleteConfirmationModal";
import useAlertStore from "@/stores/alertStore"; import useAlertStore from "@/stores/alertStore";
import useFlowsManagerStore from "@/stores/flowsManagerStore";
import { useFolderStore } from "@/stores/foldersStore";
import { updateIds } from "@/utils/reactflowUtils";
import { cn } from "@/utils/utils"; import { cn } from "@/utils/utils";
import { createKnowledgeBaseColumns } from "../config/knowledgeBaseColumns"; import { createKnowledgeBaseColumns } from "../config/knowledgeBaseColumns";
import KnowledgeBaseEmptyState from "./KnowledgeBaseEmptyState"; import KnowledgeBaseEmptyState from "./KnowledgeBaseEmptyState";
@ -47,6 +56,13 @@ const KnowledgeBasesTab = ({
setSuccessData: state.setSuccessData, setSuccessData: state.setSuccessData,
})); }));
const examples = useFlowsManagerStore((state) => state.examples);
const addFlow = useAddFlow();
const navigate = useCustomNavigate();
const { folderId } = useParams();
const myCollectionId = useFolderStore((state) => state.myCollectionId);
const folderIdUrl = folderId ?? myCollectionId;
const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false);
const [knowledgeBaseToDelete, setKnowledgeBaseToDelete] = const [knowledgeBaseToDelete, setKnowledgeBaseToDelete] =
useState<KnowledgeBaseInfo | null>(null); useState<KnowledgeBaseInfo | null>(null);
@ -119,6 +135,22 @@ const KnowledgeBasesTab = ({
} }
}; };
const handleCreateKnowledge = async () => {
const knowledgeBasesExample = examples.find(
(example) => example.name === "Knowledge Ingestion",
);
if (knowledgeBasesExample && knowledgeBasesExample.data) {
updateIds(knowledgeBasesExample.data);
addFlow({ flow: knowledgeBasesExample }).then((id) => {
navigate(`/flow/${id}/folder/${folderIdUrl}`);
});
track("New Flow Created", {
template: `${knowledgeBasesExample.name} Template`,
});
}
};
const clearSelection = () => { const clearSelection = () => {
setQuantitySelected(0); setQuantitySelected(0);
setSelectedFiles([]); setSelectedFiles([]);
@ -142,7 +174,9 @@ const KnowledgeBasesTab = ({
} }
if (knowledgeBases.length === 0) { if (knowledgeBases.length === 0) {
return <KnowledgeBaseEmptyState />; return (
<KnowledgeBaseEmptyState handleCreateKnowledge={handleCreateKnowledge} />
);
} }
return ( return (
@ -159,6 +193,12 @@ const KnowledgeBasesTab = ({
onChange={(event) => setQuickFilterText(event.target.value)} onChange={(event) => setQuickFilterText(event.target.value)}
/> />
</div> </div>
<Button
className="flex items-center gap-2 font-semibold"
onClick={handleCreateKnowledge}
>
<ForwardedIconComponent name="Plus" /> Create knowledge
</Button>
</div> </div>
<div className="flex h-full flex-col pt-4"> <div className="flex h-full flex-col pt-4">