isomorfeus-react 16.6.8 → 16.8.0

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +39 -413
  3. data/lib/isomorfeus-react-base.rb +55 -0
  4. data/lib/isomorfeus-react-component.rb +20 -0
  5. data/lib/isomorfeus-react-lucid.rb +39 -0
  6. data/lib/isomorfeus-react-material-ui.rb +41 -0
  7. data/lib/isomorfeus-react-redux-component.rb +25 -0
  8. data/lib/isomorfeus-react.rb +4 -101
  9. data/lib/isomorfeus/config.rb +3 -8
  10. data/lib/isomorfeus/top_level_browser.rb +1 -1
  11. data/lib/lucid_app/api.rb +1 -12
  12. data/lib/lucid_app/mixin.rb +1 -0
  13. data/lib/lucid_app/native_component_constructor.rb +10 -0
  14. data/lib/lucid_component/api.rb +1 -1
  15. data/lib/lucid_component/initializer.rb +5 -5
  16. data/lib/lucid_component/mixin.rb +1 -0
  17. data/lib/lucid_component/native_component_constructor.rb +13 -3
  18. data/lib/lucid_material/app/base.rb +9 -0
  19. data/lib/lucid_material/app/mixin.rb +20 -0
  20. data/lib/lucid_material/app/native_component_constructor.rb +116 -0
  21. data/lib/lucid_material/component/api.rb +19 -0
  22. data/lib/lucid_material/component/base.rb +9 -0
  23. data/lib/lucid_material/component/mixin.rb +21 -0
  24. data/lib/lucid_material/component/native_component_constructor.rb +158 -0
  25. data/lib/react.rb +13 -5
  26. data/lib/react/children.rb +35 -0
  27. data/lib/react/component/api.rb +5 -91
  28. data/lib/react/component/callbacks.rb +103 -0
  29. data/lib/react/component/elements.rb +3 -23
  30. data/lib/react/component/features.rb +12 -29
  31. data/lib/react/component/initializer.rb +2 -2
  32. data/lib/react/component/mixin.rb +1 -0
  33. data/lib/react/component/native_component_constructor.rb +7 -0
  34. data/lib/react/component/props.rb +13 -1
  35. data/lib/react/component/resolution.rb +14 -15
  36. data/lib/react/component/styles.rb +23 -0
  37. data/lib/react/context_wrapper.rb +4 -0
  38. data/lib/react/function_component/api.rb +83 -0
  39. data/lib/react/function_component/base.rb +9 -0
  40. data/lib/react/function_component/creator.rb +19 -65
  41. data/lib/react/function_component/event_handler.rb +13 -0
  42. data/lib/react/function_component/mixin.rb +14 -0
  43. data/lib/react/function_component/resolution.rb +17 -15
  44. data/lib/react/memo_component/base.rb +9 -0
  45. data/lib/react/memo_component/creator.rb +32 -0
  46. data/lib/react/memo_component/mixin.rb +14 -0
  47. data/lib/react/native_constant_wrapper.rb +1 -11
  48. data/lib/react/pure_component/mixin.rb +2 -0
  49. data/lib/react/redux_component/api.rb +1 -93
  50. data/lib/react/redux_component/initializer.rb +5 -5
  51. data/lib/react/redux_component/mixin.rb +1 -0
  52. data/lib/react/redux_component/native_component_constructor.rb +13 -3
  53. data/lib/react/redux_component/reducers.rb +29 -35
  54. data/lib/react/ref.rb +4 -0
  55. data/lib/react/version.rb +1 -1
  56. data/lib/react_dom.rb +9 -3
  57. metadata +70 -8
  58. data/lib/lucid_router.rb +0 -18
  59. data/lib/react/function_component/runner.rb +0 -19
