//common js code to create Kanban Board "use strict"; var __spreadArrays = this && this.__spreadArrays || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) { s += arguments[i].length; } for (var r = Array(s), k = 0, i = 0; i < il; i++) { for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) { r[k] = a[j]; } } return r; }; var FakeListAPI = /** @class */function () { function FakeListAPI() { this.lists = []; this.loadLists(); } // emulate async API call - Gets all lists. FakeListAPI.prototype.getLists = function () { return Promise.resolve(_.cloneDeep(this.lists)); }; // emulate async API call - Gets single full card. FakeListAPI.prototype.getCard = function (id) { for (var l = 0; l < this.lists.length; l++) { var list = this.lists[l]; for (var i = 0; i < list.cards.length; i++) { var card = list.cards[i]; if (card.id === id) { return Promise.resolve(card); } } } return Promise.reject('ERROR 404'); }; FakeListAPI.prototype.loadLists = function () { this.lists= []; }; return FakeListAPI; }(); var KanbanBoard = /** @class */function () { function KanbanBoard() { this.listApi = new FakeListAPI(); // usually injected or set in constructor } KanbanBoard.prototype.listToKanbanBoard = function (list) { var _this = this; var asIsProps = ['id', 'title']; var board = _.pick(list, asIsProps); board.item = list.cards.map(function (c) { return _this.cardToKanbanCard(c); }); board.meta = _.omitBy(list, asIsProps.concat(['cards'])); return board; }; KanbanBoard.prototype.cardToKanbanCard = function (list) { var asIsProps = ['id', 'title']; var card = _.pick(list, asIsProps); card.meta = _.omitBy(list, asIsProps); return card; }; KanbanBoard.prototype.processBoard = function (board) { // custom boards var _this = this; if (board.id === 'not_started') { board['class'] = 'new'; board.dragTo = ['not_started', 'in_progress', 'on_hold', 'cancelled', 'completed' ]; board.meta = { icon: 'fas fa-exclamation', // boardActions: [ // { icon: 'fas fa-edit', label: 'Edit' }, // { icon: 'fas fa-trash', label: 'Delete' }, // { icon: 'fas fa-eye', label: 'View' }, // ] }; } else if (board.id === 'in_progress') { board['class'] = 'info,good'; board.dragTo = ['not_started', 'in_progress', 'on_hold', 'cancelled', 'completed' ]; board.meta = { icon: 'fas fa-sync' }; } else if (board.id === 'on_hold') { board['class'] = 'warning'; board.dragTo = ['not_started', 'in_progress', 'on_hold', 'cancelled', 'completed' ]; board.meta = { icon: 'fas fa-exclamation-triangle' }; }else if (board.id === 'cancelled') { board['class'] = 'new'; board.dragTo = ['not_started', 'in_progress', 'on_hold', 'cancelled', 'completed' ]; board.meta = { icon: 'fas fa-times-circle' }; } else if (board.id === 'completed') { board['class'] = 'success'; board.dragTo = ['not_started', 'in_progress', 'on_hold', 'cancelled', 'completed' ]; board.meta = { icon: 'fas fa-check-double' }; } // construct board dom html var $title = $("
").text(board.title); if (board.meta && board.meta.icon) { $title.prepend(" "); } board.title = $title[0].outerHTML; if (board.meta.boardActions && board.meta.boardActions.length) { var $boardActions_1 = $(''); board.meta.boardActions.map(function (ba) { var $button = $(''); if (ba.icon) { var $icon = $(""); $button.append($icon); } if (ba.label) { $button.attr('title', ba.label); } return $button; }).forEach(function ($button) { $boardActions_1.append($button); }); board.title += $boardActions_1[0].outerHTML; } if (board.item && board.item.length) { board.item.forEach(function (card) { card.parentId = board.id; if (card.meta.project_id) { card.project_id = card.meta.project_id; } _this.processCard(card); }); } return board; }; KanbanBoard.prototype.processCard = function (card) { var $title = $(""); var genIcon = function (iconClass, title) { title = title ? " title=\"" + _.escape(title) + "\"" : ''; return ""; }; var genAction = function (iconClass, title, href, label, additionalClass) { var $button = $(href ? '' : ''); if (href && additionalClass) { $button.attr('data-href', href); } else if (href) { $button.attr('href', href); $button.addClass('action'); } if (additionalClass) { $button.addClass(additionalClass); } var $icon = $(""); $button.append($icon); if (label) { $button.append(label); } if (title) { $button.attr('title', title); } return $button; }; var $cardActions = $(''); if (card.meta) { if (card.meta.provider) { switch (card.meta.provider) { case 'bitbucket': $title.append(genIcon('fab fa-bitbucket text-info', 'BitBucket Issue')); break; case 'slack': $title.append(genIcon('fab fa-slack text-warning', 'Slack Chat')); break; case 'zendesk': $title.append(genIcon('fas fa-life-ring text-success', 'Zendesk Ticket')); break; case 'google-drive': $title.append(genIcon('fab fa-google-drive text-info', 'Google Drive')); break; case 'trello': $title.append(genIcon('fab fa-trello text-info', 'Trello')); break; case 'bitbucket': $title.append(genIcon('fab fa-bitbucket text-info', 'BitBucket Issue')); break; case 'calendar': $title.append(genIcon('far fa-calendar', 'Calendar')); break; case 'google-keep': $title.append(genIcon('fas fa-sticky-note text-warning', 'Google Keep')); break; case 'bitbucket': $title.append(genIcon('fab fa-bitbucket text-info', 'BitBucket Issue')); break; case 'email': $title.append(genIcon('fas fa-at text-danger', 'Email')); break; } } if (card.meta.type) { switch (card.meta.type) { case 'bug': $title.append(genIcon('fas fa-bug text-danger', 'Bug')); break; case 'comment': $title.append(genIcon('fas fa-comment text-muted', 'Comment')); break; case 'comment-private': $title.append(genIcon('fas fa-comment text-danger', 'Private Comment')); break; case 'comment-public': $title.append(genIcon('fas fa-comment text-info', 'Public Comment')); break; case 'ticket': $title.append(genIcon('fas fa-comment text-muted', 'Ticket')); break; case 'notification': $title.append(genIcon('fas fa-exclamation-circle text-muted', 'Notification')); break; case 'card': $title.append(genIcon('far fa-clone text-muted', 'Card')); break; case 'board': $title.append(genIcon('far fa-columns text-muted', 'Board')); break; case 'folder': $title.append(genIcon('fas fa-folder text-muted', 'Folder')); break; case 'calendar-event': $title.append(genIcon('fas fa-calendar-alt text-muted', 'Event')); break; case 'note': $title.append(genIcon('far fa-sticky-note text-muted', 'Note')); break; case 'message': $title.append(genIcon('far fa-envelope text-muted', 'Note')); break; } } if (card.meta.prefix) { $title.append("[" + _.escape(card.meta.prefix) + "]"); } if (card.meta.editUrl) { $cardActions.append(genAction('fas fa-edit', LANG.edit, card.meta.editUrl, '', card.meta.editUrlClass)); } if (card.meta.deleteUrl) { $cardActions.append(genAction('fas fa-trash', LANG.delete, card.meta.deleteUrl, '', card.meta.deleteUrlClass)); } if (card.meta.convertUrl) { $cardActions.append(genAction('fas fa-redo', LANG.convert_to_customer || 'Convert', card.meta.convertUrl, '', card.meta.convertUrlClass)); } if (card.meta.viewUrl) { $cardActions.append(genAction('fas fa-eye', LANG.view, card.meta.viewUrl, '', card.meta.viewUrlClass)); } //append default actions - probably should also be context sensitive // $cardActions.append(genAction('fas fa-check text-success', 'Accept', null, "" + 'Accept' + "")); // $cardActions.append(genAction('fas fa-times text-danger', 'Decline')); // $cardActions.append(genAction('fas fa-ellipsis-v', 'More...')); } $title.append(' ' + _.escape(card.title)); if (card.meta.subtitle) { $title.append(' ' + ''+ card.meta.subtitle +'');
}
if ($cardActions.length) {
$title.append($cardActions);
}
card.title = $title[0].outerHTML;
// tags
var $cardTags = $('');
if (card.meta) {
if (card.meta.project) {
$cardTags.append(" " + card.meta.project + "");
}
if (card.meta.dueDate) {
var dateStr = moment(card.meta.dueDate).format(moment_date_format);
$cardTags.append(" " + dateStr + "");
}
if (card.meta.endDate) {
var dateStr = moment(card.meta.endDate).format(moment_date_format);
$cardTags.append(" " + dateStr + "");
}
if (card.meta.hasDescription) {
$cardTags.append("");
}
if (card.meta.hasComments) {
$cardTags.append("");
}
if (card.meta.lead) {
$cardTags.append(" " + card.meta.lead + "");
}
if (card.meta.customer) {
$cardTags.append(" " + card.meta.customer + "");
}
if (!_.isEmpty(card.meta.assigned_to)) {
$cardTags.append('');
_.forEach(card.meta.assigned_to, function(value, key) {
$cardTags.append('