diff --git a/web/app/components/header/account-setting/data-source-page-new/card.tsx b/web/app/components/header/account-setting/data-source-page-new/card.tsx
index 6d0e0bc688..1dd2058796 100644
--- a/web/app/components/header/account-setting/data-source-page-new/card.tsx
+++ b/web/app/components/header/account-setting/data-source-page-new/card.tsx
@@ -1,6 +1,6 @@
-import { RiAddLine } from '@remixicon/react'
+import { memo } from 'react'
import Item from './item'
-import Button from '@/app/components/base/button'
+import Configure from './configure'
const Card = () => {
return (
@@ -17,12 +17,7 @@ const Card = () => {
notion-data-source
-
+
Connected workspace
@@ -42,4 +37,4 @@ const Card = () => {
)
}
-export default Card
+export default memo(Card)
diff --git a/web/app/components/header/account-setting/data-source-page-new/configure.tsx b/web/app/components/header/account-setting/data-source-page-new/configure.tsx
new file mode 100644
index 0000000000..e612d20954
--- /dev/null
+++ b/web/app/components/header/account-setting/data-source-page-new/configure.tsx
@@ -0,0 +1,63 @@
+import { memo } from 'react'
+import {
+ RiAddLine,
+ RiEqualizer2Line,
+} from '@remixicon/react'
+import {
+ PortalToFollowElem,
+ PortalToFollowElemContent,
+ PortalToFollowElemTrigger,
+} from '@/app/components/base/portal-to-follow-elem'
+import Button from '@/app/components/base/button'
+
+const Configure = () => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ )
+}
+
+export default memo(Configure)
diff --git a/web/app/components/header/account-setting/data-source-page-new/install-from-marketplace.tsx b/web/app/components/header/account-setting/data-source-page-new/install-from-marketplace.tsx
index da3738d0f2..35980ec1b3 100644
--- a/web/app/components/header/account-setting/data-source-page-new/install-from-marketplace.tsx
+++ b/web/app/components/header/account-setting/data-source-page-new/install-from-marketplace.tsx
@@ -1,4 +1,8 @@
-import { useCallback, useState } from 'react'
+import {
+ memo,
+ useCallback,
+ useState,
+} from 'react'
import { useTheme } from 'next-themes'
import { useTranslation } from 'react-i18next'
import Link from 'next/link'
@@ -77,4 +81,4 @@ const InstallFromMarketplace = ({
)
}
-export default InstallFromMarketplace
+export default memo(InstallFromMarketplace)
diff --git a/web/app/components/header/account-setting/data-source-page-new/item.tsx b/web/app/components/header/account-setting/data-source-page-new/item.tsx
index 5b5dfc822b..fdc73ae692 100644
--- a/web/app/components/header/account-setting/data-source-page-new/item.tsx
+++ b/web/app/components/header/account-setting/data-source-page-new/item.tsx
@@ -1,3 +1,4 @@
+import { memo } from 'react'
import Indicator from '@/app/components/header/indicator'
import Operator from './operator'
@@ -22,4 +23,4 @@ const Item = () => {
)
}
-export default Item
+export default memo(Item)
diff --git a/web/app/components/header/account-setting/data-source-page-new/operator.tsx b/web/app/components/header/account-setting/data-source-page-new/operator.tsx
index dd84f1ac7c..c198a57b0b 100644
--- a/web/app/components/header/account-setting/data-source-page-new/operator.tsx
+++ b/web/app/components/header/account-setting/data-source-page-new/operator.tsx
@@ -1,4 +1,5 @@
import {
+ memo,
useCallback,
useMemo,
} from 'react'
@@ -70,4 +71,4 @@ const Operator = () => {
)
}
-export default Operator
+export default memo(Operator)
diff --git a/web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts b/web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
index db21cfb05e..928ff10fbe 100644
--- a/web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
+++ b/web/app/components/workflow-app/hooks/use-nodes-sync-draft.ts
@@ -28,6 +28,7 @@ export const useNodesSyncDraft = () => {
edges,
transform,
} = store.getState()
+ const nodes = getNodes()
const [x, y, zoom] = transform
const {
appId,
@@ -36,8 +37,7 @@ export const useNodesSyncDraft = () => {
syncWorkflowDraftHash,
} = workflowStore.getState()
- if (appId) {
- const nodes = getNodes()
+ if (appId && !!nodes.length) {
const hasStartNode = nodes.find(node => node.data.type === BlockEnum.Start)
if (!hasStartNode)