From bff4013c0c3281fc4fdcdd6b8c75d6450882e08f Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Sat, 13 Jul 2013 13:12:29 +0200 Subject: [PATCH] Added reload support for autocompletion. --- .../_application_controller.js.coffee | 5 +- .../_application_controller_form.js.coffee | 24 ++++++---- .../controllers/agent_ticket_create.js.coffee | 48 ++++++++++--------- .../agent_ticket_customer.js.coffee | 5 +- .../controllers/user_info_widget.js.coffee | 8 +++- .../app/views/generic/autocompletion.jst.eco | 3 +- .../agent_ticket_actions_level1_test.rb | 2 +- .../agent_ticket_actions_level2_test.rb | 12 ++++- 8 files changed, 67 insertions(+), 40 deletions(-) diff --git a/app/assets/javascripts/app/controllers/_application_controller.js.coffee b/app/assets/javascripts/app/controllers/_application_controller.js.coffee index 495437400..60895f899 100644 --- a/app/assets/javascripts/app/controllers/_application_controller.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller.js.coffee @@ -180,8 +180,9 @@ class App.Controller extends Spine.Controller # start customer info controller new App.UserInfo( - el: el - user_id: data.user_id + el: el + user_id: data.user_id + callback: data.callback ) authenticate: -> diff --git a/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee b/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee index 24e36f5db..1358264f8 100644 --- a/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee +++ b/app/assets/javascripts/app/controllers/_application_controller_form.js.coffee @@ -177,6 +177,10 @@ class App.ControllerForm extends App.Controller if attribute.name of @params attribute.value = @params[attribute.name] + if attribute.tag is 'autocompletion' + if @params[ attribute.name + '_autocompletion_value_shown' ] + attribute.valueShown = @params[ attribute.name + '_autocompletion_value_shown' ] + App.Log.debug 'ControllerForm', 'formGenItem-before', attribute # build options list based on config @@ -414,10 +418,14 @@ class App.ControllerForm extends App.Controller @local_attribute_full = '#' + attribute.id + '_autocompletion' @callback = attribute.callback - b = (event, key) => + # call calback on init + if @callback && attribute.value && @params + @callback( @params ) + b = (event, item) => # set html form attribute - $(@local_attribute).val(key) + $(@local_attribute).val(item.id) + $(@local_attribute + '_autocompletion_value_shown').val(item.value) # call calback if @callback @@ -431,17 +439,17 @@ class App.ControllerForm extends App.Controller auto: { source: '/users/search', minLength: 2, - select: ( event, ui ) => - @log 'notice', 'selected', event, ui - b(event, ui.item.id) + select: ( event, ui ) -> + #@log 'notice', 'selected', event, ui + b(event, ui.item) } ) ### $(@local_attribute_full).autocomplete( - source: 'api/users/search', - minLength: 2, + source: attribute.source, + minLength: attribute.minLengt || 3, select: ( event, ui ) => - b(event, ui.item.id) + b(event, ui.item) ) @delay( a, 180 ) diff --git a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee index 3b0bfdac3..8b3467518 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_create.js.coffee @@ -71,6 +71,7 @@ class App.TicketCreate extends App.Controller activate: => @navupdate '#' + @el.find('textarea').elastic() changed: => formCurrent = @formParam( @el.find('.ticket-create') ) @@ -151,23 +152,13 @@ class App.TicketCreate extends App.Controller render: (template = {}) -> # set defaults - defaults = template['options'] || App.TaskManager.get(@task_key).state || {} - if !( 'ticket_state_id' of defaults ) - defaults['ticket_state_id'] = App.Collection.findByAttribute( 'TicketState', 'name', 'open' ).id - if !( 'ticket_priority_id' of defaults ) - defaults['ticket_priority_id'] = App.Collection.findByAttribute( 'TicketPriority', 'name', '2 normal' ).id - - # remember customers - if $('#create_customer_id').val() - defaults['customer_id'] = $('#create_customer_id').val() - defaults['customer_id_autocompletion'] = $('#create_customer_id_autocompletion').val() - else -# defaults['customer_id'] = '2' -# defaults['customer_id_autocompletion'] = '12312313' + defaults = + ticket_state_id: App.Collection.findByAttribute( 'TicketState', 'name', 'open' ).id + ticket_priority_id: App.Collection.findByAttribute( 'TicketPriority', 'name', '2 normal' ).id # generate form configure_attributes = [ - { name: 'customer_id', display: 'Customer', tag: 'autocompletion', type: 'text', limit: 200, null: false, relation: 'User', class: 'span7', autocapitalize: false, help: 'Select the customer of the Ticket or create one.', link: '»', callback: @localUserInfo }, + { name: 'customer_id', display: 'Customer', tag: 'autocompletion', type: 'text', limit: 200, null: false, relation: 'User', class: 'span7', autocapitalize: false, help: 'Select the customer of the Ticket or create one.', link: '»', callback: @localUserInfo, source: 'api/users/search', minLengt: 2 }, { name: 'group_id', display: 'Group', tag: 'select', multiple: false, null: false, filter: @edit_form, nulloption: true, relation: 'Group', default: defaults['group_id'], class: 'span7', }, { name: 'owner_id', display: 'Owner', tag: 'select', multiple: false, null: true, filter: @edit_form, nulloption: true, relation: 'User', default: defaults['owner_id'], class: 'span7', }, { name: 'tags', display: 'Tags', tag: 'tag', type: 'text', null: true, default: defaults['tags'], class: 'span7', }, @@ -183,6 +174,12 @@ class App.TicketCreate extends App.Controller admin: @isRole('Admin') ) + params = undefined + if template && !_.isEmpty( template.options ) + params = template.options + else if App.TaskManager.get(@task_key) && !_.isEmpty( App.TaskManager.get(@task_key).state ) + params = App.TaskManager.get(@task_key).state + new App.ControllerForm( el: @el.find('.ticket_create') form_id: @form_id @@ -191,6 +188,7 @@ class App.TicketCreate extends App.Controller className: 'create_' + @type + '_' + @id autofocus: true form_data: @edit_form + params: params ) # update taskbar with new meta data @@ -202,12 +200,6 @@ class App.TicketCreate extends App.Controller # update textarea size @el.find('textarea').trigger('change') - # start customer info controller - if defaults['customer_id'] - $('#create_customer_id').val( defaults['customer_id'] ) - $('#create_customer_id_autocompletion').val( defaults['customer_id_autocompletion'] ) - @userInfo( user_id: defaults['customer_id'] ) - # show template UI new App.TemplateUI( el: @el.find('[data-id="ticket_template"]'), @@ -217,14 +209,24 @@ class App.TicketCreate extends App.Controller @formDefault = @formParam( @el.find('.ticket-create') ) # show text module UI - new App.TextModuleUI( + @textModule = new App.TextModuleUI( el: $('.ticket-create') ) localUserInfo: (params) => + + # update text module UI + callback = (user) => + @textModule.reload( + data: + ticket: + customer: user + ) + @userInfo( - user_id: params.customer_id - el: @el.find('[data-id="customer_info"]') + user_id: params.customer_id + el: @el.find('[data-id="customer_info"]') + callback: callback ) userNew: (e) => diff --git a/app/assets/javascripts/app/controllers/agent_ticket_customer.js.coffee b/app/assets/javascripts/app/controllers/agent_ticket_customer.js.coffee index 11bd3a69d..87b7b185e 100644 --- a/app/assets/javascripts/app/controllers/agent_ticket_customer.js.coffee +++ b/app/assets/javascripts/app/controllers/agent_ticket_customer.js.coffee @@ -5,8 +5,7 @@ class App.TicketCustomer extends App.ControllerModal render: -> configure_attributes = [ -# { name: 'customer_id', display: 'Customer', tag: 'autocompletion', type: 'text', limit: 100, null: false, relation: 'User', class: 'span7', autocapitalize: false, help: 'Select the customer of the Ticket or create one.', link: '»', callback: @userInfo }, - { name: 'customer_id', display: 'Customer', tag: 'autocompletion', type: 'text', limit: 100, null: false, relation: 'User', class: 'span5', autocapitalize: false, help: 'Select the new customer of the Ticket.', }, + { name: 'customer_id', display: 'Customer', tag: 'autocompletion', type: 'text', limit: 100, null: false, relation: 'User', class: 'span5', autocapitalize: false, help: 'Select the new customer of the Ticket.', source: 'api/users/search', minLengt: 2 }, ] @html App.view('agent_ticket_customer')() @@ -36,7 +35,7 @@ class App.TicketCustomer extends App.ControllerModal # close modal @modalHide() - + # reload zoom view @zoom.render() diff --git a/app/assets/javascripts/app/controllers/user_info_widget.js.coffee b/app/assets/javascripts/app/controllers/user_info_widget.js.coffee index 99633997a..5dd3b90fc 100644 --- a/app/assets/javascripts/app/controllers/user_info_widget.js.coffee +++ b/app/assets/javascripts/app/controllers/user_info_widget.js.coffee @@ -5,7 +5,13 @@ class App.UserInfo extends App.Controller constructor: -> super - App.Collection.find( 'User', @user_id, @render ) + + callback = (user) => + @render(user) + if @callback + @callback(user) + + App.Collection.find( 'User', @user_id, callback ) render: (user) => diff --git a/app/assets/javascripts/app/views/generic/autocompletion.jst.eco b/app/assets/javascripts/app/views/generic/autocompletion.jst.eco index c75311d09..3d6c661c1 100644 --- a/app/assets/javascripts/app/views/generic/autocompletion.jst.eco +++ b/app/assets/javascripts/app/views/generic/autocompletion.jst.eco @@ -1,2 +1,3 @@ /> - <%= @attribute.autofocus %> <%- @attribute.autocapitalize %>/> + <%= @attribute.autofocus %> <%- @attribute.autocapitalize %>/> + diff --git a/test/browser/agent_ticket_actions_level1_test.rb b/test/browser/agent_ticket_actions_level1_test.rb index 606c80b2c..6c31dea02 100644 --- a/test/browser/agent_ticket_actions_level1_test.rb +++ b/test/browser/agent_ticket_actions_level1_test.rb @@ -2,7 +2,7 @@ require 'browser_test_helper' class AgentTicketActionLevel1Test < TestCase - def test_agent_ticket + def test_agent_ticket_create tests = [ { :name => 'agent ticket create 1', diff --git a/test/browser/agent_ticket_actions_level2_test.rb b/test/browser/agent_ticket_actions_level2_test.rb index ac37fc334..afc665d50 100644 --- a/test/browser/agent_ticket_actions_level2_test.rb +++ b/test/browser/agent_ticket_actions_level2_test.rb @@ -2,7 +2,7 @@ require 'browser_test_helper' class AgentTicketActionsLevel2Test < TestCase - def test_websocket + def test_work_with_two_browser_on_same_ticket message = 'message 1äöüß ' + rand(99999999999999999).to_s tests = [ { @@ -167,6 +167,11 @@ class AgentTicketActionsLevel2Test < TestCase :execute => 'wait', :value => 1, }, + { + :where => :instance2, + :execute => 'js', + :value => '$("#global-search").val("")', + }, { :where => :instance2, :execute => 'js', @@ -181,6 +186,11 @@ class AgentTicketActionsLevel2Test < TestCase :execute => 'js', :value => '$("#global-search").blur()', }, + { + :where => :instance2, + :execute => 'js', + :value => '$("#global-search").parent().parent().removeClass("open")', + }, { :execute => 'wait', :value => 3,