@@ -0,0 +1,55 @@
1
+ require 'opal'
2
+ require 'native'
3
+ require 'active_support/core_ext/string'
4
+ require 'react/active_support_support'
5
+ require 'isomorfeus/execution_environment'
6
+ if Isomorfeus.on_browser?
7
+ require 'browser/support'
8
+ require 'browser/event'
9
+ require 'browser/event_source'
10
+ require 'browser/screen'
11
+ require 'browser/socket'
12
+ require 'browser/window'
13
+ require 'browser/dom/node'
14
+ require 'browser/dom/element'
15
+ end
16
+ require 'isomorfeus-redux'
17
+ require 'isomorfeus/config'
18
+
19
+ # allow mounting of components
20
+ if Isomorfeus.on_browser?
21
+ require 'isomorfeus/top_level_browser'
22
+ else
23
+ require 'isomorfeus/top_level_ssr'
24
+ end
25
+
26
+ # react
27
+ require 'react/version'
28
+ require 'react'
29
+ require 'react/synthetic_event'
30
+ require 'react/ref'
31
+ require 'react/children'
32
+ if Isomorfeus.on_browser?
33
+ require 'react_dom'
34
+ else
35
+ require 'react_dom_server'
36
+ end
37
+ # props
38
+ require 'react/component/props'
39
+ # HTML Elements support
40
+ require 'react/component/elements'
41
+ # React Features
42
+ require 'react/component/features'
43
+ require 'react/context_wrapper'
44
+ require 'react/native_constant_wrapper'
45
+ # Function Component
46
+ require 'react/function_component/resolution'
47
+ require 'react/function_component/api'
48
+ require 'react/function_component/event_handler'
49
+ require 'react/function_component/creator'
50
+ require 'react/function_component/mixin'
51
+ require 'react/function_component/base'
52
+ require 'react/memo_component/creator'
53
+ require 'react/memo_component/mixin'
54
+ require 'react/memo_component/base'
55
+
@@ -0,0 +1,20 @@
1
+ require 'isomorfeus-react-base'
2
+ # React::Component
3
+ require 'react/component/api'
4
+ require 'react/component/callbacks'
5
+ require 'react/component/unsafe_api'
6
+ require 'react/component/initializer'
7
+ require 'react/component/native_component_constructor'
8
+ require 'react/component/native_component_validate_prop'
9
+ require 'react/component/state'
10
+ require 'react/component/match'
11
+ require 'react/component/location'
12
+ require 'react/component/history'
13
+ require 'react/component/resolution'
14
+ require 'react/component/should_component_update'
15
+ require 'react/component/event_handler'
16
+ require 'react/component/mixin'
17
+ require 'react/component/base'
18
+ # React::PureComponent
19
+ require 'react/pure_component/mixin'
20
+ require 'react/pure_component/base'
@@ -0,0 +1,39 @@
1
+ require 'isomorfeus-react-base'
2
+
3
+ # basics
4
+ require 'react/component/native_component_validate_prop'
5
+ require 'react/component/event_handler'
6
+ require 'react/component/api'
7
+ require 'react/component/callbacks'
8
+ require 'react/component/resolution'
9
+ require 'react/component/state'
10
+ require 'react/component/should_component_update'
11
+ require 'react/redux_component/api'
12
+ require 'react/redux_component/app_store_defaults'
13
+ require 'react/redux_component/component_class_store_defaults'
14
+ require 'react/redux_component/component_instance_store_defaults'
15
+ require 'react/redux_component/app_store_proxy'
16
+ require 'react/redux_component/class_store_proxy'
17
+ require 'react/redux_component/instance_store_proxy'
18
+ require 'react/redux_component/reducers'
19
+
20
+ # init component reducers
21
+ React::ReduxComponent::Reducers.add_component_reducers_to_store
22
+
23
+ # init LucidApplicationContext (Store Provider and Consumer)
24
+ require 'lucid_app/context'
25
+ LucidApp::Context.create_application_context
26
+
27
+ # LucidComponent
28
+ require 'lucid_component/api'
29
+ require 'lucid_component/initializer'
30
+ require 'lucid_component/native_component_constructor'
31
+ require 'lucid_component/event_handler'
32
+ require 'lucid_component/mixin'
33
+ require 'lucid_component/base'
34
+
35
+ # LucidApp
36
+ require 'lucid_app/api'
37
+ require 'lucid_app/native_component_constructor'
38
+ require 'lucid_app/mixin'
39
+ require 'lucid_app/base'
@@ -0,0 +1,41 @@
1
+ require 'isomorfeus-react-base'
2
+
3
+ # basics
4
+ require 'react/component/native_component_validate_prop'
5
+ require 'react/component/event_handler'
6
+ require 'react/component/api'
7
+ require 'react/component/callbacks'
8
+ require 'react/component/resolution'
9
+ require 'react/component/state'
10
+ require 'react/component/should_component_update'
11
+ require 'react/redux_component/api'
12
+ require 'react/redux_component/app_store_defaults'
13
+ require 'react/redux_component/component_class_store_defaults'
14
+ require 'react/redux_component/component_instance_store_defaults'
15
+ require 'react/redux_component/app_store_proxy'
16
+ require 'react/redux_component/class_store_proxy'
17
+ require 'react/redux_component/instance_store_proxy'
18
+ require 'react/redux_component/reducers'
19
+
20
+ require 'react/component/styles'
21
+ # init component reducers
22
+ React::ReduxComponent::Reducers.add_component_reducers_to_store
23
+
24
+ # init LucidApplicationContext (Store Provider and Consumer)
25
+ require 'lucid_app/context'
26
+ LucidApp::Context.create_application_context
27
+
28
+ require 'lucid_component/api'
29
+ require 'lucid_component/event_handler'
30
+ require 'lucid_component/initializer'
31
+ require 'lucid_app/api'
32
+
33
+ # LucidMaterial::Component
34
+ require 'lucid_material/component/api'
35
+ require 'lucid_material/component/native_component_constructor'
36
+ require 'lucid_material/component/mixin'
37
+ require 'lucid_material/component/base'
38
+ # LucidMaterial::App
39
+ require 'lucid_material/app/native_component_constructor'
40
+ require 'lucid_material/app/mixin'
41
+ require 'lucid_material/app/base'
@@ -0,0 +1,25 @@
1
+ require 'isomorfeus-react-base'
2
+ # Component basics
3
+ require 'react/component/native_component_validate_prop'
4
+ require 'react/component/event_handler'
5
+ require 'react/component/api'
6
+ require 'react/component/callbacks'
7
+ require 'react/component/resolution'
8
+ require 'react/component/state'
9
+ require 'react/component/should_component_update'
10
+ # Redux::Component
11
+ require 'react/redux_component/component_class_store_defaults'
12
+ require 'react/redux_component/component_instance_store_defaults'
13
+ require 'react/redux_component/app_store_defaults'
14
+ require 'react/redux_component/api'
15
+ require 'react/redux_component/initializer'
16
+ require 'react/redux_component/app_store_proxy'
17
+ require 'react/redux_component/class_store_proxy'
18
+ require 'react/redux_component/instance_store_proxy'
19
+ require 'react/redux_component/native_component_constructor'
20
+ require 'react/redux_component/mixin'
21
+ require 'react/redux_component/base'
22
+ require 'react/redux_component/reducers'
23
+
24
+ # init component reducers
25
+ React::ReduxComponent::Reducers.add_component_reducers_to_store
@@ -1,105 +1,8 @@
1
1
  if RUBY_ENGINE == 'opal'
