{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\components\\\\SensorList.js\",\n  _s = $RefreshSig$();\nimport React, { useState, useEffect } from \"react\";\nimport axios from \"axios\";\n\n// 간단한 모달 팝업 컴포넌트\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction Modal({\n  message,\n  onClose\n}) {\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      position: \"fixed\",\n      top: 0,\n      left: 0,\n      width: \"100vw\",\n      height: \"100vh\",\n      background: \"rgba(0,0,0,0.5)\",\n      display: \"flex\",\n      alignItems: \"center\",\n      justifyContent: \"center\",\n      zIndex: 9999\n    },\n    children: /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        background: \"#fff\",\n        padding: 32,\n        borderRadius: 8,\n        minWidth: 220\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n        children: \"\\uC54C\\uB9BC\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 13,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          margin: \"20px 0\"\n        },\n        children: message\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 14,\n        columnNumber: 17\n      }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n        onClick: onClose,\n        style: {\n          marginTop: 12\n        },\n        children: \"\\uD655\\uC778\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 15,\n        columnNumber: 17\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 12,\n      columnNumber: 13\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 7,\n    columnNumber: 9\n  }, this);\n}\n_c = Modal;\nfunction SensorList() {\n  _s();\n  const [sensors, setSensors] = useState([]);\n  const [error, setError] = useState(null); // ✅ 에러 상태 선언\n\n  useEffect(() => {\n    axios.get(\"http://localhost:4000/api/sensors\").then(res => setSensors(res.data.slice(1))) // 첫번째는 Featured로 빼기\n    .catch(() => setError(\"서버 연결에 실패했습니다. 관리자에게 문의하세요.\"));\n  }, []);\n  return /*#__PURE__*/_jsxDEV(\"section\", {\n    className: \"posts\",\n    children: [error && /*#__PURE__*/_jsxDEV(Modal, {\n      message: error,\n      onClose: () => setError(null)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 33,\n      columnNumber: 23\n    }, this), sensors.map(sensor => /*#__PURE__*/_jsxDEV(\"article\", {\n      children: [/*#__PURE__*/_jsxDEV(\"header\", {\n        children: [/*#__PURE__*/_jsxDEV(\"span\", {\n          className: \"date\",\n          children: sensor.type\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 37,\n          columnNumber: 25\n        }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n          children: sensor.name\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 38,\n          columnNumber: 25\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 36,\n        columnNumber: 21\n      }, this), /*#__PURE__*/_jsxDEV(\"a\", {\n        className: \"image fit\",\n        tabIndex: -1,\n        children: /*#__PURE__*/_jsxDEV(\"img\", {\n          src: sensor.image,\n          alt: sensor.name\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 41,\n          columnNumber: 25\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 40,\n        columnNumber: 21\n      }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n        children: [sensor.value, \" / \", sensor.location]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 43,\n        columnNumber: 21\n      }, this), /*#__PURE__*/_jsxDEV(\"ul\", {\n        className: \"actions special\",\n        children: /*#__PURE__*/_jsxDEV(\"li\", {\n          children: /*#__PURE__*/_jsxDEV(\"button\", {\n            type: \"button\",\n            className: \"button\",\n            children: \"\\uC0C1\\uC138 \\uBCF4\\uAE30\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 46,\n            columnNumber: 29\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 45,\n          columnNumber: 25\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 44,\n        columnNumber: 21\n      }, this)]\n    }, sensor.id, true, {\n      fileName: _jsxFileName,\n      lineNumber: 35,\n      columnNumber: 17\n    }, this))]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 32,\n    columnNumber: 9\n  }, this);\n}\n_s(SensorList, \"oyXoW/hasupiSN0GpBLfTwOBfmU=\");\n_c2 = SensorList;\nexport default SensorList;\nvar _c, _c2;\n$RefreshReg$(_c, \"Modal\");\n$RefreshReg$(_c2, \"SensorList\");","map":{"version":3,"names":["React","useState","useEffect","axios","jsxDEV","_jsxDEV","Modal","message","onClose","style","position","top","left","width","height","background","display","alignItems","justifyContent","zIndex","children","padding","borderRadius","minWidth","fileName","_jsxFileName","lineNumber","columnNumber","margin","onClick","marginTop","_c","SensorList","_s","sensors","setSensors","error","setError","get","then","res","data","slice","catch","className","map","sensor","type","name","tabIndex","src","image","alt","value","location","id","_c2","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/components/SensorList.js"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\r\nimport axios from \"axios\";\r\n\r\n// 간단한 모달 팝업 컴포넌트\r\nfunction Modal({ message, onClose }) {\r\n    return (\r\n        <div style={{\r\n            position: \"fixed\", top: 0, left: 0, width: \"100vw\", height: \"100vh\",\r\n            background: \"rgba(0,0,0,0.5)\", display: \"flex\", alignItems: \"center\", justifyContent: \"center\",\r\n            zIndex: 9999\r\n        }}>\r\n            <div style={{ background: \"#fff\", padding: 32, borderRadius: 8, minWidth: 220 }}>\r\n                <h3>알림</h3>\r\n                <div style={{ margin: \"20px 0\" }}>{message}</div>\r\n                <button onClick={onClose} style={{ marginTop: 12 }}>확인</button>\r\n            </div>\r\n        </div>\r\n    );\r\n}\r\n\r\nfunction SensorList() {\r\n    const [sensors, setSensors] = useState([]);\r\n    const [error, setError] = useState(null);  // ✅ 에러 상태 선언\r\n\r\n    useEffect(() => {\r\n        axios.get(\"http://localhost:4000/api/sensors\")\r\n            .then(res => setSensors(res.data.slice(1))) // 첫번째는 Featured로 빼기\r\n            .catch(() => setError(\"서버 연결에 실패했습니다. 관리자에게 문의하세요.\"));\r\n    }, []);\r\n\r\n    return (\r\n        <section className=\"posts\">\r\n            {error && <Modal message={error} onClose={() => setError(null)} />}\r\n            {sensors.map(sensor => (\r\n                <article key={sensor.id}>\r\n                    <header>\r\n                        <span className=\"date\">{sensor.type}</span>\r\n                        <h2>{sensor.name}</h2>\r\n                    </header>\r\n                    <a className=\"image fit\" tabIndex={-1}>\r\n                        <img src={sensor.image} alt={sensor.name} />\r\n                    </a>\r\n                    <p>{sensor.value} / {sensor.location}</p>\r\n                    <ul className=\"actions special\">\r\n                        <li>\r\n                            <button type=\"button\" className=\"button\">상세 보기</button>\r\n                        </li>\r\n                    </ul>\r\n                </article>\r\n            ))}\r\n        </section>\r\n    );\r\n}\r\n\r\nexport default SensorList;"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}