'use strict';
document.addEventListener('DOMContentLoaded', function (e) {
let borderColor, bodyBg, headingColor;
borderColor = config.colors.borderColor;
bodyBg = config.colors.bodyBg;
headingColor = config.colors.headingColor;
const dt_provinsi_table = document.querySelector('.datatables-provinsi');
var select2 = $('.select2');
if (select2.length) {
var $this = select2;
$this.wrap('
').select2({
placeholder: 'Select Country',
dropdownParent: $this.parent()
});
}
if (dt_provinsi_table) {
const dt_provinsi = new DataTable(dt_provinsi_table, {
ajax: provinsiListUrl,
columns: [
{ data: 'id' },
{ data: 'kode' },
{ data: 'nama' },
{ data: 'iso' }
],
columnDefs: [
{
targets: 0,
searchable: false,
orderable: false,
render: function (data, type, full, meta) {
return '' + (meta.row + 1) + '';
}
},
{
targets: 1,
render: function (data, type, full, meta) {
return '' + full['kode'] + '';
}
},
{
targets: 2,
render: function (data, type, full, meta) {
var name = full['nama'], iso = full['iso'];
var stateNum = Math.floor(Math.random() * 6);
var states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
var state = states[stateNum];
var initials = (name.match(/\b\w/g) || []).map(char => char.toUpperCase()).join('');
return `
`;
}
},
{
targets: -1,
title: 'Actions',
searchable: false,
orderable: false,
render: function (data, type, full, meta) {
return `
`;
}
}
],
order: [[2, 'desc']],
layout: {
topStart: {
rowClass: 'row m-3 my-0 justify-content-between',
features: [
{
pageLength: {
menu: [10, 25, 50, 100],
text: '_MENU_'
}
}
]
},
topEnd: {
features: [
{
search: {
placeholder: 'Search User',
text: '_INPUT_'
}
},
{
buttons: [
{
text: 'Add New Provinsi',
className: 'add-new btn btn-primary ms-2 waves-effect waves-light',
attr: {
'data-bs-toggle': 'offcanvas',
'data-bs-target': '#offcanvasAddProvinsi'
}
}
]
}
]
},
bottomStart: {
rowClass: 'row mx-3 justify-content-between',
features: ['info']
},
bottomEnd: {
rowClass: 'row mx-3 justify-content-between',
features: ['paging']
}
}
});
}
setTimeout(() => {
const elementsToModify = [
{ selector: '.dt-buttons .btn', classToRemove: 'btn-secondary' },
{ selector: '.dt-search .form-control', classToRemove: 'form-control-sm' },
{ selector: '.dt-length .form-select', classToRemove: 'form-select-sm', classToAdd: 'ms-0' },
{ selector: '.dt-length', classToAdd: 'mb-md-6 mb-0' },
{
selector: '.dt-layout-end',
classToRemove: 'justify-content-between',
classToAdd: 'd-flex gap-md-4 justify-content-md-between justify-content-center gap-2 flex-wrap'
},
{ selector: '.dt-buttons', classToAdd: 'd-flex gap-4 mb-md-0 mb-4' },
{ selector: '.dt-layout-table', classToRemove: 'row mt-2' },
{ selector: '.dt-layout-full', classToRemove: 'col-md col-12', classToAdd: 'table-responsive' }
];
elementsToModify.forEach(({ selector, classToRemove, classToAdd }) => {
document.querySelectorAll(selector).forEach(element => {
if (classToRemove) {
classToRemove.split(' ').forEach(className => element.classList.remove(className));
}
if (classToAdd) {
classToAdd.split(' ').forEach(className => element.classList.add(className));
}
});
});
}, 100);
const fv = FormValidation.formValidation(addNewProvinsiForm, {
fields: {
kode: {
validators: {
notEmpty: {
message: 'Silakan masukkan kode provinsi'
},
stringLength: {
min: 2,
max: 2,
message: 'Kode provinsi harus terdiri dari 2 karakter'
}
}
},
nama: {
validators: {
notEmpty: {
message: 'Silakan masukkan nama provinsi'
}
}
},
iso: {
validators: {
notEmpty: {
message: 'Silakan masukkan kode ISO provinsi'
},
regexp: {
regexp: /^[A-Z]{2}-[A-Z]{2}$/,
message: 'The value is not a valid ISO code (e.g., ID-AC)'
}
}
}
},
plugins: {
trigger: new FormValidation.plugins.Trigger(),
bootstrap5: new FormValidation.plugins.Bootstrap5({
eleValidClass: '',
rowSelector: '.form-control-validation'
}),
submitButton: new FormValidation.plugins.SubmitButton(),
autoFocus: new FormValidation.plugins.AutoFocus()
},
}).on('core.form.valid', function () {
const form = document.getElementById('addNewProvinsiForm');
const formData = new FormData(form);
const offcanvasAdd = bootstrap.Offcanvas.getInstance(document.querySelector('#offcanvasAddProvinsi'));
$.ajax({
url: form.action,
type: 'POST',
data: $(form).serialize(),
success: function (response) {
if (response.status === 'success') {
offcanvasAdd.hide();
form.reset();
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: response.message,
showConfirmButton: false,
timer: 2000,
customClass: { confirmButton: 'btn btn-primary' }
});
$('.datatables-provinsi').DataTable().ajax.reload();
}
},
error: function (xhr) {
let msg = 'Terjadi kesalahan saat menyimpan data.';
if (xhr.responseJSON && xhr.responseJSON.message) {
msg = xhr.responseJSON.message;
}
Swal.fire({
icon: 'error',
title: 'Gagal!',
text: msg,
customClass: { confirmButton: 'btn btn-primary' }
});
}
});
});
});
$(function () {
var offcanvasElement = document.getElementById('offcanvasViewProvinsi');
var offcanvasView = new bootstrap.Offcanvas(offcanvasElement);
$(document).on('click', '.view-record', function () {
var provinsiId = $(this).data('id');
var $btn = $(this);
$btn.addClass('disabled');
$.ajax({
url: '/provinsi/' + provinsiId,
type: 'GET',
success: function (response) {
$btn.removeClass('disabled');
if (response.status === 'success') {
var data = response.data;
$('#view-provinsi-code').val(data.kode);
$('#view-provinsi-name').val(data.nama);
$('#view-provinsi-path').val(data.path);
$('#view-provinsi-iso').val(data.iso);
offcanvasView.show();
}
},
error: function (xhr) {
$btn.removeClass('disabled');
alert('Gagal mengambil data: ' + xhr.statusText);
}
});
});
});
$(function () {
const offcanvasEl = document.getElementById('offcanvasEditProvinsi');
const offcanvasEdit = new bootstrap.Offcanvas(offcanvasEl);
$(document).on('click', '.view-edit-record', function () {
const id = $(this).data('id');
$.get(`/provinsi/${id}`, function (response) {
if (response.status === 'success') {
const d = response.data;
$('#edit-provinsi-id').val(d.id);
$('#edit-provinsi-code').val(d.kode);
$('#edit-provinsi-name').val(d.nama);
$('#edit-provinsi-path').val(d.path);
$('#edit-provinsi-iso').val(d.iso);
offcanvasEdit.show();
}
});
});
$('#editProvinsiForm').on('submit', function (e) {
e.preventDefault();
const id = $('#edit-provinsi-id').val();
const formData = $(this).serialize();
$.ajax({
url: `/provinsi/${id}`,
type: 'PUT',
data: formData,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function (response) {
if (response.status === 'success') {
offcanvasEdit.hide();
Swal.fire({
icon: 'success',
title: 'Berhasil!',
text: response.message,
showConfirmButton: false,
timer: 1500
});
$('.datatables-provinsi').DataTable().ajax.reload();
}
},
error: function (xhr) {
let errorMsg = 'Terjadi kesalahan sistem.';
if (xhr.responseJSON && xhr.responseJSON.message) {
errorMsg = xhr.responseJSON.message;
}
Swal.fire({
icon: 'error',
title: 'Oops...',
text: errorMsg,
confirmButtonColor: '#7367f0'
});
}
});
});
});
$(document).on('click', '.delete-record', function () {
const id = $(this).data('id');
const name = $(this).closest('tr').find('.fw-medium').text();
Swal.fire({
title: 'Apakah Anda yakin?',
text: `Provinsi "${name}" akan dihapus secara permanen!`,
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Ya, Hapus!',
cancelButtonText: 'Batal',
customClass: {
confirmButton: 'btn btn-primary me-3',
cancelButton: 'btn btn-label-secondary'
},
buttonsStyling: false
}).then(function (result) {
if (result.value) {
$.ajax({
url: `/provinsi/${id}`,
type: 'DELETE',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function (response) {
if (response.status === 'success') {
Swal.fire({
icon: 'success',
title: 'Terhapus!',
text: response.message,
showConfirmButton: false,
timer: 1500
});
$('.datatables-provinsi').DataTable().ajax.reload();
}
},
error: function (xhr) {
Swal.fire({
icon: 'error',
title: 'Oops...',
text: 'Terjadi kesalahan saat menghapus data.',
customClass: { confirmButton: 'btn btn-primary' }
});
}
});
}
});
});