/* templates.js — Halaman manajemen template pesan */
(function () {
'use strict';
var $ = function (s, r) { return (r || document).querySelector(s); };
function esc(v) { return UI.escape(v); }
function sampleContext() {
return {
nama: 'Budi Santoso',
posisi: 'Staff Administrasi',
perusahaan: Store.get().settings.perusahaan || 'E-recruitment',
status: 'Interview',
tanggal: '22 September 2025',
hari: 'Senin',
tanggal_lengkap: 'Senin, 22 September 2025',
tanggal_melamar: '10 September 2025',
jam: '10:00',
metode: 'Online',
lokasi: 'Google Meet',
pewawancara: 'Andi Wijaya',
hr: Store.get().settings.hr || 'HRD',
jabatan_hr: Store.get().settings.jabatanHr || ''
};
}
function init() {
Store.init();
render();
$('#btnAddTpl').addEventListener('click', function () { openForm(null); });
}
function statusName(id) {
var s = Store.statusById(id);
return s ? s.nama : null;
}
function render() {
var list = Store.get().templates;
var wrap = $('#tplList');
if (!list.length) {
wrap.innerHTML = '';
$('#tplEmpty').classList.remove('hidden');
return;
}
$('#tplEmpty').classList.add('hidden');
wrap.innerHTML = list.map(function (t) {
var st = statusName(t.statusId);
var meta = [];
var jenisLabel = t.jenis === 'reminder' ? 'Reminder' : (t.jenis === 'pewawancara' ? 'Pewawancara' : 'Umum');
var jenisWarna = t.jenis === 'reminder' ? '#d97706' : (t.jenis === 'pewawancara' ? '#7c3aed' : '#2563eb');
meta.push('' + jenisLabel + '');
if (st) meta.push('Status: ' + esc(st) + '');
meta.push('' + (t.isActive ? 'Aktif' : 'Nonaktif') + '');
return '
' +
'
' +
'
' + esc(t.nama) + '
' + meta.join(' ') + '
' +
'
' +
'' +
'' +
'' +
'
' +
'
' +
'
' + esc(t.isi) + '
' +
'
';
}).join('');
}
function statusOptions(selected) {
return '' +
Store.sortedStatuses().map(function (s) {
return '';
}).join('');
}
function openForm(id) {
var t = id ? Store.templateById(id) : null;
var chips = WA.PLACEHOLDERS.map(function (p) {
return '{{' + p + '}}';
}).join('');
var body =
'
' +
'' +
'' +
'
' +
'
' +
'' +
'' +
'
' +
'
' + chips + '
' +
'' +
'
';
var footer =
'' +
'';
UI.openModal({
title: id ? 'Edit Template' : 'Tambah Template',
size: 'lg',
body: body,
footer: footer,
onMount: function (el) {
var isi = el.querySelector('#t-isi');
var prev = el.querySelector('#t-preview');
function update() { prev.textContent = WA.render(isi.value, sampleContext()); }
isi.addEventListener('input', update);
update();
el.querySelectorAll('[data-ins]').forEach(function (chip) {
chip.addEventListener('click', function () {
var text = '{{' + chip.getAttribute('data-ins') + '}}';
var start = isi.selectionStart, end = isi.selectionEnd;
isi.value = isi.value.slice(0, start) + text + isi.value.slice(end);
isi.selectionStart = isi.selectionEnd = start + text.length;
isi.focus();
update();
});
});
el.querySelector('[data-close]').addEventListener('click', UI.closeModal);
el.querySelector('#saveTpl').addEventListener('click', function () {
var nama = el.querySelector('#t-nama').value.trim();
var isiVal = isi.value;
if (!nama) { UI.toast('Nama template wajib diisi.', 'err'); return; }
if (!isiVal.trim()) { UI.toast('Isi pesan wajib diisi.', 'err'); return; }
var data = {
nama: nama,
jenis: el.querySelector('#t-jenis').value,
statusId: el.querySelector('#t-status').value || null,
isActive: el.querySelector('#t-active').value === '1',
isi: isiVal
};
if (id) { Store.updateTemplate(id, data); UI.toast('Template diperbarui.', 'ok'); }
else { Store.addTemplate(data); UI.toast('Template ditambahkan.', 'ok'); }
UI.closeModal();
render();
});
}
});
}
document.addEventListener('click', function (e) {
var edit = e.target.closest('[data-tpl-edit]');
if (edit) { openForm(edit.getAttribute('data-tpl-edit')); return; }
var del = e.target.closest('[data-tpl-del]');
if (del) {
var t = Store.templateById(del.getAttribute('data-tpl-del'));
if (t && UI.confirmDialog('Hapus template "' + t.nama + '"?')) {
Store.deleteTemplate(t.id);
UI.toast('Template dihapus.', 'ok');
render();
}
return;
}
var tog = e.target.closest('[data-tpl-toggle]');
if (tog) {
var tt = Store.templateById(tog.getAttribute('data-tpl-toggle'));
if (tt) { Store.updateTemplate(tt.id, { isActive: !tt.isActive }); render(); }
}
});
document.addEventListener('DOMContentLoaded', init);
})();