@@ -2,20 +2,34 @@ import { useState, useMemo, useEffect } from "react";
22import type { Device } from "../types/device" ;
33import useDeviceStomp from "./useDeviceStomp" ;
44
5- export default function useDeviceData ( ) {
5+ export default function useDeviceData ( sessionId ?: string ) {
66 const severUrl = import . meta. env . VITE_API_BASE_URL ;
7- const { isConnected, deviceData, subscribeDevice, unsubscribeDevice } = useDeviceStomp ( `${ severUrl } /ws-stomp` ) ;
7+ const { isConnected, deviceData, subscribeDevice, unsubscribeDevice } =
8+ useDeviceStomp ( `${ severUrl } /ws-stomp` ) ;
9+
10+ const effectiveSessionId = sessionId ?? "default" ;
11+ const deviceIdsStorageKey = `deviceIds_${ effectiveSessionId } ` ;
12+ const deviceNamesStorageKey = `deviceNames_${ effectiveSessionId } ` ;
813
914 const [ devices , setDevices ] = useState < Device [ ] > ( ( ) => {
10- return JSON . parse ( localStorage . getItem ( "devices" ) || "[]" ) ;
15+ const storedIds : string [ ] = JSON . parse (
16+ localStorage . getItem ( deviceIdsStorageKey ) || "[]" ,
17+ ) ;
18+ const savedNames : Record < string , string > = JSON . parse (
19+ localStorage . getItem ( deviceNamesStorageKey ) || "{}" ,
20+ ) ;
21+
22+ return storedIds . map ( ( id , index ) => ( {
23+ id,
24+ name : savedNames [ id ] || `기기 ${ index + 1 } ` ,
25+ temperature : 0 ,
26+ warning : false ,
27+ hasShownWarning : false ,
28+ } ) ) ;
1129 } ) ;
12-
13- useEffect ( ( ) => {
14- localStorage . setItem ( "devices" , JSON . stringify ( devices ) ) ;
15- } , [ devices ] ) ;
1630
1731 useEffect ( ( ) => {
18- if ( ! isConnected ) return ;
32+ if ( ! isConnected ) return ;
1933 devices . forEach ( ( device ) => {
2034 subscribeDevice ( device . id ) ;
2135 console . log ( `소켓 구독 ${ device . id } ` ) ;
@@ -24,7 +38,10 @@ export default function useDeviceData() {
2438
2539 const liveDevices = useMemo ( ( ) => {
2640 return devices . map ( ( device ) => {
27- const data = deviceData [ device . id ] as { temperature : number ; risk : number } ;
41+ const data = deviceData [ device . id ] as {
42+ temperature : number ;
43+ risk : number ;
44+ } ;
2845 const currentTemp = data ? data . temperature : 0 ;
2946
3047 return {
@@ -38,43 +55,65 @@ export default function useDeviceData() {
3855
3956 const warningDevice = liveDevices . find ( ( device ) => device . warning ) ;
4057
41- const addDevice = ( id : string ) => {
42- const savedNames = JSON . parse ( localStorage . getItem ( "deviceNames" ) || "{}" ) ;
58+ const addDevice = ( id : string ) => {
59+ const savedNames : Record < string , string > = JSON . parse (
60+ localStorage . getItem ( deviceNamesStorageKey ) || "{}" ,
61+ ) ;
4362
4463 setDevices ( ( prev ) => {
4564 if ( prev . some ( ( device ) => device . id === id ) ) {
4665 return prev ;
4766 }
4867
49- const deviceName = savedNames [ id ] || `기기 ${ devices . length + 1 } ` ;
68+ const deviceName = savedNames [ id ] || `기기 ${ prev . length + 1 } ` ;
5069
51- const newDevice : Device = {
52- id : id ,
53- name : deviceName ,
54- temperature : 0 ,
55- warning : false ,
56- hasShownWarning : false ,
57- } ;
70+ const newDevice : Device = {
71+ id : id ,
72+ name : deviceName ,
73+ temperature : 0 ,
74+ warning : false ,
75+ hasShownWarning : false ,
76+ } ;
77+
78+ const newDevices = [ ...prev , newDevice ] ;
79+ const newIds = newDevices . map ( ( device ) => device . id ) ;
80+ localStorage . setItem ( deviceIdsStorageKey , JSON . stringify ( newIds ) ) ;
5881
59- return [ ... prev , newDevice ] ;
82+ return newDevices ;
6083 } ) ;
6184 } ;
6285
6386 const deleteDevice = ( id : string ) => {
64- setDevices ( ( prev ) => prev . filter ( ( device ) => device . id !== id ) ) ;
87+ setDevices ( ( prev ) => {
88+ const filtered = prev . filter ( ( device ) => device . id !== id ) ;
89+ const ids = filtered . map ( ( device ) => device . id ) ;
90+ localStorage . setItem ( deviceIdsStorageKey , JSON . stringify ( ids ) ) ;
91+ return filtered ;
92+ } ) ;
6593 unsubscribeDevice ( id ) ;
6694 console . log ( `소켓 구독 해제 ${ id } ` ) ;
6795 } ;
6896
6997 const checkWarning = ( id : string ) => {
70- setDevices ( ( prev ) => prev . map ( ( device ) => ( device . id === id ? { ...device , hasShownWarning : true } : device ) ) ) ;
98+ setDevices ( ( prev ) =>
99+ prev . map ( ( device ) =>
100+ device . id === id ? { ...device , hasShownWarning : true } : device ,
101+ ) ,
102+ ) ;
71103 } ;
72104
73105 const updateDeviceName = ( id : string , newName : string ) => {
74- setDevices ( ( prev ) => prev . map ( ( device ) => ( device . id === id ? { ...device , name : newName } : device ) ) ) ;
106+ setDevices ( ( prev ) =>
107+ prev . map ( ( device ) =>
108+ device . id === id ? { ...device , name : newName } : device ,
109+ ) ,
110+ ) ;
75111 localStorage . setItem (
76- "deviceNames" ,
77- JSON . stringify ( { ...JSON . parse ( localStorage . getItem ( "deviceNames" ) || "{}" ) , [ id ] : newName } ) ,
112+ deviceNamesStorageKey ,
113+ JSON . stringify ( {
114+ ...JSON . parse ( localStorage . getItem ( deviceNamesStorageKey ) || "{}" ) ,
115+ [ id ] : newName ,
116+ } ) ,
78117 ) ;
79118 } ;
80119
0 commit comments