{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\App.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from 'react';\nimport Layout from './components/Layout';\nimport Login from './pages/Login';\nimport Register from './pages/Register';\nimport Admin from './pages/Admin';\nimport Sensors from './pages/Sensors';\nimport Modal from './components/Modal';\nimport { getToken, getRole } from './utils/auth';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction App() {\n  _s();\n  // 상태 초기화\n  const [loggedIn, setLoggedIn] = useState(!!getToken());\n  const [loginOpen, setLoginOpen] = useState(!getToken());\n  const [registerOpen, setRegisterOpen] = useState(false);\n  const [sensorAddOpen, setSensorAddOpen] = useState(false);\n\n  // 핸들러\n  const handleLogin = () => {\n    setLoggedIn(true);\n    setLoginOpen(false);\n  };\n  const handleLogout = () => {\n    setLoggedIn(false);\n    setLoginOpen(true);\n  };\n\n  // 라우팅 처리\n  const pathname = window.location.pathname;\n\n  // 메인 컨텐츠\n  let content = null;\n  if (!loggedIn) {\n    content = /*#__PURE__*/_jsxDEV(\"section\", {\n      style: {\n        textAlign: 'center',\n        marginTop: 60\n      },\n      children: /*#__PURE__*/_jsxDEV(\"button\", {\n        onClick: () => setLoginOpen(true),\n        className: \"button primary\",\n        style: {\n          fontSize: 18,\n          padding: \"0.8em 2.3em\"\n        },\n        children: \"\\uB85C\\uADF8\\uC778\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 35,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 34,\n      columnNumber: 7\n    }, this);\n  } else if (pathname === '/sensors') {\n    content = /*#__PURE__*/_jsxDEV(Sensors, {}, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 43,\n      columnNumber: 15\n    }, this);\n  } else if (pathname === '/admin' && getRole() === 'admin') {\n    content = /*#__PURE__*/_jsxDEV(Admin, {\n      onAddSensor: () => setSensorAddOpen(true)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 45,\n      columnNumber: 15\n    }, this);\n  } else {\n    // 기본 홈화면\n    content = /*#__PURE__*/_jsxDEV(\"section\", {\n      className: \"posts\",\n      style: {\n        minHeight: '30vh'\n      },\n      children: /*#__PURE__*/_jsxDEV(\"article\", {\n        style: {\n          background: \"#fff\",\n          borderRadius: \"1.1em\",\n          boxShadow: \"0 2px 12px rgba(60,80,120,0.07)\",\n          padding: \"2.5em 1.7em\",\n          marginBottom: \"2em\"\n        },\n        children: [/*#__PURE__*/_jsxDEV(\"header\", {\n          className: \"major\",\n          children: [/*#__PURE__*/_jsxDEV(\"span\", {\n            className: \"icon solid fa-home\",\n            style: {\n              color: \"#4361ee\",\n              fontSize: 28,\n              marginRight: 8\n            }\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 58,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n            style: {\n              display: \"inline-block\",\n              fontWeight: 700,\n              fontSize: \"1.3em\",\n              margin: 0\n            },\n            children: \"\\uD648\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 59,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 57,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n          children: \"Massively \\uAE30\\uBC18 IoT \\uAD00\\uB9AC\\uC790 \\uB370\\uBAA8 \\uBA54\\uC778 \\uD654\\uBA74\\uC785\\uB2C8\\uB2E4.\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 63,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 50,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 49,\n      columnNumber: 7\n    }, this);\n  }\n  return /*#__PURE__*/_jsxDEV(Layout, {\n    children: [/*#__PURE__*/_jsxDEV(Modal, {\n      open: loginOpen,\n      onClose: () => setLoginOpen(false),\n      title: \"\\uB85C\\uADF8\\uC778\",\n      children: [/*#__PURE__*/_jsxDEV(Login, {\n        onLogin: handleLogin\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 73,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        style: {\n          marginTop: 24,\n          textAlign: 'center'\n        },\n        children: /*#__PURE__*/_jsxDEV(\"button\", {\n          className: \"button small\",\n          style: {\n            marginRight: 12\n          },\n          onClick: () => {\n            setLoginOpen(false);\n            setRegisterOpen(true);\n          },\n          children: \"\\uD68C\\uC6D0\\uAC00\\uC785\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 75,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 74,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 72,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Modal, {\n      open: registerOpen,\n      onClose: () => setRegisterOpen(false),\n      title: \"\\uD68C\\uC6D0\\uAC00\\uC785\",\n      children: /*#__PURE__*/_jsxDEV(Register, {\n        onSuccess: () => {\n          setRegisterOpen(false);\n          setLoginOpen(true);\n        },\n        onClose: () => setRegisterOpen(false)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 85,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 84,\n      columnNumber: 7\n    }, this), content]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 70,\n    columnNumber: 5\n  }, this);\n}\n_s(App, \"Y6U00QHMKdd9s1oM04puU76P+Gg=\");\n_c = App;\nexport default App;\nvar _c;\n$RefreshReg$(_c, \"App\");","map":{"version":3,"names":["React","useState","Layout","Login","Register","Admin","Sensors","Modal","getToken","getRole","jsxDEV","_jsxDEV","App","_s","loggedIn","setLoggedIn","loginOpen","setLoginOpen","registerOpen","setRegisterOpen","sensorAddOpen","setSensorAddOpen","handleLogin","handleLogout","pathname","window","location","content","style","textAlign","marginTop","children","onClick","className","fontSize","padding","fileName","_jsxFileName","lineNumber","columnNumber","onAddSensor","minHeight","background","borderRadius","boxShadow","marginBottom","color","marginRight","display","fontWeight","margin","open","onClose","title","onLogin","onSuccess","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/App.js"],"sourcesContent":["import React, { useState } from 'react';\r\nimport Layout from './components/Layout';\r\nimport Login from './pages/Login';\r\nimport Register from './pages/Register';\r\nimport Admin from './pages/Admin';\r\nimport Sensors from './pages/Sensors';\r\nimport Modal from './components/Modal';\r\nimport { getToken, getRole } from './utils/auth';\r\n\r\nfunction App() {\r\n  // 상태 초기화\r\n  const [loggedIn, setLoggedIn] = useState(!!getToken());\r\n  const [loginOpen, setLoginOpen] = useState(!getToken());\r\n  const [registerOpen, setRegisterOpen] = useState(false);\r\n  const [sensorAddOpen, setSensorAddOpen] = useState(false);\r\n\r\n  // 핸들러\r\n  const handleLogin = () => {\r\n    setLoggedIn(true);\r\n    setLoginOpen(false);\r\n  };\r\n  const handleLogout = () => {\r\n    setLoggedIn(false);\r\n    setLoginOpen(true);\r\n  };\r\n\r\n  // 라우팅 처리\r\n  const pathname = window.location.pathname;\r\n\r\n  // 메인 컨텐츠\r\n  let content = null;\r\n  if (!loggedIn) {\r\n    content = (\r\n      <section style={{ textAlign: 'center', marginTop: 60 }}>\r\n        <button\r\n          onClick={() => setLoginOpen(true)}\r\n          className=\"button primary\"\r\n          style={{ fontSize: 18, padding: \"0.8em 2.3em\" }}\r\n        >로그인</button>\r\n      </section>\r\n    );\r\n  } else if (pathname === '/sensors') {\r\n    content = <Sensors />;\r\n  } else if (pathname === '/admin' && getRole() === 'admin') {\r\n    content = <Admin onAddSensor={() => setSensorAddOpen(true)} />;\r\n  } else {\r\n    // 기본 홈화면\r\n    content = (\r\n      <section className=\"posts\" style={{ minHeight: '30vh' }}>\r\n        <article style={{\r\n          background: \"#fff\",\r\n          borderRadius: \"1.1em\",\r\n          boxShadow: \"0 2px 12px rgba(60,80,120,0.07)\",\r\n          padding: \"2.5em 1.7em\",\r\n          marginBottom: \"2em\"\r\n        }}>\r\n          <header className=\"major\">\r\n            <span className=\"icon solid fa-home\" style={{ color: \"#4361ee\", fontSize: 28, marginRight: 8 }}></span>\r\n            <h2 style={{\r\n              display: \"inline-block\", fontWeight: 700, fontSize: \"1.3em\", margin: 0\r\n            }}>홈</h2>\r\n          </header>\r\n          <p>Massively 기반 IoT 관리자 데모 메인 화면입니다.</p>\r\n        </article>\r\n      </section>\r\n    );\r\n  }\r\n\r\n  return (\r\n    <Layout>\r\n      {/* 로그인 모달 */}\r\n      <Modal open={loginOpen} onClose={() => setLoginOpen(false)} title=\"로그인\">\r\n        <Login onLogin={handleLogin} />\r\n        <div style={{ marginTop: 24, textAlign: 'center' }}>\r\n          <button\r\n            className=\"button small\"\r\n            style={{ marginRight: 12 }}\r\n            onClick={() => { setLoginOpen(false); setRegisterOpen(true); }}\r\n          >회원가입</button>\r\n        </div>\r\n      </Modal>\r\n\r\n      {/* 회원가입 모달 */}\r\n      <Modal open={registerOpen} onClose={() => setRegisterOpen(false)} title=\"회원가입\">\r\n        <Register\r\n          onSuccess={() => { setRegisterOpen(false); setLoginOpen(true); }}\r\n          onClose={() => setRegisterOpen(false)}\r\n        />\r\n      </Modal>\r\n\r\n      {/* (예시) 센서 추가 모달 */}\r\n      {/* \r\n      <Modal open={sensorAddOpen} onClose={() => setSensorAddOpen(false)} title=\"센서 추가\">\r\n        <Admin onSuccess={() => setSensorAddOpen(false)} />\r\n      </Modal>\r\n      */}\r\n\r\n      {/* 실제 main 컨텐츠 */}\r\n      {content}\r\n    </Layout>\r\n  );\r\n}\r\n\r\nexport default App;\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}