'use strict'; define( [ 'flight/lib/component', './with_select' ], function(defineComponent, withSelect) { return defineComponent(moveToSelector, withSelect); function moveToSelector() { this.defaultAttrs({ selectionChangedEvent: 'uiMoveToSelectionChanged', selectedMailItems: [], selectedFolders: [], //selectors itemSelector: 'li.move-to-item', selectedItemSelector: 'li.move-to-item.selected' }); this.requestSelectorWidget = function(ev, data) { this.trigger('uiAvailableFoldersRequested', { folder: this.attr.selectedFolders[0] }) }; this.launchSelector = function(ev, data) { var controlPosition = $(this.attr.moveActionSelector).offset(); this.$node.html(data.markup).show().css({ left: controlPosition.left, top: controlPosition.top + $(this.attr.moveActionSelector).outerHeight(), width: $(this.attr.moveActionSelector).outerWidth() }); window.setTimeout( (function() { this.on(document, 'click', this.hideSelector) }).bind(this), 0); }; this.hideSelector = function() { this.off(document, 'click', this.hideSelector); this.$node.hide(); } this.updateMailItemSelections = function(ev, data) { this.attr.selectedMailItems = data.selectedIds; } this.updateFolderSelections = function(ev, data) { this.attr.selectedFolders = data.selectedIds; } this.requestMoveTo = function(ev, data) { this.trigger('uiMoveItemsRequested', { itemIds: this.attr.selectedMailItems, fromFolder: this.attr.selectedFolders[0], toFolder: data.selectedIds[0] }); this.$node.hide(); }; this.after('initialize', function() { //show selector widget this.on(document, 'uiMoveMail', this.requestSelectorWidget); this.on(document, 'dataMoveToItemsServed', this.launchSelector); //listen for other selections this.on(document, 'uiMailItemSelectionChanged', this.updateMailItemSelections); this.on(document, 'uiFolderSelectionChanged', this.updateFolderSelections); //move items this.on('uiMoveToSelectionChanged', this.requestMoveTo); }); } } );