Newer
Older
FanFarm / system / V3fanfarm-ubuntu-local / V3fanfarm-frontend / node_modules / .cache / babel-loader / 0bbbf8633a8ee3d1c842b6d02a27b96849165d5d67b62d45ade70687587306af.json
@Fanfarm User Fanfarm User on 18 Dec 65 KB add all
{"ast":null,"code":"var _jsxFileName = \"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/src/components/job/JobDetail.js\",\n  _s = $RefreshSig$();\n// src/components/job/JobDetail.js - Firefox対応版・新フィールド表示対応\nimport React, { useState, useEffect, useContext, useCallback } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { JobPostings, Applications } from '../../api/api';\nimport { AuthContext } from '../../context/AuthContext';\nimport Button from '../common/Button';\nimport Card from '../common/Card';\nimport JobLocationMap from '../map/JobLocationMap';\nimport { parseJobDate, formatJobDate } from '../../utils/dateUtils';\n\n// スタイルコンポーネント\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nconst JobDetailContainer = styled.div`\n  max-width: 800px;\n  margin: 40px auto;\n  padding: 0 24px;\n  \n  @media (max-width: 768px) {\n    margin: 20px auto;\n    padding: 0 16px;\n  }\n`;\n_c = JobDetailContainer;\nconst JobTitle = styled.h1`\n  text-align: center;\n  margin-bottom: 24px;\n  color: var(--primary-color);\n  font-size: 32px;\n  \n  @media (max-width: 768px) {\n    font-size: 24px;\n  }\n`;\n_c2 = JobTitle;\nconst JobContent = styled.div`\n  margin-top: 32px;\n`;\n_c3 = JobContent;\nconst JobSection = styled.div`\n  margin-bottom: 24px;\n`;\n_c4 = JobSection;\nconst SectionTitle = styled.h2`\n  font-size: 22px;\n  margin-bottom: 16px;\n  color: var(--secondary-color);\n  \n  @media (max-width: 768px) {\n    font-size: 20px;\n  }\n`;\n_c5 = SectionTitle;\nconst JobDetailItem = styled.p`\n  margin-bottom: 12px;\n  font-size: 18px;\n  line-height: 1.6;\n  \n  @media (max-width: 768px) {\n    font-size: 16px;\n  }\n`;\n_c6 = JobDetailItem;\nconst JobLabel = styled.span`\n  font-weight: 700;\n  margin-right: 8px;\n  color: #555;\n`;\n_c7 = JobLabel;\nconst DateChipsContainer = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 8px;\n`;\n_c8 = DateChipsContainer;\nconst DateChip = styled.span`\n  background: #e3f2fd;\n  color: #1976d2;\n  padding: 6px 12px;\n  border-radius: 16px;\n  font-size: 14px;\n  display: inline-flex;\n  align-items: center;\n  \n  @media (max-width: 768px) {\n    font-size: 13px;\n    padding: 4px 10px;\n  }\n`;\n_c9 = DateChip;\nconst RemarksSection = styled.div`\n  background: #fffef7;\n  border: 1px solid #fff3cd;\n  border-radius: var(--border-radius);\n  padding: 16px;\n  margin-top: 16px;\n`;\n_c0 = RemarksSection;\nconst ButtonGroup = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 16px;\n  margin-top: 32px;\n\n  @media (max-width: 768px) {\n    flex-direction: column;\n    gap: 8px;\n  }\n`;\n_c1 = ButtonGroup;\nconst ErrorMessage = styled.p`\n  color: var(--error-color);\n  font-size: 16px;\n  margin-top: 16px;\n  text-align: center;\n  padding: 12px;\n  background: #ffebee;\n  border-radius: 8px;\n`;\n_c10 = ErrorMessage;\nconst SuccessMessage = styled.p`\n  color: var(--success-color);\n  font-size: 18px;\n  font-weight: 700;\n  margin-top: 16px;\n  text-align: center;\n  padding: 12px;\n  background: #e8f5e9;\n  border-radius: 8px;\n`;\n_c11 = SuccessMessage;\nconst Loading = styled.p`\n  text-align: center;\n  font-size: 18px;\n  color: var(--text-light);\n  margin: 48px 0;\n`;\n_c12 = Loading;\nconst Error = styled.p`\n  text-align: center;\n  font-size: 18px;\n  color: var(--error-color);\n  margin: 48px 0;\n`;\n_c13 = Error;\nconst Modal = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1000;\n`;\n_c14 = Modal;\nconst ModalContent = styled(Card)`\n  width: 90%;\n  max-width: 500px;\n  padding: 32px;\n  text-align: center;\n`;\n_c15 = ModalContent;\nconst ModalTitle = styled.h2`\n  margin-bottom: 24px;\n  color: var(--primary-color);\n`;\n_c16 = ModalTitle;\nconst ModalText = styled.p`\n  font-size: 18px;\n  margin-bottom: 24px;\n`;\n_c17 = ModalText;\nconst MapSection = styled(JobSection)`\n  border: 1px solid #e0e0e0;\n  border-radius: var(--border-radius);\n  padding: 20px;\n  background: #fafafa;\n`;\nconst LocationInfo = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n  font-size: 16px;\n  color: var(--text-color);\n`;\nconst JobDetail = () => {\n  _s();\n  const {\n    id\n  } = useParams();\n  const {\n    currentUser\n  } = useContext(AuthContext);\n  const navigate = useNavigate();\n  const [job, setJob] = useState(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const [successMessage, setSuccessMessage] = useState('');\n  const [errorMessage, setErrorMessage] = useState('');\n  const [showConfirmModal, setShowConfirmModal] = useState(false);\n  const [locationData, setLocationData] = useState(null);\n  const [isApplied, setIsApplied] = useState(false);\n  useEffect(() => {\n    const fetchJobDetail = async () => {\n      try {\n        const response = await JobPostings.getById(id);\n        setJob(response.data);\n\n        // 応募済みチェック(worker と job_seeker の両方に対応)\n        if (currentUser && (currentUser.user_type === 'job_seeker' || currentUser.user_type === 'worker')) {\n          try {\n            console.log('応募状況を確認中...');\n            const applicationsResponse = await Applications.getMyApplications();\n            console.log('応募一覧:', applicationsResponse.data);\n            const hasApplied = applicationsResponse.data.some(app => {\n              // statusがnullまたはundefinedの場合も考慮\n              const isMatch = app.job_posting_id === parseInt(id) && (!app.status || app.status === 'pending' || app.status === 'applied');\n              if (isMatch) {\n                console.log('既に応募済みです:', app);\n              }\n              return isMatch;\n            });\n            setIsApplied(hasApplied);\n          } catch (err) {\n            console.log('応募状況の確認エラー:', err);\n            // エラーが発生しても続行(応募ボタンは表示)\n            setIsApplied(false);\n          }\n        }\n        setLoading(false);\n      } catch (err) {\n        console.error('求人詳細取得エラー:', err);\n        setError('求人情報の取得に失敗しました');\n        setLoading(false);\n      }\n    };\n    fetchJobDetail();\n  }, [id, currentUser]);\n  const handleApply = () => {\n    if (!currentUser) {\n      navigate('/login');\n      return;\n    }\n    if (currentUser.user_type === 'farmer') {\n      setErrorMessage('農家ユーザーは求人に応募できません');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n    if (currentUser.user_type !== 'job_seeker' && currentUser.user_type !== 'worker') {\n      setErrorMessage('このアカウントタイプでは応募できません');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n    if (isApplied) {\n      setErrorMessage('既に応募済みです');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n    setShowConfirmModal(true);\n  };\n  const handleConfirmApply = async () => {\n    try {\n      await Applications.create({\n        job_posting_id: parseInt(id)\n      });\n      setIsApplied(true);\n      setSuccessMessage('応募が完了しました!');\n      setShowConfirmModal(false);\n      setTimeout(() => {\n        navigate('/profile');\n      }, 2000);\n    } catch (err) {\n      var _err$response, _err$response$data;\n      setErrorMessage(((_err$response = err.response) === null || _err$response === void 0 ? void 0 : (_err$response$data = _err$response.data) === null || _err$response$data === void 0 ? void 0 : _err$response$data.error) || '応募に失敗しました');\n      setShowConfirmModal(false);\n      setTimeout(() => setErrorMessage(''), 3000);\n    }\n  };\n  const handleCancelApply = () => {\n    setShowConfirmModal(false);\n  };\n  const handleBack = () => {\n    navigate('/jobs');\n  };\n  const handleLocationFound = useCallback(result => {\n    setLocationData(result);\n    console.log('📍 求人地の位置情報を取得:', result);\n  }, []);\n  const handleLocationError = useCallback(error => {\n    console.warn('📍 求人地の位置情報取得エラー:', error);\n  }, []);\n  if (loading) {\n    return /*#__PURE__*/_jsxDEV(JobDetailContainer, {\n      children: /*#__PURE__*/_jsxDEV(Loading, {\n        children: \"\\u8AAD\\u307F\\u8FBC\\u307F\\u4E2D...\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 315,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 314,\n      columnNumber: 7\n    }, this);\n  }\n  if (error) {\n    return /*#__PURE__*/_jsxDEV(JobDetailContainer, {\n      children: [/*#__PURE__*/_jsxDEV(Error, {\n        children: error\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 323,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(ButtonGroup, {\n        children: /*#__PURE__*/_jsxDEV(Button, {\n          onClick: handleBack,\n          children: \"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 325,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 324,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 322,\n      columnNumber: 7\n    }, this);\n  }\n  if (!job) {\n    return /*#__PURE__*/_jsxDEV(JobDetailContainer, {\n      children: [/*#__PURE__*/_jsxDEV(Error, {\n        children: \"\\u6C42\\u4EBA\\u60C5\\u5831\\u304C\\u898B\\u3064\\u304B\\u308A\\u307E\\u305B\\u3093\\u3067\\u3057\\u305F\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 334,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(ButtonGroup, {\n        children: /*#__PURE__*/_jsxDEV(Button, {\n          onClick: handleBack,\n          children: \"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 336,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 335,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 333,\n      columnNumber: 7\n    }, this);\n  }\n\n  // 勤務日の配列化処理(Firefox対応)\n  const workDatesArray = job.work_dates ? job.work_dates.split(',').map(date => {\n    const trimmedDate = date.trim();\n    const parsedDate = parseJobDate(trimmedDate);\n    return {\n      original: trimmedDate,\n      parsed: parsedDate,\n      formatted: parsedDate ? formatJobDate(parsedDate) : trimmedDate\n    };\n  }) : [];\n\n  // 自分の求人かチェック\n  const isMyJob = currentUser && currentUser.user_type === 'farmer' && job.user_id === currentUser.id;\n\n  // 応募可能かチェック\n  const canApply = !isApplied && job.positions_filled < job.positions_available && job.is_active;\n  return /*#__PURE__*/_jsxDEV(JobDetailContainer, {\n    children: [process.env.NODE_ENV === 'development' && /*#__PURE__*/_jsxDEV(\"div\", {\n      style: {\n        background: '#f0f0f0',\n        padding: '10px',\n        marginBottom: '20px',\n        fontSize: '12px',\n        borderRadius: '4px'\n      },\n      children: [/*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u30E6\\u30FC\\u30B6\\u30FC\\u30BF\\u30A4\\u30D7: \", currentUser ? currentUser.user_type : 'ログインしていません']\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 375,\n        columnNumber: 11\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u30E6\\u30FC\\u30B6\\u30FCID: \", currentUser ? currentUser.id : 'N/A']\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 376,\n        columnNumber: 11\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u6C42\\u4EBA\\u6295\\u7A3F\\u8005ID: \", job === null || job === void 0 ? void 0 : job.user_id]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 377,\n        columnNumber: 11\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u81EA\\u5206\\u306E\\u6C42\\u4EBA: \", isMyJob ? 'はい' : 'いいえ']\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 378,\n        columnNumber: 11\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u5FDC\\u52DF\\u6E08\\u307F: \", isApplied ? 'はい' : 'いいえ']\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 379,\n        columnNumber: 11\n      }, this), /*#__PURE__*/_jsxDEV(\"div\", {\n        children: [\"\\u5FDC\\u52DF\\u53EF\\u80FD: \", canApply ? 'はい' : 'いいえ']\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 380,\n        columnNumber: 11\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 368,\n      columnNumber: 9\n    }, this), /*#__PURE__*/_jsxDEV(Card, {\n      children: [/*#__PURE__*/_jsxDEV(JobTitle, {\n        children: job.company_name\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 385,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(JobContent, {\n        children: [/*#__PURE__*/_jsxDEV(JobSection, {\n          children: [/*#__PURE__*/_jsxDEV(SectionTitle, {\n            children: \"\\u52E4\\u52D9\\u60C5\\u5831\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 390,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52E4\\u52D9\\u5730:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 392,\n              columnNumber: 15\n            }, this), job.location]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 391,\n            columnNumber: 13\n          }, this), job.meeting_place && /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u96C6\\u5408\\u5834\\u6240:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 399,\n              columnNumber: 17\n            }, this), job.meeting_place]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 398,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u6642\\u7D66:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 405,\n              columnNumber: 15\n            }, this), job.hourly_wage.toLocaleString(), \"\\u5186\"]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 404,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52E4\\u52D9\\u66DC\\u65E5:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 410,\n              columnNumber: 15\n            }, this), job.work_days]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 409,\n            columnNumber: 13\n          }, this), workDatesArray.length > 0 && /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52E4\\u52D9\\u65E5:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 417,\n              columnNumber: 17\n            }, this), /*#__PURE__*/_jsxDEV(DateChipsContainer, {\n              children: workDatesArray.map((dateInfo, index) => /*#__PURE__*/_jsxDEV(DateChip, {\n                children: [\"\\uD83D\\uDCC5 \", dateInfo.formatted]\n              }, index, true, {\n                fileName: _jsxFileName,\n                lineNumber: 420,\n                columnNumber: 21\n              }, this))\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 418,\n              columnNumber: 17\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 416,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52E4\\u52D9\\u6642\\u9593:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 429,\n              columnNumber: 15\n            }, this), job.work_hours]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 428,\n            columnNumber: 13\n          }, this), job.seasonal_vegetables && /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u65EC\\u306E\\u91CE\\u83DC:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 435,\n              columnNumber: 17\n            }, this), job.seasonal_vegetables]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 434,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52DF\\u96C6\\u4EBA\\u6570:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 441,\n              columnNumber: 15\n            }, this), job.positions_available, \"\\u4EBA \\uFF08\\u6B8B\\u308A\", job.positions_available - job.positions_filled, \"\\u4EBA\\uFF09\"]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 440,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52DF\\u96C6\\u958B\\u59CB\\u65E5:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 446,\n              columnNumber: 15\n            }, this), new Date(job.created_at).toLocaleDateString('ja-JP', {\n              year: 'numeric',\n              month: 'long',\n              day: 'numeric'\n            })]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 445,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u52DF\\u96C6\\u72B6\\u6CC1:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 455,\n              columnNumber: 15\n            }, this), job.is_active ? '募集中' : '募集終了']\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 454,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 389,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(JobSection, {\n          children: [/*#__PURE__*/_jsxDEV(SectionTitle, {\n            children: \"\\u696D\\u52D9\\u5185\\u5BB9\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 473,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: job.job_description\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 474,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 472,\n          columnNumber: 11\n        }, this), job.belongings && /*#__PURE__*/_jsxDEV(JobSection, {\n          children: [/*#__PURE__*/_jsxDEV(SectionTitle, {\n            children: \"\\u6301\\u3061\\u7269\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 480,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: job.belongings\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 481,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 479,\n          columnNumber: 13\n        }, this), job.remarks && /*#__PURE__*/_jsxDEV(RemarksSection, {\n          children: [/*#__PURE__*/_jsxDEV(SectionTitle, {\n            children: \"\\uD83D\\uDCCC \\u5099\\u8003\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 488,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            style: {\n              marginBottom: 0\n            },\n            children: job.remarks\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 489,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 487,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(JobSection, {\n          children: [/*#__PURE__*/_jsxDEV(SectionTitle, {\n            children: \"\\u9023\\u7D61\\u5148\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 497,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(JobDetailItem, {\n            children: [/*#__PURE__*/_jsxDEV(JobLabel, {\n              children: \"\\u9023\\u7D61\\u5148:\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 499,\n              columnNumber: 15\n            }, this), job.contact]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 498,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 496,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(ButtonGroup, {\n          children: [isMyJob ? /*#__PURE__*/_jsxDEV(_Fragment, {\n            children: [/*#__PURE__*/_jsxDEV(Button, {\n              onClick: () => navigate(`/jobs/${id}/edit`),\n              children: \"\\u7DE8\\u96C6\\u3059\\u308B\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 508,\n              columnNumber: 17\n            }, this), job.is_active && /*#__PURE__*/_jsxDEV(Button, {\n              onClick: async () => {\n                if (window.confirm('本当に募集を終了しますか?')) {\n                  try {\n                    await JobPostings.update(id, {\n                      is_active: false\n                    });\n                    setJob({\n                      ...job,\n                      is_active: false\n                    });\n                    setSuccessMessage('募集を終了しました');\n                  } catch (err) {\n                    setErrorMessage('募集終了に失敗しました');\n                  }\n                }\n              },\n              children: \"\\u52DF\\u96C6\\u3092\\u7D42\\u4E86\\u3059\\u308B\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 512,\n              columnNumber: 19\n            }, this)]\n          }, void 0, true) : /*#__PURE__*/_jsxDEV(_Fragment, {\n            children: currentUser ? currentUser.user_type === 'job_seeker' || currentUser.user_type === 'worker' ? /*#__PURE__*/_jsxDEV(Button, {\n              onClick: handleApply,\n              disabled: !canApply,\n              children: isApplied ? '応募済み' : !job.is_active ? '募集終了' : job.positions_filled >= job.positions_available ? '定員に達しました' : '応募する'\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 532,\n              columnNumber: 21\n            }, this) :\n            /*#__PURE__*/\n            // 農家ユーザーの場合\n            _jsxDEV(Button, {\n              disabled: true,\n              children: \"\\u8FB2\\u5BB6\\u30A2\\u30AB\\u30A6\\u30F3\\u30C8\\u3067\\u306F\\u5FDC\\u52DF\\u3067\\u304D\\u307E\\u305B\\u3093\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 543,\n              columnNumber: 21\n            }, this) :\n            /*#__PURE__*/\n            // ログインしていないユーザー向け\n            _jsxDEV(Button, {\n              onClick: () => navigate('/login'),\n              children: \"\\u30ED\\u30B0\\u30A4\\u30F3\\u3057\\u3066\\u5FDC\\u52DF\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 549,\n              columnNumber: 19\n            }, this)\n          }, void 0, false), /*#__PURE__*/_jsxDEV(Button, {\n            $secondary: true,\n            onClick: handleBack,\n            children: \"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 556,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 504,\n          columnNumber: 11\n        }, this), errorMessage && /*#__PURE__*/_jsxDEV(ErrorMessage, {\n          children: errorMessage\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 561,\n          columnNumber: 28\n        }, this), successMessage && /*#__PURE__*/_jsxDEV(SuccessMessage, {\n          children: successMessage\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 562,\n          columnNumber: 30\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 387,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 384,\n      columnNumber: 7\n    }, this), showConfirmModal && /*#__PURE__*/_jsxDEV(Modal, {\n      children: /*#__PURE__*/_jsxDEV(ModalContent, {\n        children: [/*#__PURE__*/_jsxDEV(ModalTitle, {\n          children: \"\\u5FDC\\u52DF\\u306E\\u78BA\\u8A8D\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 569,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(ModalText, {\n          children: [job.company_name, \"\\u306E\\u6C42\\u4EBA\\u306B\\u5FDC\\u52DF\\u3057\\u307E\\u3059\\u3002\\u3088\\u308D\\u3057\\u3044\\u3067\\u3059\\u304B\\uFF1F\"]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 570,\n          columnNumber: 13\n        }, this), /*#__PURE__*/_jsxDEV(ButtonGroup, {\n          children: [/*#__PURE__*/_jsxDEV(Button, {\n            onClick: handleConfirmApply,\n            children: \"\\u5FDC\\u52DF\\u3059\\u308B\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 574,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(Button, {\n            $secondary: true,\n            onClick: handleCancelApply,\n            children: \"\\u30AD\\u30E3\\u30F3\\u30BB\\u30EB\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 575,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 573,\n          columnNumber: 13\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 568,\n        columnNumber: 11\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 567,\n      columnNumber: 9\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 365,\n    columnNumber: 5\n  }, this);\n};\n_s(JobDetail, \"0n/7BcoknyCIj2t9GiDL9QfqZP4=\", false, function () {\n  return [useParams, useNavigate];\n});\n_c18 = JobDetail;\nexport default JobDetail;\nvar _c, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9, _c0, _c1, _c10, _c11, _c12, _c13, _c14, _c15, _c16, _c17, _c18;\n$RefreshReg$(_c, \"JobDetailContainer\");\n$RefreshReg$(_c2, \"JobTitle\");\n$RefreshReg$(_c3, \"JobContent\");\n$RefreshReg$(_c4, \"JobSection\");\n$RefreshReg$(_c5, \"SectionTitle\");\n$RefreshReg$(_c6, \"JobDetailItem\");\n$RefreshReg$(_c7, \"JobLabel\");\n$RefreshReg$(_c8, \"DateChipsContainer\");\n$RefreshReg$(_c9, \"DateChip\");\n$RefreshReg$(_c0, \"RemarksSection\");\n$RefreshReg$(_c1, \"ButtonGroup\");\n$RefreshReg$(_c10, \"ErrorMessage\");\n$RefreshReg$(_c11, \"SuccessMessage\");\n$RefreshReg$(_c12, \"Loading\");\n$RefreshReg$(_c13, \"Error\");\n$RefreshReg$(_c14, \"Modal\");\n$RefreshReg$(_c15, \"ModalContent\");\n$RefreshReg$(_c16, \"ModalTitle\");\n$RefreshReg$(_c17, \"ModalText\");\n$RefreshReg$(_c18, \"JobDetail\");","map":{"version":3,"names":["React","useState","useEffect","useContext","useCallback","useParams","useNavigate","styled","JobPostings","Applications","AuthContext","Button","Card","JobLocationMap","parseJobDate","formatJobDate","jsxDEV","_jsxDEV","Fragment","_Fragment","JobDetailContainer","div","_c","JobTitle","h1","_c2","JobContent","_c3","JobSection","_c4","SectionTitle","h2","_c5","JobDetailItem","p","_c6","JobLabel","span","_c7","DateChipsContainer","_c8","DateChip","_c9","RemarksSection","_c0","ButtonGroup","_c1","ErrorMessage","_c10","SuccessMessage","_c11","Loading","_c12","Error","_c13","Modal","_c14","ModalContent","_c15","ModalTitle","_c16","ModalText","_c17","MapSection","LocationInfo","JobDetail","_s","id","currentUser","navigate","job","setJob","loading","setLoading","error","setError","successMessage","setSuccessMessage","errorMessage","setErrorMessage","showConfirmModal","setShowConfirmModal","locationData","setLocationData","isApplied","setIsApplied","fetchJobDetail","response","getById","data","user_type","console","log","applicationsResponse","getMyApplications","hasApplied","some","app","isMatch","job_posting_id","parseInt","status","err","handleApply","setTimeout","handleConfirmApply","create","_err$response","_err$response$data","handleCancelApply","handleBack","handleLocationFound","result","handleLocationError","warn","children","fileName","_jsxFileName","lineNumber","columnNumber","onClick","workDatesArray","work_dates","split","map","date","trimmedDate","trim","parsedDate","original","parsed","formatted","isMyJob","user_id","canApply","positions_filled","positions_available","is_active","process","env","NODE_ENV","style","background","padding","marginBottom","fontSize","borderRadius","company_name","location","meeting_place","hourly_wage","toLocaleString","work_days","length","dateInfo","index","work_hours","seasonal_vegetables","Date","created_at","toLocaleDateString","year","month","day","job_description","belongings","remarks","contact","window","confirm","update","disabled","$secondary","_c18","$RefreshReg$"],"sources":["/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/src/components/job/JobDetail.js"],"sourcesContent":["// src/components/job/JobDetail.js - Firefox対応版・新フィールド表示対応\nimport React, { useState, useEffect, useContext, useCallback } from 'react';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { JobPostings, Applications } from '../../api/api';\nimport { AuthContext } from '../../context/AuthContext';\nimport Button from '../common/Button';\nimport Card from '../common/Card';\nimport JobLocationMap from '../map/JobLocationMap';\nimport { parseJobDate, formatJobDate } from '../../utils/dateUtils';\n\n// スタイルコンポーネント\nconst JobDetailContainer = styled.div`\n  max-width: 800px;\n  margin: 40px auto;\n  padding: 0 24px;\n  \n  @media (max-width: 768px) {\n    margin: 20px auto;\n    padding: 0 16px;\n  }\n`;\n\nconst JobTitle = styled.h1`\n  text-align: center;\n  margin-bottom: 24px;\n  color: var(--primary-color);\n  font-size: 32px;\n  \n  @media (max-width: 768px) {\n    font-size: 24px;\n  }\n`;\n\nconst JobContent = styled.div`\n  margin-top: 32px;\n`;\n\nconst JobSection = styled.div`\n  margin-bottom: 24px;\n`;\n\nconst SectionTitle = styled.h2`\n  font-size: 22px;\n  margin-bottom: 16px;\n  color: var(--secondary-color);\n  \n  @media (max-width: 768px) {\n    font-size: 20px;\n  }\n`;\n\nconst JobDetailItem = styled.p`\n  margin-bottom: 12px;\n  font-size: 18px;\n  line-height: 1.6;\n  \n  @media (max-width: 768px) {\n    font-size: 16px;\n  }\n`;\n\nconst JobLabel = styled.span`\n  font-weight: 700;\n  margin-right: 8px;\n  color: #555;\n`;\n\nconst DateChipsContainer = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  margin-top: 8px;\n`;\n\nconst DateChip = styled.span`\n  background: #e3f2fd;\n  color: #1976d2;\n  padding: 6px 12px;\n  border-radius: 16px;\n  font-size: 14px;\n  display: inline-flex;\n  align-items: center;\n  \n  @media (max-width: 768px) {\n    font-size: 13px;\n    padding: 4px 10px;\n  }\n`;\n\nconst RemarksSection = styled.div`\n  background: #fffef7;\n  border: 1px solid #fff3cd;\n  border-radius: var(--border-radius);\n  padding: 16px;\n  margin-top: 16px;\n`;\n\nconst ButtonGroup = styled.div`\n  display: flex;\n  justify-content: center;\n  gap: 16px;\n  margin-top: 32px;\n\n  @media (max-width: 768px) {\n    flex-direction: column;\n    gap: 8px;\n  }\n`;\n\nconst ErrorMessage = styled.p`\n  color: var(--error-color);\n  font-size: 16px;\n  margin-top: 16px;\n  text-align: center;\n  padding: 12px;\n  background: #ffebee;\n  border-radius: 8px;\n`;\n\nconst SuccessMessage = styled.p`\n  color: var(--success-color);\n  font-size: 18px;\n  font-weight: 700;\n  margin-top: 16px;\n  text-align: center;\n  padding: 12px;\n  background: #e8f5e9;\n  border-radius: 8px;\n`;\n\nconst Loading = styled.p`\n  text-align: center;\n  font-size: 18px;\n  color: var(--text-light);\n  margin: 48px 0;\n`;\n\nconst Error = styled.p`\n  text-align: center;\n  font-size: 18px;\n  color: var(--error-color);\n  margin: 48px 0;\n`;\n\nconst Modal = styled.div`\n  position: fixed;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.5);\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  z-index: 1000;\n`;\n\nconst ModalContent = styled(Card)`\n  width: 90%;\n  max-width: 500px;\n  padding: 32px;\n  text-align: center;\n`;\n\nconst ModalTitle = styled.h2`\n  margin-bottom: 24px;\n  color: var(--primary-color);\n`;\n\nconst ModalText = styled.p`\n  font-size: 18px;\n  margin-bottom: 24px;\n`;\n\nconst MapSection = styled(JobSection)`\n  border: 1px solid #e0e0e0;\n  border-radius: var(--border-radius);\n  padding: 20px;\n  background: #fafafa;\n`;\n\nconst LocationInfo = styled.div`\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 16px;\n  font-size: 16px;\n  color: var(--text-color);\n`;\n\nconst JobDetail = () => {\n  const { id } = useParams();\n  const { currentUser } = useContext(AuthContext);\n  const navigate = useNavigate();\n  const [job, setJob] = useState(null);\n  const [loading, setLoading] = useState(true);\n  const [error, setError] = useState('');\n  const [successMessage, setSuccessMessage] = useState('');\n  const [errorMessage, setErrorMessage] = useState('');\n  const [showConfirmModal, setShowConfirmModal] = useState(false);\n  const [locationData, setLocationData] = useState(null);\n  const [isApplied, setIsApplied] = useState(false);\n\n  useEffect(() => {\n    const fetchJobDetail = async () => {\n      try {\n        const response = await JobPostings.getById(id);\n        setJob(response.data);\n        \n        // 応募済みチェック(worker と job_seeker の両方に対応)\n        if (currentUser && (currentUser.user_type === 'job_seeker' || currentUser.user_type === 'worker')) {\n          try {\n            console.log('応募状況を確認中...');\n            const applicationsResponse = await Applications.getMyApplications();\n            console.log('応募一覧:', applicationsResponse.data);\n            \n            const hasApplied = applicationsResponse.data.some(\n              app => {\n                // statusがnullまたはundefinedの場合も考慮\n                const isMatch = app.job_posting_id === parseInt(id) && \n                               (!app.status || app.status === 'pending' || app.status === 'applied');\n                if (isMatch) {\n                  console.log('既に応募済みです:', app);\n                }\n                return isMatch;\n              }\n            );\n            setIsApplied(hasApplied);\n          } catch (err) {\n            console.log('応募状況の確認エラー:', err);\n            // エラーが発生しても続行(応募ボタンは表示)\n            setIsApplied(false);\n          }\n        }\n        \n        setLoading(false);\n      } catch (err) {\n        console.error('求人詳細取得エラー:', err);\n        setError('求人情報の取得に失敗しました');\n        setLoading(false);\n      }\n    };\n\n    fetchJobDetail();\n  }, [id, currentUser]);\n\n  const handleApply = () => {\n    if (!currentUser) {\n      navigate('/login');\n      return;\n    }\n\n    if (currentUser.user_type === 'farmer') {\n      setErrorMessage('農家ユーザーは求人に応募できません');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n\n    if (currentUser.user_type !== 'job_seeker' && currentUser.user_type !== 'worker') {\n      setErrorMessage('このアカウントタイプでは応募できません');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n\n    if (isApplied) {\n      setErrorMessage('既に応募済みです');\n      setTimeout(() => setErrorMessage(''), 3000);\n      return;\n    }\n\n    setShowConfirmModal(true);\n  };\n\n  const handleConfirmApply = async () => {\n    try {\n      await Applications.create({\n        job_posting_id: parseInt(id)\n      });\n      \n      setIsApplied(true);\n      setSuccessMessage('応募が完了しました!');\n      setShowConfirmModal(false);\n      \n      setTimeout(() => {\n        navigate('/profile');\n      }, 2000);\n    } catch (err) {\n      setErrorMessage(err.response?.data?.error || '応募に失敗しました');\n      setShowConfirmModal(false);\n      setTimeout(() => setErrorMessage(''), 3000);\n    }\n  };\n\n  const handleCancelApply = () => {\n    setShowConfirmModal(false);\n  };\n\n  const handleBack = () => {\n    navigate('/jobs');\n  };\n\n  const handleLocationFound = useCallback((result) => {\n    setLocationData(result);\n    console.log('📍 求人地の位置情報を取得:', result);\n  }, []);\n\n  const handleLocationError = useCallback((error) => {\n    console.warn('📍 求人地の位置情報取得エラー:', error);\n  }, []);\n\n  if (loading) {\n    return (\n      <JobDetailContainer>\n        <Loading>読み込み中...</Loading>\n      </JobDetailContainer>\n    );\n  }\n\n  if (error) {\n    return (\n      <JobDetailContainer>\n        <Error>{error}</Error>\n        <ButtonGroup>\n          <Button onClick={handleBack}>求人一覧に戻る</Button>\n        </ButtonGroup>\n      </JobDetailContainer>\n    );\n  }\n\n  if (!job) {\n    return (\n      <JobDetailContainer>\n        <Error>求人情報が見つかりませんでした</Error>\n        <ButtonGroup>\n          <Button onClick={handleBack}>求人一覧に戻る</Button>\n        </ButtonGroup>\n      </JobDetailContainer>\n    );\n  }\n\n  // 勤務日の配列化処理(Firefox対応)\n  const workDatesArray = job.work_dates ?\n    job.work_dates.split(',').map(date => {\n      const trimmedDate = date.trim();\n      const parsedDate = parseJobDate(trimmedDate);\n      return {\n        original: trimmedDate,\n        parsed: parsedDate,\n        formatted: parsedDate ? formatJobDate(parsedDate) : trimmedDate\n      };\n    }) : [];\n\n  // 自分の求人かチェック\n  const isMyJob = currentUser &&\n                  currentUser.user_type === 'farmer' &&\n                  job.user_id === currentUser.id;\n\n  // 応募可能かチェック\n  const canApply = !isApplied &&\n                   job.positions_filled < job.positions_available &&\n                   job.is_active;\n\n  return (\n    <JobDetailContainer>\n      {/* デバッグ情報(本番環境では削除) */}\n      {process.env.NODE_ENV === 'development' && (\n        <div style={{\n          background: '#f0f0f0',\n          padding: '10px',\n          marginBottom: '20px',\n          fontSize: '12px',\n          borderRadius: '4px'\n        }}>\n          <div>ユーザータイプ: {currentUser ? currentUser.user_type : 'ログインしていません'}</div>\n          <div>ユーザーID: {currentUser ? currentUser.id : 'N/A'}</div>\n          <div>求人投稿者ID: {job?.user_id}</div>\n          <div>自分の求人: {isMyJob ? 'はい' : 'いいえ'}</div>\n          <div>応募済み: {isApplied ? 'はい' : 'いいえ'}</div>\n          <div>応募可能: {canApply ? 'はい' : 'いいえ'}</div>\n        </div>\n      )}\n\n      <Card>\n        <JobTitle>{job.company_name}</JobTitle>\n\n        <JobContent>\n          {/* 勤務情報セクション */}\n          <JobSection>\n            <SectionTitle>勤務情報</SectionTitle>\n            <JobDetailItem>\n              <JobLabel>勤務地:</JobLabel>\n              {job.location}\n            </JobDetailItem>\n\n            {/* 集合場所 */}\n            {job.meeting_place && (\n              <JobDetailItem>\n                <JobLabel>集合場所:</JobLabel>\n                {job.meeting_place}\n              </JobDetailItem>\n            )}\n\n            <JobDetailItem>\n              <JobLabel>時給:</JobLabel>\n              {job.hourly_wage.toLocaleString()}円\n            </JobDetailItem>\n\n            <JobDetailItem>\n              <JobLabel>勤務曜日:</JobLabel>\n              {job.work_days}\n            </JobDetailItem>\n\n            {/* 具体的な勤務日(Firefox対応) */}\n            {workDatesArray.length > 0 && (\n              <JobDetailItem>\n                <JobLabel>勤務日:</JobLabel>\n                <DateChipsContainer>\n                  {workDatesArray.map((dateInfo, index) => (\n                    <DateChip key={index}>\n                      📅 {dateInfo.formatted}\n                    </DateChip>\n                  ))}\n                </DateChipsContainer>\n              </JobDetailItem>\n            )}\n\n            <JobDetailItem>\n              <JobLabel>勤務時間:</JobLabel>\n              {job.work_hours}\n            </JobDetailItem>\n\n            {job.seasonal_vegetables && (\n              <JobDetailItem>\n                <JobLabel>旬の野菜:</JobLabel>\n                {job.seasonal_vegetables}\n              </JobDetailItem>\n            )}\n\n            <JobDetailItem>\n              <JobLabel>募集人数:</JobLabel>\n              {job.positions_available}人 (残り{job.positions_available - job.positions_filled}人)\n            </JobDetailItem>\n\n            <JobDetailItem>\n              <JobLabel>募集開始日:</JobLabel>\n              {new Date(job.created_at).toLocaleDateString('ja-JP', {\n                year: 'numeric',\n                month: 'long',\n                day: 'numeric'\n              })}\n            </JobDetailItem>\n\n            <JobDetailItem>\n              <JobLabel>募集状況:</JobLabel>\n              {job.is_active ? '募集中' : '募集終了'}\n            </JobDetailItem>\n          </JobSection>\n\n          {/* マップセクション - 一時的に非表示\n          <MapSection>\n            <SectionTitle>📍 勤務地マップ</SectionTitle>\n            <LocationInfo>\n              <span>🏠</span>\n              <span>{job.location}</span>\n            </LocationInfo>\n            // 地図の精度問題のため一時的に非表示\n          </MapSection>\n          */}\n\n          {/* 業務内容セクション */}\n          <JobSection>\n            <SectionTitle>業務内容</SectionTitle>\n            <JobDetailItem>{job.job_description}</JobDetailItem>\n          </JobSection>\n\n          {/* 持ち物セクション */}\n          {job.belongings && (\n            <JobSection>\n              <SectionTitle>持ち物</SectionTitle>\n              <JobDetailItem>{job.belongings}</JobDetailItem>\n            </JobSection>\n          )}\n\n          {/* 備考セクション */}\n          {job.remarks && (\n            <RemarksSection>\n              <SectionTitle>📌 備考</SectionTitle>\n              <JobDetailItem style={{ marginBottom: 0 }}>\n                {job.remarks}\n              </JobDetailItem>\n            </RemarksSection>\n          )}\n\n          {/* 連絡先セクション */}\n          <JobSection>\n            <SectionTitle>連絡先</SectionTitle>\n            <JobDetailItem>\n              <JobLabel>連絡先:</JobLabel>\n              {job.contact}\n            </JobDetailItem>\n          </JobSection>\n\n          <ButtonGroup>\n            {/* 求人投稿者向けボタン */}\n            {isMyJob ? (\n              <>\n                <Button onClick={() => navigate(`/jobs/${id}/edit`)}>\n                  編集する\n                </Button>\n                {job.is_active && (\n                  <Button onClick={async () => {\n                    if (window.confirm('本当に募集を終了しますか?')) {\n                      try {\n                        await JobPostings.update(id, { is_active: false });\n                        setJob({ ...job, is_active: false });\n                        setSuccessMessage('募集を終了しました');\n                      } catch (err) {\n                        setErrorMessage('募集終了に失敗しました');\n                      }\n                    }\n                  }}>\n                    募集を終了する\n                  </Button>\n                )}\n              </>\n            ) : (\n              <>\n                {/* 応募者向けボタン(worker と job_seeker 両対応) */}\n                {currentUser ? (\n                  (currentUser.user_type === 'job_seeker' || currentUser.user_type === 'worker') ? (\n                    <Button\n                      onClick={handleApply}\n                      disabled={!canApply}\n                    >\n                      {isApplied ? '応募済み' :\n                       !job.is_active ? '募集終了' :\n                       job.positions_filled >= job.positions_available ? '定員に達しました' :\n                       '応募する'}\n                    </Button>\n                  ) : (\n                    // 農家ユーザーの場合\n                    <Button disabled>\n                      農家アカウントでは応募できません\n                    </Button>\n                  )\n                ) : (\n                  // ログインしていないユーザー向け\n                  <Button onClick={() => navigate('/login')}>\n                    ログインして応募\n                  </Button>\n                )}\n              </>\n            )}\n\n            <Button $secondary onClick={handleBack}>\n              求人一覧に戻る\n            </Button>\n          </ButtonGroup>\n\n          {errorMessage && <ErrorMessage>{errorMessage}</ErrorMessage>}\n          {successMessage && <SuccessMessage>{successMessage}</SuccessMessage>}\n        </JobContent>\n      </Card>\n\n      {showConfirmModal && (\n        <Modal>\n          <ModalContent>\n            <ModalTitle>応募の確認</ModalTitle>\n            <ModalText>\n              {job.company_name}の求人に応募します。よろしいですか?\n            </ModalText>\n            <ButtonGroup>\n              <Button onClick={handleConfirmApply}>応募する</Button>\n              <Button $secondary onClick={handleCancelApply}>キャンセル</Button>\n            </ButtonGroup>\n          </ModalContent>\n        </Modal>\n      )}\n    </JobDetailContainer>\n  );\n};\n\nexport default JobDetail;\n"],"mappings":";;AAAA;AACA,OAAOA,KAAK,IAAIC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAEC,WAAW,QAAQ,OAAO;AAC3E,SAASC,SAAS,EAAEC,WAAW,QAAQ,kBAAkB;AACzD,OAAOC,MAAM,MAAM,mBAAmB;AACtC,SAASC,WAAW,EAAEC,YAAY,QAAQ,eAAe;AACzD,SAASC,WAAW,QAAQ,2BAA2B;AACvD,OAAOC,MAAM,MAAM,kBAAkB;AACrC,OAAOC,IAAI,MAAM,gBAAgB;AACjC,OAAOC,cAAc,MAAM,uBAAuB;AAClD,SAASC,YAAY,EAAEC,aAAa,QAAQ,uBAAuB;;AAEnE;AAAA,SAAAC,MAAA,IAAAC,OAAA,EAAAC,QAAA,IAAAC,SAAA;AACA,MAAMC,kBAAkB,GAAGb,MAAM,CAACc,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACC,EAAA,GATIF,kBAAkB;AAWxB,MAAMG,QAAQ,GAAGhB,MAAM,CAACiB,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACC,GAAA,GATIF,QAAQ;AAWd,MAAMG,UAAU,GAAGnB,MAAM,CAACc,GAAG;AAC7B;AACA,CAAC;AAACM,GAAA,GAFID,UAAU;AAIhB,MAAME,UAAU,GAAGrB,MAAM,CAACc,GAAG;AAC7B;AACA,CAAC;AAACQ,GAAA,GAFID,UAAU;AAIhB,MAAME,YAAY,GAAGvB,MAAM,CAACwB,EAAE;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACC,GAAA,GARIF,YAAY;AAUlB,MAAMG,aAAa,GAAG1B,MAAM,CAAC2B,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACC,GAAA,GARIF,aAAa;AAUnB,MAAMG,QAAQ,GAAG7B,MAAM,CAAC8B,IAAI;AAC5B;AACA;AACA;AACA,CAAC;AAACC,GAAA,GAJIF,QAAQ;AAMd,MAAMG,kBAAkB,GAAGhC,MAAM,CAACc,GAAG;AACrC;AACA;AACA;AACA;AACA,CAAC;AAACmB,GAAA,GALID,kBAAkB;AAOxB,MAAME,QAAQ,GAAGlC,MAAM,CAAC8B,IAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACK,GAAA,GAbID,QAAQ;AAed,MAAME,cAAc,GAAGpC,MAAM,CAACc,GAAG;AACjC;AACA;AACA;AACA;AACA;AACA,CAAC;AAACuB,GAAA,GANID,cAAc;AAQpB,MAAME,WAAW,GAAGtC,MAAM,CAACc,GAAG;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACyB,GAAA,GAVID,WAAW;AAYjB,MAAME,YAAY,GAAGxC,MAAM,CAAC2B,CAAC;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACc,IAAA,GARID,YAAY;AAUlB,MAAME,cAAc,GAAG1C,MAAM,CAAC2B,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACgB,IAAA,GATID,cAAc;AAWpB,MAAME,OAAO,GAAG5C,MAAM,CAAC2B,CAAC;AACxB;AACA;AACA;AACA;AACA,CAAC;AAACkB,IAAA,GALID,OAAO;AAOb,MAAME,KAAK,GAAG9C,MAAM,CAAC2B,CAAC;AACtB;AACA;AACA;AACA;AACA,CAAC;AAACoB,IAAA,GALID,KAAK;AAOX,MAAME,KAAK,GAAGhD,MAAM,CAACc,GAAG;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AAACmC,IAAA,GAXID,KAAK;AAaX,MAAME,YAAY,GAAGlD,MAAM,CAACK,IAAI,CAAC;AACjC;AACA;AACA;AACA;AACA,CAAC;AAAC8C,IAAA,GALID,YAAY;AAOlB,MAAME,UAAU,GAAGpD,MAAM,CAACwB,EAAE;AAC5B;AACA;AACA,CAAC;AAAC6B,IAAA,GAHID,UAAU;AAKhB,MAAME,SAAS,GAAGtD,MAAM,CAAC2B,CAAC;AAC1B;AACA;AACA,CAAC;AAAC4B,IAAA,GAHID,SAAS;AAKf,MAAME,UAAU,GAAGxD,MAAM,CAACqB,UAAU,CAAC;AACrC;AACA;AACA;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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}