mirror of
https://git.mirrors.martin98.com/https://github.com/infiniflow/ragflow.git
synced 2025-08-13 05:09:03 +08:00
### What problem does this PR solve? Feat: Rename agent #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
parent
d72468426e
commit
1c6320828c
@ -1,7 +1,8 @@
|
|||||||
import { IFlow } from '@/interfaces/database/flow';
|
import { IFlow } from '@/interfaces/database/flow';
|
||||||
import flowService from '@/services/flow-service';
|
import flowService from '@/services/flow-service';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
|
||||||
import { useDebounce } from 'ahooks';
|
import { useDebounce } from 'ahooks';
|
||||||
|
import { message } from 'antd';
|
||||||
import { useCallback } from 'react';
|
import { useCallback } from 'react';
|
||||||
import {
|
import {
|
||||||
useGetPaginationWithRouter,
|
useGetPaginationWithRouter,
|
||||||
@ -10,6 +11,8 @@ import {
|
|||||||
|
|
||||||
export const enum AgentApiAction {
|
export const enum AgentApiAction {
|
||||||
FetchAgentList = 'fetchAgentList',
|
FetchAgentList = 'fetchAgentList',
|
||||||
|
UpdateAgentSetting = 'updateAgentSetting',
|
||||||
|
DeleteAgent = 'deleteAgent',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useFetchAgentListByPage = () => {
|
export const useFetchAgentListByPage = () => {
|
||||||
@ -58,3 +61,51 @@ export const useFetchAgentListByPage = () => {
|
|||||||
setPagination,
|
setPagination,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const useUpdateAgentSetting = () => {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
|
||||||
|
const {
|
||||||
|
data,
|
||||||
|
isPending: loading,
|
||||||
|
mutateAsync,
|
||||||
|
} = useMutation({
|
||||||
|
mutationKey: [AgentApiAction.UpdateAgentSetting],
|
||||||
|
mutationFn: async (params: any) => {
|
||||||
|
const ret = await flowService.settingCanvas(params);
|
||||||
|
if (ret?.data?.code === 0) {
|
||||||
|
message.success('success');
|
||||||
|
queryClient.invalidateQueries({
|
||||||
|
queryKey: [AgentApiAction.FetchAgentList],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
message.error(ret?.data?.data);
|
||||||
|
}
|
||||||
|
return ret?.data?.code;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return { data, loading, updateAgentSetting: mutateAsync };
|
||||||
|
};
|
||||||
|
|
||||||
|
export const useDeleteAgent = () => {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const {
|
||||||
|
data,
|
||||||
|
isPending: loading,
|
||||||
|
mutateAsync,
|
||||||
|
} = useMutation({
|
||||||
|
mutationKey: [AgentApiAction.DeleteAgent],
|
||||||
|
mutationFn: async (canvasIds: string[]) => {
|
||||||
|
const { data } = await flowService.removeCanvas({ canvasIds });
|
||||||
|
if (data.code === 0) {
|
||||||
|
queryClient.invalidateQueries({
|
||||||
|
queryKey: [AgentApiAction.FetchAgentList],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return data?.data ?? [];
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return { data, loading, deleteAgent: mutateAsync };
|
||||||
|
};
|
||||||
|
@ -9,9 +9,9 @@ import { useRenameAgent } from './use-rename-agent';
|
|||||||
|
|
||||||
export type DatasetCardProps = {
|
export type DatasetCardProps = {
|
||||||
data: IFlow;
|
data: IFlow;
|
||||||
} & Pick<ReturnType<typeof useRenameAgent>, 'showDatasetRenameModal'>;
|
} & Pick<ReturnType<typeof useRenameAgent>, 'showAgentRenameModal'>;
|
||||||
|
|
||||||
export function AgentCard({ data, showDatasetRenameModal }: DatasetCardProps) {
|
export function AgentCard({ data, showAgentRenameModal }: DatasetCardProps) {
|
||||||
const { navigateToAgent } = useNavigatePage();
|
const { navigateToAgent } = useNavigatePage();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -25,8 +25,8 @@ export function AgentCard({ data, showDatasetRenameModal }: DatasetCardProps) {
|
|||||||
</Avatar>
|
</Avatar>
|
||||||
</div>
|
</div>
|
||||||
<AgentDropdown
|
<AgentDropdown
|
||||||
showDatasetRenameModal={showDatasetRenameModal}
|
showAgentRenameModal={showAgentRenameModal}
|
||||||
dataset={data}
|
agent={data}
|
||||||
>
|
>
|
||||||
<MoreButton></MoreButton>
|
<MoreButton></MoreButton>
|
||||||
</AgentDropdown>
|
</AgentDropdown>
|
||||||
|
@ -6,7 +6,7 @@ import {
|
|||||||
DropdownMenuSeparator,
|
DropdownMenuSeparator,
|
||||||
DropdownMenuTrigger,
|
DropdownMenuTrigger,
|
||||||
} from '@/components/ui/dropdown-menu';
|
} from '@/components/ui/dropdown-menu';
|
||||||
import { useDeleteKnowledge } from '@/hooks/use-knowledge-request';
|
import { useDeleteAgent } from '@/hooks/use-agent-request';
|
||||||
import { IFlow } from '@/interfaces/database/flow';
|
import { IFlow } from '@/interfaces/database/flow';
|
||||||
import { PenLine, Trash2 } from 'lucide-react';
|
import { PenLine, Trash2 } from 'lucide-react';
|
||||||
import { MouseEventHandler, PropsWithChildren, useCallback } from 'react';
|
import { MouseEventHandler, PropsWithChildren, useCallback } from 'react';
|
||||||
@ -15,33 +15,33 @@ import { useRenameAgent } from './use-rename-agent';
|
|||||||
|
|
||||||
export function AgentDropdown({
|
export function AgentDropdown({
|
||||||
children,
|
children,
|
||||||
showDatasetRenameModal,
|
showAgentRenameModal,
|
||||||
dataset,
|
agent: agent,
|
||||||
}: PropsWithChildren &
|
}: PropsWithChildren &
|
||||||
Pick<ReturnType<typeof useRenameAgent>, 'showDatasetRenameModal'> & {
|
Pick<ReturnType<typeof useRenameAgent>, 'showAgentRenameModal'> & {
|
||||||
dataset: IFlow;
|
agent: IFlow;
|
||||||
}) {
|
}) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { deleteKnowledge } = useDeleteKnowledge();
|
const { deleteAgent } = useDeleteAgent();
|
||||||
|
|
||||||
const handleShowDatasetRenameModal: MouseEventHandler<HTMLDivElement> =
|
const handleShowAgentRenameModal: MouseEventHandler<HTMLDivElement> =
|
||||||
useCallback(
|
useCallback(
|
||||||
(e) => {
|
(e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
showDatasetRenameModal(dataset);
|
showAgentRenameModal(agent);
|
||||||
},
|
},
|
||||||
[dataset, showDatasetRenameModal],
|
[agent, showAgentRenameModal],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleDelete: MouseEventHandler<HTMLDivElement> = useCallback(() => {
|
const handleDelete: MouseEventHandler<HTMLDivElement> = useCallback(() => {
|
||||||
deleteKnowledge(dataset.id);
|
deleteAgent([agent.id]);
|
||||||
}, [dataset.id, deleteKnowledge]);
|
}, [agent.id, deleteAgent]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<DropdownMenu>
|
<DropdownMenu>
|
||||||
<DropdownMenuTrigger asChild>{children}</DropdownMenuTrigger>
|
<DropdownMenuTrigger asChild>{children}</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent>
|
<DropdownMenuContent>
|
||||||
<DropdownMenuItem onClick={handleShowDatasetRenameModal}>
|
<DropdownMenuItem onClick={handleShowAgentRenameModal}>
|
||||||
{t('common.rename')} <PenLine />
|
{t('common.rename')} <PenLine />
|
||||||
</DropdownMenuItem>
|
</DropdownMenuItem>
|
||||||
<DropdownMenuSeparator />
|
<DropdownMenuSeparator />
|
||||||
|
@ -16,12 +16,12 @@ export default function Agent() {
|
|||||||
const { navigateToAgentTemplates } = useNavigatePage();
|
const { navigateToAgentTemplates } = useNavigatePage();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
datasetRenameLoading,
|
agentRenameLoading,
|
||||||
initialDatasetName,
|
initialAgentName,
|
||||||
onDatasetRenameOk,
|
onAgentRenameOk,
|
||||||
datasetRenameVisible,
|
agentRenameVisible,
|
||||||
hideDatasetRenameModal,
|
hideAgentRenameModal,
|
||||||
showDatasetRenameModal,
|
showAgentRenameModal,
|
||||||
} = useRenameAgent();
|
} = useRenameAgent();
|
||||||
|
|
||||||
const handlePageChange = useCallback(
|
const handlePageChange = useCallback(
|
||||||
@ -51,7 +51,7 @@ export default function Agent() {
|
|||||||
<AgentCard
|
<AgentCard
|
||||||
key={x.id}
|
key={x.id}
|
||||||
data={x}
|
data={x}
|
||||||
showDatasetRenameModal={showDatasetRenameModal}
|
showAgentRenameModal={showAgentRenameModal}
|
||||||
></AgentCard>
|
></AgentCard>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
@ -63,12 +63,12 @@ export default function Agent() {
|
|||||||
onChange={handlePageChange}
|
onChange={handlePageChange}
|
||||||
></RAGFlowPagination>
|
></RAGFlowPagination>
|
||||||
</div>
|
</div>
|
||||||
{datasetRenameVisible && (
|
{agentRenameVisible && (
|
||||||
<RenameDialog
|
<RenameDialog
|
||||||
hideModal={hideDatasetRenameModal}
|
hideModal={hideAgentRenameModal}
|
||||||
onOk={onDatasetRenameOk}
|
onOk={onAgentRenameOk}
|
||||||
initialName={initialDatasetName}
|
initialName={initialAgentName}
|
||||||
loading={datasetRenameLoading}
|
loading={agentRenameLoading}
|
||||||
></RenameDialog>
|
></RenameDialog>
|
||||||
)}
|
)}
|
||||||
</section>
|
</section>
|
||||||
|
@ -1,53 +1,46 @@
|
|||||||
import { useSetModalState } from '@/hooks/common-hooks';
|
import { useSetModalState } from '@/hooks/common-hooks';
|
||||||
import { useUpdateKnowledge } from '@/hooks/use-knowledge-request';
|
import { useUpdateAgentSetting } from '@/hooks/use-agent-request';
|
||||||
import { IFlow } from '@/interfaces/database/flow';
|
import { IFlow } from '@/interfaces/database/flow';
|
||||||
import { omit } from 'lodash';
|
import { pick } from 'lodash';
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
|
|
||||||
export const useRenameAgent = () => {
|
export const useRenameAgent = () => {
|
||||||
const [dataset, setDataset] = useState<IFlow>({} as IFlow);
|
const [agent, setAgent] = useState<IFlow>({} as IFlow);
|
||||||
const {
|
const {
|
||||||
visible: datasetRenameVisible,
|
visible: agentRenameVisible,
|
||||||
hideModal: hideDatasetRenameModal,
|
hideModal: hideAgentRenameModal,
|
||||||
showModal: showDatasetRenameModal,
|
showModal: showAgentRenameModal,
|
||||||
} = useSetModalState();
|
} = useSetModalState();
|
||||||
const { saveKnowledgeConfiguration, loading } = useUpdateKnowledge(true);
|
const { updateAgentSetting, loading } = useUpdateAgentSetting();
|
||||||
|
|
||||||
const onDatasetRenameOk = useCallback(
|
const onAgentRenameOk = useCallback(
|
||||||
async (name: string) => {
|
async (name: string) => {
|
||||||
const ret = await saveKnowledgeConfiguration({
|
const ret = await updateAgentSetting({
|
||||||
...omit(dataset, [
|
...pick(agent, ['id', 'avatar', 'description', 'permission']),
|
||||||
'id',
|
title: name,
|
||||||
'update_time',
|
|
||||||
'nickname',
|
|
||||||
'tenant_avatar',
|
|
||||||
'tenant_id',
|
|
||||||
]),
|
|
||||||
kb_id: dataset.id,
|
|
||||||
name,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (ret.code === 0) {
|
if (ret === 0) {
|
||||||
hideDatasetRenameModal();
|
hideAgentRenameModal();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[saveKnowledgeConfiguration, dataset, hideDatasetRenameModal],
|
[updateAgentSetting, agent, hideAgentRenameModal],
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleShowDatasetRenameModal = useCallback(
|
const handleShowAgentRenameModal = useCallback(
|
||||||
async (record: IFlow) => {
|
async (record: IFlow) => {
|
||||||
setDataset(record);
|
setAgent(record);
|
||||||
showDatasetRenameModal();
|
showAgentRenameModal();
|
||||||
},
|
},
|
||||||
[showDatasetRenameModal],
|
[showAgentRenameModal],
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
datasetRenameLoading: loading,
|
agentRenameLoading: loading,
|
||||||
initialDatasetName: dataset?.title,
|
initialAgentName: agent?.title,
|
||||||
onDatasetRenameOk,
|
onAgentRenameOk,
|
||||||
datasetRenameVisible,
|
agentRenameVisible,
|
||||||
hideDatasetRenameModal,
|
hideAgentRenameModal,
|
||||||
showDatasetRenameModal: handleShowDatasetRenameModal,
|
showAgentRenameModal: handleShowAgentRenameModal,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user