Skip to content

Can't render browserified JS on server side #181

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
elvanja opened this issue Feb 22, 2015 · 15 comments
Closed

Can't render browserified JS on server side #181

elvanja opened this issue Feb 22, 2015 · 15 comments

Comments

@elvanja
Copy link

elvanja commented Feb 22, 2015

Hi!

I am trying to use this gem with CommonJS style written components. Followed https://medium.com/@olance/rails-react-browserify-e315001d5974 and got things to work client side, but the prerender: true gives me:

Encountered error "Error: Cannot find module 'function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}'" when prerendering ThingsTable with {"initialThings":[{"id":1,"name":"Test"}]}

The function e(t,n,r) comes from browserify output, e.g. browserify -t [ coffeeify --extension .coffee ] -t [ reactify --extension .jsx.coffee ] --extension .js.jsx.coffee app/assets/javascripts/components/things_table.js.jsx.coffee will result in JS that is wrapped just like the error says. Can't understand exactly why it woks on client side and not on the server.

The environment is pretty much the same as in the given article, but with a few changes:

package.json:

{
  "name": "thingy",
  "devDependencies" : {
    "browserify": "~> 9.0.3",
    "browserify-incremental": "^1.5",
    "reactify": "~> 1.0.0",
    "coffeeify": "~> 1.0.0",
    "flux": "~> 2.0"
  },
  "license": "MIT",
  "engines": {
    "node": ">= 0.10"
  }
}

Gemfile:

gem 'browserify-rails', '~> 0.7' # https://github.com/browserify-rails/browserify-rails
gem 'react-rails', '~> 1.0.0.pre', github: 'reactjs/react-rails' # https://github.com/reactjs/react-rails

config/application.rb (browserify configuration):

    config.browserify_rails.commandline_options = [
        '-t [ coffeeify --extension .coffee ]', # coffeescript support
        '-t [ reactify --extension .jsx.coffee ]', # react/jsx support
        '--extension .js.jsx.coffee' # to be able to remove extension from require
    ]

And an example of the component:

ThingsTableHeader = require("./things_table_header.js.jsx.coffee")
ThingsTableRow = require("./things_table_row.js.jsx.coffee")

ThingsTable = React.createClass
  getInitialState: ->
    { things: @props.initialThings }

  render: ->
    row = (thing) -> `(<ThingsTableRow key={thing.id} thing={thing} />)`

    `(
    <div className="panel panel-default">
      <div className="panel-heading">
        <h2 className="panel-title">Things</h2>
      </div>

      <div className="panel-body">
        <div className="table-responsive">
          <table className="table table-hover tablesorter">
            <ThingsTableHeader />
            <tbody>
              {this.state.things.map(row)}
            </tbody>
          </table>
        </div>
      </div>
    </div>
  )`

module.exports = window.ThingsTable
window.ThingsTable = ThingsTable # required by react_component view helper

So basically everything is required, only the main component is still on window because of the view helper.

I read issues #55, #120 & #90 which might be related, but I am not sure, hence the new issue.

@jtmalinowski
Copy link
Collaborator

Can you show your components.js (binpaste/gist)?

@elvanja
Copy link
Author

elvanja commented Feb 24, 2015

components.js:

//= require_tree ./components

@jtmalinowski
Copy link
Collaborator

I mean the compiled content, as if you requested http://localhost:3000/assets/components.js

@elvanja
Copy link
Author

