{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\App.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from \"react\";\nimport { BrowserRouter as Router, Routes, Route, Navigate } from \"react-router-dom\";\nimport { AuthProvider, AuthContext } from \"./contexts/AuthContext\";\nimport Header from \"./components/Header\";\nimport Footer from \"./components/Footer\";\nimport Tabs from \"./components/Tabs\";\nimport Modal from \"./components/Modal\";\nimport Login from \"./pages/Login\";\nimport Register from \"./pages/Register\";\nimport SensorList from \"./pages/SensorList\";\nimport Admin from \"./pages/Admin\";\n\n// Modal 상태를 전역적으로 관리\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction App() {\n  _s();\n  const [modal, setModal] = useState(null);\n\n  // Tabs에서 팝업을 띄우도록 props로 넘겨줄 수도 있음\n  // 또는 Context 사용하여 더 글로벌하게 관리 가능\n  const handleOpenLogin = () => setModal(\"login\");\n  const handleOpenRegister = () => setModal(\"register\");\n  const handleCloseModal = () => setModal(null);\n  return /*#__PURE__*/_jsxDEV(AuthProvider, {\n    children: /*#__PURE__*/_jsxDEV(Router, {\n      children: /*#__PURE__*/_jsxDEV(\"div\", {\n        id: \"wrapper\",\n        children: [/*#__PURE__*/_jsxDEV(Header, {}, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 27,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Tabs, {\n          onOpenLogin: handleOpenLogin,\n          onOpenRegister: handleOpenRegister\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 30,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(\"main\", {\n          id: \"main\",\n          children: /*#__PURE__*/_jsxDEV(Routes, {\n            children: [/*#__PURE__*/_jsxDEV(Route, {\n              path: \"/sensor\",\n              element: /*#__PURE__*/_jsxDEV(SensorList, {}, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 34,\n                columnNumber: 46\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 34,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Route, {\n              path: \"/admin\",\n              element: /*#__PURE__*/_jsxDEV(AuthContext.Consumer, {\n                children: ({\n                  user\n                }) => user && user.role === \"admin\" ? /*#__PURE__*/_jsxDEV(Admin, {}, void 0, false, {\n                  fileName: _jsxFileName,\n                  lineNumber: 41,\n                  columnNumber: 25\n                }, this) : /*#__PURE__*/_jsxDEV(Navigate, {\n                  to: \"/sensor\",\n                  replace: true\n                }, void 0, false, {\n                  fileName: _jsxFileName,\n                  lineNumber: 43,\n                  columnNumber: 25\n                }, this)\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 38,\n                columnNumber: 19\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 35,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Route, {\n              path: \"/\",\n              element: /*#__PURE__*/_jsxDEV(Navigate, {\n                to: \"/sensor\",\n                replace: true\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 49,\n                columnNumber: 40\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 49,\n              columnNumber: 15\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 33,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 32,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Footer, {}, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 53,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Modal, {\n          open: modal === \"login\",\n          onClose: handleCloseModal,\n          children: /*#__PURE__*/_jsxDEV(Login, {\n            onClose: handleCloseModal\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 57,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 56,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Modal, {\n          open: modal === \"register\",\n          onClose: handleCloseModal,\n          children: /*#__PURE__*/_jsxDEV(Register, {\n            onClose: handleCloseModal\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 60,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 59,\n          columnNumber: 11\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 26,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 25,\n      columnNumber: 7\n    }, this)\n  }, void 0, false, {\n    fileName: _jsxFileName,\n    lineNumber: 24,\n    columnNumber: 5\n  }, this);\n}\n_s(App, \"+2xwMS3J0RcBA0qWw62dnTGSPTE=\");\n_c = App;\nexport default App;\nvar _c;\n$RefreshReg$(_c, \"App\");","map":{"version":3,"names":["React","useState","BrowserRouter","Router","Routes","Route","Navigate","AuthProvider","AuthContext","Header","Footer","Tabs","Modal","Login","Register","SensorList","Admin","jsxDEV","_jsxDEV","App","_s","modal","setModal","handleOpenLogin","handleOpenRegister","handleCloseModal","children","id","fileName","_jsxFileName","lineNumber","columnNumber","onOpenLogin","onOpenRegister","path","element","Consumer","user","role","to","replace","open","onClose","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/App.js"],"sourcesContent":["import React, { useState } from \"react\";\r\nimport { BrowserRouter as Router, Routes, Route, Navigate } from \"react-router-dom\";\r\nimport { AuthProvider, AuthContext } from \"./contexts/AuthContext\";\r\nimport Header from \"./components/Header\";\r\nimport Footer from \"./components/Footer\";\r\nimport Tabs from \"./components/Tabs\";\r\nimport Modal from \"./components/Modal\";\r\nimport Login from \"./pages/Login\";\r\nimport Register from \"./pages/Register\";\r\nimport SensorList from \"./pages/SensorList\";\r\nimport Admin from \"./pages/Admin\";\r\n\r\n// Modal 상태를 전역적으로 관리\r\nfunction App() {\r\n  const [modal, setModal] = useState(null);\r\n\r\n  // Tabs에서 팝업을 띄우도록 props로 넘겨줄 수도 있음\r\n  // 또는 Context 사용하여 더 글로벌하게 관리 가능\r\n  const handleOpenLogin = () => setModal(\"login\");\r\n  const handleOpenRegister = () => setModal(\"register\");\r\n  const handleCloseModal = () => setModal(null);\r\n\r\n  return (\r\n    <AuthProvider>\r\n      <Router>\r\n        <div id=\"wrapper\">\r\n          <Header />\r\n\r\n          {/* Tabs에서 로그인/회원가입 모달 열기 함수 props로 전달 */}\r\n          <Tabs onOpenLogin={handleOpenLogin} onOpenRegister={handleOpenRegister} />\r\n\r\n          <main id=\"main\">\r\n            <Routes>\r\n              <Route path=\"/sensor\" element={<SensorList />} />\r\n              <Route\r\n                path=\"/admin\"\r\n                element={\r\n                  <AuthContext.Consumer>\r\n                    {({ user }) =>\r\n                      user && user.role === \"admin\" ? (\r\n                        <Admin />\r\n                      ) : (\r\n                        <Navigate to=\"/sensor\" replace />\r\n                      )\r\n                    }\r\n                  </AuthContext.Consumer>\r\n                }\r\n              />\r\n              <Route path=\"/\" element={<Navigate to=\"/sensor\" replace />} />\r\n            </Routes>\r\n          </main>\r\n\r\n          <Footer />\r\n\r\n          {/* 팝업 모달 */}\r\n          <Modal open={modal === \"login\"} onClose={handleCloseModal}>\r\n            <Login onClose={handleCloseModal} />\r\n          </Modal>\r\n          <Modal open={modal === \"register\"} onClose={handleCloseModal}>\r\n            <Register onClose={handleCloseModal} />\r\n          </Modal>\r\n        </div>\r\n      </Router>\r\n    </AuthProvider>\r\n  );\r\n}\r\n\r\nexport default App;\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}