{"ast":null,"code":"var _jsxFileName = \"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/src/components/message/GroupChat.js\",\n _s = $RefreshSig$();\n// src/components/message/GroupChat.js\nimport React, { useState, useEffect, useRef, useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport { GroupChat as GroupChatAPI } from '../../api/api';\nimport { AuthContext } from '../../context/AuthContext';\nimport Button from '../common/Button';\nimport AnonymousNameModal from './AnonymousNameModal';\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n_c = Container;\nconst ConnectionStatus = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 16px;\n margin-bottom: 16px;\n border-radius: var(--border-radius);\n font-size: 14px;\n background: ${props => props.$connected ? '#e8f5e8' : '#fff3cd'};\n color: ${props => props.$connected ? '#155724' : '#856404'};\n border: 1px solid ${props => props.$connected ? '#c3e6c3' : '#ffeaa7'};\n`;\n_c2 = ConnectionStatus;\nconst StatusIndicator = styled.span`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: ${props => props.$connected ? '#28a745' : '#ffc107'};\n margin-right: 8px;\n`;\n_c3 = StatusIndicator;\nconst MembersBar = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: var(--background-color);\n border-radius: var(--border-radius);\n margin-bottom: 16px;\n flex-wrap: wrap;\n`;\n_c4 = MembersBar;\nconst MemberBadge = styled.span`\n padding: 4px 12px;\n background: ${props => props.$isOwner ? 'var(--primary-color)' : 'white'};\n color: ${props => props.$isOwner ? 'white' : 'var(--text-color)'};\n border: 1px solid ${props => props.$isOwner ? 'var(--primary-color)' : 'var(--border-color)'};\n border-radius: 16px;\n font-size: 14px;\n cursor: ${props => props.$clickable ? 'pointer' : 'default'};\n\n &:hover {\n background: ${props => props.$clickable ? 'var(--background-color)' : ''};\n }\n`;\n_c5 = MemberBadge;\nconst MembersLabel = styled.span`\n font-weight: bold;\n color: var(--text-light);\n font-size: 14px;\n`;\n_c6 = MembersLabel;\nconst MessageList = styled.div`\n flex-grow: 1;\n overflow-y: auto;\n margin-bottom: 16px;\n max-height: 400px;\n padding-right: 8px;\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: var(--background-color);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--border-color);\n border-radius: 4px;\n }\n`;\n_c7 = MessageList;\nconst Message = styled.div`\n margin-bottom: 16px;\n display: flex;\n flex-direction: column;\n align-items: ${props => props.$sent ? 'flex-end' : 'flex-start'};\n`;\n_c8 = Message;\nconst MessageBubble = styled.div`\n background-color: ${props => {\n if (props.$isOwner) return 'var(--primary-color)';\n if (props.$sent) return '#4a9c5d';\n return 'var(--background-color)';\n}};\n color: ${props => props.$isOwner || props.$sent ? 'white' : 'var(--text-color)'};\n padding: 12px 16px;\n border-radius: 18px;\n max-width: 70%;\n word-break: break-word;\n opacity: ${props => props.$sending ? 0.7 : 1};\n`;\n_c9 = MessageBubble;\nconst MessageInfo = styled.div`\n font-size: 12px;\n color: var(--text-light);\n margin-top: 4px;\n`;\n_c0 = MessageInfo;\nconst MentionTag = styled.span`\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 4px;\n margin-right: 4px;\n font-size: 12px;\n`;\n_c1 = MentionTag;\nconst MessageForm = styled.form`\n display: flex;\n gap: 12px;\n align-items: flex-end;\n\n @media (max-width: 768px) {\n flex-direction: column;\n gap: 8px;\n }\n`;\n_c10 = MessageForm;\nconst InputWrapper = styled.div`\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n_c11 = InputWrapper;\nconst MentionSelect = styled.select`\n padding: 8px 12px;\n border: 2px solid var(--border-color);\n border-radius: var(--border-radius);\n font-size: 14px;\n background: white;\n\n &:focus {\n outline: none;\n border-color: var(--primary-color);\n }\n`;\n_c12 = MentionSelect;\nconst MessageInput = styled.textarea`\n width: 100%;\n padding: 12px 16px;\n font-size: 16px;\n border: 2px solid var(--border-color);\n border-radius: var(--border-radius);\n resize: none;\n min-height: 60px;\n\n &:focus {\n outline: none;\n border-color: var(--primary-color);\n }\n`;\n_c13 = MessageInput;\nconst SendButton = styled(Button)`\n height: fit-content;\n`;\n_c14 = SendButton;\nconst NoMessages = styled.p`\n text-align: center;\n font-size: 16px;\n color: var(--text-light);\n margin: 48px 0;\n`;\n_c15 = NoMessages;\nconst Loading = styled.p`\n text-align: center;\n font-size: 16px;\n color: var(--text-light);\n margin: 24px 0;\n`;\n_c16 = Loading;\nconst ErrorText = styled.p`\n text-align: center;\n color: var(--error-color);\n margin: 24px 0;\n`;\n_c17 = ErrorText;\nconst GroupChatComponent = ({\n jobId,\n jobOwnerId\n}) => {\n _s();\n const {\n currentUser\n } = useContext(AuthContext);\n const [membership, setMembership] = useState(null);\n const [members, setMembers] = useState([]);\n const [messages, setMessages] = useState([]);\n const [newMessage, setNewMessage] = useState('');\n const [mentionUserId, setMentionUserId] = useState('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n const [showNameModal, setShowNameModal] = useState(false);\n const [isConnected, setIsConnected] = useState(false);\n const [isOwner, setIsOwner] = useState(false);\n const messageListRef = useRef(null);\n const wsRef = useRef(null);\n\n // メンバーシップ確認\n const checkMembership = useCallback(async () => {\n if (!currentUser) return;\n try {\n const response = await GroupChatAPI.getMembership(jobId, currentUser.id);\n if (response.data.is_member) {\n setMembership(response.data.membership);\n setIsOwner(response.data.membership.is_owner === 1);\n return true;\n } else if (response.data.is_owner) {\n // 求人主だがまだ参加していない\n setShowNameModal(true);\n setIsOwner(true);\n return false;\n } else {\n // 応募者でまだ参加していない\n setShowNameModal(true);\n return false;\n }\n } catch (err) {\n console.error('メンバーシップ確認エラー', err);\n setError('グループチャットの確認に失敗しました');\n return false;\n }\n }, [jobId, currentUser]);\n\n // メンバー取得\n const fetchMembers = useCallback(async () => {\n if (!currentUser) return;\n try {\n const response = await GroupChatAPI.getMembers(jobId, currentUser.id);\n setMembers(response.data.members);\n } catch (err) {\n console.error('メンバー取得エラー', err);\n }\n }, [jobId, currentUser]);\n\n // メッセージ取得\n const fetchMessages = useCallback(async () => {\n if (!currentUser) return;\n try {\n const response = await GroupChatAPI.getMessages(jobId, currentUser.id);\n setMessages(response.data.messages);\n } catch (err) {\n console.error('メッセージ取得エラー', err);\n }\n }, [jobId, currentUser]);\n\n // WebSocket接続\n const connectWebSocket = useCallback(() => {\n if (!currentUser || !membership) return;\n try {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.host;\n const wsUrl = `${protocol}//${host}/nikko/ws`;\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n ws.onopen = () => {\n console.log('✅ グループチャットWebSocket接続成功');\n setIsConnected(true);\n ws.send(JSON.stringify({\n type: 'join_group_room',\n job_posting_id: jobId,\n user_id: currentUser.id,\n is_owner: isOwner\n }));\n };\n ws.onmessage = event => {\n try {\n const data = JSON.parse(event.data);\n switch (data.type) {\n case 'group_room_joined':\n console.log('✅ グループルーム参加確認');\n break;\n case 'group_message_sent':\n // 送信確認\n setMessages(prev => prev.map(msg => msg.tempId === data.tempId ? {\n ...msg,\n id: data.message.id,\n sending: false\n } : msg));\n break;\n case 'new_group_message':\n // 新着メッセージ\n setMessages(prev => {\n const exists = prev.some(msg => msg.id === data.message.id);\n if (exists) return prev;\n return [...prev, data.message];\n });\n break;\n case 'group_message_error':\n setError('メッセージの送信に失敗しました');\n break;\n default:\n break;\n }\n } catch (err) {\n console.error('WebSocketメッセージ解析エラー', err);\n }\n };\n ws.onclose = () => {\n console.log('🔌 グループチャットWebSocket切断');\n setIsConnected(false);\n\n // 再接続\n setTimeout(() => {\n if (membership) connectWebSocket();\n }, 5000);\n };\n ws.onerror = error => {\n console.error('WebSocketエラー', error);\n setIsConnected(false);\n };\n } catch (err) {\n console.error('WebSocket接続失敗', err);\n setIsConnected(false);\n }\n }, [currentUser, membership, jobId, isOwner]);\n\n // 初期化\n useEffect(() => {\n const initialize = async () => {\n setLoading(true);\n const isMember = await checkMembership();\n if (isMember) {\n await fetchMembers();\n await fetchMessages();\n }\n setLoading(false);\n };\n initialize();\n }, [checkMembership, fetchMembers, fetchMessages]);\n\n // WebSocket接続開始\n useEffect(() => {\n if (membership && !loading) {\n connectWebSocket();\n }\n return () => {\n if (wsRef.current) {\n wsRef.current.close();\n }\n };\n }, [membership, loading, connectWebSocket]);\n\n // 自動スクロール\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, [messages]);\n\n // 参加完了ハンドラ\n const handleJoinComplete = async anonymousName => {\n setShowNameModal(false);\n setMembership({\n anonymous_name: anonymousName,\n is_owner: isOwner ? 1 : 0\n });\n await fetchMembers();\n await fetchMessages();\n };\n\n // メッセージ送信\n const handleSubmit = async e => {\n e.preventDefault();\n if (!newMessage.trim() || !membership) return;\n const messageContent = newMessage.trim();\n const tempId = Date.now();\n\n // 楽観的UI更新\n const optimisticMessage = {\n id: tempId,\n tempId: tempId,\n message: messageContent,\n sender_id: currentUser.id,\n sender_name: membership.anonymous_name,\n sender_is_owner: isOwner ? 1 : 0,\n mentioned_user_id: mentionUserId || null,\n created_at: new Date().toISOString(),\n sending: true\n };\n setMessages(prev => [...prev, optimisticMessage]);\n setNewMessage('');\n setMentionUserId('');\n try {\n var _wsRef$current;\n if (isConnected && ((_wsRef$current = wsRef.current) === null || _wsRef$current === void 0 ? void 0 : _wsRef$current.readyState) === WebSocket.OPEN) {\n wsRef.current.send(JSON.stringify({\n type: 'group_message',\n job_posting_id: jobId,\n sender_id: currentUser.id,\n content: messageContent,\n mentioned_user_id: mentionUserId || null,\n tempId: tempId\n }));\n } else {\n // HTTP APIフォールバック\n await GroupChatAPI.sendMessage(jobId, {\n sender_id: currentUser.id,\n message: messageContent,\n mentioned_user_id: mentionUserId || null\n });\n await fetchMessages();\n }\n } catch (err) {\n console.error('メッセージ送信エラー', err);\n setMessages(prev => prev.filter(msg => msg.tempId !== tempId));\n setNewMessage(messageContent);\n setError('メッセージの送信に失敗しました');\n }\n };\n\n // ニックネーム選択モーダル\n if (showNameModal) {\n return /*#__PURE__*/_jsxDEV(AnonymousNameModal, {\n jobId: jobId,\n userId: currentUser === null || currentUser === void 0 ? void 0 : currentUser.id,\n onJoin: handleJoinComplete,\n onCancel: () => setShowNameModal(false)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 447,\n columnNumber: 7\n }, this);\n }\n if (loading) {\n return /*#__PURE__*/_jsxDEV(Loading, {\n children: \"\\u8AAD\\u307F\\u8FBC\\u307F\\u4E2D...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 457,\n columnNumber: 12\n }, this);\n }\n if (error && !membership) {\n return /*#__PURE__*/_jsxDEV(ErrorText, {\n children: error\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 461,\n columnNumber: 12\n }, this);\n }\n if (!membership) {\n return /*#__PURE__*/_jsxDEV(Loading, {\n children: \"\\u30B0\\u30EB\\u30FC\\u30D7\\u30C1\\u30E3\\u30C3\\u30C8\\u306B\\u53C2\\u52A0\\u3057\\u3066\\u304F\\u3060\\u3055\\u3044\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 465,\n columnNumber: 12\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(Container, {\n children: [/*#__PURE__*/_jsxDEV(ConnectionStatus, {\n $connected: isConnected,\n children: [/*#__PURE__*/_jsxDEV(StatusIndicator, {\n $connected: isConnected\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 471,\n columnNumber: 9\n }, this), isConnected ? 'リアルタイム接続中' : 'オフラインモード']\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 470,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(MembersBar, {\n children: [/*#__PURE__*/_jsxDEV(MembersLabel, {\n children: \"\\u53C2\\u52A0\\u8005:\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 476,\n columnNumber: 9\n }, this), members.map(member => /*#__PURE__*/_jsxDEV(MemberBadge, {\n $isOwner: member.is_owner === 1,\n $clickable: isOwner && member.is_owner !== 1,\n onClick: () => {\n if (isOwner && member.is_owner !== 1) {\n setMentionUserId(member.user_id.toString());\n }\n },\n children: [member.anonymous_name, member.is_owner === 1 && ' (求人主)']\n }, member.id, true, {\n fileName: _jsxFileName,\n lineNumber: 478,\n columnNumber: 11\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 475,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(MessageList, {\n ref: messageListRef,\n children: messages.length === 0 ? /*#__PURE__*/_jsxDEV(NoMessages, {\n children: \"\\u30E1\\u30C3\\u30BB\\u30FC\\u30B8\\u306F\\u307E\\u3060\\u3042\\u308A\\u307E\\u305B\\u3093\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 496,\n columnNumber: 11\n }, this) : messages.map(msg => {\n var _members$find;\n return /*#__PURE__*/_jsxDEV(Message, {\n $sent: msg.sender_id === currentUser.id,\n children: [/*#__PURE__*/_jsxDEV(MessageBubble, {\n $sent: msg.sender_id === currentUser.id,\n $isOwner: msg.sender_is_owner === 1,\n $sending: msg.sending,\n children: [msg.mentioned_user_id && /*#__PURE__*/_jsxDEV(MentionTag, {\n children: [\"@\", ((_members$find = members.find(m => m.user_id === msg.mentioned_user_id)) === null || _members$find === void 0 ? void 0 : _members$find.anonymous_name) || '---']\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 509,\n columnNumber: 19\n }, this), msg.message]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 503,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(MessageInfo, {\n children: [msg.sender_name, msg.sender_is_owner === 1 && ' (求人主)', ' • ', new Date(msg.created_at).toLocaleString('ja-JP'), msg.sending && ' • 送信中...']\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 515,\n columnNumber: 15\n }, this)]\n }, msg.id || msg.tempId, true, {\n fileName: _jsxFileName,\n lineNumber: 499,\n columnNumber: 13\n }, this);\n })\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 494,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(MessageForm, {\n onSubmit: handleSubmit,\n children: [/*#__PURE__*/_jsxDEV(InputWrapper, {\n children: [isOwner && members.length > 1 && /*#__PURE__*/_jsxDEV(MentionSelect, {\n value: mentionUserId,\n onChange: e => setMentionUserId(e.target.value),\n children: [/*#__PURE__*/_jsxDEV(\"option\", {\n value: \"\",\n children: \"\\u5168\\u54E1\\u306B\\u9001\\u4FE1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 534,\n columnNumber: 15\n }, this), members.filter(m => m.is_owner !== 1).map(m => /*#__PURE__*/_jsxDEV(\"option\", {\n value: m.user_id,\n children: [\"@\", m.anonymous_name, \" \\u306B\\u9001\\u4FE1\"]\n }, m.user_id, true, {\n fileName: _jsxFileName,\n lineNumber: 538,\n columnNumber: 19\n }, this))]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 530,\n columnNumber: 13\n }, this), /*#__PURE__*/_jsxDEV(MessageInput, {\n value: newMessage,\n onChange: e => setNewMessage(e.target.value),\n placeholder: \"\\u30E1\\u30C3\\u30BB\\u30FC\\u30B8\\u3092\\u5165\\u529B...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 545,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 528,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(SendButton, {\n type: \"submit\",\n disabled: !newMessage.trim(),\n children: \"\\u9001\\u4FE1\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 551,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 527,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 469,\n columnNumber: 5\n }, this);\n};\n_s(GroupChatComponent, \"SN7HBl47usUtxgKmN5JkVp7myLc=\");\n_c18 = GroupChatComponent;\nexport default GroupChatComponent;\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18;\n$RefreshReg$(_c, \"Container\");\n$RefreshReg$(_c2, \"ConnectionStatus\");\n$RefreshReg$(_c3, \"StatusIndicator\");\n$RefreshReg$(_c4, \"MembersBar\");\n$RefreshReg$(_c5, \"MemberBadge\");\n$RefreshReg$(_c6, \"MembersLabel\");\n$RefreshReg$(_c7, \"MessageList\");\n$RefreshReg$(_c8, \"Message\");\n$RefreshReg$(_c9, \"MessageBubble\");\n$RefreshReg$(_c0, \"MessageInfo\");\n$RefreshReg$(_c1, \"MentionTag\");\n$RefreshReg$(_c10, \"MessageForm\");\n$RefreshReg$(_c11, \"InputWrapper\");\n$RefreshReg$(_c12, \"MentionSelect\");\n$RefreshReg$(_c13, \"MessageInput\");\n$RefreshReg$(_c14, \"SendButton\");\n$RefreshReg$(_c15, \"NoMessages\");\n$RefreshReg$(_c16, \"Loading\");\n$RefreshReg$(_c17, \"ErrorText\");\n$RefreshReg$(_c18, \"GroupChatComponent\");","map":{"version":3,"names":["React","useState","useEffect","useRef","useCallback","useContext","styled","GroupChat","GroupChatAPI","AuthContext","Button","AnonymousNameModal","jsxDEV","_jsxDEV","Container","div","_c","ConnectionStatus","props","$connected","_c2","StatusIndicator","span","_c3","MembersBar","_c4","MemberBadge","$isOwner","$clickable","_c5","MembersLabel","_c6","MessageList","_c7","Message","$sent","_c8","MessageBubble","$sending","_c9","MessageInfo","_c0","MentionTag","_c1","MessageForm","form","_c10","InputWrapper","_c11","MentionSelect","select","_c12","MessageInput","textarea","_c13","SendButton","_c14","NoMessages","p","_c15","Loading","_c16","ErrorText","_c17","GroupChatComponent","jobId","jobOwnerId","_s","currentUser","membership","setMembership","members","setMembers","messages","setMessages","newMessage","setNewMessage","mentionUserId","setMentionUserId","loading","setLoading","error","setError","showNameModal","setShowNameModal","isConnected","setIsConnected","isOwner","setIsOwner","messageListRef","wsRef","checkMembership","response","getMembership","id","data","is_member","is_owner","err","console","fetchMembers","getMembers","fetchMessages","getMessages","connectWebSocket","protocol","window","location","host","wsUrl","ws","WebSocket","current","onopen","log","send","JSON","stringify","type","job_posting_id","user_id","onmessage","event","parse","prev","map","msg","tempId","message","sending","exists","some","onclose","setTimeout","onerror","initialize","isMember","close","scrollTop","scrollHeight","handleJoinComplete","anonymousName","anonymous_name","handleSubmit","e","preventDefault","trim","messageContent","Date","now","optimisticMessage","sender_id","sender_name","sender_is_owner","mentioned_user_id","created_at","toISOString","_wsRef$current","readyState","OPEN","content","sendMessage","filter","userId","onJoin","onCancel","fileName","_jsxFileName","lineNumber","columnNumber","children","member","onClick","toString","ref","length","_members$find","find","m","toLocaleString","onSubmit","value","onChange","target","placeholder","disabled","_c18","$RefreshReg$"],"sources":["/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/src/components/message/GroupChat.js"],"sourcesContent":["// src/components/message/GroupChat.js\nimport React, { useState, useEffect, useRef, useCallback, useContext } from 'react';\nimport styled from 'styled-components';\nimport { GroupChat as GroupChatAPI } from '../../api/api';\nimport { AuthContext } from '../../context/AuthContext';\nimport Button from '../common/Button';\nimport AnonymousNameModal from './AnonymousNameModal';\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n height: 100%;\n`;\n\nconst ConnectionStatus = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px 16px;\n margin-bottom: 16px;\n border-radius: var(--border-radius);\n font-size: 14px;\n background: ${props => props.$connected ? '#e8f5e8' : '#fff3cd'};\n color: ${props => props.$connected ? '#155724' : '#856404'};\n border: 1px solid ${props => props.$connected ? '#c3e6c3' : '#ffeaa7'};\n`;\n\nconst StatusIndicator = styled.span`\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background: ${props => props.$connected ? '#28a745' : '#ffc107'};\n margin-right: 8px;\n`;\n\nconst MembersBar = styled.div`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px;\n background: var(--background-color);\n border-radius: var(--border-radius);\n margin-bottom: 16px;\n flex-wrap: wrap;\n`;\n\nconst MemberBadge = styled.span`\n padding: 4px 12px;\n background: ${props => props.$isOwner ? 'var(--primary-color)' : 'white'};\n color: ${props => props.$isOwner ? 'white' : 'var(--text-color)'};\n border: 1px solid ${props => props.$isOwner ? 'var(--primary-color)' : 'var(--border-color)'};\n border-radius: 16px;\n font-size: 14px;\n cursor: ${props => props.$clickable ? 'pointer' : 'default'};\n\n &:hover {\n background: ${props => props.$clickable ? 'var(--background-color)' : ''};\n }\n`;\n\nconst MembersLabel = styled.span`\n font-weight: bold;\n color: var(--text-light);\n font-size: 14px;\n`;\n\nconst MessageList = styled.div`\n flex-grow: 1;\n overflow-y: auto;\n margin-bottom: 16px;\n max-height: 400px;\n padding-right: 8px;\n\n &::-webkit-scrollbar {\n width: 6px;\n }\n\n &::-webkit-scrollbar-track {\n background: var(--background-color);\n border-radius: 4px;\n }\n\n &::-webkit-scrollbar-thumb {\n background: var(--border-color);\n border-radius: 4px;\n }\n`;\n\nconst Message = styled.div`\n margin-bottom: 16px;\n display: flex;\n flex-direction: column;\n align-items: ${props => props.$sent ? 'flex-end' : 'flex-start'};\n`;\n\nconst MessageBubble = styled.div`\n background-color: ${props => {\n if (props.$isOwner) return 'var(--primary-color)';\n if (props.$sent) return '#4a9c5d';\n return 'var(--background-color)';\n }};\n color: ${props => (props.$isOwner || props.$sent) ? 'white' : 'var(--text-color)'};\n padding: 12px 16px;\n border-radius: 18px;\n max-width: 70%;\n word-break: break-word;\n opacity: ${props => props.$sending ? 0.7 : 1};\n`;\n\nconst MessageInfo = styled.div`\n font-size: 12px;\n color: var(--text-light);\n margin-top: 4px;\n`;\n\nconst MentionTag = styled.span`\n background: rgba(255, 255, 255, 0.2);\n padding: 2px 6px;\n border-radius: 4px;\n margin-right: 4px;\n font-size: 12px;\n`;\n\nconst MessageForm = styled.form`\n display: flex;\n gap: 12px;\n align-items: flex-end;\n\n @media (max-width: 768px) {\n flex-direction: column;\n gap: 8px;\n }\n`;\n\nconst InputWrapper = styled.div`\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n`;\n\nconst MentionSelect = styled.select`\n padding: 8px 12px;\n border: 2px solid var(--border-color);\n border-radius: var(--border-radius);\n font-size: 14px;\n background: white;\n\n &:focus {\n outline: none;\n border-color: var(--primary-color);\n }\n`;\n\nconst MessageInput = styled.textarea`\n width: 100%;\n padding: 12px 16px;\n font-size: 16px;\n border: 2px solid var(--border-color);\n border-radius: var(--border-radius);\n resize: none;\n min-height: 60px;\n\n &:focus {\n outline: none;\n border-color: var(--primary-color);\n }\n`;\n\nconst SendButton = styled(Button)`\n height: fit-content;\n`;\n\nconst NoMessages = styled.p`\n text-align: center;\n font-size: 16px;\n color: var(--text-light);\n margin: 48px 0;\n`;\n\nconst Loading = styled.p`\n text-align: center;\n font-size: 16px;\n color: var(--text-light);\n margin: 24px 0;\n`;\n\nconst ErrorText = styled.p`\n text-align: center;\n color: var(--error-color);\n margin: 24px 0;\n`;\n\nconst GroupChatComponent = ({ jobId, jobOwnerId }) => {\n const { currentUser } = useContext(AuthContext);\n const [membership, setMembership] = useState(null);\n const [members, setMembers] = useState([]);\n const [messages, setMessages] = useState([]);\n const [newMessage, setNewMessage] = useState('');\n const [mentionUserId, setMentionUserId] = useState('');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState('');\n const [showNameModal, setShowNameModal] = useState(false);\n const [isConnected, setIsConnected] = useState(false);\n const [isOwner, setIsOwner] = useState(false);\n const messageListRef = useRef(null);\n const wsRef = useRef(null);\n\n // メンバーシップ確認\n const checkMembership = useCallback(async () => {\n if (!currentUser) return;\n\n try {\n const response = await GroupChatAPI.getMembership(jobId, currentUser.id);\n \n if (response.data.is_member) {\n setMembership(response.data.membership);\n setIsOwner(response.data.membership.is_owner === 1);\n return true;\n } else if (response.data.is_owner) {\n // 求人主だがまだ参加していない\n setShowNameModal(true);\n setIsOwner(true);\n return false;\n } else {\n // 応募者でまだ参加していない\n setShowNameModal(true);\n return false;\n }\n } catch (err) {\n console.error('メンバーシップ確認エラー', err);\n setError('グループチャットの確認に失敗しました');\n return false;\n }\n }, [jobId, currentUser]);\n\n // メンバー取得\n const fetchMembers = useCallback(async () => {\n if (!currentUser) return;\n\n try {\n const response = await GroupChatAPI.getMembers(jobId, currentUser.id);\n setMembers(response.data.members);\n } catch (err) {\n console.error('メンバー取得エラー', err);\n }\n }, [jobId, currentUser]);\n\n // メッセージ取得\n const fetchMessages = useCallback(async () => {\n if (!currentUser) return;\n\n try {\n const response = await GroupChatAPI.getMessages(jobId, currentUser.id);\n setMessages(response.data.messages);\n } catch (err) {\n console.error('メッセージ取得エラー', err);\n }\n }, [jobId, currentUser]);\n\n // WebSocket接続\n const connectWebSocket = useCallback(() => {\n if (!currentUser || !membership) return;\n\n try {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.host;\n const wsUrl = `${protocol}//${host}/nikko/ws`;\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n\n ws.onopen = () => {\n console.log('✅ グループチャットWebSocket接続成功');\n setIsConnected(true);\n\n ws.send(JSON.stringify({\n type: 'join_group_room',\n job_posting_id: jobId,\n user_id: currentUser.id,\n is_owner: isOwner\n }));\n };\n\n ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n\n switch (data.type) {\n case 'group_room_joined':\n console.log('✅ グループルーム参加確認');\n break;\n\n case 'group_message_sent':\n // 送信確認\n setMessages(prev => prev.map(msg =>\n msg.tempId === data.tempId\n ? { ...msg, id: data.message.id, sending: false }\n : msg\n ));\n break;\n\n case 'new_group_message':\n // 新着メッセージ\n setMessages(prev => {\n const exists = prev.some(msg => msg.id === data.message.id);\n if (exists) return prev;\n return [...prev, data.message];\n });\n break;\n\n case 'group_message_error':\n setError('メッセージの送信に失敗しました');\n break;\n\n default:\n break;\n }\n } catch (err) {\n console.error('WebSocketメッセージ解析エラー', err);\n }\n };\n\n ws.onclose = () => {\n console.log('🔌 グループチャットWebSocket切断');\n setIsConnected(false);\n \n // 再接続\n setTimeout(() => {\n if (membership) connectWebSocket();\n }, 5000);\n };\n\n ws.onerror = (error) => {\n console.error('WebSocketエラー', error);\n setIsConnected(false);\n };\n\n } catch (err) {\n console.error('WebSocket接続失敗', err);\n setIsConnected(false);\n }\n }, [currentUser, membership, jobId, isOwner]);\n\n // 初期化\n useEffect(() => {\n const initialize = async () => {\n setLoading(true);\n const isMember = await checkMembership();\n \n if (isMember) {\n await fetchMembers();\n await fetchMessages();\n }\n \n setLoading(false);\n };\n\n initialize();\n }, [checkMembership, fetchMembers, fetchMessages]);\n\n // WebSocket接続開始\n useEffect(() => {\n if (membership && !loading) {\n connectWebSocket();\n }\n\n return () => {\n if (wsRef.current) {\n wsRef.current.close();\n }\n };\n }, [membership, loading, connectWebSocket]);\n\n // 自動スクロール\n useEffect(() => {\n if (messageListRef.current) {\n messageListRef.current.scrollTop = messageListRef.current.scrollHeight;\n }\n }, [messages]);\n\n // 参加完了ハンドラ\n const handleJoinComplete = async (anonymousName) => {\n setShowNameModal(false);\n setMembership({ anonymous_name: anonymousName, is_owner: isOwner ? 1 : 0 });\n \n await fetchMembers();\n await fetchMessages();\n };\n\n // メッセージ送信\n const handleSubmit = async (e) => {\n e.preventDefault();\n \n if (!newMessage.trim() || !membership) return;\n\n const messageContent = newMessage.trim();\n const tempId = Date.now();\n\n // 楽観的UI更新\n const optimisticMessage = {\n id: tempId,\n tempId: tempId,\n message: messageContent,\n sender_id: currentUser.id,\n sender_name: membership.anonymous_name,\n sender_is_owner: isOwner ? 1 : 0,\n mentioned_user_id: mentionUserId || null,\n created_at: new Date().toISOString(),\n sending: true\n };\n\n setMessages(prev => [...prev, optimisticMessage]);\n setNewMessage('');\n setMentionUserId('');\n\n try {\n if (isConnected && wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(JSON.stringify({\n type: 'group_message',\n job_posting_id: jobId,\n sender_id: currentUser.id,\n content: messageContent,\n mentioned_user_id: mentionUserId || null,\n tempId: tempId\n }));\n } else {\n // HTTP APIフォールバック\n await GroupChatAPI.sendMessage(jobId, {\n sender_id: currentUser.id,\n message: messageContent,\n mentioned_user_id: mentionUserId || null\n });\n await fetchMessages();\n }\n } catch (err) {\n console.error('メッセージ送信エラー', err);\n setMessages(prev => prev.filter(msg => msg.tempId !== tempId));\n setNewMessage(messageContent);\n setError('メッセージの送信に失敗しました');\n }\n };\n\n // ニックネーム選択モーダル\n if (showNameModal) {\n return (\n <AnonymousNameModal\n jobId={jobId}\n userId={currentUser?.id}\n onJoin={handleJoinComplete}\n onCancel={() => setShowNameModal(false)}\n />\n );\n }\n\n if (loading) {\n return <Loading>読み込み中...</Loading>;\n }\n\n if (error && !membership) {\n return <ErrorText>{error}</ErrorText>;\n }\n\n if (!membership) {\n return <Loading>グループチャットに参加してください</Loading>;\n }\n\n return (\n <Container>\n <ConnectionStatus $connected={isConnected}>\n <StatusIndicator $connected={isConnected} />\n {isConnected ? 'リアルタイム接続中' : 'オフラインモード'}\n </ConnectionStatus>\n\n <MembersBar>\n <MembersLabel>参加者:</MembersLabel>\n {members.map((member) => (\n <MemberBadge \n key={member.id} \n $isOwner={member.is_owner === 1}\n $clickable={isOwner && member.is_owner !== 1}\n onClick={() => {\n if (isOwner && member.is_owner !== 1) {\n setMentionUserId(member.user_id.toString());\n }\n }}\n >\n {member.anonymous_name}\n {member.is_owner === 1 && ' (求人主)'}\n </MemberBadge>\n ))}\n </MembersBar>\n\n <MessageList ref={messageListRef}>\n {messages.length === 0 ? (\n <NoMessages>メッセージはまだありません</NoMessages>\n ) : (\n messages.map((msg) => (\n <Message \n key={msg.id || msg.tempId} \n $sent={msg.sender_id === currentUser.id}\n >\n <MessageBubble\n $sent={msg.sender_id === currentUser.id}\n $isOwner={msg.sender_is_owner === 1}\n $sending={msg.sending}\n >\n {msg.mentioned_user_id && (\n <MentionTag>\n @{members.find(m => m.user_id === msg.mentioned_user_id)?.anonymous_name || '---'}\n </MentionTag>\n )}\n {msg.message}\n </MessageBubble>\n <MessageInfo>\n {msg.sender_name}\n {msg.sender_is_owner === 1 && ' (求人主)'}\n {' • '}\n {new Date(msg.created_at).toLocaleString('ja-JP')}\n {msg.sending && ' • 送信中...'}\n </MessageInfo>\n </Message>\n ))\n )}\n </MessageList>\n\n <MessageForm onSubmit={handleSubmit}>\n <InputWrapper>\n {isOwner && members.length > 1 && (\n <MentionSelect\n value={mentionUserId}\n onChange={(e) => setMentionUserId(e.target.value)}\n >\n <option value=\"\">全員に送信</option>\n {members\n .filter(m => m.is_owner !== 1)\n .map(m => (\n <option key={m.user_id} value={m.user_id}>\n @{m.anonymous_name} に送信\n </option>\n ))\n }\n </MentionSelect>\n )}\n <MessageInput\n value={newMessage}\n onChange={(e) => setNewMessage(e.target.value)}\n placeholder=\"メッセージを入力...\"\n />\n </InputWrapper>\n <SendButton type=\"submit\" disabled={!newMessage.trim()}>\n 送信\n </SendButton>\n </MessageForm>\n </Container>\n );\n};\n\nexport default GroupChatComponent;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}