From 56353cda41b9e3b141237b82b8c14ff7e97a1a35 Mon Sep 17 00:00:00 2001 From: Jason Morgan Date: Thu, 13 Jun 2024 19:49:09 -0700 Subject: [PATCH] added hook to handle ESC key to close cards --- client/src/components/CardDetails.tsx | 102 +++++++++++++------------- client/src/hooks/useKeyPress.ts | 20 +++++ 2 files changed, 73 insertions(+), 49 deletions(-) create mode 100644 client/src/hooks/useKeyPress.ts diff --git a/client/src/components/CardDetails.tsx b/client/src/components/CardDetails.tsx index 50fe666..bad012a 100644 --- a/client/src/components/CardDetails.tsx +++ b/client/src/components/CardDetails.tsx @@ -1,63 +1,67 @@ import React from "react"; import { Card } from "../types"; +import useKeyPress from "../hooks/useKeyPress"; interface CardDetailsProps { - selectedCard: Card; - handleUpdateSelectedCard: (card: Card) => void; - handleResetSelectedCard: () => void; + selectedCard: Card; + handleUpdateSelectedCard: (card: Card) => void; + handleResetSelectedCard: () => void; } const CardDetails: React.FC = ({ - selectedCard, - handleUpdateSelectedCard, - handleResetSelectedCard, + selectedCard, + handleUpdateSelectedCard, + handleResetSelectedCard, }) => { - const toggleCheck = (index: number) => { - if (!selectedCard || !selectedCard.details.checklist) return; + const toggleCheck = (index: number) => { + if (!selectedCard || !selectedCard.details.checklist) return; - const newSelectedCard = { - ...selectedCard, - details: { - ...selectedCard.details, - checklist: selectedCard.details.checklist.map((item, idx) => - idx === index ? { ...item, checked: !item.checked } : item - ), - }, - }; + const newSelectedCard = { + ...selectedCard, + details: { + ...selectedCard.details, + checklist: selectedCard.details.checklist.map((item, idx) => + idx === index ? { ...item, checked: !item.checked } : item + ), + }, + }; - handleUpdateSelectedCard(newSelectedCard); - }; + handleUpdateSelectedCard(newSelectedCard); + }; - return ( -
-

{selectedCard.cardName}

-
    - {selectedCard.details.checklist?.map((item, index) => ( -
  • - toggleCheck(index)} - /> - -
  • - ))} -
-

Notes: {selectedCard.details.notes}

-

- Time Estimate: {selectedCard.details.timeEstimate} Minutes -

-

Column: {selectedCard.column}

- -
- ); + // Use custom hook to handle ESC key + useKeyPress("Escape", handleResetSelectedCard); + + return ( +
+

{selectedCard.cardName}

+
    + {selectedCard.details.checklist?.map((item, index) => ( +
  • + toggleCheck(index)} + /> + +
  • + ))} +
+

Notes: {selectedCard.details.notes}

+

+ Time Estimate: {selectedCard.details.timeEstimate} Minutes +

+

Column: {selectedCard.column}

+ +
+ ); }; export default CardDetails; diff --git a/client/src/hooks/useKeyPress.ts b/client/src/hooks/useKeyPress.ts new file mode 100644 index 0000000..8781791 --- /dev/null +++ b/client/src/hooks/useKeyPress.ts @@ -0,0 +1,20 @@ +// hooks/useKeyPress.ts +import { useEffect } from "react"; + +const useKeyPress = (targetKey: string, callback: () => void) => { + useEffect(() => { + const handleKeyDown = (event: KeyboardEvent) => { + if (event.key === targetKey) { + callback(); + } + }; + + document.addEventListener("keydown", handleKeyDown); + + return () => { + document.removeEventListener("keydown", handleKeyDown); + }; + }, [targetKey, callback]); +}; + +export default useKeyPress;