1+ import React , { useState , useRef , useEffect } from "react" ;
12import styled from "@emotion/styled" ;
2- import { useState , useRef , useEffect } from "react" ;
33import dot from "../assets/dot.svg" ;
44import device from "../assets/device.svg" ;
55import warningIcon from "../assets/warning.svg" ;
66import DeviceDetail from "./DeviceDetail" ;
77import useDeviceDetail from "../hooks/useDeviceDetail" ;
8+ import { useNavigate } from "react-router-dom" ;
89
910interface DeviceCardProps {
1011 deviceName : string ;
@@ -25,8 +26,9 @@ export default function DeviceCardItem({
2526 isSelected,
2627 onSelect,
2728 id,
28- updateDeviceName
29+ updateDeviceName,
2930} : DeviceCardProps ) {
31+ const navigate = useNavigate ( ) ;
3032 const { isDetailVisible, toggleDetailVisibility } = useDeviceDetail ( ) ;
3133 const [ isEditing , setIsEditing ] = useState ( false ) ;
3234
@@ -42,7 +44,7 @@ export default function DeviceCardItem({
4244 if ( e . key === "Enter" ) {
4345 const newName = ( e . target as HTMLInputElement ) . value ;
4446 if ( newName . trim ( ) . length > 8 ) {
45- alert ( "별명은 최대 8자까지 가능합니다." )
47+ alert ( "별명은 최대 8자까지 가능합니다." ) ;
4648 return ;
4749 }
4850 updateDeviceName ( id , newName ) ;
@@ -53,21 +55,57 @@ export default function DeviceCardItem({
5355
5456 return (
5557 < Container >
56- < DeviceDetail isVisible = { isDetailVisible } onClose = { toggleDetailVisibility } setIsEditing = { setIsEditing } id = { id } />
57- < CardContainer className = "Cardcontainer" >
58+ < DeviceDetail
59+ isVisible = { isDetailVisible }
60+ onClose = { toggleDetailVisibility }
61+ setIsEditing = { setIsEditing }
62+ id = { id }
63+ />
64+ < CardContainer className = "Cardcontainer"
65+ onClick = { ( ) => {
66+ if ( ! isDeleteMode ) {
67+ navigate ( `/detail/${ id } ` ) ;
68+ }
69+ } }
70+ >
5871 { isDeleteMode ? (
59- < label onClick = { onSelect } >
72+ < label
73+ onClick = { ( e : React . MouseEvent < HTMLLabelElement > ) => {
74+ e . stopPropagation ( ) ;
75+ onSelect ( ) ;
76+ } }
77+ >
6078 < DeleteCheckbox isSelected = { isSelected } />
6179 </ label >
6280 ) : (
6381 warning && < WarningIcon src = { warningIcon } alt = "warning" />
6482 ) }
65- < DotImage onClick = { toggleDetailVisibility } className = "menu-trigger" > { isDeleteMode ? null : < img src = { dot } alt = "dot" /> } </ DotImage >
83+ < DotImage
84+ onClick = { ( e : React . MouseEvent < HTMLButtonElement > ) => {
85+ e . stopPropagation ( ) ;
86+ toggleDetailVisibility ( ) ;
87+ } }
88+ className = "menu-trigger"
89+ >
90+ { isDeleteMode ? null : < img src = { dot } alt = "dot" /> }
91+ </ DotImage >
6692 < DeviceContainer className = "device" >
6793 < DeviceImage >
6894 < img src = { device } alt = "device" />
6995 </ DeviceImage >
70- < p > { isEditing ? ( < EditNameInput ref = { inputRef } type = "text" defaultValue = { deviceName } onKeyDown = { enterHandle } onBlur = { ( ) => setIsEditing ( false ) } /> ) : ( deviceName ) } </ p >
96+ < p >
97+ { isEditing ? (
98+ < EditNameInput
99+ ref = { inputRef }
100+ type = "text"
101+ defaultValue = { deviceName }
102+ onKeyDown = { enterHandle }
103+ onBlur = { ( ) => setIsEditing ( false ) }
104+ />
105+ ) : (
106+ deviceName
107+ ) }
108+ </ p >
71109 </ DeviceContainer >
72110 < TemperatureContainer className = "temp" >
73111 < p > { temperature } °C</ p >
@@ -251,4 +289,4 @@ const EditNameInput = styled.input`
251289
252290 background: none;
253291 border: none;
254- ` ;
292+ ` ;
0 commit comments