/* ============================================================ resume_interview.jsx — интервью на родном языке. Человек отвечает тапами и своими словами; из ответов собирается профиль, из профиля — резюме. Никакой клавиатуры не требуется: расчёт на людей, которым тяжело печатать. ============================================================ */ /* ---------- шапка: насколько резюме заполнено ---------- */ function ResumeProgress({ profile, pct, rt, lang }) { const chips = []; if (profile.name) chips.push({ icon: 'users', text: profile.name }); if (profile.age) chips.push({ icon: 'calendar', text: `${profile.age}` }); if (profile.city) chips.push({ icon: 'pin', text: tr(profile.city, lang) }); if (profile.prof) chips.push({ icon: 'tool', text: tr((PROF_CV[profile.prof] || PROF_CV.other).title, lang) }); if (profile.exp != null) chips.push({ icon: 'briefcase', text: expWords(profile.exp, lang) }); if (profile.certUploaded) chips.push({ icon: 'doc', text: rt.cv_certs }); if (profile.photo) chips.push({ icon: 'camera', text: rt.photoDone }); if (!chips.length) return null; return (
{rt.nav}
{rt.building}…
{chips.map((c, i) => (
{c.text}
))}
); } /* ---------- «вы сказали» → «в резюме это будет так» ---------- */ function SampleCard({ duty, lang, rt }) { return (
{rt.howItSounds}
«{tr(duty, lang)}»
{rt.howItSoundsEn}
{duty.en}
); } /* ---------- множественный выбор: что делали на работе ---------- */ function MultiPick({ duties, lang, rt, onDone }) { const [sel, setSel] = useState([]); const toggle = (i) => setSel(p => p.includes(i) ? p.filter(x => x !== i) : [...p, i]); return (
{rt.multiHint}
{duties.map((d, i) => { const on = sel.includes(i); return ( ); })}
); } /* ---------- сборка резюме ---------- */ function BuildOverlay({ rt }) { return (
{[0, 1, 2].map(i => ( ))}
{rt.building}…
{rt.buildingSub}
); } Object.assign(window, { ResumeProgress, SampleCard, MultiPick, BuildOverlay });