/**
* 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',
static: true,
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)}
`;
// Initialize kanban
const kanban = new jKanban({
element: '.kanban-wrapper',
gutter: '12px',
widthBoard: '250px',
dragItems: true,
boards: boards,
dragBoards: true,
addItemButton: true,
buttonContent: '+ Add Item',
itemAddOptions: {
enabled: true,
content: '+ Add New Item',
class: 'kanban-title-button btn btn-default border-none',
footer: false
},
click: el => {
const element = el;
const title = element.getAttribute('data-eid')
? element.querySelector('.kanban-text').textContent
: element.textContent;
const date = element.getAttribute('data-due-date');
const dateObj = new Date();
const year = dateObj.getFullYear();
const dateToUse = date
? `${date}, ${year}`
: `${dateObj.getDate()} ${dateObj.toLocaleString('en', { month: 'long' })}, ${year}`;
const label = element.getAttribute('data-badge-text');
const avatars = element.getAttribute('data-assigned');
// Show kanban offcanvas
kanbanOffcanvas.show();
// Populate sidebar fields
kanbanSidebar.querySelector('#title').value = title;
kanbanSidebar.querySelector('#due-date').nextSibling.value = dateToUse;
// Using jQuery for select2
$('.kanban-update-item-sidebar').find(select2).val(label).trigger('change');
// Remove and update assigned avatars
kanbanSidebar.querySelector('.assigned').innerHTML = '';
kanbanSidebar.querySelector('.assigned').insertAdjacentHTML(
'afterbegin',
`${renderAvatar(avatars, false, 'xs', '1', el.getAttribute('data-members'))}