2
- require 'opal'
3
- require 'native'
4
- require 'active_support/core_ext/string'
5
- require 'react/active_support_support'
6
- require 'isomorfeus/execution_environment'
7
- if Isomorfeus.on_browser?
8
- require 'browser/support'
9
- require 'browser/event'
10
- require 'browser/event_source'
11
- require 'browser/screen'
12
- require 'browser/socket'
13
- require 'browser/window'
14
- require 'browser/dom/node'
15
- require 'browser/dom/element'
16
- end
17
- require 'isomorfeus-redux'
18
- require 'react/version'
19
- require 'react'
20
- # require 'react/element' # usually not needed
21
- require 'react/synthetic_event'
22
- if Isomorfeus.on_browser?
23
- require 'react_dom'
24
- else
25
- require 'react_dom_server'
26
- end
27
- # React::Component
28
- require 'react/component/api'
29
- require 'react/component/unsafe_api'
30
- require 'react/component/initializer'
31
- require 'react/component/features'
32
- require 'react/native_constant_wrapper'
33
- require 'react/context_wrapper'
34
- require 'react/component/native_component_constructor'
35
- require 'react/component/native_component_validate_prop'
36
- require 'react/component/props'
37
- require 'react/component/state'
38
- require 'react/component/match'
39
- require 'react/component/location'
40
- require 'react/component/history'
41
- require 'react/component/elements'
42
- require 'react/component/resolution'
43
- require 'react/component/should_component_update'
44
- require 'react/component/event_handler'
45
- require 'react/component/mixin'
46
- require 'react/component/base'
47
- # React::PureComponent
48
- require 'react/pure_component/mixin'
49
- require 'react/pure_component/base'
50
- # Function Component
51
- require 'react/function_component/resolution'
52
- require 'react/function_component/runner'
53
- require 'react/function_component/creator'
54
- # Redux::Component
55
- require 'react/redux_component/component_class_store_defaults'
56
- require 'react/redux_component/component_instance_store_defaults'
57
- require 'react/redux_component/app_store_defaults'
58
- require 'react/redux_component/api'
59
- require 'react/redux_component/initializer'
60
- require 'react/redux_component/app_store_proxy'
61
- require 'react/redux_component/class_store_proxy'
62
- require 'react/redux_component/instance_store_proxy'
63
- require 'react/redux_component/native_component_constructor'
64
- require 'react/redux_component/mixin'
65
- require 'react/redux_component/base'
66
- require 'react/redux_component/reducers'
67
- require 'isomorfeus/config'
68
-
69
- # init component reducers
70
- React::ReduxComponent::Reducers.add_component_reducers_to_store
71
-
72
- # init LucidApplicationContext (Store Provider and Consumer)
73
- require 'lucid_app/context'
74
-
75
- LucidApp::Context.create_application_context
76
-
77
- # LucidComponent
78
- require 'lucid_component/api'
79
- require 'lucid_component/initializer'
80
- require 'lucid_component/native_component_constructor'
81
- require 'lucid_component/event_handler'
82
- require 'lucid_component/mixin'
83
- require 'lucid_component/base'
84
-
85
- # LucidApp
86
- require 'lucid_app/api'
87
- require 'lucid_app/native_component_constructor'
88
- require 'lucid_app/mixin'
89
- require 'lucid_app/base'
90
-
91
- # LucidRouter
92
- require 'lucid_router'
93
-
94
- # allow mounting of components
95
- if Isomorfeus.on_browser?
96
- require 'isomorfeus/top_level_browser'
97
- else
98
- require 'isomorfeus/top_level_ssr'
99
- end
100
-
101
- # initalize Store, options, etc.
102
- Isomorfeus.init
2
+ require 'isomorfeus-react-base'
3
+ require 'isomorfeus-react-component'
4
+ require 'isomorfeus-react-redux-component'
5
+ require 'isomorfeus-react-lucid'
103
6
  else
