stores_taskbar_state.rb 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. module FormUpdater::Concerns::StoresTaskbarState
  3. extend ActiveSupport::Concern
  4. def resolve
  5. if current_taskbar.present? && should_store?
  6. store_taskbar_state
  7. end
  8. super
  9. end
  10. private
  11. def store_taskbar_state
  12. store_value = FormUpdater::StoreValue.new
  13. # TODO: This will not work for ticket detail view, we have two forms there and we cannot overwrite the state completely.
  14. state = {
  15. form_id: meta[:form_id],
  16. }
  17. data.each_pair do |field, value|
  18. field_state = store_value.perform(field:, value:)
  19. state = state.merge field_state
  20. end
  21. # TODO: Skip trigger, but not for ticket create.
  22. # if current_taskbar.callback != 'TicketCreate' ...
  23. current_taskbar.skip_trigger = true
  24. current_taskbar.update!(state:)
  25. end
  26. def current_taskbar
  27. id = meta.dig(:additional_data, 'taskbarId')
  28. Gql::ZammadSchema.authorized_object_from_id(id, type: Taskbar, user: context[:current_user]) if id.present?
  29. end
  30. def should_store?
  31. meta.dig(:additional_data, 'applyTaskbarState') != true && !meta[:initial]
  32. end
  33. end