diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelect.tsx b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelect.tsx index 76b738cd1..44932a8ea 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelect.tsx +++ b/packages/twenty-front/src/modules/object-record/relation-picker/components/MultipleObjectRecordSelect.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useRef, useState } from 'react'; import styled from '@emotion/styled'; import { isNonEmptyString } from '@sniptt/guards'; -import debounce from 'lodash.debounce'; +import { useDebouncedCallback } from 'use-debounce'; import { MultipleObjectRecordOnClickOutsideEffect } from '@/object-record/relation-picker/components/MultipleObjectRecordOnClickOutsideEffect'; import { MultipleObjectRecordSelectItem } from '@/object-record/relation-picker/components/MultipleObjectRecordSelectItem'; @@ -83,7 +83,7 @@ export const MultipleObjectRecordSelect = ({ } }, [selectedObjectRecordsForSelect, loading]); - const debouncedSetSearchFilter = debounce(setSearchFilter, 100, { + const debouncedSetSearchFilter = useDebouncedCallback(setSearchFilter, 100, { leading: true, }); diff --git a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useEntitySelectSearch.ts b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useEntitySelectSearch.ts index d81cd060d..be2e6e561 100644 --- a/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useEntitySelectSearch.ts +++ b/packages/twenty-front/src/modules/object-record/relation-picker/hooks/useEntitySelectSearch.ts @@ -1,4 +1,4 @@ -import debounce from 'lodash.debounce'; +import { useDebouncedCallback } from 'use-debounce'; import { useRelationPicker } from '@/object-record/relation-picker/hooks/useRelationPicker'; @@ -14,7 +14,7 @@ export const useEntitySelectSearch = ({ setRelationPickerSearchFilter, } = useRelationPicker({ relationPickerScopeId }); - const debouncedSetSearchFilter = debounce( + const debouncedSetSearchFilter = useDebouncedCallback( setRelationPickerSearchFilter, 100, { diff --git a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx index 7db7cd24b..a279c75e3 100644 --- a/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx +++ b/packages/twenty-front/src/modules/settings/profile/components/NameFields.tsx @@ -1,7 +1,7 @@ import { useEffect, useState } from 'react'; import styled from '@emotion/styled'; -import debounce from 'lodash.debounce'; import { useRecoilState, useRecoilValue } from 'recoil'; +import { useDebouncedCallback } from 'use-debounce'; import { currentUserState } from '@/auth/states/currentUserState'; import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState'; @@ -46,7 +46,7 @@ export const NameFields = ({ }); // TODO: Enhance this with react-web-hook-form (https://www.react-hook-form.com) - const debouncedUpdate = debounce(async () => { + const debouncedUpdate = useDebouncedCallback(async () => { onFirstNameUpdate?.(firstName); onLastNameUpdate?.(lastName); diff --git a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx index b72e76b4e..d2d01267b 100644 --- a/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx +++ b/packages/twenty-front/src/modules/settings/workspace/components/NameField.tsx @@ -1,7 +1,7 @@ import { useCallback, useEffect, useState } from 'react'; import styled from '@emotion/styled'; -import debounce from 'lodash.debounce'; import { useRecoilValue } from 'recoil'; +import { useDebouncedCallback } from 'use-debounce'; import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState'; import { TextInput } from '@/ui/input/components/TextInput'; @@ -38,7 +38,7 @@ export const NameField = ({ // TODO: Enhance this with react-web-hook-form (https://www.react-hook-form.com) // eslint-disable-next-line react-hooks/exhaustive-deps const debouncedUpdate = useCallback( - debounce(async (name: string) => { + useDebouncedCallback(async (name: string) => { if (isDefined(onNameUpdate)) { onNameUpdate(displayName); } diff --git a/packages/twenty-front/src/modules/spreadsheet-import/components/MatchColumnSelect.tsx b/packages/twenty-front/src/modules/spreadsheet-import/components/MatchColumnSelect.tsx index b0c69912e..cd9fd48b8 100644 --- a/packages/twenty-front/src/modules/spreadsheet-import/components/MatchColumnSelect.tsx +++ b/packages/twenty-front/src/modules/spreadsheet-import/components/MatchColumnSelect.tsx @@ -9,8 +9,8 @@ import { size, useFloating, } from '@floating-ui/react'; -import debounce from 'lodash.debounce'; import { ReadonlyDeep } from 'type-fest'; +import { useDebouncedCallback } from 'use-debounce'; import { SelectOption } from '@/spreadsheet-import/types'; import { AppTooltip } from '@/ui/display/tooltip/AppTooltip'; @@ -72,9 +72,13 @@ export const MatchColumnSelect = ({ [initialOptions], ); - const debouncedHandleSearchFilter = debounce(handleSearchFilterChange, 100, { - leading: true, - }); + const debouncedHandleSearchFilter = useDebouncedCallback( + handleSearchFilterChange, + 100, + { + leading: true, + }, + ); const handleFilterChange = (event: React.ChangeEvent) => { const value = event.currentTarget.value; diff --git a/packages/twenty-front/src/modules/ui/layout/modal/components/ConfirmationModal.tsx b/packages/twenty-front/src/modules/ui/layout/modal/components/ConfirmationModal.tsx index 515a27bfe..53eef42d4 100644 --- a/packages/twenty-front/src/modules/ui/layout/modal/components/ConfirmationModal.tsx +++ b/packages/twenty-front/src/modules/ui/layout/modal/components/ConfirmationModal.tsx @@ -1,7 +1,7 @@ import { ReactNode, useState } from 'react'; import styled from '@emotion/styled'; import { AnimatePresence, LayoutGroup } from 'framer-motion'; -import debounce from 'lodash.debounce'; +import { useDebouncedCallback } from 'use-debounce'; import { H1Title, @@ -78,7 +78,7 @@ export const ConfirmationModal = ({ isValueMatchingInput(confirmationValue, value); }; - const isValueMatchingInput = debounce( + const isValueMatchingInput = useDebouncedCallback( (value?: string, inputValue?: string) => { setIsValidValue(Boolean(value && inputValue && value === inputValue)); },