104
7
  require 'oj'
105
8
  require 'opal'
@@ -2,22 +2,17 @@ module Isomorfeus
2
2
  if RUBY_ENGINE == 'opal'
3
3
  class << self
4
4
  attr_reader :initialized
5
- attr_reader :store
6
5
  attr_reader :env
7
6
 
8
7
  def init
9
8
  return if initialized
10
9
  @initialized = true
11
- # at least one reducer must have been added at this stage
12
- # this happened in isomorfeus-react.rb, where the component reducers were added
13
- force_init!
10
+ Isomorfeus.init_store
11
+ execute_init_classes
14
12
  end
15
13
 
16
14
  def force_init!
17
- # at least one reducer must have been added at this stage
18
- # this happened in isomorfeus-react.rb, where the component reducers were added
19
- @store = Redux::Store.init!
20
- `Opal.Isomorfeus.store = #@store`
15
+ Isomorfeus.force_init_store!
21
16
  execute_init_classes
22
17
  end
23
18
 
@@ -33,7 +33,7 @@ module Isomorfeus
33
33
  end
34
34
 
35
35
  def self.mount_component(component, props, element_or_query, hydrated = false)
36
- if `(typeof element_or_query.$class === 'function')` && element_or_query.class == String
36
+ if `(typeof element_or_query === 'string')` || (`(typeof element_or_query.$class === 'function')` && element_or_query.class == String)
37
37
  element = `document.body.querySelector(element_or_query)`
38
38
  elsif `(typeof element_or_query.$is_a === 'function')` && element_or_query.is_a?(Browser::DOM::Node)
39
39
  element = element_or_query.to_n
data/lib/lucid_app/api.rb CHANGED
@@ -3,18 +3,7 @@ module LucidApp
3
3
  def self.included(base)
4
4
  base.instance_exec do
5
5
  def render(&block)
6
- %x{
7
- self.react_component.prototype.render = function() {
8
- Opal.React.render_buffer.push([]);
9
- Opal.React.active_components.push(this);
10
- Opal.React.active_redux_components.push(this.__ruby_instance);
11
- #{`this.__ruby_instance`.instance_exec(&block)};
12
- Opal.React.active_redux_components.pop();
13
- Opal.React.active_components.pop();
14
- var children = Opal.React.render_buffer.pop();
15
- return Opal.global.React.createElement(Opal.global.LucidApplicationContext.Provider, { value: this.state.isomorfeus_store_state }, children);
16
- }
17
- }
6
+ `base.render_block = block`
18
7
  end
