APIs

Show:
  1. /**
  2. Settings Backbone > View
  3. @class FQCreatorView
  4. @constructor
  5. @return {Object} instantiated FQCreatorView
  6. **/
  7. define(['jquery', 'backbone', 'LinesCollection', 'LineModel', 'FQLinePropView', 'text!_templates/_fasterQLineItem.html'], function ($, Backbone, LinesCollection, LineModel, FQLinePropView, FQLineItemTemplate) {
  8.  
  9. BB.SERVICES.FQCREATORVIEW = 'FQCreatorView';
  10.  
  11. var FQCreatorView = Backbone.View.extend({
  12.  
  13. /**
  14. Constructor
  15. @method initialize
  16. **/
  17. initialize: function () {
  18. var self = this;
  19. BB.comBroker.setService(BB.SERVICES.FQCREATORVIEW, self);
  20. self.m_selectedLineID = undefined;
  21. self.m_fasterQLineItemTemplate = _.template(FQLineItemTemplate);
  22. self.m_linesCollection = new LinesCollection();
  23. self._populateLines();
  24. self._listenAddNewLine();
  25. self._listenRemoveLine();
  26. self._listenResetQueueCounter();
  27. self._listenCollectionChanged();
  28.  
  29. self.m_fqLinePropView = new FQLinePropView({
  30. el: Elements.FASTERQ_LINE_PROPERTIES,
  31. collection: self.m_linesCollection
  32. });
  33.  
  34. $(Elements.FASTERQ_LINE_BACK).on('click', function () {
  35. self.options.stackView.selectView(Elements.FASTERQ_NAVIGATION_CONTAINER);
  36. });
  37.  
  38. self.listenTo(self.options.stackView, BB.EVENTS.SELECTED_STACK_VIEW, function (e) {
  39. if (e == self && !self.m_rendered) {
  40. self.m_rendered = true;
  41. self._render();
  42. }
  43. });
  44. },
  45.  
  46. _render: function () {
  47. var self = this;
  48. },
  49.  
  50. /**
  51. Listen to Line selection, populate the properties panel and open it if needed.
  52. @method _listenResourceSelected
  53. **/
  54. _listenLineSelected: function () {
  55. var self = this;
  56. $(Elements.CLASS_LINE_LIST_ITEMS).off('click');
  57. $(Elements.CLASS_LINE_LIST_ITEMS).on('click', function (e) {
  58. var lineElem = $(e.target).closest('li');
  59. self.m_selectedLineID = $(lineElem).data('line_id');
  60. self._highlightLine();
  61. self.m_fqLinePropView.lineSelected((self.m_selectedLineID));
  62.  
  63. if (!$(e.target).hasClass('prop')) {
  64. setTimeout(function(){
  65. self.options.stackView.selectView(Elements.FASTERQ_MANAGER_CONTAINER);
  66. },250);
  67. }
  68. return false;
  69. });
  70. },
  71.  
  72. /**
  73. Popular the list Line items from server
  74. @method _populateLines
  75. **/
  76. _populateLines: function () {
  77. var self = this;
  78. self.m_linesCollection.sort();
  79. self._getLines();
  80. },
  81.  
  82. /**
  83. Returns this model's attributes as...
  84. @method _getLines server:getLines
  85. @param {Number} i_playerData
  86. @return {Number} Unique clientId.
  87. **/
  88. _getLines: function () {
  89. var self = this;
  90. self.m_linesCollection.fetch({
  91. success: function (data) {
  92. $(Elements.FASTERQ_CUSTOMER_LINES).empty();
  93. if (data.models.length == 0)
  94. return;
  95. _.each(data.models, $.proxy(self._appendNewLine, self));
  96. self._listenLineSelected();
  97. self._highlightLine();
  98. },
  99. error: function (e) {
  100. log('error loading collection data ' + e);
  101. }
  102. });
  103. },
  104.  
  105. /**
  106. Set the selected line background color properties
  107. @method _highlightLine
  108. **/
  109. _highlightLine: function () {
  110. var self = this;
  111. if (_.isUndefined(self.m_selectedLineID))
  112. return;
  113. var lineElem = $(Elements.FASTERQ_CUSTOMER_LINES).find('[data-line_id="' + self.m_selectedLineID + '"]');
  114. $(Elements.CLASS_LINE_LIST_ITEMS).removeClass('activated').find('a').removeClass('whiteFont');
  115. $(lineElem).addClass('activated').find('a').addClass('whiteFont');
  116. },
  117.  
  118. /**
  119. Append the model Line item to list in UI
  120. @method _appendNewLine
  121. @param {i_model} Model
  122. **/
  123. _appendNewLine: function (i_model) {
  124. var self = this;
  125. $(Elements.FASTERQ_CUSTOMER_LINES).append(self.m_fasterQLineItemTemplate(i_model.toJSON()));
  126. },
  127.  
  128. /**
  129. Listen to new Line item button
  130. @method _listenAddNewLine server:setLine
  131. **/
  132. _listenAddNewLine: function () {
  133. var self = this;
  134. $(Elements.FATSERQ_ADD_NEW_LINE).on('click', function (e) {
  135. var model = new LineModel({
  136. name: 'New line',
  137. business_id: BB.Pepper.getUserData().business_id
  138. });
  139. model.save({}, {
  140. success: function (model) {
  141. self.m_linesCollection.add(model);
  142. self._appendNewLine(model);
  143. self._listenLineSelected();
  144. },
  145. error: function () {
  146. log('error loading collection data');
  147. }
  148. });
  149. });
  150. },
  151.  
  152. /**
  153. Listen to remove existing Line item button
  154. @method _listenRemoveLine server:destroyLine
  155. **/
  156. _listenRemoveLine: function () {
  157. var self = this;
  158. $(Elements.FASTERQ_REMOVE_LINE).on('click', function () {
  159. if (_.isUndefined(self.m_selectedLineID)) {
  160. bootbox.alert('no line selected');
  161. return;
  162. }
  163. bootbox.confirm("Are you sure you want to delete the Line and associated queues?", function (result) {
  164. if (!result)
  165. return;
  166. var model = self.m_linesCollection.get(self.m_selectedLineID);
  167. model.destroy({
  168. success: function (model, response) {
  169. log('model deleted');
  170. self._populateLines();
  171. self.m_selectedLineID = undefined;
  172. }, error: function () {
  173. log('error delete failed');
  174. }
  175. });
  176. });
  177. });
  178. },
  179.  
  180. /**
  181. Listen to changes in Line collection and re-populate Line list
  182. @method _listenCollectionChanged
  183. **/
  184. _listenCollectionChanged: function () {
  185. var self = this;
  186. self.m_linesCollection.on('change', function (e) {
  187. self._populateLines();
  188. });
  189. },
  190.  
  191. /**
  192. Reset queue counter
  193. @method _listenResetQueueCounter server:ResetQueueCounter
  194. **/
  195. _listenResetQueueCounter: function(){
  196. var self = this;
  197. $(Elements.FQ_RESET_QUEUE_COUNTER).on('click',function(){
  198. bootbox.prompt('are you sure you want to reset the counter? (enter YES)',function(i_password){
  199. if (i_password != 'YES') return;
  200. $.ajax({
  201. url: BB.CONSTS.ROOT_URL + '/ResetQueueCounter',
  202. data: {
  203. business_id: BB.Pepper.getUserData().businessID,
  204. line_id: self.m_selectedLineID,
  205. counter: 1
  206. },
  207. success: function (e) {
  208. bootbox.alert('counter was reset successfully');
  209. },
  210. error: function (e) {
  211. log('error ajax ResetQueueCounter ' + e);
  212. },
  213. dataType: 'json'
  214. });
  215. });
  216. });
  217. },
  218.  
  219. /**
  220. Expose private member selectedLineID
  221. @method getSelectedLine
  222. **/
  223. getSelectedLine: function(){
  224. var self = this;
  225. return self.m_selectedLineID;
  226. },
  227.  
  228. getSelectedLineName: function(i_lineID){
  229. var self = this;
  230. return self.m_linesCollection.get(i_lineID).get('name');
  231. }
  232. });
  233.  
  234. return FQCreatorView;
  235. });
  236.  
  237.  
  238.