4.8.11 test (#2850)

* fix: variables check

* remove log

* fix: variables refresh

* perf: team select button

* perf: remove change fn
This commit is contained in:
Archer
2024-10-04 10:25:20 +08:00
committed by GitHub
parent fc6f28f26e
commit a66d9d2e98
7 changed files with 91 additions and 85 deletions

View File

@@ -7,6 +7,7 @@ import dynamic from 'next/dynamic';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useToast } from '@fastgpt/web/hooks/useToast';
import Avatar from '@fastgpt/web/components/common/Avatar';
import MyIcon from '@fastgpt/web/components/common/Icon';
const TeamManageModal = dynamic(() => import('../TeamManageModal'));
@@ -19,47 +20,50 @@ const TeamMenu = () => {
const { isOpen, onOpen, onClose } = useDisclosure();
return (
<Button
variant={'whitePrimary'}
userSelect={'none'}
w={'100%'}
display={'block'}
h={'34px'}
px={3}
css={{
'& span': {
display: 'block'
}
}}
transform={'none !important'}
onClick={() => {
if (feConfigs.isPlus) {
onOpen();
} else {
toast({
status: 'warning',
title: t('common:common.system.Commercial version function')
});
}
}}
>
<MyTooltip label={t('common:user.team.Select Team')}>
<Flex w={'100%'} alignItems={'center'}>
{userInfo?.team ? (
<>
<Avatar src={userInfo.team.avatar} w={'1rem'} />
<Box ml={2}>{userInfo.team.teamName}</Box>
</>
) : (
<>
<Box w={'8px'} h={'8px'} mr={3} borderRadius={'50%'} bg={'#67c13b'} />
{t('common:user.team.Personal Team')}
</>
)}
</Flex>
</MyTooltip>
<>
<Button
variant={'whitePrimary'}
userSelect={'none'}
w={'100%'}
h={'34px'}
justifyContent={'space-between'}
px={3}
css={{
'& span': {
display: 'block'
}
}}
transform={'none !important'}
rightIcon={<MyIcon w={'1rem'} name={'common/select'} />}
onClick={() => {
if (feConfigs.isPlus) {
onOpen();
} else {
toast({
status: 'warning',
title: t('common:common.system.Commercial version function')
});
}
}}
>
<MyTooltip label={t('common:user.team.Select Team')}>
<Flex w={'100%'} alignItems={'center'}>
{userInfo?.team ? (
<>
<Avatar src={userInfo.team.avatar} w={'1rem'} />
<Box ml={2}>{userInfo.team.teamName}</Box>
</>
) : (
<>
<Box w={'8px'} h={'8px'} mr={3} borderRadius={'50%'} bg={'#67c13b'} />
{t('common:user.team.Personal Team')}
</>
)}
</Flex>
</MyTooltip>
</Button>
{isOpen && <TeamManageModal onClose={onClose} />}
</Button>
</>
);
};

View File

