Class: ViewComponentReflex::StateAdapter::Session

Inherits:
Object
  • Object
show all
Defined in:
lib/view_component_reflex/state_adapter/session.rb

Class Method Summary collapse

Class Method Details

.reconcile_state(request, key, new_state) ⇒ Object

The passed state should always match the initial state of the component if it doesn’t, we need to reset the state to the passed value.

This handles cases where your initialize_state param computes some value that changes initialize_state({ transaction: @customer.transactions.first }) if you delete the first transaction, that ^ is no longer valid. We need to update the state.



29
30
31
32
33
34
35
# File 'lib/view_component_reflex/state_adapter/session.rb', line 29

def self.reconcile_state(request, key, new_state)
  request.session["#{key}_initial"].each do |k, v|
    if new_state[k] != v
      request.session[key][k] = new_state[k]
    end
  end
end

.set_state(reflex, key, new_state) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/view_component_reflex/state_adapter/session.rb', line 8

def self.set_state(reflex, key, new_state)
  new_state.each do |k, v|
    state(reflex.request, key)[k] = v
  end
  store = reflex.request.session.instance_variable_get("@by")
  store.commit_session reflex.request, reflex.controller.response
end

.state(request, key) ⇒ Object



4
5
6
# File 'lib/view_component_reflex/state_adapter/session.rb', line 4

def self.state(request, key)
  request.session[key] ||= {}
end

.store_state(request, key, new_state = {}) ⇒ Object



16
17
18
19
20
21
# File 'lib/view_component_reflex/state_adapter/session.rb', line 16

def self.store_state(request, key, new_state = {})
  request.session[key] = {}
  new_state.each do |k, v|
    request.session[key][k] = v
  end
end