PageSourceSearch

https://app.jogisoccer.com/assets/PublicRecruitmentPage-CdlpiXAn.js

js jogisoccer.com collected 2026-09-25 03:42:32 UTC 6,538 bytes, 1 lines download raw bytes

1import{a as b,j as e}from"./vendor-ui-Bjmdnww1.js";import{b as j,c as f,r as x}from"./vendor-react-w96dOakU.js";import{aK as N,ar as v,a6 as w,U as g,y as S,s as o,D as d,Z as _,O as C,o as z}from"./main-BQFKxBML.js";import{r as P}from"./recruitmentService-CqOl2md2.js";const u={referee:{icon:e.jsx(z,{size:20,className:"text-warning"}),color:"text-warning",bgColor:"bg-warning-medium",label:"Referee"},mercenary:{icon:e.jsx(g,{size:20,className:"text-info"}),color:"text-info",bgColor:"bg-info-medium",label:"Mercenary"},opponent:{icon:e.jsx(C,{size:20,className:"text-success"}),color:"text-success",bgColor:"bg-success-medium",label:"Opponent"},player:{icon:e.jsx(_,{size:20,className:"text-purple-500"}),color:"text-purple-500",bgColor:"bg-purple-500/15",label:"Recruit"}},k={ko:{referee:"심판",mercenary:"용병",opponent:"상대팀",player:"선수 모집"}};function U(){const a=j(),[n,r]=f(),[t,c]=x.useState(n.get("type")||"all"),[l,y]=x.useState(n.get("country")||""),i={};t!=="all"&&(i.type=t),l&&(i.country=l);const{data:m,isLoading:h}=b({queryKey:["public-recruitment",i],queryFn:()=>P.publicList(i).then(s=>s.data)});x.useEffect(()=>{const s=new URLSearchParams;t!=="all"&&s.set("type",t),l&&s.set("country",l),r(s,{replace:!0})},[t,l]);const p=[{value:"all",label:"전체"},{value:"opponent",label:"상대팀"},{value:"mercenary",label:"용병"},{value:"player",label:"선수 모집"},{value:"referee",label:"심판"}];return e.jsxs("div",{className:"min-h-screen bg-[#0a0a0a] text-white",children:[e.jsxs("div",{className:"bg-gradient-to-b from-primary-600 to-primary-800 px-4 py-8 text-center",children:[e.jsx("h1",{className:"text-2xl font-bold",children:"JoGi Soccer"}),e.jsx("p",{className:"text-sm text-white/70 mt-1",children:"구인 게시판 · Recruitment Board"})]}),e.jsxs("div",{className:"max-w-2xl mx-auto px-4 py-4 space-y-4",children:[e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs("div",{className:"relative flex-1",children:[e.jsx(N,{size:16,className:"absolute left-3 top-1/2 -translate-y-1/2 text-gray-500 z-10"}),e.jsx(v,{value:l,onChange:y,options:[{value:"",label:"All Countries"},{value:"KR",label:"🇰🇷 한국"},{value:"US",label:"🇺🇸 USA"},{value:"JP",label:"🇯🇵 日本"}],placeholder:"All Countries",className:"!pl-9 !pr-3 !py-2.5 !bg-[#1a1a1a] !border !border-gray-800 !rounded-xl !text-sm !text-gray-200 !mt-0"})]})}),e.jsx("div",{className:"flex gap-2 overflow-x-auto no-scrollbar",children:p.map(s=>e.jsx("button",{onClick:()=>c(s.value),className:`px-3 py-1.5 rounded-full text-xs font-medium transition-colors whitespace-nowrap ${t===s.value?"bg-primary-600 text-white":"bg-[#1a1a1a] text-gray-400 hover:bg-[#222] border border-gray-800"}`,children:s.label},s.value))}),h?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(w,{size:24,className:"animate-spin text-gray-500"})}):m!=null&&m.length?e.jsx("div",{className:"space-y-3",children:m.map(s=>e.jsx(L,{post:s,onClick:()=>a(`/board/${s.id}`)},s.id))}):e.jsxs("div",{className:"text-center py-20",children:[e.jsx(g,{size:32,className:"mx-auto text-gray-600 mb-2"}),e.jsx("p",{className:"text-sm text-gray-500",children:"현재 모집 중인 글이 없습니다"}),e.jsx("p",{className:"text-xs text-gray-600 mt-1",children:"No open recruitment posts"})]}),e.jsxs("div",{className:"bg-[#1a1a1a] border border-gray-800 rounded-xl p-6 text-center mt-8",children:[e.jsx("h3",{className:"text-base font-semibold text-gray-200",children:"팀을 운영하고 계신가요?"}),e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"JoGi Soccer에서 구인글을 올리고 팀을 관리하세요"}),e.jsx("button",{onClick:()=>a("/login"),className:"mt-4 px-6 py-2.5 bg-primary-600 text-white rounded-xl text-sm font-medium hover:bg-primary-700 transition-colors",children:"시작하기 · Get Started"})]})]})]})}function L({post:a,onClick:n}){const r=u[a.type]||u.mercenary,t=k.ko[a.type]||a.type,c=a.type==="player";return e.jsxs("button",{onClick:n,className:"w-full text-left bg-[#1a1a1a] rounded-xl p-4 border border-gray-800 hover:border-gray-600 transition-colors",children:[e.jsxs("div",{className:"flex items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex items-center gap-3 min-w-0",children:[e.jsx("div",{className:`shrink-0 w-10 h-10 rounded-lg flex items-center justify-center ${r.bgColor}`,children:r.icon}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:`text-xs font-semibold px-2 py-0.5 rounded-full ${r.bgColor} ${r.color}`,children:t}),a.type==="opponent"&&a.match_format&&e.jsx("span",{className:"text-xs text-gray-500",children:a.match_format}),Array.isArray(a.positions_needed)&&a.positions_needed.length>0&&e.jsx("span",{className:"text-xs text-gray-500",children:a.positions_needed.join(", ")})]}),e.jsx("p",{className:"text-sm font-medium text-gray-200 truncate",children:a.club_name})]})]}),e.jsx(S,{size:16,className:"shrink-0 text-gray-600 mt-1"})]}),e.jsx("div",{className:"mt-3 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-gray-400",children:c?e.jsxs(e.Fragment,{children:[a.region&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(o,{size:14,className:"text-gray-600"}),a.region]}),a.regular_schedule&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(d,{size:14,className:"text-gray-600"}),a.regular_schedule]}),e.jsx("span",{className:"text-gray-600",children:a.deadline?`~${a.deadline}`:"상시모집"})]}):e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(d,{size:14,className:"text-gray-600"}),a.schedule_date,a.schedule_time&&` ${String(a.schedule_time).slice(0,5)}`]}),a.location_name&&e.jsxs("span",{className:"flex items-center gap-1",children:[e.jsx(o,{size:14,className:"text-gray-600"}),a.location_name]})]})}),e.jsxs("div",{className:"mt-2 flex items-center justify-between",children:[e.jsx("span",{className:"text-xs font-medium",children:c&&a.monthly_fee&&Number(a.monthly_fee)>0?e.jsxs("span",{className:"text-success",children:["월 ₩",Number(a.monthly_fee).toLocaleStr
1ing()]}):a.fee&&Number(a.fee)>0?e.jsxs("span",{className:"text-success",children:["₩",Number(a.fee).toLocaleString()]}):e.jsx("span",{className:"text-gray-600",children:"무료"})}),a.distance_km!=null&&e.jsxs("span",{className:"text-xs text-gray-600 flex items-center gap-1",children:[e.jsx(o,{size:14}),a.distance_km,"km"]})]})]})}export{U as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.