Reduced rerendering of attribute bar in ticket zoom
This commit is contained in:
parent
e0e4fa249c
commit
16ee920cf9
5 changed files with 48 additions and 20 deletions
|
@ -93,7 +93,8 @@ class App.TaskbarWidget extends App.Controller
|
||||||
if worker.changed()
|
if worker.changed()
|
||||||
new Remove(
|
new Remove(
|
||||||
key: key
|
key: key
|
||||||
ui: @
|
ui: @
|
||||||
|
event: e
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -131,6 +132,6 @@ class Remove extends App.ControllerModal
|
||||||
content: ->
|
content: ->
|
||||||
App.i18n.translateContent('Tab has changed, you really want to close it?')
|
App.i18n.translateContent('Tab has changed, you really want to close it?')
|
||||||
|
|
||||||
onSubmit: (e) =>
|
onSubmit: =>
|
||||||
@close()
|
@close()
|
||||||
@ui.remove(e, @key, true)
|
@ui.remove(@event, @key, true)
|
||||||
|
|
|
@ -51,7 +51,7 @@ class App.TicketZoom extends App.Controller
|
||||||
update = =>
|
update = =>
|
||||||
@fetch(@ticket_id, false)
|
@fetch(@ticket_id, false)
|
||||||
if !@ticketUpdatedAtLastCall || ( new Date(data.updated_at).toString() isnt new Date(@ticketUpdatedAtLastCall).toString() )
|
if !@ticketUpdatedAtLastCall || ( new Date(data.updated_at).toString() isnt new Date(@ticketUpdatedAtLastCall).toString() )
|
||||||
@delay( update, 1200, 'ticket-zoom-' + @ticket_id )
|
@delay(update, 1200, "ticket-zoom-#{@ticket_id}")
|
||||||
)
|
)
|
||||||
|
|
||||||
# rerender view, e. g. on langauge change
|
# rerender view, e. g. on langauge change
|
||||||
|
@ -100,7 +100,7 @@ class App.TicketZoom extends App.Controller
|
||||||
@activeState = true
|
@activeState = true
|
||||||
|
|
||||||
# start autosave
|
# start autosave
|
||||||
@autosaveStart()
|
@delay(@autosaveStart, 800, "ticket-zoom-auto-save-#{@ticket_id}")
|
||||||
|
|
||||||
# if ticket is shown the first time
|
# if ticket is shown the first time
|
||||||
if !@shown
|
if !@shown
|
||||||
|
@ -122,6 +122,7 @@ class App.TicketZoom extends App.Controller
|
||||||
@positionPageHeaderStop()
|
@positionPageHeaderStop()
|
||||||
|
|
||||||
# stop autosave
|
# stop autosave
|
||||||
|
@clearDelay("ticket-zoom-auto-save-#{@ticket_id}")
|
||||||
@autosaveStop()
|
@autosaveStop()
|
||||||
|
|
||||||
changed: =>
|
changed: =>
|
||||||
|
@ -687,12 +688,12 @@ class App.TicketZoom extends App.Controller
|
||||||
processData: false
|
processData: false
|
||||||
)
|
)
|
||||||
|
|
||||||
# reset edit ticket / reset new article
|
|
||||||
App.Event.trigger('ui::ticket::taskReset', { ticket_id: @ticket.id })
|
|
||||||
|
|
||||||
# hide reset button
|
# hide reset button
|
||||||
@$('.js-reset').addClass('hide')
|
@$('.js-reset').addClass('hide')
|
||||||
|
|
||||||
|
# reset edit ticket / reset new article
|
||||||
|
App.Event.trigger('ui::ticket::taskReset', { ticket_id: @ticket.id })
|
||||||
|
|
||||||
# remove change flag on tab
|
# remove change flag on tab
|
||||||
@$('.tabsSidebar-tab[data-tab="ticket"]').removeClass('is-changed')
|
@$('.tabsSidebar-tab[data-tab="ticket"]').removeClass('is-changed')
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
class App.TicketZoomAttributeBar extends App.Controller
|
class App.TicketZoomAttributeBar extends App.Controller
|
||||||
elements:
|
elements:
|
||||||
'.js-submitDropdown': 'buttonDropdown'
|
'.js-submitDropdown': 'buttonDropdown'
|
||||||
'.js-secondaryActionButtonLabel': 'secondaryActionButton'
|
'.js-reset': 'resetButton'
|
||||||
|
|
||||||
events:
|
events:
|
||||||
'mousedown .js-openDropdownMacro': 'toggleDropdownMacro'
|
'mousedown .js-openDropdownMacro': 'toggleDropdownMacro'
|
||||||
|
@ -16,7 +16,7 @@ class App.TicketZoomAttributeBar extends App.Controller
|
||||||
|
|
||||||
@secondaryAction = 'stayOnTab'
|
@secondaryAction = 'stayOnTab'
|
||||||
|
|
||||||
@subscribeId = App.Macro.subscribe(@render)
|
@subscribeId = App.Macro.subscribe(@checkMacroChanges)
|
||||||
@render()
|
@render()
|
||||||
|
|
||||||
# rerender, e. g. on language change
|
# rerender, e. g. on language change
|
||||||
|
@ -28,15 +28,31 @@ class App.TicketZoomAttributeBar extends App.Controller
|
||||||
App.Macro.unsubscribe(@subscribeId)
|
App.Macro.unsubscribe(@subscribeId)
|
||||||
|
|
||||||
render: =>
|
render: =>
|
||||||
|
|
||||||
|
# remember current reset state
|
||||||
|
resetButtonShown = false
|
||||||
|
if @resetButton.get(0) && !@resetButton.hasClass('hide')
|
||||||
|
resetButtonShown = true
|
||||||
|
|
||||||
macros = App.Macro.all()
|
macros = App.Macro.all()
|
||||||
|
@macroLastUpdated = App.Macro.lastUpdatedAt()
|
||||||
|
|
||||||
if _.isEmpty(macros) || !@isRole('Agent')
|
if _.isEmpty(macros) || !@isRole('Agent')
|
||||||
macroDisabled = true
|
macroDisabled = true
|
||||||
@html App.view('ticket_zoom/attribute_bar')(
|
|
||||||
|
localeEl = $(App.view('ticket_zoom/attribute_bar')(
|
||||||
macros: macros
|
macros: macros
|
||||||
macroDisabled: macroDisabled
|
macroDisabled: macroDisabled
|
||||||
overview_id: @overview_id
|
overview_id: @overview_id
|
||||||
)
|
resetButtonShown: resetButtonShown
|
||||||
@setSecondaryAction()
|
))
|
||||||
|
@setSecondaryAction(@secondaryAction, localeEl)
|
||||||
|
@html localeEl
|
||||||
|
|
||||||
|
checkMacroChanges: =>
|
||||||
|
macroLastUpdated = App.Macro.lastUpdatedAt()
|
||||||
|
return if macroLastUpdated is @macroLastUpdated
|
||||||
|
@render()
|
||||||
|
|
||||||
toggleDropdownMacro: =>
|
toggleDropdownMacro: =>
|
||||||
if @buttonDropdown.hasClass 'is-open'
|
if @buttonDropdown.hasClass 'is-open'
|
||||||
|
@ -65,12 +81,12 @@ class App.TicketZoomAttributeBar extends App.Controller
|
||||||
|
|
||||||
chooseSecondaryAction: (e) =>
|
chooseSecondaryAction: (e) =>
|
||||||
type = $(e.currentTarget).find('.js-secondaryActionLabel').data('type')
|
type = $(e.currentTarget).find('.js-secondaryActionLabel').data('type')
|
||||||
@setSecondaryAction(type)
|
@setSecondaryAction(type, @el)
|
||||||
|
|
||||||
setSecondaryAction: (type = @secondaryAction) =>
|
setSecondaryAction: (type, localEl) ->
|
||||||
element = @$(".js-secondaryActionLabel[data-type=#{type}]")
|
element = localEl.find(".js-secondaryActionLabel[data-type=#{type}]")
|
||||||
text = element.text()
|
text = element.text()
|
||||||
@$('.js-secondaryAction .js-selectedIcon.is-selected').removeClass('is-selected')
|
localEl.find('.js-secondaryAction .js-selectedIcon.is-selected').removeClass('is-selected')
|
||||||
element.closest('.js-secondaryAction').find('.js-selectedIcon').addClass('is-selected')
|
element.closest('.js-secondaryAction').find('.js-selectedIcon').addClass('is-selected')
|
||||||
@secondaryActionButton.text(text)
|
localEl.find('.js-secondaryActionButtonLabel').text(text)
|
||||||
@secondaryActionButton.data('type', type)
|
localEl.find('.js-secondaryActionButtonLabel').data('type', type)
|
||||||
|
|
|
@ -666,3 +666,13 @@ class App.Model extends Spine.Model
|
||||||
|
|
||||||
activityMessage: (item) ->
|
activityMessage: (item) ->
|
||||||
return "Need own activityMessage() in model to generate text (#{@objectDisplayName()}/#{item.type})."
|
return "Need own activityMessage() in model to generate text (#{@objectDisplayName()}/#{item.type})."
|
||||||
|
|
||||||
|
@lastUpdatedAt: ->
|
||||||
|
updated_at
|
||||||
|
for item in @all()
|
||||||
|
if item.updated_at
|
||||||
|
if !updated_at
|
||||||
|
updated_at = item.updated_at
|
||||||
|
else if item.updated_at > updated_at
|
||||||
|
updated_at = item.updated_at
|
||||||
|
updated_at
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<div class="buttonDropdown btn js-reset hide"><%- @T('Discard your unsaved changes.') %></div>
|
<div class="buttonDropdown btn js-reset <% if !@resetButtonShown: %>hide<% end %>"><%- @T('Discard your unsaved changes.') %></div>
|
||||||
<div class="buttonDropdown dropdown dropdown--actions dropup">
|
<div class="buttonDropdown dropdown dropdown--actions dropup">
|
||||||
<div class="btn btn--text btn--icon--last" data-toggle="dropdown">
|
<div class="btn btn--text btn--icon--last" data-toggle="dropdown">
|
||||||
<span class="js-secondaryActionButtonLabel"></span> <%- @Icon('arrow-up') %>
|
<span class="js-secondaryActionButtonLabel"></span> <%- @Icon('arrow-up') %>
|
||||||
|
|
Loading…
Reference in a new issue