diff --git a/web/package-lock.json b/web/package-lock.json index beab1974f..e9de9209b 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -112,6 +112,7 @@ "@types/webpack-env": "^1.18.4", "@umijs/lint": "^4.1.1", "@umijs/plugins": "^4.1.0", + "@welldone-software/why-did-you-render": "^8.0.3", "cross-env": "^7.0.3", "html-loader": "^5.1.0", "husky": "^9.0.11", @@ -11187,6 +11188,19 @@ "@xtuc/long": "4.2.2" } }, + "node_modules/@welldone-software/why-did-you-render": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/@welldone-software/why-did-you-render/-/why-did-you-render-8.0.3.tgz", + "integrity": "sha512-bb5bKPMStYnocyTBVBu4UTegZdBqzV1mPhxc0UIV/S43KFUSRflux9gvzJfu2aM4EWLJ3egTvdjOi+viK+LKGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4" + }, + "peerDependencies": { + "react": "^18" + } + }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmmirror.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz", diff --git a/web/package.json b/web/package.json index 4d58a20c4..cc6d0132e 100644 --- a/web/package.json +++ b/web/package.json @@ -123,6 +123,7 @@ "@types/webpack-env": "^1.18.4", "@umijs/lint": "^4.1.1", "@umijs/plugins": "^4.1.0", + "@welldone-software/why-did-you-render": "^8.0.3", "cross-env": "^7.0.3", "html-loader": "^5.1.0", "husky": "^9.0.11", diff --git a/web/src/app.tsx b/web/src/app.tsx index ddafd4a16..1ea4025b6 100644 --- a/web/src/app.tsx +++ b/web/src/app.tsx @@ -39,6 +39,15 @@ const AntLanguageMap = { de: deDE, }; +if (process.env.NODE_ENV === 'development') { + const whyDidYouRender = require('@welldone-software/why-did-you-render'); + whyDidYouRender(React, { + trackAllPureComponents: true, + trackExtraHooks: [], + logOnDifferentValues: true, + }); +} + const queryClient = new QueryClient(); type Locale = ConfigProviderProps['locale']; diff --git a/web/src/components/ui/form.tsx b/web/src/components/ui/form.tsx index 15c4596a5..8ce3a37cb 100644 --- a/web/src/components/ui/form.tsx +++ b/web/src/components/ui/form.tsx @@ -73,7 +73,7 @@ const useFormField = () => { }; }; -const FormItem = React.forwardRef< +const InnerFormItem = React.forwardRef< HTMLDivElement, React.HTMLAttributes >(({ className, ...props }, ref) => { @@ -85,7 +85,10 @@ const FormItem = React.forwardRef< ); }); -FormItem.displayName = 'FormItem'; + +InnerFormItem.displayName = 'FormItem'; + +const FormItem = React.memo(InnerFormItem); const FormLabel = React.forwardRef< React.ElementRef, diff --git a/web/src/components/ui/input.tsx b/web/src/components/ui/input.tsx index c05dece03..f0ee3c5f3 100644 --- a/web/src/components/ui/input.tsx +++ b/web/src/components/ui/input.tsx @@ -103,6 +103,10 @@ export const InnerBlurInput = React.forwardRef< ); }); +if (process.env.NODE_ENV !== 'production') { + InnerBlurInput.whyDidYouRender = true; +} + export const BlurInput = React.memo(InnerBlurInput); export { ExpandedInput, Input, SearchInput }; diff --git a/web/src/pages/agent/form/categorize-form/dynamic-categorize.tsx b/web/src/pages/agent/form/categorize-form/dynamic-categorize.tsx index 5b4712053..bc4dc9732 100644 --- a/web/src/pages/agent/form/categorize-form/dynamic-categorize.tsx +++ b/web/src/pages/agent/form/categorize-form/dynamic-categorize.tsx @@ -11,7 +11,7 @@ import { FormLabel, FormMessage, } from '@/components/ui/form'; -import { Input } from '@/components/ui/input'; +import { BlurInput, Input } from '@/components/ui/input'; import { BlurTextarea } from '@/components/ui/textarea'; import { useTranslate } from '@/hooks/common-hooks'; import { PlusOutlined } from '@ant-design/icons'; @@ -55,7 +55,7 @@ const getOtherFieldValues = ( x !== form.getValues(`${formListName}.${index}.${latestField}`), ); -const NameInput = ({ +const InnerNameInput = ({ value, onChange, otherNames, @@ -104,6 +104,8 @@ const NameInput = ({ ); }; +const NameInput = memo(InnerNameInput); + const InnerFormSet = ({ nodeId, index }: IProps & { index: number }) => { const form = useFormContext(); const { t } = useTranslate('flow'); @@ -128,7 +130,8 @@ const InnerFormSet = ({ nodeId, index }: IProps & { index: number }) => { {t('categoryName')} - + {/* { @@ -139,7 +142,7 @@ const InnerFormSet = ({ nodeId, index }: IProps & { index: number }) => { form.clearErrors(fieldName); } }} - > + > */}