isomorfeus-react 16.6.8 → 16.8.0

Sign up to get free protection for your applications and to get access to all the features.
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
  }