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,56 @@ export default function DeviceCardItem({
5355
5456 return (
5557 < Container >
56- < DeviceDetail isVisible = { isDetailVisible } onClose = { toggleDetailVisibility } setIsEditing = { setIsEditing } />
57- < CardContainer >
58+ < DeviceDetail
59+ isVisible = { isDetailVisible }
60+ onClose = { toggleDetailVisibility }
61+ setIsEditing = { setIsEditing }
62+ />
63+ < CardContainer
64+ onClick = { ( ) => {
65+ if ( ! isDeleteMode ) {
66+ navigate ( `/detail/${ id } ` ) ;
67+ }
68+ } }
69+ >
5870 { isDeleteMode ? (
59- < label onClick = { onSelect } >
71+ < label
72+ onClick = { ( e : React . MouseEvent < HTMLLabelElement > ) => {
73+ e . stopPropagation ( ) ;
74+ onSelect ( ) ;
75+ } }
76+ >
6077 < DeleteCheckbox isSelected = { isSelected } />
6178 </ label >
6279 ) : (
6380 warning && < WarningIcon src = { warningIcon } alt = "warning" />
6481 ) }
65- < DotImage onClick = { toggleDetailVisibility } className = "menu-trigger" > { isDeleteMode ? null : < img src = { dot } alt = "dot" /> } </ DotImage >
82+ < DotImage
83+ onClick = { ( e : React . MouseEvent < HTMLButtonElement > ) => {
84+ e . stopPropagation ( ) ;
85+ toggleDetailVisibility ( ) ;
86+ } }
87+ className = "menu-trigger"
88+ >
89+ { isDeleteMode ? null : < img src = { dot } alt = "dot" /> }
90+ </ DotImage >
6691 < DeviceContainer className = "device" >
6792 < DeviceImage >
6893 < img src = { device } alt = "device" />
6994 </ DeviceImage >
70- < p > { isEditing ? ( < EditNameInput ref = { inputRef } type = "text" defaultValue = { deviceName } onKeyDown = { enterHandle } onBlur = { ( ) => setIsEditing ( false ) } /> ) : ( deviceName ) } </ p >
95+ < p >
96+ { isEditing ? (
97+ < EditNameInput
98+ ref = { inputRef }
99+ type = "text"
100+ defaultValue = { deviceName }
101+ onKeyDown = { enterHandle }
102+ onBlur = { ( ) => setIsEditing ( false ) }
103+ />
104+ ) : (
105+ deviceName
106+ ) }
107+ </ p >
71108 </ DeviceContainer >
72109 < TemperatureContainer className = "temp" >
73110 < p > { temperature } °C</ p >
@@ -251,4 +288,4 @@ const EditNameInput = styled.input`
251288
252289 background: none;
253290 border: none;
254- ` ;
291+ ` ;
0 commit comments