mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-30 02:12:38 +00:00

* 4.7-alpha3 (#62) * doc * Optimize possible null Pointers and parts of Ux * fix: mulity index training error * feat: doc and rename question guide * fix ios speech input (#59) * fix: prompt editor variables nowrap (#61) * change openapi import in http module with curl import (#60) * chore(ui): dataset import modal ui (#58) * chore(ui): dataset import modal ui * use component * fix height * 4.7 (#63) * fix: claude3 image type verification failed (#1038) (#1040) * perf: curl import modal * doc img * perf: adapt cohere rerank * perf: code * perf: input style * doc --------- Co-authored-by: xiaotian <dimsky@163.com> * fix: ts * docker deploy * perf: prompt call * doc * ts * finish ui * perf: outlink detail ux * perf: user schema * fix: plugin update * feat: get current time plugin * fix: ts * perf: fetch anamation * perf: mark ux * doc * perf: select app ux * fix: split text custom string conflict * peref: inform readed * doc * memo flow component * perf: version * faq * feat: flow max runtimes * feat: similarity tip * feat: auto detect file encoding * Supports asymmetric vector model * fix: ts * perf: max w * move code * perf: hide whisper * fix: ts * feat: system msg modal * perf: catch error * perf: inform tip * fix: inform --------- Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com> Co-authored-by: xiaotian <dimsky@163.com>
98 lines
3.0 KiB
TypeScript
98 lines
3.0 KiB
TypeScript
import React, { useEffect, useMemo } from 'react';
|
|
import { useRouter } from 'next/router';
|
|
import Header from './Header';
|
|
import Flow from '@/components/core/module/Flow';
|
|
import FlowProvider, { useFlowProviderStore } from '@/components/core/module/Flow/FlowProvider';
|
|
import { FlowNodeTemplateType } from '@fastgpt/global/core/module/type.d';
|
|
import { pluginSystemModuleTemplates } from '@fastgpt/global/core/module/template/constants';
|
|
import { FlowNodeTypeEnum } from '@fastgpt/global/core/module/node/constant';
|
|
import { serviceSideProps } from '@/web/common/utils/i18n';
|
|
import { useQuery } from '@tanstack/react-query';
|
|
import { getOnePlugin } from '@/web/core/plugin/api';
|
|
import { useToast } from '@fastgpt/web/hooks/useToast';
|
|
import Loading from '@fastgpt/web/components/common/MyLoading';
|
|
import { getErrText } from '@fastgpt/global/common/error/utils';
|
|
import { useTranslation } from 'next-i18next';
|
|
import { useWorkflowStore } from '@/web/core/workflow/store/workflow';
|
|
|
|
type Props = { pluginId: string };
|
|
|
|
const Render = ({ pluginId }: Props) => {
|
|
const { t } = useTranslation();
|
|
const router = useRouter();
|
|
const { toast } = useToast();
|
|
const { nodes, initData } = useFlowProviderStore();
|
|
const { setBasicNodeTemplates } = useWorkflowStore();
|
|
|
|
const { data: pluginDetail } = useQuery(
|
|
['getOnePlugin', pluginId],
|
|
() => getOnePlugin(pluginId),
|
|
{
|
|
onError: (error) => {
|
|
toast({
|
|
status: 'warning',
|
|
title: getErrText(error, t('plugin.Load Plugin Failed'))
|
|
});
|
|
router.replace('/plugin/list');
|
|
}
|
|
}
|
|
);
|
|
|
|
useEffect(() => {
|
|
initData(JSON.parse(JSON.stringify(pluginDetail?.modules || [])));
|
|
}, [pluginDetail?.modules]);
|
|
|
|
useEffect(() => {
|
|
const concatTemplates = [...pluginSystemModuleTemplates];
|
|
|
|
const copyTemplates: FlowNodeTemplateType[] = JSON.parse(JSON.stringify(concatTemplates));
|
|
|
|
const filterType: Record<string, 1> = {
|
|
[FlowNodeTypeEnum.userGuide]: 1,
|
|
[FlowNodeTypeEnum.pluginInput]: 1,
|
|
[FlowNodeTypeEnum.pluginOutput]: 1
|
|
};
|
|
|
|
// filter some template
|
|
nodes.forEach((node) => {
|
|
if (node.type && filterType[node.type]) {
|
|
copyTemplates.forEach((module, index) => {
|
|
if (module.flowType === node.type) {
|
|
copyTemplates.splice(index, 1);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
// filter hideInPlugin inputs
|
|
copyTemplates.forEach((template) => {
|
|
template.inputs = template.inputs.filter((input) => !input.hideInPlugin);
|
|
});
|
|
|
|
setBasicNodeTemplates(copyTemplates);
|
|
}, [nodes, setBasicNodeTemplates]);
|
|
|
|
return pluginDetail ? (
|
|
<Flow Header={<Header plugin={pluginDetail} onClose={() => router.back()} />} />
|
|
) : (
|
|
<Loading />
|
|
);
|
|
};
|
|
|
|
export default function FlowEdit(props: any) {
|
|
return (
|
|
<FlowProvider mode={'plugin'}>
|
|
<Render {...props} />
|
|
</FlowProvider>
|
|
);
|
|
}
|
|
|
|
export async function getServerSideProps(context: any) {
|
|
return {
|
|
props: {
|
|
pluginId: context?.query?.pluginId || '',
|
|
...(await serviceSideProps(context))
|
|
}
|
|
};
|
|
}
|