19
8
  end
20
9
 
@@ -8,6 +8,7 @@ module LucidApp
8
8
  base.extend(::React::Component::EventHandler)
9
9
  base.include(::React::Component::Elements)
10
10
  base.include(::React::Component::API)
11
+ base.include(::React::Component::Callbacks)
11
12
  base.include(::React::ReduxComponent::API)
12
13
  base.include(::LucidApp::API)
13
14
  base.include(::React::Component::Features)
@@ -51,6 +51,16 @@ module LucidApp
51
51
  static get displayName() {
52
52
  return #{component_name};
53
53
  }
54
+ render() {
55
+ Opal.React.render_buffer.push([]);
56
+ Opal.React.active_components.push(this);
57
+ Opal.React.active_redux_components.push(this.__ruby_instance);
58
+ #{`this.__ruby_instance`.instance_exec(&`base.render_block`)};
59
+ Opal.React.active_redux_components.pop();
60
+ Opal.React.active_components.pop();
61
+ var children = Opal.React.render_buffer.pop();
62
+ return Opal.global.React.createElement(Opal.global.LucidApplicationContext.Provider, { value: this.state.isomorfeus_store_state }, children);
63
+ }
54
64
  listener() {
55
65
  var next_state = Opal.Isomorfeus.store.native.getState();
56
66
  var current_ruby_state = Opal.Hash.$new(this.state.isomorfeus_store_state);
@@ -4,7 +4,7 @@ module LucidComponent
4
4
  base.instance_exec do
5
5
  def app_store
6
6
  @default_app_store_defined = true
7
- @default_app_store ||= ::React::ReduxComponent::AppStoreDefaults.new(default_props)
7
+ @default_app_store ||= ::React::ReduxComponent::AppStoreDefaults.new(default_props, self.to_s)
8
8
  end
9
9
 
10
10
  def class_store
@@ -2,11 +2,11 @@ module LucidComponent
2
2
  module Initializer
3
3
  def initialize(native_component)
4
4
  @native = native_component
5
- @app_store = ::React::ReduxComponent::AppStoreProxy.new(self, 'props')
6
- @class_store = ::React::ReduxComponent::ClassStoreProxy.new(self, 'props')
7
- @props = ::React::Component::Props.new(@native.JS[:props])
8
- @state = ::React::Component::State.new(@native)
9
- @store = ::React::ReduxComponent::InstanceStoreProxy.new(self, 'props')
5
+ @app_store = `Opal.React.ReduxComponent.AppStoreProxy.$new(#{self}, 'props')`
6
+ @class_store = `Opal.React.ReduxComponent.ClassStoreProxy.$new(#{self}, 'props')`
7
+ @props = `Opal.React.Component.Props.$new(#@native.props)`
8
+ @state = `Opal.React.Component.State.$new(#@native)`
9
+ @store = `Opal.React.ReduxComponent.InstanceStoreProxy.$new(#{self}, 'props')`
10
10
  end
11
11
  end
12
12
  end
@@ -7,6 +7,7 @@ module LucidComponent
7
7
  base.extend(::LucidComponent::EventHandler)
8
8
  base.include(::React::Component::Elements)
9
9
  base.include(::React::Component::API)
10
+ base.include(::React::Component::Callbacks)
10
11
  base.include(::React::ReduxComponent::API)
11
12
  base.include(::LucidComponent::API)
12
13
  base.include(::LucidComponent::Initializer)
@@ -43,12 +43,22 @@ module LucidComponent
43
43
  }
44
44
  }
45
45
  }
46
- data_access() {
47
- return this.props.isomorfeus_store
48
- }
49
46
  static get displayName() {
50
47
  return #{component_name};
51
48
  }
49
+ render() {
50
+ Opal.React.render_buffer.push([]);
51
+ Opal.React.active_components.push(this);
52
+ Opal.React.active_redux_components.push(this);
53
+ this.used_store_paths = [];
54
+ #{`this.__ruby_instance`.instance_exec(&`base.render_block`)};
55
+ Opal.React.active_redux_components.pop();
56
+ Opal.React.active_components.pop();
57
+ return Opal.React.render_buffer.pop();
58
+ }
59
+ data_access() {
60
+ return this.props.isomorfeus_store
61
+ }
52
62
  register_used_store_path(path) {
53
63
  this.used_store_paths.push(path);
54
64
  }