Browse Source

Improved userTicketPopups feature.

Martin Edenhofer 11 years ago
parent
commit
8db7b51c32

+ 54 - 39
app/assets/javascripts/app/controllers/_application_controller.js.coffee

@@ -385,51 +385,66 @@ class App.Controller extends Spine.Controller
         )
     )
 
-  userTicketPopups: (data) ->
+  userTicketPopups: (params) ->
 
     # remove old popovers
     $('.popover').remove()
 
-    # get data
-    tickets = {}
-    App.Ajax.request(
-      type:  'GET',
-      url:   @Config.get('api_path') + '/ticket_customer',
-      data:  {
-        customer_id: data.user_id,
-      }
-      processData: true,
-      success: (data, status, xhr) =>
-        tickets = data.tickets
-    )
-
-    if !data.position
-      data.position = 'left'
-
-    # show user popup
-    controller = @
-    @el.find(data.selector).popover(
-      trigger:    'hover'
-      container:  'body'
-      html:       true
-      delay:      { show: 500, hide: 5200 }
-      placement:  data.position
-      title: ->
-        $(@).find('[title="*"]').val()
-
-      content: ->
-        type = $(@).filter('[data-type]').data('type')
-        data = tickets[type] || []
+    show = (data, tickets) =>
+
+      if !data.position
+        data.position = 'left'
+
+      # show user popup
+      controller = @
+      @el.find(data.selector).popover(
+        trigger:    'hover'
+        container:  'body'
+        html:       true
+        delay:      { show: 500, hide: 5200 }
+        placement:  data.position
+        title: ->
+          $(@).find('[title="*"]').val()
+
+        content: ->
+          type = $(@).filter('[data-type]').data('type')
+          data = tickets[type] || []
+
+          # set human time
+          for ticket in data
+            ticket.humanTime = controller.humanTime(ticket.created_at)
+
+          # insert data
+          App.view('popover/user_ticket_list')(
+            tickets: data,
+          )
+      )
 
-        # set human time
-        for ticket in data
-          ticket.humanTime = controller.humanTime(ticket.created_at)
+    fetch = (params) =>
+      @ajax(
+        type:  'GET',
+        url:   @Config.get('api_path') + '/ticket_customer',
+        data:  {
+          customer_id: params.user_id,
+        }
+        processData: true,
+        success: (data, status, xhr) =>
+          App.Store.write( "user-ticket-popover::#{params.user_id}",  data.tickets )
+          show( params, data.tickets )
+      )
 
-        # insert data
-        App.view('popover/user_ticket_list')(
-          tickets: data,
-        )
-    )
+    # get data
+    tickets = App.Store.get( "user-ticket-popover::#{params.user_id}" )
+    if tickets
+      show( params, tickets )
+      @delay(
+        =>
+          fetch(params)
+        1000
+        'fetch'
+      )
+    else
+      fetch(params)
 
   ws_send: (data) ->
     App.Event.trigger( 'ws:send', JSON.stringify(data) )