From 540288beb63c95ee6fac4ae2bf9cbbf91dfd5a9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zhan=20Efe=20Meral?= Date: Sun, 28 Jul 2024 17:54:26 +0200 Subject: [PATCH] feat: add useCallback hook to create functions --- apps/next/components/SearchDialog.tsx | 28 ++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/apps/next/components/SearchDialog.tsx b/apps/next/components/SearchDialog.tsx index 0f3e6e7..04c3a25 100644 --- a/apps/next/components/SearchDialog.tsx +++ b/apps/next/components/SearchDialog.tsx @@ -1,5 +1,5 @@ "use client"; -import React, { useState, useEffect } from "react"; +import React, { useState, useEffect, useCallback } from "react"; import { Dialog, DialogContent, @@ -9,7 +9,11 @@ import { } from "@ui/dialog"; import { Input } from "@ui/input"; import { Button } from "@ui/button"; -import { CodebaseInfo, createFunctionCallBlock, FunctionInfo } from "@ozhanefe/ts-codegenerator"; +import { + CodebaseInfo, + createFunctionCallBlock, + FunctionInfo, +} from "@ozhanefe/ts-codegenerator"; import { useCodeGenerator } from "@/contexts/CodeGeneratorContext"; import { KeyCombinationLabel } from "@ui/key-combination-label"; @@ -23,6 +27,15 @@ export const SearchDialog: React.FC = ({ codebaseInfo }) => { const [searchResults, setSearchResults] = useState([]); const { state, setState } = useCodeGenerator(); + const addFunction = useCallback( + (func: FunctionInfo) => { + const { state: newState } = createFunctionCallBlock(func, state); + + setState(newState); + }, + [state, setState] + ); + useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "k") { @@ -34,8 +47,7 @@ export const SearchDialog: React.FC = ({ codebaseInfo }) => { event.preventDefault(); const index = parseInt(event.key) - 1; if (index < searchResults.length) { - const {state: newState} = createFunctionCallBlock(searchResults[index], state); - setState(newState); + addFunction(searchResults[index]); } } else if (event.key === "Escape") { setOpen(false); @@ -47,7 +59,7 @@ export const SearchDialog: React.FC = ({ codebaseInfo }) => { return () => { document.removeEventListener("keydown", handleKeyDown); }; - }, [open, searchResults]); + }, [open, searchResults, state]); useEffect(() => { if (searchQuery === "") { @@ -99,9 +111,7 @@ export const SearchDialog: React.FC = ({ codebaseInfo }) => {

- + )) )} @@ -109,4 +119,4 @@ export const SearchDialog: React.FC = ({ codebaseInfo }) => { ); -}; \ No newline at end of file +};