isomorfeus-react 16.8.1 → 16.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/isomorfeus/config.rb +1 -0
- data/lib/isomorfeus/react_view_helper.rb +9 -3
- data/lib/isomorfeus/top_level_browser.rb +7 -0
- data/lib/isomorfeus/top_level_ssr.rb +4 -0
- data/lib/lucid_component/api.rb +5 -20
- data/lib/react/component/api.rb +5 -5
- data/lib/react/redux_component/api.rb +1 -1
- data/lib/react/redux_component/app_store_defaults.rb +2 -2
- data/lib/react/redux_component/app_store_proxy.rb +1 -1
- data/lib/react/redux_component/class_store_proxy.rb +1 -1
- data/lib/react/redux_component/component_class_store_defaults.rb +2 -2
- data/lib/react/redux_component/component_instance_store_defaults.rb +4 -8
- data/lib/react/redux_component/instance_store_proxy.rb +1 -1
- data/lib/react/redux_component/reducers.rb +16 -8
- data/lib/react/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e21d256eefe22328c08a12c7fe32ad6891c60d167f2ff44b4c24fea24ce018e
|
4
|
+
data.tar.gz: 3f142f8243283f8ef26892e96d8c10913d22b20ccf70d435f662148b0ea51f0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5da5eb77a5e0705a8f073b6841932cdfddba41bf05dd12cd417295cb5abfdfc07f2337b9197fe7d340740779311f8ed8f1c03238ae9d8eb59e4a2412f0d27d40
|
7
|
+
data.tar.gz: aff97f67736bd4901efd02936c16a236855b759c1b0b1f9c0d949700d5592a3540a3e39ddbead11b75bfb9d619f543813a8539c9471ba153acf7ad04a44dff67
|
data/lib/isomorfeus/config.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Isomorfeus
|
2
2
|
module ReactViewHelper
|
3
3
|
def mount_component(component_name, props = {}, asset = 'application_ssr.js')
|
4
|
-
render_result = "<div data-iso-env=\"#{Isomorfeus.env}\" data-iso-root=\"#{component_name}\" data-iso-props='#{Oj.dump(props, mode: :strict)}'
|
4
|
+
render_result = "<div data-iso-env=\"#{Isomorfeus.env}\" data-iso-root=\"#{component_name}\" data-iso-props='#{Oj.dump(props, mode: :strict)}'"
|
5
5
|
if Isomorfeus.server_side_rendering
|
6
6
|
unless Isomorfeus.ssr_contexts.key?(asset)
|
7
7
|
asset_file_name = OpalWebpackLoader::Manifest.lookup_path_for(asset)
|
@@ -15,9 +15,15 @@ module Isomorfeus
|
|
15
15
|
JAVASCRIPT
|
16
16
|
end
|
17
17
|
javascript << <<~JAVASCRIPT
|
18
|
-
|
18
|
+
var rendered_tree = global.Opal.Isomorfeus.TopLevel.$render_component_to_string('#{component_name}', #{Oj.dump(props, mode: :strict)})
|
19
|
+
var application_state = global.Opal.Isomorfeus.store.native.getState();
|
20
|
+
return [rendered_tree, application_state]
|
19
21
|
JAVASCRIPT
|
20
|
-
|
22
|
+
rendered_tree, application_state = Isomorfeus.ssr_contexts[asset].exec(javascript)
|
23
|
+
render_result << "data-iso-state='#{Oj.dump(application_state, mode: :strict)}'>"
|
24
|
+
render_result << rendered_tree
|
25
|
+
else
|
26
|
+
render_result << '>'
|
21
27
|
end
|
22
28
|
render_result << '</div>'
|
23
29
|
render_result
|
@@ -9,6 +9,13 @@ module Isomorfeus
|
|
9
9
|
props_json = root_element.JS.getAttribute('data-iso-props')
|
10
10
|
props = `Opal.Hash.$new(JSON.parse(props_json))`
|
11
11
|
hydrated = root_element.JS.getAttribute('data-iso-hydrated')
|
12
|
+
state_json = root_element.JS.getAttribute('data-iso-state')
|
13
|
+
if state_json
|
14
|
+
state = `JSON.parse(state_json)`
|
15
|
+
Isomorfeus.store.JS[:native].JS.dispatch(`{ type: 'APPLICATION_STATE', set_state: state.application_state }`)
|
16
|
+
Isomorfeus.store.JS[:native].JS.dispatch(`{ type: 'COMPONENT_STATE', set_state: state.component_state }`)
|
17
|
+
Isomorfeus.store.JS[:native].JS.dispatch(`{ type: 'COMPONENT_CLASS_STATE', set_state: state.component_class_state }`)
|
18
|
+
end
|
12
19
|
mount_component(component, props, root_element, hydrated)
|
13
20
|
end
|
14
21
|
end
|
@@ -10,6 +10,10 @@ module Isomorfeus
|
|
10
10
|
def render_component_to_string(component_name, props_json)
|
11
11
|
# for some reason props_json arrives already decoded
|
12
12
|
component = component_name.constantize
|
13
|
+
unless Isomorfeus.initial_state_fetched
|
14
|
+
Isomorfeus.initial_state_fetched = true
|
15
|
+
Redux::Store.preloaded_state = Isomorfeus.store.get_state
|
16
|
+
end
|
13
17
|
Isomorfeus.force_init!
|
14
18
|
ReactDOMServer.render_to_string(React.create_element(component, `Opal.Hash.$new(props_json)`))
|
15
19
|
end
|
data/lib/lucid_component/api.rb
CHANGED
@@ -2,25 +2,10 @@ module LucidComponent
|
|
2
2
|
module API
|
3
3
|
def self.included(base)
|
4
4
|
base.instance_exec do
|
5
|
-
def app_store
|
6
|
-
@default_app_store_defined = true
|
7
|
-
@default_app_store ||= ::React::ReduxComponent::AppStoreDefaults.new(default_props, self.to_s)
|
8
|
-
end
|
9
|
-
|
10
|
-
def class_store
|
11
|
-
@default_class_store_defined = true
|
12
|
-
@default_class_store ||= ::React::ReduxComponent::ComponentClassStoreDefaults.new(default_props, self.to_s)
|
13
|
-
end
|
14
|
-
|
15
|
-
def store
|
16
|
-
@default_instance_store_defined = true
|
17
|
-
@default_class_store ||= ::React::ReduxComponent::ComponentInstanceStoreDefaults.new(default_props, self.to_s)
|
18
|
-
end
|
19
|
-
|
20
5
|
def prop(name, options = `null`)
|
21
6
|
name = `Opal.React.lower_camelize(name)`
|
22
7
|
if options
|
23
|
-
if options.
|
8
|
+
if options.key?(:default)
|
24
9
|
%x{
|
25
10
|
if (typeof self.lucid_react_component.defaultProps == "undefined") {
|
26
11
|
self.lucid_react_component.defaultProps = { isomorfeus_store: Opal.Hash.$new() };
|
@@ -28,7 +13,7 @@ module LucidComponent
|
|
28
13
|
self.lucid_react_component.defaultProps[name] = options.$fetch("default");
|
29
14
|
}
|
30
15
|
end
|
31
|
-
if options.
|
16
|
+
if options.key?(:class)
|
32
17
|
%x{
|
33
18
|
if (typeof self.lucid_react_component.propTypes == "undefined") {
|
34
19
|
self.lucid_react_component.propTypes = {};
|
@@ -38,7 +23,7 @@ module LucidComponent
|
|
38
23
|
self.lucid_react_component.propTypes[name] = self.lucid_react_component.prototype.validateProp;
|
39
24
|
self.lucid_react_component.propValidations[name].ruby_class = options.$fetch("class");
|
40
25
|
}
|
41
|
-
elsif options.
|
26
|
+
elsif options.key?(:is_a)
|
42
27
|
%x{
|
43
28
|
if (typeof self.lucid_react_component.propTypes == "undefined") {
|
44
29
|
self.lucid_react_component.propTypes = {};
|
@@ -49,7 +34,7 @@ module LucidComponent
|
|
49
34
|
self.lucid_react_component.propValidations[name].is_a = options.$fetch("is_a");
|
50
35
|
}
|
51
36
|
end
|
52
|
-
if options.
|
37
|
+
if options.key?(:required)
|
53
38
|
%x{
|
54
39
|
if (typeof self.lucid_react_component.propTypes == "undefined") {
|
55
40
|
self.lucid_react_component.propTypes = {};
|
@@ -59,7 +44,7 @@ module LucidComponent
|
|
59
44
|
self.lucid_react_component.propTypes[name] = self.lucid_react_component.prototype.validateProp;
|
60
45
|
self.lucid_react_component.propValidations[name].required = options.$fetch("required");
|
61
46
|
}
|
62
|
-
elsif !options.
|
47
|
+
elsif !options.key?(:default)
|
63
48
|
%x{
|
64
49
|
if (typeof self.lucid_react_component.propTypes == "undefined") {
|
65
50
|
self.lucid_react_component.propTypes = {};
|
data/lib/react/component/api.rb
CHANGED
@@ -47,7 +47,7 @@ module React
|
|
47
47
|
def prop(name, options = `null`)
|
48
48
|
name = `Opal.React.lower_camelize(name)`
|
49
49
|
if options
|
50
|
-
if options.
|
50
|
+
if options.key?(:default)
|
51
51
|
%x{
|
52
52
|
if (typeof self.react_component.defaultProps == "undefined") {
|
53
53
|
self.react_component.defaultProps = {};
|
@@ -55,23 +55,23 @@ module React
|
|
55
55
|
self.react_component.defaultProps[name] = options.$fetch("default");
|
56
56
|
}
|
57
57
|
end
|
58
|
-
if options.
|
58
|
+
if options.key?(:class)
|
59
59
|
%x{
|
60
60
|
Opal.React.set_validate_prop(self, name);
|
61
61
|
self.react_component.propValidations[name].ruby_class = options.$fetch("class");
|
62
62
|
}
|
63
|
-
elsif options.
|
63
|
+
elsif options.key?(:is_a)
|
64
64
|
%x{
|
65
65
|
Opal.React.set_validate_prop(self, name);
|
66
66
|
self.react_component.propValidations[name].is_a = options.$fetch("is_a");
|
67
67
|
}
|
68
68
|
end
|
69
|
-
if options.
|
69
|
+
if options.key?(:required)
|
70
70
|
%x{
|
71
71
|
Opal.React.set_validate_prop(self, name);
|
72
72
|
self.react_component.propValidations[name].required = options.$fetch("required");
|
73
73
|
}
|
74
|
-
elsif !options.
|
74
|
+
elsif !options.key?(:default)
|
75
75
|
%x{
|
76
76
|
Opal.React.set_validate_prop(self, name);
|
77
77
|
self.react_component.propValidations[name].required = true;
|
@@ -31,7 +31,7 @@ module React
|
|
31
31
|
|
32
32
|
def store
|
33
33
|
@default_instance_store_defined = true
|
34
|
-
@
|
34
|
+
@default_instance_store ||= ::React::ReduxComponent::ComponentInstanceStoreDefaults.new(state, self.to_s)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -16,14 +16,14 @@ module React
|
|
16
16
|
key = key.chop if `key.endsWith('=')`
|
17
17
|
@state.isomorfeus_store[:application_state][key] = args[0]
|
18
18
|
current_state = Isomorfeus.store.get_state
|
19
|
-
if !(current_state[:application_state].
|
19
|
+
if !(current_state[:application_state].key?(key))
|
20
20
|
Isomorfeus.store.dispatch(type: 'APPLICATION_STATE', name: key, value: args[0])
|
21
21
|
end
|
22
22
|
else
|
23
23
|
# get class state
|
24
24
|
|
25
25
|
# check if we have a component local state value
|
26
|
-
if @state.isomorfeus_store[:application_state].
|
26
|
+
if @state.isomorfeus_store[:application_state].key?(key)
|
27
27
|
return @state.isomorfeus_store[:application_state][key]
|
28
28
|
end
|
29
29
|
end
|
@@ -18,7 +18,7 @@ module React
|
|
18
18
|
# check if we have a component local state value
|
19
19
|
if `this.native_component_instance[this.access_key]["isomorfeus_store"]["application_state"].hasOwnProperty(key)`
|
20
20
|
return @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:application_state].JS[key]
|
21
|
-
elsif @component_instance.class.default_app_store_defined && @component_instance.class.app_store.to_h.
|
21
|
+
elsif @component_instance.class.default_app_store_defined && @component_instance.class.app_store.to_h.key?(key)
|
22
22
|
# check if a default value was given
|
23
23
|
return @component_instance.class.app_store.to_h[key]
|
24
24
|
end
|
@@ -21,7 +21,7 @@ module React
|
|
21
21
|
if @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_class_state].JS[@component_name] &&
|
22
22
|
@native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_class_state].JS[@component_name].JS.hasOwnProperty(key)
|
23
23
|
return @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_class_state].JS[@component_name].JS[key]
|
24
|
-
elsif @component_instance.class.default_class_store_defined && @component_instance.class.class_store.to_h.
|
24
|
+
elsif @component_instance.class.default_class_store_defined && @component_instance.class.class_store.to_h.key?(key)
|
25
25
|
# check if a default value was given
|
26
26
|
return @component_instance.class.class_store.to_h[key]
|
27
27
|
end
|
@@ -17,7 +17,7 @@ module React
|
|
17
17
|
key = key.chop if `key.endsWith('=')`
|
18
18
|
@state.isomorfeus_store[:component_class_state][@component_name][key] = args[0]
|
19
19
|
current_state = Isomorfeus.store.get_state
|
20
|
-
if !(current_state[:component_class_state].
|
20
|
+
if !(current_state[:component_class_state].key?(@component_name) && current_state[:component_class_state][@component_name].key?(key))
|
21
21
|
Isomorfeus.store.dispatch(type: 'COMPONENT_CLASS_STATE', class: @component_name, name: key, value: args[0])
|
22
22
|
end
|
23
23
|
else
|
@@ -25,7 +25,7 @@ module React
|
|
25
25
|
|
26
26
|
# check if we have a component local state value
|
27
27
|
|
28
|
-
if @state.isomorfeus_store[:component_class_state][@component_name].
|
28
|
+
if @state.isomorfeus_store[:component_class_state][@component_name].key?(key)
|
29
29
|
return @state.isomorfeus_store[:component_class_state][@component_name][key]
|
30
30
|
end
|
31
31
|
end
|
@@ -12,9 +12,9 @@ module React
|
|
12
12
|
key = key.chop if `key.endsWith('=')`
|
13
13
|
@state[key] = args[0]
|
14
14
|
current_state = Isomorfeus.store.get_state
|
15
|
-
if !(current_state[:
|
16
|
-
current_state[:
|
17
|
-
current_state[:
|
15
|
+
if !(current_state[:component_state].key?(@component_name) &&
|
16
|
+
current_state[:component_state][@component_name].key?(:instance_defaults) &&
|
17
|
+
current_state[:component_state][@component_name][:instance_defaults].key?(key))
|
18
18
|
Isomorfeus.store.dispatch(type: 'COMPONENT_CLASS_STATE', class: @component_name, name: :instance_defaults, value: { key => args[0]})
|
19
19
|
end
|
20
20
|
else
|
@@ -22,7 +22,7 @@ module React
|
|
22
22
|
|
23
23
|
# check if we have a component local state value
|
24
24
|
|
25
|
-
if @state.
|
25
|
+
if @state.key?(key)
|
26
26
|
return @state[key]
|
27
27
|
end
|
28
28
|
end
|
@@ -32,10 +32,6 @@ module React
|
|
32
32
|
def to_h
|
33
33
|
@state
|
34
34
|
end
|
35
|
-
|
36
|
-
def to_n
|
37
|
-
@state.to_n
|
38
|
-
end
|
39
35
|
end
|
40
36
|
end
|
41
37
|
end
|
@@ -24,7 +24,7 @@ module React
|
|
24
24
|
@native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS.hasOwnProperty(key)
|
25
25
|
# check if we have a component local state value
|
26
26
|
return @native_component_instance.JS[@access_key].JS[:isomorfeus_store].JS[:component_state].JS[@component_object_id].JS[key]
|
27
|
-
elsif @component_instance.class.default_instance_store_defined && @component_instance.class.store.to_h.
|
27
|
+
elsif @component_instance.class.default_instance_store_defined && @component_instance.class.store.to_h.key?(key)
|
28
28
|
# check if a default value was given
|
29
29
|
return @component_instance.class.store.to_h[key]
|
30
30
|
end
|
@@ -10,10 +10,14 @@ module React
|
|
10
10
|
component_reducer = Redux.create_reducer do |prev_state, action|
|
11
11
|
case action[:type]
|
12
12
|
when 'COMPONENT_STATE'
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
if action.key?(:set_state)
|
14
|
+
action[:set_state]
|
15
|
+
else
|
16
|
+
new_state = {}.merge!(prev_state) # make a copy of state
|
17
|
+
new_state[action[:object_id]] = {} unless new_state.key?(action[:object_id])
|
18
|
+
new_state[action[:object_id]].merge!(action[:name] => action[:value])
|
19
|
+
new_state
|
20
|
+
end
|
17
21
|
else
|
18
22
|
prev_state
|
19
23
|
end
|
@@ -22,10 +26,14 @@ module React
|
|
22
26
|
component_class_reducer = Redux.create_reducer do |prev_state, action|
|
23
27
|
case action[:type]
|
24
28
|
when 'COMPONENT_CLASS_STATE'
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
+
if action.key?(:set_state)
|
30
|
+
action[:set_state]
|
31
|
+
else
|
32
|
+
new_state = {}.merge!(prev_state) # make a copy of state
|
33
|
+
new_state[action[:class]] = {} unless new_state.key?(action[:class])
|
34
|
+
new_state[action[:class]].merge!(action[:name] => action[:value])
|
35
|
+
new_state
|
36
|
+
end
|
29
37
|
else
|
30
38
|
prev_state
|
31
39
|
end
|
data/lib/react/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: isomorfeus-react
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 16.8.
|
4
|
+
version: 16.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Biedermann
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-06-
|
11
|
+
date: 2019-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oj
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: 4.0.
|
89
|
+
version: 4.0.7
|
90
90
|
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: 4.0.
|
96
|
+
version: 4.0.7
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: isomorfeus-speednode
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|