@@ -3,8 +3,6 @@ import { Box, Button, Flex, useTheme } from '@chakra-ui/react';
import { getInforms, readInform } from '@/web/support/user/inform/api';
import type { UserInformSchema } from '@fastgpt/global/support/user/inform/type';
import { formatTimeToChatTime } from '@fastgpt/global/common/string/time';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { usePagination } from '@fastgpt/web/hooks/usePagination';
import { useLoading } from '@fastgpt/web/hooks/useLoading';
import { useTranslation } from 'next-i18next';
@@ -15,7 +13,6 @@ const InformTable = () => {
const { t } = useTranslation();
const theme = useTheme();
const { Loading } = useLoading();
const { isPc } = useSystem();
const {
data: informs,

View File

@@ -8,7 +8,7 @@ import { WorkflowContext } from '../../context';
import { useThrottleEffect } from 'ahooks';
const ButtonEdge = (props: EdgeProps) => {
const { nodes, nodeList, setEdges, workflowDebugData, hoverEdgeId } = useContextSelector(
const { nodes, nodeList, onEdgesChange, workflowDebugData, hoverEdgeId } = useContextSelector(
WorkflowContext,
(v) => v
);
@@ -43,12 +43,14 @@ const ButtonEdge = (props: EdgeProps) => {
const onDelConnect = useCallback(
(id: string) => {
setEdges((state) => {
const newState = state.filter((item) => item.id !== id);
return newState;
});
onEdgesChange([
{
type: 'remove',
id
}
]);
},
[setEdges]
[onEdgesChange]
);
// Selected edge or source/target node selected

View File

@@ -14,7 +14,7 @@ import {
Rect,
NodeRemoveChange,
NodeSelectionChange,
Position
EdgeRemoveChange
} from 'reactflow';
import { EDGE_TYPE, FlowNodeTypeEnum } from '@fastgpt/global/core/workflow/node/constant';
import 'reactflow/dist/style.css';
@@ -276,6 +276,7 @@ export const useWorkflow = () => {
const { isDowningCtrl } = useKeyboard();
const {
setConnectingEdge,
edges,
nodes,
nodeList,
onNodesChange,
@@ -413,38 +414,29 @@ export const useWorkflow = () => {
});
/* node */
const handleRemoveNode = useMemoizedFn((change: NodeRemoveChange, node: Node) => {
if (node.data.forbidDelete) {
toast({
status: 'warning',
title: t('common:core.workflow.Can not delete node')
});
return false;
}
const handleRemoveNode = useMemoizedFn((change: NodeRemoveChange, nodeId: string) => {
// If the node has child nodes, remove the child nodes
const childNodes = nodes.filter((n) => n.data.parentNodeId === node.id);
const childNodes = nodes.filter((n) => n.data.parentNodeId === nodeId);
if (childNodes.length > 0) {
const childNodeIds = childNodes.map((n) => n.id);
const childNodesChange = childNodes.map((node) => ({
...change,
id: node.id
}));
onNodesChange(childNodesChange);
setEdges((state) =>
state.filter(
(edge) =>
edge.source !== change.id &&
edge.target !== change.id &&
!childNodeIds.includes(edge.source) &&
!childNodeIds.includes(edge.target)
)
const childNodeIds = childNodes.map((node) => node.id);
const childEdges = edges.filter(
(edge) => childNodeIds.includes(edge.source) || childNodeIds.includes(edge.target)
);
onNodesChange(
childNodes.map<NodeRemoveChange>((node) => ({
type: 'remove',
id: node.id
}))
);
onEdgesChange(
childEdges.map<EdgeRemoveChange>((edge) => ({
type: 'remove',
id: edge.id
}))
);
}
setEdges((state) =>
state.filter((edge) => edge.source !== change.id && edge.target !== change.id)
);
onNodesChange([change]);
return;
@@ -516,9 +508,20 @@ export const useWorkflow = () => {
for (const change of changes) {
if (change.type === 'remove') {
const node = nodes.find((n) => n.id === change.id);
// 如果删除失败,则不继续执行
node && handleRemoveNode(change, node);
return;
if (!node) continue;
const parentNodeDeleted = changes.find(
(c) => c.type === 'remove' && c.id === node?.data.parentNodeId
);
// Forbidden delete && Parents are not deleted together
if (node.data.forbidDelete && !parentNodeDeleted) {
toast({
status: 'warning',
title: t('common:core.workflow.Can not delete node')
});
continue;
}
handleRemoveNode(change, node.id);
} else if (change.type === 'select') {
handleSelectNode(change);
} else if (change.type === 'position') {
@@ -529,8 +532,8 @@ export const useWorkflow = () => {
}
}
// default changes
onNodesChange(changes);
// Remove separately
onNodesChange(changes.filter((c) => c.type !== 'remove'));
});
const handleEdgeChange = useCallback(

View File

@@ -257,7 +257,7 @@ export function RenderHttpProps({
appDetail,
t
});
}, [nodeList, edges, inputs, t]);
}, [nodeId, nodeList, edges, appDetail, t]);
const variableText = useMemo(() => {
return variables

View File

@@ -65,7 +65,7 @@ const NodeVariableUpdate = ({ data, selected }: NodeProps<FlowNodeItemType>) =>
appDetail,
t
});
}, [nodeList, edges, inputs, t]);
}, [nodeId, nodeList, edges, appDetail, t]);
const updateList = useMemo(
() =>

View File

@@ -25,7 +25,7 @@ const TextareaRender = ({ inputs = [], item, nodeId }: RenderInputProps) => {
appDetail,
t
});
}, [nodeList, edges, inputs, t]);
}, [nodeId, nodeList, edges, appDetail, t]);
const onChange = useCallback(
(e: string) => {