elvanja commented Feb 24, 2015

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/home/elvanja/projects/frugly/frugly-web-app/app/assets/javascripts/components/_stream_0.js":[function(require,module,exports){
(function() {
  var ThingsTableRow;

  ThingsTableRow = React.createClass({displayName: "ThingsTableRow",
    render: function() {
      return (
    React.createElement("tr", null, 
      React.createElement("td", null, this.props.thing.name), 
      React.createElement("td", null, this.props.thing._embedded.currency.symbol)
    )
  );
    }
  });

  module.exports = ThingsTableRow;

}).call(this);


},{}]},{},["/home/elvanja/projects/frugly/frugly-web-app/app/assets/javascripts/components/_stream_0.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWluY3JlbWVudGFsL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL2NvbXBvbmVudHMvX3N0cmVhbV8wLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsQ0FBQyxXQUFXO0FBQ1osRUFBRSxJQUFJLGdCQUFnQixDQUFDOztFQUVyQixnQkFBZ0IsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLGtCQUFrQjtJQUNuRSxNQUFNLEVBQUUsV0FBVztNQUNqQjtJQUNGLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUk7TUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztNQUN4RCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDOUU7SUFDRDtLQUNDO0FBQ0wsR0FBRyxDQUFDLENBQUM7O0FBRUwsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDOztDQUVuQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24oKSB7XG4gIHZhciBBY2NvdW50c1RhYmxlUm93O1xuXG4gIEFjY291bnRzVGFibGVSb3cgPSBSZWFjdC5jcmVhdGVDbGFzcyh7ZGlzcGxheU5hbWU6IFwiQWNjb3VudHNUYWJsZVJvd1wiLFxuICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKFxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCBudWxsLCBcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCBudWxsLCB0aGlzLnByb3BzLmFjY291bnQubmFtZSksIFxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRkXCIsIG51bGwsIHRoaXMucHJvcHMuYWNjb3VudC5fZW1iZWRkZWQuY3VycmVuY3kuc3ltYm9sKVxuICAgIClcbiAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gQWNjb3VudHNUYWJsZVJvdztcblxufSkuY2FsbCh0aGlzKTtcbiJdfQ==

I'm in development, so components.js is empty. Above you have the compiled code of a component. That helps?

@jtmalinowski
Copy link
Collaborator

What is the result of #{@@components_js.call}; in https://github.com/reactjs/react-rails/blob/master/lib/react/renderer.rb ? (let me know if you don't how to get it)

@elvanja
Copy link
Author

elvanja commented Feb 25, 2015

So I added puts @@components_js.call to the rendered, just at the top of #setup_combined_js method. This is what I get:

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js":[function(require,module,exports){
(function() {
  var ThingsTable, ThingsTableHeader, ThingsTableRow;

  ThingsTableHeader = require("./things_table_header");

  ThingsTableRow = require("./things_table_row");

  ThingsTable = React.createClass({displayName: "ThingsTable",
    getInitialState: function() {
      return {
        collection: this.props.initialCollection
      };
    },
    render: function() {
      var row;
      row = function(thing) {
        return (React.createElement(ThingsTableRow, {key: thing.id, thing: thing}));
      };
      return (
    React.createElement("div", {className: "panel panel-default"}, 
      React.createElement("div", {className: "panel-heading"}, 
        React.createElement("h2", {className: "panel-title"}, "things")
      ), 

      React.createElement("div", {className: "panel-body"}, 
        React.createElement("div", {className: "table-responsive"}, 
          React.createElement("table", {className: "table table-hover tablesorter"}, 
            React.createElement(ThingsTableHeader, null), 
            React.createElement("tbody", null, 
              this.state.collection._embedded.things.map(row)
            )
          )
        )
      )
    )
  );
    }
  });

  module.exports = window.ThingsTable;

  window.ThingsTable = ThingsTable;

}).call(this);


},{"./things_table_header":"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/things_table_header.js.jsx.coffee","./things_table_row":"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/things_table_row.js.jsx.coffee"}],"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/things_table_header.js.jsx.coffee":[function(require,module,exports){
var ThingsTableHeader;

ThingsTableHeader = React.createClass({displayName: "ThingsTableHeader",
  render: function() {
    return (
    React.createElement("thead", null, 
      React.createElement("tr", null, 
        React.createElement("th", null, 
          React.createElement("div", null, "Name ", React.createElement("span", {className: "caret"}))
        ), 
        React.createElement("th", null, 
          React.createElement("div", null, "Currency ", React.createElement("span", {className: "caret"}))
        )
      )
    )
  );
  }
});

module.exports = ThingsTableHeader;




},{}],"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/things_table_row.js.jsx.coffee":[function(require,module,exports){
var ThingsTableRow;

ThingsTableRow = React.createClass({displayName: "ThingsTableRow",
  render: function() {
    return (
    React.createElement("tr", null, 
      React.createElement("td", null, this.props.thing.name), 
      React.createElement("td", null, this.props.thing._embedded.currency.symbol)
    )
  );
  }
});

module.exports = ThingsTableRow;




},{}]},{},["/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWluY3JlbWVudGFsL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL2NvbXBvbmVudHMvX3N0cmVhbV8wLmpzIiwiL2hvbWUvZWx2YW5qYS9wcm9qZWN0cy9mcnVnbHkvZnJ1Z2x5LXdlYi1hcHAvYXBwL2Fzc2V0cy9qYXZhc2NyaXB0cy9jb21wb25lbnRzL2FjY291bnRzX3RhYmxlX2hlYWRlci5qcy5qc3guY29mZmVlIiwiL2hvbWUvZWx2YW5qYS9wcm9qZWN0cy9mcnVnbHkvZnJ1Z2x5LXdlYi1hcHAvYXBwL2Fzc2V0cy9qYXZhc2NyaXB0cy9jb21wb25lbnRzL2FjY291bnRzX3RhYmxlX3Jvdy5qcy5qc3guY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsQ0FBQyxXQUFXO0FBQ1osRUFBRSxJQUFJLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQzs7QUFFM0QsRUFBRSxtQkFBbUIsR0FBRyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQzs7QUFFM0QsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQzs7RUFFbkQsYUFBYSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZTtJQUM3RCxlQUFlLEVBQUUsV0FBVztNQUMxQixPQUFPO1FBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCO09BQ3pDLENBQUM7S0FDSDtJQUNELE1BQU0sRUFBRSxXQUFXO01BQ2pCLElBQUksR0FBRyxDQUFDO01BQ1IsR0FBRyxHQUFHLFNBQVMsT0FBTyxFQUFFO1FBQ3RCLFFBQVEsS0FBSyxDQUFDLGFBQWEs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dCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbigpIHtcbiAgdmFyIEFjY291bnRzVGFibGUsIEFjY291bnRzVGFibGVIZWFkZXIsIEFjY291bnRzVGFibGVSb3c7XG5cbiAgQWNjb3VudHNUYWJsZUhlYWRlciA9IHJlcXVpcmUoXCIuL2FjY291bnRzX3RhYmxlX2hlYWRlclwiKTtcblxuICBBY2NvdW50c1RhYmxlUm93ID0gcmVxdWlyZShcIi4vYWNjb3VudHNfdGFibGVfcm93XCIpO1xuXG4gIEFjY291bnRzVGFibGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7ZGlzcGxheU5hbWU6IFwiQWNjb3VudHNUYWJsZVwiLFxuICAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb2xsZWN0aW9uOiB0aGlzLnByb3BzLmluaXRpYWxDb2xsZWN0aW9uXG4gICAgICB9O1xuICAgIH0sXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciByb3c7XG4gICAgICByb3cgPSBmdW5jdGlvbihhY2NvdW50KSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChBY2NvdW50c1RhYmxlUm93LCB7a2V5OiBhY2NvdW50LmlkLCBhY2NvdW50OiBhY2NvdW50fSkpO1xuICAgICAgfTtcbiAgICAgIHJldHVybiAoXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInBhbmVsIHBhbmVsLWRlZmF1bHRcIn0sIFxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInBhbmVsLWhlYWRpbmdcIn0sIFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwge2NsYXNzTmFtZTogXCJwYW5lbC10aXRsZVwifSwgXCJBY2NvdW50c1wiKVxuICAgICAgKSwgXG5cbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJwYW5lbC1ib2R5XCJ9LCBcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcInRhYmxlLXJlc3BvbnNpdmVcIn0sIFxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCB7Y2xhc3NOYW1lOiBcInRhYmxlIHRhYmxlLWhvdmVyIHRhYmxlc29ydGVyXCJ9LCBcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQWNjb3VudHNUYWJsZUhlYWRlciwgbnVsbCksIFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbGxlY3Rpb24uX2VtYmVkZGVkLmFjY291bnRzLm1hcChyb3cpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApO1xuICAgIH1cbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSB3aW5kb3cuQWNjb3VudHNUYWJsZTtcblxuICB3aW5kb3cuQWNjb3VudHNUYWJsZSA9IEFjY291bnRzVGFibGU7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCJ2YXIgQWNjb3VudHNUYWJsZUhlYWRlcjtcblxuQWNjb3VudHNUYWJsZUhlYWRlciA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKFxuICAgIDx0aGVhZD5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRoPlxuICAgICAgICAgIDxkaXY+TmFtZSA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRoPlxuICAgICAgICAgIDxkaXY+Q3VycmVuY3kgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIj48L3NwYW4+PC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L3RyPlxuICAgIDwvdGhlYWQ+XG4gICk7XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFjY291bnRzVGFibGVIZWFkZXI7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaUwyaHZiV1V2Wld4MllXNXFZUzl3Y205cVpXTjBjeTltY25WbmJIa3ZabkoxWjJ4NUxYZGxZaTFoY0hBdllYQndMMkZ6YzJWMGN5OXFZWFpoYzJOeWFYQjBjeTlqYjIxd2IyNWxiblJ6TDJGalkyOTFiblJ6WDNSaFlteGxYMmhsWVdSbGNpNXFjeTVxYzNndVkyOW1abVZsSWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUwyaHZiV1V2Wld4MllXNXFZUzl3Y205cVpXTjBjeTltY25WbmJIa3ZabkoxWjJ4NUxYZGxZaTFoY0hBdllYQndMMkZ6YzJWMGN5OXFZWFpoYzJOeWFYQjBjeTlqYjIxd2IyNWxiblJ6TDJGalkyOTFiblJ6WDNSaFlteGxYMmhsWVdSbGNpNXFjeTVxYzNndVkyOW1abVZsSWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFbEJRVUVzYlVKQlFVRTdPMEZCUVVFc2JVSkJRVUVzUjBGQmMwSXNTMEZCU3l4RFFVRkRMRmRCUVU0c1EwRkRjRUk3UVVGQlFTeEZRVUZCTEUxQlFVRXNSVUZCVVN4VFFVRkJMRWRCUVVFN1YwRkJSenM3T3pzN096czdPenM3U1VGQlNEdEZRVUZCTEVOQlFWSTdRMEZFYjBJc1EwRkJkRUlzUTBGQlFUczdRVUZCUVN4TlFXTk5MRU5CUVVNc1QwRkJVQ3hIUVVGcFFpeHRRa0ZrYWtJc1EwRkJRU0lzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWtGalkyOTFiblJ6VkdGaWJHVklaV0ZrWlhJZ1BTQlNaV0ZqZEM1amNtVmhkR1ZEYkdGemMxeHVJQ0J5Wlc1a1pYSTZJQzArSUdBb1hHNGdJQ0FnUEhSb1pXRmtQbHh1SUNBZ0lDQWdQSFJ5UGx4dUlDQWdJQ0FnSUNBOGRHZytYRzRnSUNBZ0lDQWdJQ0FnUEdScGRqNU9ZVzFsSUR4emNHRnVJR05zWVhOelRtRnRaVDFjSW1OaGNtVjBYQ0krUEM5emNHRnVQand2WkdsMlBseHVJQ0FnSUNBZ0lDQThMM1JvUGx4dUlDQWdJQ0FnSUNBOGRHZytYRzRnSUNBZ0lDQWdJQ0FnUEdScGRqNURkWEp5Wlc1amVTQThjM0JoYmlCamJHRnpjMDVoYldVOVhDSmpZWEpsZEZ3aVBqd3ZjM0JoYmo0OEwyUnBkajVjYmlBZ0lDQWdJQ0FnUEM5MGFENWNiaUFnSUNBZ0lEd3ZkSEkrWEc0Z0lDQWdQQzkwYUdWaFpENWNiaUFnS1dCY2JseHViVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQkJZMk52ZFc1MGMxUmhZbXhsU0dWaFpHVnlYRzRpWFgwPVxuIiwidmFyIEFjY291bnRzVGFibGVSb3c7XG5cbkFjY291bnRzVGFibGVSb3cgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICA8dHI+XG4gICAgICA8dGQ+e3RoaXMucHJvcHMuYWNjb3VudC5uYW1lfTwvdGQ+XG4gICAgICA8dGQ+e3RoaXMucHJvcHMuYWNjb3VudC5fZW1iZWRkZWQuY3VycmVuY3kuc3ltYm9sfTwvdGQ+XG4gICAgPC90cj5cbiAgKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWNjb3VudHNUYWJsZVJvdztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pTDJodmJXVXZaV3gyWVc1cVlTOXdjbTlxWldOMGN5OW1jblZuYkhrdlpuSjFaMng1TFhkbFlpMWhjSEF2WVhCd0wyRnpjMlYwY3k5cVlYWmhjMk55YVhCMGN5OWpiMjF3YjI1bGJuUnpMMkZqWTI5MWJuUnpYM1JoWW14bFgzSnZkeTVxY3k1cWMzZ3VZMjltWm1WbElpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMMmh2YldVdlpXeDJZVzVxWVM5d2NtOXFaV04wY3k5bWNuVm5iSGt2Wm5KMVoyeDVMWGRsWWkxaGNIQXZZWEJ3TDJGemMyVjBjeTlxWVhaaGMyTnlhWEIwY3k5amIyMXdiMjVsYm5SekwyRmpZMjkxYm5SelgzUmhZbXhsWDNKdmR5NXFjeTVxYzNndVkyOW1abVZsSWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFbEJRVUVzWjBKQlFVRTdPMEZCUVVFc1owSkJRVUVzUjBGQmJVSXNTMEZCU3l4RFFVRkRMRmRCUVU0c1EwRkRha0k3UVVGQlFTeEZRVUZCTEUxQlFVRXNSVUZCVVN4VFFVRkJMRWRCUVVFN1YwRkJSenM3T3pzN1NVRkJTRHRGUVVGQkxFTkJRVkk3UTBGRWFVSXNRMEZCYmtJc1EwRkJRVHM3UVVGQlFTeE5RVkZOTEVOQlFVTXNUMEZCVUN4SFFVRnBRaXhuUWtGU2FrSXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklrRmpZMjkxYm5SelZHRmliR1ZTYjNjZ1BTQlNaV0ZqZEM1amNtVmhkR1ZEYkdGemMxeHVJQ0J5Wlc1a1pYSTZJQzArSUdBb1hHNGdJQ0FnUEhSeVBseHVJQ0FnSUNBZ1BIUmtQbnQwYUdsekxuQnliM0J6TG1GalkyOTFiblF1Ym1GdFpYMDhMM1JrUGx4dUlDQWdJQ0FnUEhSa1BudDBhR2x6TG5CeWIzQnpMbUZqWTI5MWJuUXVYMlZ0WW1Wa1pHVmtMbU4xY25KbGJtTjVMbk41YldKdmJIMDhMM1JrUGx4dUlDQWdJRHd2ZEhJK1hHNGdJQ2xnWEc1Y2JtMXZaSFZzWlM1bGVIQnZjblJ6SUQwZ1FXTmpiM1Z1ZEhOVVlXSnNaVkp2ZDF4dUlsMTlcbiJdfQ==
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js":[function(require,module,exports){
(function() {
  var ThingsTableHeader;

  ThingsTableHeader = React.createClass({displayName: "ThingsTableHeader",
    render: function() {
      return (
    React.createElement("thead", null, 
      React.createElement("tr", null, 
        React.createElement("th", null, 
          React.createElement("div", null, "Name ", React.createElement("span", {className: "caret"}))
        ), 
        React.createElement("th", null, 
          React.createElement("div", null, "Currency ", React.createElement("span", {className: "caret"}))
        )
      )
    )
  );
    }
  });

  module.exports = ThingsTableHeader;

}).call(this);


},{}]},{},["/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWluY3JlbWVudGFsL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL2NvbXBvbmVudHMvX3N0cmVhbV8wLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsQ0FBQyxXQUFXO0FBQ1osRUFBRSxJQUFJLG1CQUFtQixDQUFDOztFQUV4QixtQkFBbUIsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLHFCQUFxQjtJQUN6RSxNQUFNLEVBQUUsV0FBVztNQUNqQjtJQUNGLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUk7TUFDL0IsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSTtRQUM1QixLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJO1VBQzVCLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM3RjtRQUNELEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUk7VUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ2pHO09BQ0Y7S0FDRjtJQUNEO0tBQ0M7QUFDTCxHQUFHLENBQUMsQ0FBQzs7QUFFTCxFQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsbUJBQW1CLENBQUM7O0NBRXRDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIihmdW5jdGlvbigpIHtcbiAgdmFyIEFjY291bnRzVGFibGVIZWFkZXI7XG5cbiAgQWNjb3VudHNUYWJsZUhlYWRlciA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtkaXNwbGF5TmFtZTogXCJBY2NvdW50c1RhYmxlSGVhZGVyXCIsXG4gICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRoZWFkXCIsIG51bGwsIFxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRyXCIsIG51bGwsIFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidGhcIiwgbnVsbCwgXG4gICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBudWxsLCBcIk5hbWUgXCIsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiY2FyZXRcIn0pKVxuICAgICAgICApLCBcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRoXCIsIG51bGwsIFxuICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgbnVsbCwgXCJDdXJyZW5jeSBcIiwgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJjYXJldFwifSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICk7XG4gICAgfVxuICB9KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IEFjY291bnRzVGFibGVIZWFkZXI7XG5cbn0pLmNhbGwodGhpcyk7XG4iXX0=
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js":[function(require,module,exports){
(function() {
  var ThingsTableRow;

  ThingsTableRow = React.createClass({displayName: "ThingsTableRow",
    render: function() {
      return (
    React.createElement("tr", null, 
      React.createElement("td", null, this.props.thing.name), 
      React.createElement("td", null, this.props.thing._embedded.currency.symbol)
    )
  );
    }
  });

  module.exports = ThingsTableRow;

}).call(this);


},{}]},{},["/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/_stream_0.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWluY3JlbWVudGFsL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL2NvbXBvbmVudHMvX3N0cmVhbV8wLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUEsQ0FBQyxXQUFXO0FBQ1osRUFBRSxJQUFJLGdCQUFnQixDQUFDOztFQUVyQixnQkFBZ0IsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsV0FBVyxFQUFFLGtCQUFrQjtJQUNuRSxNQUFNLEVBQUUsV0FBVztNQUNqQjtJQUNGLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUk7TUFDNUIsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztNQUN4RCxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7S0FDOUU7SUFDRDtLQUNDO0FBQ0wsR0FBRyxDQUFDLENBQUM7O0FBRUwsRUFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLGdCQUFnQixDQUFDOztDQUVuQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCIoZnVuY3Rpb24oKSB7XG4gIHZhciBBY2NvdW50c1RhYmxlUm93O1xuXG4gIEFjY291bnRzVGFibGVSb3cgPSBSZWFjdC5jcmVhdGVDbGFzcyh7ZGlzcGxheU5hbWU6IFwiQWNjb3VudHNUYWJsZVJvd1wiLFxuICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKFxuICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCBudWxsLCBcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCBudWxsLCB0aGlzLnByb3BzLmFjY291bnQubmFtZSksIFxuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRkXCIsIG51bGwsIHRoaXMucHJvcHMuYWNjb3VudC5fZW1iZWRkZWQuY3VycmVuY3kuc3ltYm9sKVxuICAgIClcbiAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gQWNjb3VudHNUYWJsZVJvdztcblxufSkuY2FsbCh0aGlzKTtcbiJdfQ==

The output is the same, regardless of {prerender: true}.

@bowd
Copy link
Contributor

bowd commented Feb 25, 2015

I donno if this is the source of the issue but it is an issue nonetheless. In your ThingsTable component you do

ThingsTable = React.createClass
  # ...

module.exports = window.ThingsTable
window.ThingsTable  = ThingsTable

which gets (correctly) translated to:

var ThingsTable //, ...;
ThingsTable = React.createClass({ ... });

module.exports = window.ThingsTable // => undefined
window.ThingsTable = ThingsTable

I'm guessing you should either switch the order of the assignment to window and module.exports or just assign the local var to module.exports, aka:

module.exports = ThingsTable;
window.ThingsTable = ThingsTable;
// or:
window.ThingsTable = ThingsTable;
module.exports = window.ThingsTable;

@elvanja
Copy link
Author

elvanja commented Feb 25, 2015

@bogdan-dumitru yep, you're right. Thanks for the tip! Doesn't change the result though...

@jtmalinowski
Copy link
Collaborator

@elvanja I tried your code in JS Fiddle http://jsfiddle.net/xamwb3h3/ and I get exactly the same error. We do not process components.js in any way, it is taken straight from Asset Pipeline, concatenated with React.js and executed. So you need to figure this out on your own. I would suggest comparing #{@@components_js.call}; with contents of /assets/components.js using rails server in production env and uglyfying turned off.

Unless there is any convincing argument, I'm going to close this issue, because it is out of our gem's scope.

@elvanja
Copy link
Author

elvanja commented Feb 25, 2015

@JakubMal the most confusing thing is that the code actually works when not rendered on server side. But OK, I can agree that it's not an issue of this gem. Anyway, thanks for the support!

@elvanja elvanja closed this as completed Feb 25, 2015
@jtmalinowski
Copy link
Collaborator

We'd love to have a solution here (once you reach it!), so that anyone can find it in the future.

@elvanja
Copy link
Author

elvanja commented Feb 25, 2015

Sure, if I find one, I'll be sure to share :-)

@elvanja
Copy link
Author

elvanja commented Feb 27, 2015

Found a fix! In components.js, instead of //= require_tree ./components, just require the main components explicitly, e.g. //= require ./components/things_table. This produces the below pasted code, which works like a charm.

The best I can describe this is that code was being pulled in twice. Once with Rails asset manager, and another time with browserify. That can also be seen in previous code samples (e.g. ThingsTableHeader was declared twice).

Anyway, now react_component works with or without {prerender: true}.

(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/_stream_0.js":[function(require,module,exports){

require('./components/things_table.js.jsx.coffee');


},{"./components/Things_table.js.jsx.coffee":"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table.js.jsx.coffee"}],"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table.js.jsx.coffee":[function(require,module,exports){
var ThingsTable, ThingsTableHeader, ThingsTableRow;

ThingsTableHeader = require("./Things_table_header.js.jsx.coffee");

ThingsTableRow = require("./Things_table_row.js.jsx.coffee");

ThingsTable = React.createClass({displayName: "ThingsTable",
  getInitialState: function() {
    return {
      collection: this.props.initialCollection
    };
  },
  render: function() {
    var row;
    row = function(thing) {
      return (React.createElement(ThingsTableRow, {key: thing.id, thing: thing}));
    };
    return (
    React.createElement("div", {className: "panel panel-default"}, 
      React.createElement("div", {className: "panel-heading"}, 
        React.createElement("h2", {className: "panel-title"}, "Things")
      ), 

      React.createElement("div", {className: "panel-body"}, 
        React.createElement("div", {className: "table-responsive"}, 
          React.createElement("table", {className: "table table-hover tablesorter"}, 
            React.createElement(ThingsTableHeader, null), 
            React.createElement("tbody", null, 
              this.state.collection._embedded.Things.map(row)
            )
          )
        )
      )
    )
  );
  }
});

window.ThingsTable = ThingsTable;

module.exports = ThingsTable;




},{"./Things_table_header.js.jsx.coffee":"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table_header.js.jsx.coffee","./Things_table_row.js.jsx.coffee":"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table_row.js.jsx.coffee"}],"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table_header.js.jsx.coffee":[function(require,module,exports){
var ThingsTableHeader;

ThingsTableHeader = React.createClass({displayName: "ThingsTableHeader",
  render: function() {
    return (
    React.createElement("thead", null, 
      React.createElement("tr", null, 
        React.createElement("th", null, 
          React.createElement("div", null, "Name ", React.createElement("span", {className: "caret"}))
        ), 
        React.createElement("th", null, 
          React.createElement("div", null, "Currency ", React.createElement("span", {className: "caret"}))
        )
      )
    )
  );
  }
});

module.exports = ThingsTableHeader;




},{}],"/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/components/Things_table_row.js.jsx.coffee":[function(require,module,exports){
var ThingsTableRow;

ThingsTableRow = React.createClass({displayName: "ThingsTableRow",
  render: function() {
    return (
    React.createElement("tr", null, 
      React.createElement("td", null, this.props.thing.name), 
      React.createElement("td", null, this.props.thing._embedded.currency.symbol)
    )
  );
  }
});

module.exports = ThingsTableRow;




},{}]},{},["/home/elvanja/projects/thingy/thingy-web-app/app/assets/javascripts/_stream_0.js"])
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5LWluY3JlbWVudGFsL25vZGVfbW9kdWxlcy9icm93c2VyaWZ5L25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL19zdHJlYW1fMC5qcyIsIi9ob21lL2VsdmFuamEvcHJvamVjdHMvZnJ1Z2x5L2ZydWdseS13ZWItYXBwL2FwcC9hc3NldHMvamF2YXNjcmlwdHMvY29tcG9uZW50c19jb2ZmZWUvYWNjb3VudHNfdGFibGUuanMuanN4LmNvZmZlZSIsIi9ob21lL2VsdmFuamEvcHJvamVjdHMvZnJ1Z2x5L2ZydWdseS13ZWItYXBwL2FwcC9hc3NldHMvamF2YXNjcmlwdHMvY29tcG9uZW50c19jb2ZmZWUvYWNjb3VudHNfdGFibGVfaGVhZGVyLmpzLmpzeC5jb2ZmZWUiLCIvaG9tZS9lbHZhbmphL3Byb2plY3RzL2ZydWdseS9mcnVnbHktd2ViLWFwcC9hcHAvYXNzZXRzL2phdmFzY3JpcHRzL2NvbXBvbmVudHNfY29mZmVlL2FjY291bnRzX3RhYmxlX3Jvdy5qcy5qc3guY29mZmVlIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQSxPQUFPLENBQUMsa0RBQWtELENBQUMsQ0FBQzs7OztBQ0Q1RCxJQUFJLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQzs7QUFFekQsbUJBQW1CLEdBQUcsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7O0FBRXZFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDOztBQUVqRSxtQ0FBbUMsNkJBQUE7RUFDakMsZUFBZSxFQUFFLFdBQVcsQ0FBQztJQUMzQixPQUFPO01BQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCO0tBQ3pDLENBQUM7R0FDSDtF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QUFDOztBQUVILE1BQU0sQ0FBQyxPQUFPLEdBQUcsZ0JBQWdCLENBQUM7O0FBRWxDLDAvQkFBMC9CIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gZSh0LG4scil7ZnVuY3Rpb24gcyhvLHUpe2lmKCFuW29dKXtpZighdFtvXSl7dmFyIGE9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtpZighdSYmYSlyZXR1cm4gYShvLCEwKTtpZihpKXJldHVybiBpKG8sITApO3ZhciBmPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIrbytcIidcIik7dGhyb3cgZi5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGZ9dmFyIGw9bltvXT17ZXhwb3J0czp7fX07dFtvXVswXS5jYWxsKGwuZXhwb3J0cyxmdW5jdGlvbihlKXt2YXIgbj10W29dWzFdW2VdO3JldHVybiBzKG4/bjplKX0sbCxsLmV4cG9ydHMsZSx0LG4scil9cmV0dXJuIG5bb10uZXhwb3J0c312YXIgaT10eXBlb2YgcmVxdWlyZT09XCJmdW5jdGlvblwiJiZyZXF1aXJlO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXMocltvXSk7cmV0dXJuIHN9KSIsIlxucmVxdWlyZSgnLi9jb21wb25lbnRzX2NvZmZlZS9hY2NvdW50c190YWJsZS5qcy5qc3guY29mZmVlJyk7XG4iLCJ2YXIgQWNjb3VudHNUYWJsZSwgQWNjb3VudHNUYWJsZUhlYWRlciwgQWNjb3VudHNUYWJsZVJvdztcblxuQWNjb3VudHNUYWJsZUhlYWRlciA9IHJlcXVpcmUoXCIuL2FjY291bnRzX3RhYmxlX2hlYWRlci5qcy5qc3guY29mZmVlXCIpO1xuXG5BY2NvdW50c1RhYmxlUm93ID0gcmVxdWlyZShcIi4vYWNjb3VudHNfdGFibGVfcm93LmpzLmpzeC5jb2ZmZWVcIik7XG5cbkFjY291bnRzVGFibGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMucHJvcHMuaW5pdGlhbENvbGxlY3Rpb25cbiAgICB9O1xuICB9LFxuICByZW5kZXI6IGZ1bmN0aW9uKCkge1xuICAgIHZhciByb3c7XG4gICAgcm93ID0gZnVuY3Rpb24oYWNjb3VudCkge1xuICAgICAgcmV0dXJuICg8QWNjb3VudHNUYWJsZVJvdyBrZXk9e2FjY291bnQuaWR9IGFjY291bnQ9e2FjY291bnR9IC8+KTtcbiAgICB9O1xuICAgIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInBhbmVsLWhlYWRpbmdcIj5cbiAgICAgICAgPGgyIGNsYXNzTmFtZT1cInBhbmVsLXRpdGxlXCI+QWNjb3VudHM8L2gyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicGFuZWwtYm9keVwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgICA8dGFibGUgY2xhc3NOYW1lPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGVzb3J0ZXJcIj5cbiAgICAgICAgICAgIDxBY2NvdW50c1RhYmxlSGVhZGVyIC8+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmNvbGxlY3Rpb24uX2VtYmVkZGVkLmFjY291bnRzLm1hcChyb3cpfVxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xuICB9XG59KTtcblxud2luZG93LkFjY291bnRzVGFibGUgPSBBY2NvdW50c1RhYmxlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFjY291bnRzVGFibGU7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaUwyaHZiV1V2Wld4MllXNXFZUzl3Y205cVpXTjBjeTltY25WbmJIa3ZabkoxWjJ4NUxYZGxZaTFoY0hBdllYQndMMkZ6YzJWMGN5OXFZWFpoYzJOeWFYQjBjeTlqYjIxd2IyNWxiblJ6WDJOdlptWmxaUzloWTJOdmRXNTBjMTkwWVdKc1pTNXFjeTVxYzNndVkyOW1abVZsSWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUwyaHZiV1V2Wld4MllXNXFZUzl3Y205cVpXTjBjeTltY25WbmJIa3ZabkoxWjJ4NUxYZGxZaTFoY0hBdllYQndMMkZ6YzJWMGN5OXFZWFpoYzJOeWFYQjBjeTlqYjIxd2IyNWxiblJ6WDJOdlptWmxaUzloWTJOdmRXNTBjMTkwWVdKc1pTNXFjeTVxYzNndVkyOW1abVZsSWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFbEJRVUVzYjBSQlFVRTdPMEZCUVVFc2JVSkJRVUVzUjBGQmMwSXNUMEZCUVN4RFFVRlJMSFZEUVVGU0xFTkJRWFJDTEVOQlFVRTdPMEZCUVVFc1owSkJRMEVzUjBGQmJVSXNUMEZCUVN4RFFVRlJMRzlEUVVGU0xFTkJSRzVDTEVOQlFVRTdPMEZCUVVFc1lVRkhRU3hIUVVGblFpeExRVUZMTEVOQlFVTXNWMEZCVGl4RFFVTmtPMEZCUVVFc1JVRkJRU3hsUVVGQkxFVkJRV2xDTEZOQlFVRXNSMEZCUVR0WFFVTm1PMEZCUVVFc1RVRkJSU3hWUVVGQkxFVkJRVmtzU1VGQlF5eERRVUZCTEV0QlFVc3NRMEZCUXl4cFFrRkJja0k3VFVGRVpUdEZRVUZCTEVOQlFXcENPMEZCUVVFc1JVRkhRU3hOUVVGQkxFVkJRVkVzVTBGQlFTeEhRVUZCTzBGQlEwNHNVVUZCUVN4SFFVRkJPMEZCUVVFc1NVRkJRU3hIUVVGQkxFZEJRVTBzVTBGQlF5eFBRVUZFTEVkQlFVRTdZVUZCWVN3d1JFRkJZanRKUVVGQkxFTkJRVTRzUTBGQlFUdFhRVVZCT3pzN096czdPenM3T3pzN096czdPenRKUVVoTk8wVkJRVUVzUTBGSVVqdERRVVJqTEVOQlNHaENMRU5CUVVFN08wRkJRVUVzVFVFMlFrMHNRMEZCUXl4aFFVRlFMRWRCUVhWQ0xHRkJOMEoyUWl4RFFVRkJPenRCUVVGQkxFMUJPRUpOTEVOQlFVTXNUMEZCVUN4SFFVRnBRaXhoUVRsQ2FrSXNRMEZCUVNJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYklrRmpZMjkxYm5SelZHRmliR1ZJWldGa1pYSWdQU0J5WlhGMWFYSmxLRndpTGk5aFkyTnZkVzUwYzE5MFlXSnNaVjlvWldGa1pYSXVhbk11YW5ONExtTnZabVpsWlZ3aUtWeHVRV05qYjNWdWRITlVZV0pzWlZKdmR5QTlJSEpsY1hWcGNtVW9YQ0l1TDJGalkyOTFiblJ6WDNSaFlteGxYM0p2ZHk1cWN5NXFjM2d1WTI5bVptVmxYQ0lwWEc1Y2JrRmpZMjkxYm5SelZHRmliR1VnUFNCU1pXRmpkQzVqY21WaGRHVkRiR0Z6YzF4dUlDQm5aWFJKYm1sMGFXRnNVM1JoZEdVNklDMCtYRzRnSUNBZ2V5QmpiMnhzWldOMGFXOXVPaUJBY0hKdmNITXVhVzVwZEdsaGJFTnZiR3hsWTNScGIyNGdmVnh1WEc0Z0lISmxibVJsY2pvZ0xUNWNiaUFnSUNCeWIzY2dQU0FvWVdOamIzVnVkQ2tnTFQ0Z1lDZzhRV05qYjNWdWRITlVZV0pzWlZKdmR5QnJaWGs5ZTJGalkyOTFiblF1YVdSOUlHRmpZMjkxYm5ROWUyRmpZMjkxYm5SOUlDOCtLV0JjYmx4dUlDQWdJR0FvWEc0Z0lDQWdQR1JwZGlCamJHRnpjMDVoYldVOVhDSndZVzVsYkNCd1lXNWxiQzFrWldaaGRXeDBYQ0krWEc0Z0lDQWdJQ0E4WkdsMklHTnNZWE56VG1GdFpUMWNJbkJoYm1Wc0xXaGxZV1JwYm1kY0lqNWNiaUFnSUNBZ0lDQWdQR2d5SUdOc1lYTnpUbUZ0WlQxY0luQmhibVZzTFhScGRHeGxYQ0krUVdOamIzVnVkSE04TDJneVBseHVJQ0FnSUNBZ1BDOWthWFkrWEc1Y2JpQWdJQ0FnSUR4a2FYWWdZMnhoYzNOT1lXMWxQVndpY0dGdVpXd3RZbTlrZVZ3aVBseHVJQ0FnSUNBZ0lDQThaR2wySUdOc1lYTnpUbUZ0WlQxY0luUmhZbXhsTFhKbGMzQnZibk5wZG1WY0lqNWNiaUFnSUNBZ0lDQWdJQ0E4ZEdGaWJHVWdZMnhoYzNOT1lXMWxQVndpZEdGaWJHVWdkR0ZpYkdVdGFHOTJaWElnZEdGaWJHVnpiM0owWlhKY0lqNWNiaUFnSUNBZ0lDQWdJQ0FnSUR4QlkyTnZkVzUwYzFSaFlteGxTR1ZoWkdWeUlDOCtYRzRnSUNBZ0lDQWdJQ0FnSUNBOGRHSnZaSGsrWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSHQwYUdsekxuTjBZWFJsTG1OdmJHeGxZM1JwYjI0dVgyVnRZbVZrWkdWa0xtRmpZMjkxYm5SekxtMWhjQ2h5YjNjcGZWeHVJQ0FnSUNBZ0lDQWdJQ0FnUEM5MFltOWtlVDVjYmlBZ0lDQWdJQ0FnSUNBOEwzUmhZbXhsUGx4dUlDQWdJQ0FnSUNBOEwyUnBkajVjYmlBZ0lDQWdJRHd2WkdsMlBseHVJQ0FnSUR3dlpHbDJQbHh1SUNBcFlGeHVYRzUzYVc1a2IzY3VRV05qYjNWdWRITlVZV0pzWlNBOUlFRmpZMjkxYm5SelZHRmliR1VnSXlCeVpYRjFhWEpsWkNCaWVTQnlaV0ZqZEY5amIyMXdiMjVsYm5RZ2RtbGxkeUJvWld4d1pYSmNibTF2WkhWc1pTNWxlSEJ2Y25SeklEMGdRV05qYjNWdWRITlVZV0pzWlZ4dVhHNGpSR2x6Y0dGMFkyaGxjaUE5SUhKbGNYVnBjbVVvWENKbWJIVjRYQ0lwTGtScGMzQmhkR05vWlhKY2JpTkZkbVZ1ZEVWdGFYUjBaWElnUFNCeVpYRjFhWEpsS0Z3aVpYWmxiblJ6WENJcExrVjJaVzUwUlcxcGRIUmxjbHh1SWwxOVxuIiwidmFyIEFjY291bnRzVGFibGVIZWFkZXI7XG5cbkFjY291bnRzVGFibGVIZWFkZXIgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICA8dGhlYWQ+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8ZGl2Pk5hbWUgPHNwYW4gY2xhc3NOYW1lPVwiY2FyZXRcIj48L3NwYW4+PC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0aD5cbiAgICAgICAgICA8ZGl2PkN1cnJlbmN5IDxzcGFuIGNsYXNzTmFtZT1cImNhcmV0XCI+PC9zcGFuPjwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgPC90cj5cbiAgICA8L3RoZWFkPlxuICApO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBY2NvdW50c1RhYmxlSGVhZGVyO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lMMmh2YldVdlpXeDJZVzVxWVM5d2NtOXFaV04wY3k5bWNuVm5iSGt2Wm5KMVoyeDVMWGRsWWkxaGNIQXZZWEJ3TDJGemMyVjBjeTlxWVhaaGMyTnlhWEIwY3k5amIyMXdiMjVsYm5SelgyTnZabVpsWlM5aFkyTnZkVzUwYzE5MFlXSnNaVjlvWldGa1pYSXVhbk11YW5ONExtTnZabVpsWlNJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDJWc2RtRnVhbUV2Y0hKdmFtVmpkSE12Wm5KMVoyeDVMMlp5ZFdkc2VTMTNaV0l0WVhCd0wyRndjQzloYzNObGRITXZhbUYyWVhOamNtbHdkSE12WTI5dGNHOXVaVzUwYzE5amIyWm1aV1V2WVdOamIzVnVkSE5mZEdGaWJHVmZhR1ZoWkdWeUxtcHpMbXB6ZUM1amIyWm1aV1VpWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFc1NVRkJRU3h0UWtGQlFUczdRVUZCUVN4dFFrRkJRU3hIUVVGelFpeExRVUZMTEVOQlFVTXNWMEZCVGl4RFFVTndRanRCUVVGQkxFVkJRVUVzVFVGQlFTeEZRVUZSTEZOQlFVRXNSMEZCUVR0WFFVRkhPenM3T3pzN096czdPenRKUVVGSU8wVkJRVUVzUTBGQlVqdERRVVJ2UWl4RFFVRjBRaXhEUVVGQk96dEJRVUZCTEUxQlkwMHNRMEZCUXl4UFFVRlFMRWRCUVdsQ0xHMUNRV1JxUWl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpUVdOamIzVnVkSE5VWVdKc1pVaGxZV1JsY2lBOUlGSmxZV04wTG1OeVpXRjBaVU5zWVhOelhHNGdJSEpsYm1SbGNqb2dMVDRnWUNoY2JpQWdJQ0E4ZEdobFlXUStYRzRnSUNBZ0lDQThkSEkrWEc0Z0lDQWdJQ0FnSUR4MGFENWNiaUFnSUNBZ0lDQWdJQ0E4WkdsMlBrNWhiV1VnUEhOd1lXNGdZMnhoYzNOT1lXMWxQVndpWTJGeVpYUmNJajQ4TDNOd1lXNCtQQzlrYVhZK1hHNGdJQ0FnSUNBZ0lEd3ZkR2crWEc0Z0lDQWdJQ0FnSUR4MGFENWNiaUFnSUNBZ0lDQWdJQ0E4WkdsMlBrTjFjbkpsYm1ONUlEeHpjR0Z1SUdOc1lYTnpUbUZ0WlQxY0ltTmhjbVYwWENJK1BDOXpjR0Z1UGp3dlpHbDJQbHh1SUNBZ0lDQWdJQ0E4TDNSb1BseHVJQ0FnSUNBZ1BDOTBjajVjYmlBZ0lDQThMM1JvWldGa1BseHVJQ0FwWUZ4dVhHNXRiMlIxYkdVdVpYaHdiM0owY3lBOUlFRmpZMjkxYm5SelZHRmliR1ZJWldGa1pYSmNiaUpkZlE9PVxuIiwidmFyIEFjY291bnRzVGFibGVSb3c7XG5cbkFjY291bnRzVGFibGVSb3cgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICA8dHI+XG4gICAgICA8dGQ+e3RoaXMucHJvcHMuYWNjb3VudC5uYW1lfTwvdGQ+XG4gICAgICA8dGQ+e3RoaXMucHJvcHMuYWNjb3VudC5fZW1iZWRkZWQuY3VycmVuY3kuc3ltYm9sfTwvdGQ+XG4gICAgPC90cj5cbiAgKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWNjb3VudHNUYWJsZVJvdztcblxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pTDJodmJXVXZaV3gyWVc1cVlTOXdjbTlxWldOMGN5OW1jblZuYkhrdlpuSjFaMng1TFhkbFlpMWhjSEF2WVhCd0wyRnpjMlYwY3k5cVlYWmhjMk55YVhCMGN5OWpiMjF3YjI1bGJuUnpYMk52Wm1abFpTOWhZMk52ZFc1MGMxOTBZV0pzWlY5eWIzY3Vhbk11YW5ONExtTnZabVpsWlNJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpOW9iMjFsTDJWc2RtRnVhbUV2Y0hKdmFtVmpkSE12Wm5KMVoyeDVMMlp5ZFdkc2VTMTNaV0l0WVhCd0wyRndjQzloYzNObGRITXZhbUYyWVhOamNtbHdkSE12WTI5dGNHOXVaVzUwYzE5amIyWm1aV1V2WVdOamIzVnVkSE5mZEdGaWJHVmZjbTkzTG1wekxtcHplQzVqYjJabVpXVWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzU1VGQlFTeG5Ra0ZCUVRzN1FVRkJRU3huUWtGQlFTeEhRVUZ0UWl4TFFVRkxMRU5CUVVNc1YwRkJUaXhEUVVOcVFqdEJRVUZCTEVWQlFVRXNUVUZCUVN4RlFVRlJMRk5CUVVFc1IwRkJRVHRYUVVGSE96czdPenRKUVVGSU8wVkJRVUVzUTBGQlVqdERRVVJwUWl4RFFVRnVRaXhEUVVGQk96dEJRVUZCTEUxQlVVMHNRMEZCUXl4UFFVRlFMRWRCUVdsQ0xHZENRVkpxUWl4RFFVRkJJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpUVdOamIzVnVkSE5VWVdKc1pWSnZkeUE5SUZKbFlXTjBMbU55WldGMFpVTnNZWE56WEc0Z0lISmxibVJsY2pvZ0xUNGdZQ2hjYmlBZ0lDQThkSEkrWEc0Z0lDQWdJQ0E4ZEdRK2UzUm9hWE11Y0hKdmNITXVZV05qYjNWdWRDNXVZVzFsZlR3dmRHUStYRzRnSUNBZ0lDQThkR1ErZTNSb2FYTXVjSEp2Y0hNdVlXTmpiM1Z1ZEM1ZlpXMWlaV1JrWldRdVkzVnljbVZ1WTNrdWMzbHRZbTlzZlR3dmRHUStYRzRnSUNBZ1BDOTBjajVjYmlBZ0tXQmNibHh1Ylc5a2RXeGxMbVY0Y0c5eWRITWdQU0JCWTJOdmRXNTBjMVJoWW14bFVtOTNYRzRpWFgwPVxuIl19

@jtmalinowski
Copy link
Collaborator

That's great! Thanks!

@feifanzhou
Copy link

Found this issue through Google. The above fix didn't work for me, but adding the top-level components to window did work:

var Wrapper = React.createClass({}); // Doesn't work
window.Wrapper = React.createClass({});  // Works for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants