{"ast":null,"code":"import _objectSpread from\"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/node_modules/@babel/runtime/helpers/esm/objectSpread2.js\";import _taggedTemplateLiteral from\"/home/fanfarm/FanFarm/system/V3fanfarm-ubuntu-local/V3fanfarm-frontend/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js\";var _templateObject,_templateObject2,_templateObject3,_templateObject4,_templateObject5,_templateObject6,_templateObject7,_templateObject8,_templateObject9,_templateObject0,_templateObject1,_templateObject10,_templateObject11,_templateObject12,_templateObject13,_templateObject14,_templateObject15,_templateObject16,_templateObject17,_templateObject18,_templateObject19;// src/components/job/JobDetail.js - Firefox対応版・新フィールド表示対応\nimport React,{useState,useEffect,useContext,useCallback}from'react';import{useParams,useNavigate}from'react-router-dom';import styled from'styled-components';import{JobPostings,Applications}from'../../api/api';import{AuthContext}from'../../context/AuthContext';import Button from'../common/Button';import Card from'../common/Card';import JobLocationMap from'../map/JobLocationMap';import{parseJobDate,formatJobDate}from'../../utils/dateUtils';// スタイルコンポーネント\nimport{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from\"react/jsx-runtime\";const JobDetailContainer=styled.div(_templateObject||(_templateObject=_taggedTemplateLiteral([\"\\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\"])));const JobTitle=styled.h1(_templateObject2||(_templateObject2=_taggedTemplateLiteral([\"\\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\"])));const JobContent=styled.div(_templateObject3||(_templateObject3=_taggedTemplateLiteral([\"\\n margin-top: 32px;\\n\"])));const JobSection=styled.div(_templateObject4||(_templateObject4=_taggedTemplateLiteral([\"\\n margin-bottom: 24px;\\n\"])));const SectionTitle=styled.h2(_templateObject5||(_templateObject5=_taggedTemplateLiteral([\"\\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\"])));const JobDetailItem=styled.p(_templateObject6||(_templateObject6=_taggedTemplateLiteral([\"\\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\"])));const JobLabel=styled.span(_templateObject7||(_templateObject7=_taggedTemplateLiteral([\"\\n font-weight: 700;\\n margin-right: 8px;\\n color: #555;\\n\"])));const DateChipsContainer=styled.div(_templateObject8||(_templateObject8=_taggedTemplateLiteral([\"\\n display: flex;\\n flex-wrap: wrap;\\n gap: 8px;\\n margin-top: 8px;\\n\"])));const DateChip=styled.span(_templateObject9||(_templateObject9=_taggedTemplateLiteral([\"\\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\"])));const RemarksSection=styled.div(_templateObject0||(_templateObject0=_taggedTemplateLiteral([\"\\n background: #fffef7;\\n border: 1px solid #fff3cd;\\n border-radius: var(--border-radius);\\n padding: 16px;\\n margin-top: 16px;\\n\"])));const ButtonGroup=styled.div(_templateObject1||(_templateObject1=_taggedTemplateLiteral([\"\\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\"])));const ErrorMessage=styled.p(_templateObject10||(_templateObject10=_taggedTemplateLiteral([\"\\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\"])));const SuccessMessage=styled.p(_templateObject11||(_templateObject11=_taggedTemplateLiteral([\"\\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\"])));const Loading=styled.p(_templateObject12||(_templateObject12=_taggedTemplateLiteral([\"\\n text-align: center;\\n font-size: 18px;\\n color: var(--text-light);\\n margin: 48px 0;\\n\"])));const Error=styled.p(_templateObject13||(_templateObject13=_taggedTemplateLiteral([\"\\n text-align: center;\\n font-size: 18px;\\n color: var(--error-color);\\n margin: 48px 0;\\n\"])));const Modal=styled.div(_templateObject14||(_templateObject14=_taggedTemplateLiteral([\"\\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\"])));const ModalContent=styled(Card)(_templateObject15||(_templateObject15=_taggedTemplateLiteral([\"\\n width: 90%;\\n max-width: 500px;\\n padding: 32px;\\n text-align: center;\\n\"])));const ModalTitle=styled.h2(_templateObject16||(_templateObject16=_taggedTemplateLiteral([\"\\n margin-bottom: 24px;\\n color: var(--primary-color);\\n\"])));const ModalText=styled.p(_templateObject17||(_templateObject17=_taggedTemplateLiteral([\"\\n font-size: 18px;\\n margin-bottom: 24px;\\n\"])));const MapSection=styled(JobSection)(_templateObject18||(_templateObject18=_taggedTemplateLiteral([\"\\n border: 1px solid #e0e0e0;\\n border-radius: var(--border-radius);\\n padding: 20px;\\n background: #fafafa;\\n\"])));const LocationInfo=styled.div(_templateObject19||(_templateObject19=_taggedTemplateLiteral([\"\\n display: flex;\\n align-items: center;\\n gap: 8px;\\n margin-bottom: 16px;\\n font-size: 16px;\\n color: var(--text-color);\\n\"])));const JobDetail=()=>{const{id}=useParams();const{currentUser}=useContext(AuthContext);const navigate=useNavigate();const[job,setJob]=useState(null);const[loading,setLoading]=useState(true);const[error,setError]=useState('');const[successMessage,setSuccessMessage]=useState('');const[errorMessage,setErrorMessage]=useState('');const[showConfirmModal,setShowConfirmModal]=useState(false);const[locationData,setLocationData]=useState(null);const[isApplied,setIsApplied]=useState(false);useEffect(()=>{const fetchJobDetail=async()=>{try{const response=await JobPostings.getById(id);setJob(response.data);// 応募済みチェック(worker と job_seeker の両方に対応)\nif(currentUser&&(currentUser.user_type==='job_seeker'||currentUser.user_type==='worker')){try{console.log('応募状況を確認中...');const applicationsResponse=await Applications.getMyApplications();console.log('応募一覧:',applicationsResponse.data);const hasApplied=applicationsResponse.data.some(app=>{// statusがnullまたはundefinedの場合も考慮\nconst isMatch=app.job_posting_id===parseInt(id)&&(!app.status||app.status==='pending'||app.status==='applied');if(isMatch){console.log('既に応募済みです:',app);}return isMatch;});setIsApplied(hasApplied);}catch(err){console.log('応募状況の確認エラー:',err);// エラーが発生しても続行(応募ボタンは表示)\nsetIsApplied(false);}}setLoading(false);}catch(err){console.error('求人詳細取得エラー:',err);setError('求人情報の取得に失敗しました');setLoading(false);}};fetchJobDetail();},[id,currentUser]);const handleApply=()=>{if(!currentUser){navigate('/login');return;}if(currentUser.user_type==='farmer'){setErrorMessage('農家ユーザーは求人に応募できません');setTimeout(()=>setErrorMessage(''),3000);return;}if(currentUser.user_type!=='job_seeker'&¤tUser.user_type!=='worker'){setErrorMessage('このアカウントタイプでは応募できません');setTimeout(()=>setErrorMessage(''),3000);return;}if(isApplied){setErrorMessage('既に応募済みです');setTimeout(()=>setErrorMessage(''),3000);return;}setShowConfirmModal(true);};const handleConfirmApply=async()=>{try{await Applications.create({job_posting_id:parseInt(id)});setIsApplied(true);setSuccessMessage('応募が完了しました!');setShowConfirmModal(false);setTimeout(()=>{navigate('/profile');},2000);}catch(err){var _err$response,_err$response$data;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)||'応募に失敗しました');setShowConfirmModal(false);setTimeout(()=>setErrorMessage(''),3000);}};const handleCancelApply=()=>{setShowConfirmModal(false);};const handleBack=()=>{navigate('/jobs');};const handleLocationFound=useCallback(result=>{setLocationData(result);console.log('📍 求人地の位置情報を取得:',result);},[]);const handleLocationError=useCallback(error=>{console.warn('📍 求人地の位置情報取得エラー:',error);},[]);if(loading){return/*#__PURE__*/_jsx(JobDetailContainer,{children:/*#__PURE__*/_jsx(Loading,{children:\"\\u8AAD\\u307F\\u8FBC\\u307F\\u4E2D...\"})});}if(error){return/*#__PURE__*/_jsxs(JobDetailContainer,{children:[/*#__PURE__*/_jsx(Error,{children:error}),/*#__PURE__*/_jsx(ButtonGroup,{children:/*#__PURE__*/_jsx(Button,{onClick:handleBack,children:\"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"})})]});}if(!job){return/*#__PURE__*/_jsxs(JobDetailContainer,{children:[/*#__PURE__*/_jsx(Error,{children:\"\\u6C42\\u4EBA\\u60C5\\u5831\\u304C\\u898B\\u3064\\u304B\\u308A\\u307E\\u305B\\u3093\\u3067\\u3057\\u305F\"}),/*#__PURE__*/_jsx(ButtonGroup,{children:/*#__PURE__*/_jsx(Button,{onClick:handleBack,children:\"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"})})]});}// 勤務日の配列化処理(Firefox対応)\nconst workDatesArray=job.work_dates?job.work_dates.split(',').map(date=>{const trimmedDate=date.trim();const parsedDate=parseJobDate(trimmedDate);return{original:trimmedDate,parsed:parsedDate,formatted:parsedDate?formatJobDate(parsedDate):trimmedDate};}):[];// 自分の求人かチェック\nconst isMyJob=currentUser&¤tUser.user_type==='farmer'&&job.user_id===currentUser.id;// 応募可能かチェック\nconst canApply=!isApplied&&job.positions_filled<job.positions_available&&job.is_active;return/*#__PURE__*/_jsxs(JobDetailContainer,{children:[process.env.NODE_ENV==='development'&&/*#__PURE__*/_jsxs(\"div\",{style:{background:'#f0f0f0',padding:'10px',marginBottom:'20px',fontSize:'12px',borderRadius:'4px'},children:[/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u30E6\\u30FC\\u30B6\\u30FC\\u30BF\\u30A4\\u30D7: \",currentUser?currentUser.user_type:'ログインしていません']}),/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u30E6\\u30FC\\u30B6\\u30FCID: \",currentUser?currentUser.id:'N/A']}),/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u6C42\\u4EBA\\u6295\\u7A3F\\u8005ID: \",job===null||job===void 0?void 0:job.user_id]}),/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u81EA\\u5206\\u306E\\u6C42\\u4EBA: \",isMyJob?'はい':'いいえ']}),/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u5FDC\\u52DF\\u6E08\\u307F: \",isApplied?'はい':'いいえ']}),/*#__PURE__*/_jsxs(\"div\",{children:[\"\\u5FDC\\u52DF\\u53EF\\u80FD: \",canApply?'はい':'いいえ']})]}),/*#__PURE__*/_jsxs(Card,{children:[/*#__PURE__*/_jsx(JobTitle,{children:job.company_name}),/*#__PURE__*/_jsxs(JobContent,{children:[/*#__PURE__*/_jsxs(JobSection,{children:[/*#__PURE__*/_jsx(SectionTitle,{children:\"\\u52E4\\u52D9\\u60C5\\u5831\"}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52E4\\u52D9\\u5730:\"}),job.location]}),job.meeting_place&&/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u96C6\\u5408\\u5834\\u6240:\"}),job.meeting_place]}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u6642\\u7D66:\"}),job.hourly_wage.toLocaleString(),\"\\u5186\"]}),workDatesArray.length>0&&/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52E4\\u52D9\\u65E5:\"}),/*#__PURE__*/_jsx(DateChipsContainer,{children:workDatesArray.map((dateInfo,index)=>/*#__PURE__*/_jsxs(DateChip,{children:[\"\\uD83D\\uDCC5 \",dateInfo.formatted]},index))})]}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52E4\\u52D9\\u6642\\u9593:\"}),job.work_hours]}),job.seasonal_vegetables&&/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u65EC\\u306E\\u91CE\\u83DC:\"}),job.seasonal_vegetables]}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52DF\\u96C6\\u4EBA\\u6570:\"}),job.positions_available,\"\\u4EBA \\uFF08\\u6B8B\\u308A\",job.positions_available-job.positions_filled,\"\\u4EBA\\uFF09\"]}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52DF\\u96C6\\u958B\\u59CB\\u65E5:\"}),new Date(job.created_at).toLocaleDateString('ja-JP',{year:'numeric',month:'long',day:'numeric'})]}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u52DF\\u96C6\\u72B6\\u6CC1:\"}),job.is_active?'募集中':'募集終了']})]}),/*#__PURE__*/_jsxs(JobSection,{children:[/*#__PURE__*/_jsx(SectionTitle,{children:\"\\u696D\\u52D9\\u5185\\u5BB9\"}),/*#__PURE__*/_jsx(JobDetailItem,{children:job.job_description})]}),job.belongings&&/*#__PURE__*/_jsxs(JobSection,{children:[/*#__PURE__*/_jsx(SectionTitle,{children:\"\\u6301\\u3061\\u7269\"}),/*#__PURE__*/_jsx(JobDetailItem,{children:job.belongings})]}),job.remarks&&/*#__PURE__*/_jsxs(RemarksSection,{children:[/*#__PURE__*/_jsx(SectionTitle,{children:\"\\uD83D\\uDCCC \\u5099\\u8003\"}),/*#__PURE__*/_jsx(JobDetailItem,{style:{marginBottom:0},children:job.remarks})]}),/*#__PURE__*/_jsxs(JobSection,{children:[/*#__PURE__*/_jsx(SectionTitle,{children:\"\\u9023\\u7D61\\u5148\"}),/*#__PURE__*/_jsxs(JobDetailItem,{children:[/*#__PURE__*/_jsx(JobLabel,{children:\"\\u9023\\u7D61\\u5148:\"}),job.contact]})]}),/*#__PURE__*/_jsxs(ButtonGroup,{children:[isMyJob?/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Button,{onClick:()=>navigate(\"/jobs/\".concat(id,\"/edit\")),children:\"\\u7DE8\\u96C6\\u3059\\u308B\"}),job.is_active&&/*#__PURE__*/_jsx(Button,{onClick:async()=>{if(window.confirm('本当に募集を終了しますか?')){try{await JobPostings.update(id,{is_active:false});setJob(_objectSpread(_objectSpread({},job),{},{is_active:false}));setSuccessMessage('募集を終了しました');}catch(err){setErrorMessage('募集終了に失敗しました');}}},children:\"\\u52DF\\u96C6\\u3092\\u7D42\\u4E86\\u3059\\u308B\"})]}):/*#__PURE__*/_jsx(_Fragment,{children:currentUser?currentUser.user_type==='job_seeker'||currentUser.user_type==='worker'?/*#__PURE__*/_jsx(Button,{onClick:handleApply,disabled:!canApply,children:isApplied?'応募済み':!job.is_active?'募集終了':job.positions_filled>=job.positions_available?'定員に達しました':'応募する'}):/*#__PURE__*/// 農家ユーザーの場合\n_jsx(Button,{disabled:true,children:\"\\u8FB2\\u5BB6\\u30A2\\u30AB\\u30A6\\u30F3\\u30C8\\u3067\\u306F\\u5FDC\\u52DF\\u3067\\u304D\\u307E\\u305B\\u3093\"}):/*#__PURE__*/// ログインしていないユーザー向け\n_jsx(Button,{onClick:()=>navigate('/login'),children:\"\\u30ED\\u30B0\\u30A4\\u30F3\\u3057\\u3066\\u5FDC\\u52DF\"})}),/*#__PURE__*/_jsx(Button,{$secondary:true,onClick:handleBack,children:\"\\u6C42\\u4EBA\\u4E00\\u89A7\\u306B\\u623B\\u308B\"})]}),errorMessage&&/*#__PURE__*/_jsx(ErrorMessage,{children:errorMessage}),successMessage&&/*#__PURE__*/_jsx(SuccessMessage,{children:successMessage})]})]}),showConfirmModal&&/*#__PURE__*/_jsx(Modal,{children:/*#__PURE__*/_jsxs(ModalContent,{children:[/*#__PURE__*/_jsx(ModalTitle,{children:\"\\u5FDC\\u52DF\\u306E\\u78BA\\u8A8D\"}),/*#__PURE__*/_jsxs(ModalText,{children:[job.company_name,\"\\u306E\\u6C42\\u4EBA\\u306B\\u5FDC\\u52DF\\u3057\\u307E\\u3059\\u3002\\u3088\\u308D\\u3057\\u3044\\u3067\\u3059\\u304B\\uFF1F\"]}),/*#__PURE__*/_jsxs(ButtonGroup,{children:[/*#__PURE__*/_jsx(Button,{onClick:handleConfirmApply,children:\"\\u5FDC\\u52DF\\u3059\\u308B\"}),/*#__PURE__*/_jsx(Button,{$secondary:true,onClick:handleCancelApply,children:\"\\u30AD\\u30E3\\u30F3\\u30BB\\u30EB\"})]})]})})]});};export default JobDetail;","map":{"version":3,"names":["React","useState","useEffect","useContext","useCallback","useParams","useNavigate","styled","JobPostings","Applications","AuthContext","Button","Card","JobLocationMap","parseJobDate","formatJobDate","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","JobDetailContainer","div","_templateObject","_taggedTemplateLiteral","JobTitle","h1","_templateObject2","JobContent","_templateObject3","JobSection","_templateObject4","SectionTitle","h2","_templateObject5","JobDetailItem","p","_templateObject6","JobLabel","span","_templateObject7","DateChipsContainer","_templateObject8","DateChip","_templateObject9","RemarksSection","_templateObject0","ButtonGroup","_templateObject1","ErrorMessage","_templateObject10","SuccessMessage","_templateObject11","Loading","_templateObject12","Error","_templateObject13","Modal","_templateObject14","ModalContent","_templateObject15","ModalTitle","_templateObject16","ModalText","_templateObject17","MapSection","_templateObject18","LocationInfo","_templateObject19","JobDetail","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","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","length","dateInfo","index","work_hours","seasonal_vegetables","Date","created_at","toLocaleDateString","year","month","day","job_description","belongings","remarks","contact","concat","window","confirm","update","_objectSpread","disabled","$secondary"],"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 {/* 具体的な勤務日(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":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}