/* berkas.js — Halaman daftar & unggah berkas pelamar */
(function () {
'use strict';
var $ = function (s, r) { return (r || document).querySelector(s); };
var SLOTS = [
{ key: 'cv', label: 'CV' },
{ key: 'test', label: 'Hasil Test' },
{ key: 'portofolio', label: 'Portofolio' }
];
var MAX_FILE = 5 * 1024 * 1024; // 5 MB
var q = '';
function esc(v) { return UI.escape(v); }
function init() {
Store.init();
render();
$('#bSearch').addEventListener('input', function (e) { q = e.target.value.toLowerCase(); render(); });
}
function slotCell(c, slot) {
var b = c.berkas && c.berkas[slot.key];
var value = 'Belum ada';
if (b) {
var label = b.mode === 'file' ? b.name : (b.url.length > 34 ? b.url.slice(0, 34) + '…' : b.url);
value = '
' + (b.mode === 'file' ? '📎 ' : '🔗 ') + esc(label) +
(b.mode === 'file' ? ' (' + UI.formatBytes(b.size) + ')' : '') + '
';
}
return '' + value +
' ' +
(b ? '' : '') +
'' +
'' +
(b ? '' : '') +
' | ';
}
function render() {
var list = Store.get().candidates.filter(function (c) {
if (!q) return true;
return (c.nama || '').toLowerCase().indexOf(q) >= 0 || (c.posisi || '').toLowerCase().indexOf(q) >= 0;
});
if (!list.length) {
$('#bBody').innerHTML = '';
$('#bEmpty').classList.remove('hidden');
$('.table-wrap').classList.add('hidden');
return;
}
$('#bEmpty').classList.add('hidden');
$('.table-wrap').classList.remove('hidden');
$('#bBody').innerHTML = list.map(function (c) {
return '' +
'| ' + esc(c.nama) + ' ' + esc(c.posisi) + ' | ' +
SLOTS.map(function (s) { return slotCell(c, s); }).join('') +
'
';
}).join('');
}
function setBerkas(id, slot, value) {
var c = Store.candidateById(id);
if (!c) return;
c.berkas = c.berkas || { cv: null, test: null, portofolio: null };
var old = c.berkas[slot];
if (old && old.mode === 'file' && old.fileId && (!value || value.fileId !== old.fileId)) {
Store.deleteFile(old.fileId).catch(function () {});
}
c.berkas[slot] = value;
Store.save();
}
function handleFile(input) {
var file = input.files && input.files[0];
if (!file) return;
var id = input.getAttribute('data-id');
var slot = input.getAttribute('data-berkas-file');
if (file.size > MAX_FILE) { UI.toast('Ukuran berkas maksimal 5 MB.', 'err'); input.value = ''; return; }
UI.toast('Menyimpan berkas...');
Store.saveFile(file).then(function (meta) {
setBerkas(id, slot, { mode: 'file', fileId: meta.id, name: meta.name, size: meta.size, type: meta.type });
UI.toast('Berkas tersimpan.', 'ok');
render();
}).catch(function (err) {
UI.toast('Gagal menyimpan berkas: ' + err.message, 'err');
});
input.value = '';
}
document.addEventListener('click', function (e) {
var openBtn = e.target.closest('[data-open]');
if (openBtn) {
var c = Store.candidateById(openBtn.getAttribute('data-id'));
var b = c && c.berkas && c.berkas[openBtn.getAttribute('data-open')];
if (!b) return;
if (b.mode === 'link') { window.open(b.url, '_blank', 'noopener'); return; }
Store.getFileUrl(b.fileId).then(function (url) { window.open(url, '_blank', 'noopener'); })
.catch(function () { UI.toast('Berkas tidak ditemukan.', 'err'); });
return;
}
var linkBtn = e.target.closest('[data-berkas-link]');
if (linkBtn) {
var id = linkBtn.getAttribute('data-id');
var slot = linkBtn.getAttribute('data-berkas-link');
var url = window.prompt('Masukkan URL berkas (Google Drive, dll):');
if (url && url.trim()) {
setBerkas(id, slot, { mode: 'link', url: url.trim() });
UI.toast('Link tersimpan.', 'ok');
render();
}
return;
}
var delBtn = e.target.closest('[data-berkas-del]');
if (delBtn) {
if (UI.confirmDialog('Hapus berkas ini?')) {
setBerkas(delBtn.getAttribute('data-id'), delBtn.getAttribute('data-berkas-del'), null);
UI.toast('Berkas dihapus.', 'ok');
render();
}
}
});
document.addEventListener('change', function (e) {
var input = e.target.closest('[data-berkas-file]');
if (input) handleFile(input);
});
document.addEventListener('DOMContentLoaded', init);
})();