✨ 未来のキャリアを築こう
一員になりましょう!
PT JTrust Investments Indonesiaは投資と不動産分野において急成長している企業の一つです。会社の成長を支えるために、プロフェッショナル、熱心、及び高い倫理感を持つ人材を募集しています.
文化と影響
協力的で、支援に満ち、成果志向の環境.
🤝
協力的且つ友好的
エゴ無しで働き、ユーザーと同僚にとって最適の結果に集中する.
🚀
具体的な結果
迅速な決定、そしてお試しできる、失敗から学べるスペース.
👥
相互成長
メンタリング、学習資源、そして明確なキャリアパス.
自分に合うポジションを見つけましょう
検索とフィルターを使い filter 選択しを絞り込む.
簡単な採用プロセス
ステップ 1
応募
応募ボタン、またはHRメールで履歴書とポートフォリオを送信する.
ステップ 2
面接
能力と文化について関連チームと話し合う.
ステップ 3
オファー
オファーを受け入れ、当社との旅を始めよう.
`));
return;
}
const frag = document.createDocumentFragment();
list.forEach(j=>{
const safeTitle = escapeHtml(j.title);
const safeTeam = escapeHtml(j.team);
const safeLoc = escapeHtml(j.location);
const safeType = escapeHtml(j.type);
const tags = j.tags.map(t=>`
${escapeHtml(t)}`).join(' ');
const card = el(`
${safeTitle}
💼 ${safeTeam}
📍 ${safeLoc}
🏢 ${safeType}
✨ ${timeAgo(j.postedAt)}
${tags}
`);
frag.appendChild(card);
});
grid.appendChild(frag);
}function applyFilters(){
const q = ($('#careers-search').value||'').toLowerCase();
const team = $('#careers-filter-team').value;
const type = $('#careers-filter-type').value;
const base = getActiveJobs(); // hanya job aktif
const filtered = base.filter(j=>{
const mq = q ? (j.title+j.team+j.location+j.type+j.tags.join(' ')).toLowerCase().includes(q) : true;
const mt = team==='Semua Tim' ? true : j.team===team;
const mtype = type==='Semua Tipe' ? true : j.type===type;
return mq && mt && mtype;
});
renderJobs(filtered);
}// -------- Modal --------
const modal = $('#careers-modal');
const overlay = $('#careers-overlay');
const btnCancel = $('#careers-cancel');
const btnClose = $('#careers-close');
const form = $('#careers-form');
const fId = $('#careers-f-jobId');
const fTitle = $('#careers-f-jobTitle');
const fSubject = $('#careers-f-subject');
const fName = $('#careers-f-fullName');
const applyTitle = $('#careers-apply-title');
const applyMeta = $('#careers-apply-meta');
let lastFocus = null;function focusableElements(root){
return $$('a[href], button, textarea, input, select, [tabindex]:not([tabindex="-1"])', root)
.filter(el => !el.hasAttribute('disabled') && !el.getAttribute('aria-hidden'));
}function openApply(job){
lastFocus = document.activeElement;
fId.value = job.id;
fTitle.value = job.title;
fSubject.value = '';
applyTitle.textContent = job.title;
applyMeta.textContent = `${job.team} • ${job.location} • ${job.type}`;
modal.classList.add('show');
modal.setAttribute('aria-hidden','false');
document.body.style.overflow = 'hidden';
setTimeout(()=>fName.focus(), 0);
}
function closeApply(){
modal.classList.remove('show');
modal.setAttribute('aria-hidden','true');
document.body.style.overflow = '';
if(lastFocus) lastFocus.focus();
}// focus trap
modal.addEventListener('keydown',(e)=>{
if(e.key !== 'Tab') return;
const fEls = focusableElements(modal);
if(!fEls.length) return;
const first = fEls[0], last = fEls[fEls.length-1];
if(e.shiftKey && document.activeElement === first){ last.focus(); e.preventDefault(); }
else if(!e.shiftKey && document.activeElement === last){ first.focus(); e.preventDefault(); }
});document.addEventListener('click',(e)=>{
const btn = e.target.closest('[data-apply]');
if(!btn) return;
const id = btn.getAttribute('data-apply');
// cari dari daftar saat ini (aktif)
const job = getActiveJobs().find(j=>j.id===id);
if(job) openApply(job);
});
overlay.addEventListener('click', closeApply);
if(btnClose) btnClose.addEventListener('click', closeApply);
if(btnCancel) btnCancel.addEventListener('click', (e)=>{ e.preventDefault(); closeApply(); });
document.addEventListener('keydown',(e)=>{ if(e.key==='Escape' && modal.classList.contains('show')) closeApply(); });form.addEventListener('submit',(e)=>{
const name = fName.value.trim();
const title = fTitle.value.trim();
$('#careers-f-subject').value = `Lamaran ${title} - ${name}`;
const ids = ['careers-f-cv','careers-f-ktp','careers-f-transkrip','careers-f-ijazah'];
const files = ids.map(id=>document.getElementById(id).files[0]).filter(Boolean);
const MAX = 10*1024*1024;
for(const file of files){
if(file.size>MAX){ e.preventDefault(); alert('Ukuran berkas melebihi 10MB.'); return; }
}
});// -------- Init --------
function init(){
renderCompany();
initFilters();
renderJobs(getActiveJobs());
$('#careers-search').addEventListener('input', debounce(applyFilters, 200));
$('#careers-filter-team').addEventListener('change', applyFilters);
$('#careers-filter-type').addEventListener('change', applyFilters);
// only relayout on resize, don't reset filters
window.addEventListener('resize', ()=> layoutJobsGrid());
}
document.addEventListener('DOMContentLoaded', init);// === Ambil WP Nonce dari endpoint apply.php ===
async function fetchNonce(){
try{
const res = await fetch('/wp-content/themes/toffeecore-child/apply.php?nonce=1', { credentials: 'same-origin' });
if(!res.ok) return;
const data = await res.json();
const f = document.getElementById('careers-f-nonce');
if(f && data && data.nonce){ f.value = data.nonce; }
}catch(e){ /* silent */ }
}
document.addEventListener('DOMContentLoaded', fetchNonce);// -------- JSON-LD --------
(function injectSchema(){
try{
// Emit hanya job aktif agar tidak dianggap expired
const ACTIVE = getActiveJobs();
const items = ACTIVE.map((j, idx) => {
const lowerLoc = (j.location||"").toLowerCase();
let jobLocationType;
if (lowerLoc.includes('remote')) jobLocationType = "TELECOMMUTE";
else if (lowerLoc.includes('hybrid')) jobLocationType = "HYBRID";
else jobLocationType = "ONSITE";return {
"@type":"ListItem",
position: idx+1,
item: {
"@type":"JobPosting",
title: j.title,
employmentType: j.type,
datePosted: j.postedAt,
hiringOrganization: { "@type":"Organization", name: CAREERS_COMPANY_NAME },
jobLocationType: jobLocationType,
jobLocation: jobLocationType==="TELECOMMUTE" ? undefined : {
"@type":"Place",
address: {
"@type": "PostalAddress",
addressLocality: (j.location.split(',')[0]||"").trim(),
addressCountry: "ID"
}
},
applicantLocationRequirements: { "@type": "Country", name: "Indonesia" },
validThrough: new Date(new Date(j.postedAt).getTime()+30*24*3600*1000).toISOString(),
description: `${j.title} di ${CAREERS_COMPANY_NAME}. Lokasi: ${j.location}. Tipe: ${j.type}.`
}
};
});const ld = { "@context":"https://schema.org", "@type":"ItemList", itemListElement: items };
const s=document.createElement('script'); s.type='application/ld+json'; s.text=JSON.stringify(ld);
document.currentScript.parentNode.appendChild(s);
}catch(_){}
})();