| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { PageHeader } from '@/components/page-header';
- import {
- Breadcrumb,
- BreadcrumbItem,
- BreadcrumbLink,
- BreadcrumbList,
- BreadcrumbPage,
- BreadcrumbSeparator,
- } from '@/components/ui/breadcrumb';
- import { useSetModalState } from '@/hooks/common-hooks';
- import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks';
- import { useFetchAgentTemplates, useSetAgent } from '@/hooks/use-agent-request';
- import { IFlowTemplate } from '@/interfaces/database/flow';
- import { useCallback, useEffect, useState } from 'react';
- import { useTranslation } from 'react-i18next';
- import { CreateAgentDialog } from './create-agent-dialog';
- import { TemplateCard } from './template-card';
- import { SideBar } from './template-sidebar';
-
- export default function AgentTemplates() {
- const { navigateToAgentList } = useNavigatePage();
- const { t } = useTranslation();
- const list = useFetchAgentTemplates();
- const { loading, setAgent } = useSetAgent();
- const [templateList, setTemplateList] = useState<IFlowTemplate[]>([]);
-
- useEffect(() => {
- setTemplateList(list);
- }, [list]);
- const {
- visible: creatingVisible,
- hideModal: hideCreatingModal,
- showModal: showCreatingModal,
- } = useSetModalState();
-
- const [template, setTemplate] = useState<IFlowTemplate>();
-
- const showModal = useCallback(
- (record: IFlowTemplate) => {
- setTemplate(record);
- showCreatingModal();
- },
- [showCreatingModal],
- );
-
- const { navigateToAgent } = useNavigatePage();
-
- const handleOk = useCallback(
- async (payload: any) => {
- let dsl = template?.dsl;
- const ret = await setAgent({
- title: payload.name,
- dsl,
- avatar: template?.avatar,
- });
-
- if (ret?.code === 0) {
- hideCreatingModal();
- navigateToAgent(ret.data.id)();
- }
- },
- [
- hideCreatingModal,
- navigateToAgent,
- setAgent,
- template?.avatar,
- template?.dsl,
- ],
- );
- const handleSiderBarChange = (keyword: string) => {
- const tempList = list.filter(
- (item, index) =>
- item.title.toLocaleLowerCase().includes(keyword?.toLocaleLowerCase()) ||
- index === 0,
- );
- setTemplateList(tempList);
- };
- return (
- <section>
- <PageHeader>
- <Breadcrumb>
- <BreadcrumbList>
- <BreadcrumbItem>
- <BreadcrumbLink onClick={navigateToAgentList}>
- Agent
- </BreadcrumbLink>
- </BreadcrumbItem>
- <BreadcrumbSeparator />
- <BreadcrumbItem>
- <BreadcrumbPage>{t('flow.createGraph')}</BreadcrumbPage>
- </BreadcrumbItem>
- </BreadcrumbList>
- </Breadcrumb>
- </PageHeader>
- <div className="flex flex-1 h-dvh">
- <SideBar change={handleSiderBarChange}></SideBar>
-
- <main className="flex-1 bg-muted/50 h-dvh">
- <div className="grid gap-6 sm:grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-5 max-h-[94vh] overflow-auto px-8 pt-8">
- {templateList?.map((x, index) => {
- return (
- <TemplateCard
- isCreate={index === 0}
- key={x.id}
- data={x}
- showModal={showModal}
- ></TemplateCard>
- );
- })}
- </div>
- {creatingVisible && (
- <CreateAgentDialog
- loading={loading}
- visible={creatingVisible}
- hideModal={hideCreatingModal}
- onOk={handleOk}
- ></CreateAgentDialog>
- )}
- </main>
- </div>
- </section>
- );
- }
|