/**
* App Kanban
*/
'use strict';
(async function () {
let boards;
const kanbanSidebar = document.querySelector('.kanban-update-item-sidebar'),
kanbanWrapper = document.querySelector('.kanban-wrapper'),
commentEditor = document.querySelector('.comment-editor'),
kanbanAddNewBoard = document.querySelector('.kanban-add-new-board'),
kanbanAddNewInput = [].slice.call(document.querySelectorAll('.kanban-add-board-input')),
kanbanAddBoardBtn = document.querySelector('.kanban-add-board-btn'),
datePicker = document.querySelector('#due-date'),
select2 = $('.select2'), // ! Using jquery vars due to select2 jQuery dependency
assetsPath = document.querySelector('html').getAttribute('data-assets-path');
// Init kanban Offcanvas
const kanbanOffcanvas = new bootstrap.Offcanvas(kanbanSidebar);
// Get kanban data
const kanbanResponse = await fetch(assetsPath + 'json/kanban.json');
if (!kanbanResponse.ok) {
console.error('error', kanbanResponse);
}
boards = await kanbanResponse.json();
// datepicker init
if (datePicker) {
datePicker.flatpickr({
monthSelectorType: 'static',
altInput: true,
altFormat: 'j F, Y',
dateFormat: 'Y-m-d'
});
}
//! TODO: Update Event label and guest code to JS once select removes jQuery dependency
// select2
if (select2.length) {
function renderLabels(option) {
if (!option.id) {
return option.text;
}
var $badge = "
" +
"
" +
"" +
attachments +
'' +
" " +
' ' +
comments +
' ' +
'
' +
"
" +
renderAvatar(assigned, true, 'xs', null, members) +
'
' +
'
'
);
}
// Init kanban
const kanban = new jKanban({
element: '.kanban-wrapper',
gutter: '15px',
widthBoard: '250px',
dragItems: true,
boards: boards,
dragBoards: true,
addItemButton: true,
buttonContent: '+ Add Item',
itemAddOptions: {
enabled: true, // add a button to board for easy item creation
content: '+ Add New Item', // text or html content of the board button
class: 'kanban-title-button btn', // default class of the button
footer: false // position the button on footer
},
click: function (el) {
let element = el;
let title = element.getAttribute('data-eid')
? element.querySelector('.kanban-text').textContent
: element.textContent,
date = element.getAttribute('data-due-date'),
dateObj = new Date(),
year = dateObj.getFullYear(),
dateToUse = date
? date + ', ' + year
: dateObj.getDate() + ' ' + dateObj.toLocaleString('en', { month: 'long' }) + ', ' + year,
label = element.getAttribute('data-badge-text'),
avatars = element.getAttribute('data-assigned');
// Show kanban offcanvas
kanbanOffcanvas.show();
// To get data on sidebar
kanbanSidebar.querySelector('#title').value = title;
kanbanSidebar.querySelector('#due-date').nextSibling.value = dateToUse;
// ! Using jQuery method to get sidebar due to select2 dependency
$('.kanban-update-item-sidebar').find(select2).val(label).trigger('change');
// Remove & Update assigned
kanbanSidebar.querySelector('.assigned').innerHTML = '';
kanbanSidebar
.querySelector('.assigned')
.insertAdjacentHTML(
'afterbegin',
renderAvatar(avatars, false, 'xs', '1', el.getAttribute('data-members')) +
"