const { calculateIndexData } = Utils ;
let swimlaneColors ;
Meteor . startup ( ( ) => {
swimlaneColors = Swimlanes . simpleSchema ( ) . _schema . color . allowedValues ;
} ) ;
BlazeComponent . extendComponent ( {
editTitle ( evt ) {
evt . preventDefault ( ) ;
const newTitle = this . childComponents ( 'inlinedForm' ) [ 0 ] . getValue ( ) . trim ( ) ;
const swimlane = this . currentData ( ) ;
if ( newTitle ) {
swimlane . rename ( newTitle . trim ( ) ) ;
}
} ,
events ( ) {
return [ {
'click .js-open-swimlane-menu' : Popup . open ( 'swimlaneAction' ) ,
'click .js-open-add-swimlane-menu' : Popup . open ( 'swimlaneAdd' ) ,
submit : this . editTitle ,
} ] ;
} ,
} ) . register ( 'swimlaneHeader' ) ;
Template . swimlaneActionPopup . events ( {
'click .js-set-swimlane-color' : Popup . open ( 'setSwimlaneColor' ) ,
'click .js-close-swimlane' ( evt ) {
evt . preventDefault ( ) ;
this . archive ( ) ;
Popup . close ( ) ;
} ,
} ) ;
BlazeComponent . extendComponent ( {
onCreated ( ) {
this . currentSwimlane = this . currentData ( ) ;
} ,
events ( ) {
return [ {
submit ( evt ) {
evt . preventDefault ( ) ;
const currentBoard = Boards . findOne ( Session . get ( 'currentBoard' ) ) ;
const nextSwimlane = currentBoard . nextSwimlane ( this . currentSwimlane ) ;
const titleInput = this . find ( '.swimlane-name-input' ) ;
const title = titleInput . value . trim ( ) ;
const sortValue = calculateIndexData ( this . currentSwimlane , nextSwimlane , 1 ) ;
const swimlaneType = ( currentBoard . isTemplatesBoard ( ) ) ? 'template-swimlane' : 'swimlane' ;
if ( title ) {
Swimlanes . insert ( {
title ,
boardId : Session . get ( 'currentBoard' ) ,
sort : sortValue . base ,
type : swimlaneType ,
} ) ;
titleInput . value = '' ;
titleInput . focus ( ) ;
}
// XXX ideally, we should move the popup to the newly
// created swimlane so a user can add more than one swimlane
// with a minimum of interactions
Popup . close ( ) ;
} ,
'click .js-swimlane-template' : Popup . open ( 'searchElement' ) ,
} ] ;
} ,
} ) . register ( 'swimlaneAddPopup' ) ;
BlazeComponent . extendComponent ( {
onCreated ( ) {
this . currentSwimlane = this . currentData ( ) ;
this . currentColor = new ReactiveVar ( this . currentSwimlane . color ) ;
} ,
colors ( ) {
return swimlaneColors . map ( ( color ) => ( { color , name : '' } ) ) ;
} ,
isSelected ( color ) {
return this . currentColor . get ( ) === color ;
} ,
events ( ) {
return [ {
'click .js-palette-color' ( ) {
this . currentColor . set ( this . currentData ( ) . color ) ;
} ,
'click .js-submit' ( ) {
this . currentSwimlane . setColor ( this . currentColor . get ( ) ) ;
Popup . close ( ) ;
} ,
'click .js-remove-color' ( ) {
this . currentSwimlane . setColor ( null ) ;
Popup . close ( ) ;
} ,
} ] ;
} ,
} ) . register ( 'setSwimlaneColorPopup' ) ;