{"ast":null,"code":"var _jsxFileName = \"D:\\\\LDT\\\\000 Project\\\\LDT\\\\Client\\\\src\\\\pages\\\\Statistics.js\",\n  _s = $RefreshSig$();\nimport React, { useState } from \"react\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nexport default function FCMTest({\n  user\n}) {\n  _s();\n  const [fcmToken, setFcmToken] = useState(\"\");\n  const [message, setMessage] = useState(\"\");\n  const [result, setResult] = useState(\"\");\n  const [loading, setLoading] = useState(false);\n  const handleSend = async () => {\n    if (!user || !user.token) {\n      setResult(\"로그인 후 시도하세요.\");\n      return;\n    }\n    if (!fcmToken) {\n      setResult(\"FCM 토큰을 입력하세요.\");\n      return;\n    }\n    setLoading(true);\n    setResult(\"\");\n    try {\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          \"Authorization\": `Bearer ${user.token}`\n        },\n        body: JSON.stringify({\n          token: fcmToken,\n          title: \"테스트 알림\",\n          body: message || \"테스트 메시지입니다.\"\n        })\n      });\n      const data = await res.json();\n      if (data.success) setResult(\"성공: \" + data.response);else setResult(\"실패: \" + (data.error || \"\"));\n    } catch (e) {\n      setResult(\"네트워크 에러: \" + e.toString());\n    }\n    setLoading(false);\n  };\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    style: {\n      margin: 20,\n      padding: 16,\n      border: \"1px solid #eee\",\n      borderRadius: 10,\n      maxWidth: 500\n    },\n    children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n      children: \"FCM \\uD14C\\uC2A4\\uD2B8\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 50,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      children: /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: fcmToken,\n        onChange: e => setFcmToken(e.target.value),\n        placeholder: \"FCM \\uD1A0\\uD070 \\uC785\\uB825\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 52,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 51,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      children: /*#__PURE__*/_jsxDEV(\"input\", {\n        style: {\n          width: \"100%\",\n          marginBottom: 8\n        },\n        type: \"text\",\n        value: message,\n        onChange: e => setMessage(e.target.value),\n        placeholder: \"\\uBA54\\uC2DC\\uC9C0 \\uB0B4\\uC6A9 \\uC785\\uB825 (\\uC0DD\\uB7B5 \\uAC00\\uB2A5)\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 61,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 60,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n      onClick: handleSend,\n      disabled: loading,\n      children: loading ? \"전송 중...\" : \"FCM 보내기\"\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 69,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        marginTop: 10,\n        color: result.startsWith(\"성공\") ? \"#0b8\" : \"crimson\"\n      },\n      children: result\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 72,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 43,\n    columnNumber: 5\n  }, this);\n}\n_s(FCMTest, \"RUm6Wzsn4eFEZgqwjo9oet2GqNg=\");\n_c = FCMTest;\nvar _c;\n$RefreshReg$(_c, \"FCMTest\");","map":{"version":3,"names":["React","useState","jsxDEV","_jsxDEV","FCMTest","user","_s","fcmToken","setFcmToken","message","setMessage","result","setResult","loading","setLoading","handleSend","token","res","fetch","method","headers","body","JSON","stringify","title","data","json","success","response","error","e","toString","style","margin","padding","border","borderRadius","maxWidth","children","fileName","_jsxFileName","lineNumber","columnNumber","width","marginBottom","type","value","onChange","target","placeholder","onClick","disabled","marginTop","color","startsWith","_c","$RefreshReg$"],"sources":["D:/LDT/000 Project/LDT/Client/src/pages/Statistics.js"],"sourcesContent":["import React, { useState } from \"react\";\r\n\r\nexport default function FCMTest({ user }) {\r\n  const [fcmToken, setFcmToken] = useState(\"\");\r\n  const [message, setMessage] = useState(\"\");\r\n  const [result, setResult] = useState(\"\");\r\n  const [loading, setLoading] = useState(false);\r\n\r\n  const handleSend = async () => {\r\n    if (!user || !user.token) {\r\n      setResult(\"로그인 후 시도하세요.\");\r\n      return;\r\n    }\r\n    if (!fcmToken) {\r\n      setResult(\"FCM 토큰을 입력하세요.\");\r\n      return;\r\n    }\r\n    setLoading(true);\r\n    setResult(\"\");\r\n    try {\r\n      const res = await fetch(\"http://192.168.1.93:4000/api/fcm/send\", {\r\n        method: \"POST\",\r\n        headers: {\r\n          \"Content-Type\": \"application/json\",\r\n          \"Authorization\": `Bearer ${user.token}`,\r\n        },\r\n        body: JSON.stringify({\r\n          token: fcmToken,\r\n          title: \"테스트 알림\",\r\n          body: message || \"테스트 메시지입니다.\",\r\n        }),\r\n      });\r\n      const data = await res.json();\r\n      if (data.success) setResult(\"성공: \" + data.response);\r\n      else setResult(\"실패: \" + (data.error || \"\"));\r\n    } catch (e) {\r\n      setResult(\"네트워크 에러: \" + e.toString());\r\n    }\r\n    setLoading(false);\r\n  };\r\n\r\n  return (\r\n    <div style={{\r\n      margin: 20,\r\n      padding: 16,\r\n      border: \"1px solid #eee\",\r\n      borderRadius: 10,\r\n      maxWidth: 500\r\n    }}>\r\n      <h3>FCM 테스트</h3>\r\n      <div>\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={fcmToken}\r\n          onChange={e => setFcmToken(e.target.value)}\r\n          placeholder=\"FCM 토큰 입력\"\r\n        />\r\n      </div>\r\n      <div>\r\n        <input\r\n          style={{ width: \"100%\", marginBottom: 8 }}\r\n          type=\"text\"\r\n          value={message}\r\n          onChange={e => setMessage(e.target.value)}\r\n          placeholder=\"메시지 내용 입력 (생략 가능)\"\r\n        />\r\n      </div>\r\n      <button onClick={handleSend} disabled={loading}>\r\n        {loading ? \"전송 중...\" : \"FCM 보내기\"}\r\n      </button>\r\n      <div style={{ marginTop: 10, color: result.startsWith(\"성공\") ? \"#0b8\" : \"crimson\" }}>\r\n        {result}\r\n      </div>\r\n    </div>\r\n  );\r\n}\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}