(DEPRECATED) Elm-React  
=========
> **⚠ This module has been deprecated. Have a look at [react-elm-components](https://github.com/evancz/react-elm-components) instead ! ⚠**
This component allows you to easily integrate an `Elm` module into an existing `React`
application. This can be useful to slightly refactor a legacy code base or simply to just run
some part of an application using `Elm`.
## Installation
```
npm install --save elm-react-component
```
## Examples
- [Basic](http://KtorZ.github.io/elm-react-component/basic/)
## Usage
The component is a plain `React` component which means that it can be integrated like any other
component.
```js
ReactDOM.render(
,
document.getElementById('app')
);
```
The component requires at least one property `name` which is the name of your `Elm` module. So
far, there's no dynamic loading; you have to include your `Elm` module and either make the `Elm`
object be available in the global scope or supply it as a component's property.
Then, for each `out-port`, from `Elm` to `React`, you may pass as many `on[PortName]`
properties as you need. Those properties should be functions -- or callback, triggered when a
new message is spit out by the signal.
Any other property will be used as `in-port` from `React` to `Elm` to communicate. Each time a
property is set with a new value, that value is sent to the corresponding port to the `Elm`
module.
Check out the examples for more details, but basically:
property | type | description
-----------------------|----------------|------------------------
name | string | `Elm` module's name
on{OutPort} | function | Subscriber / Handler for the given out port
{inPort} | any | Value to be sent through the module in port
[optional] *elm* | object | The Elm object dependency. If not supplied, looks for a global `Elm`
[optional] *id* | string | Id to assign to the `Elm`'s div container
[optional] *className* | string | Class to assign to the `Elm`'s div container
## Example
**Elm module 'Main'**
```elm
import Graphics.Element exposing (..)
import Signal
import Mouse
main : Signal Element
main =
Signal.map (\i -> flow right [show "in:", show i]) inPort
port inPort : Signal Int
port outPort : Signal Int
port outPort =
Signal.map fst Mouse.position
```
**React application**
```js
import React from 'react';
import ReactDOM from 'react-dom';
let App = React.createClass({
getInitialState() {
return { inPort: 0 }
},
log(e) {
console.log("onOutPort:", e)
},
render() {
setTimeout(() => {
this.setState({ inPort: Date.now() })
}, 50)
return (
)
}
})
ReactDOM.render(
,
document.getElementById('app')
)
```
## TODO
- Properly test the component
- Explore some other use cases and real-life examples
## Contributing
Any ideas ? Feel free to open an issue !
## Change log
#### 0.4.0 (2016-02-21)
- Allow `Elm` object to be passed as a prop (where it was assumed to be globally accessible).
#### 0.3.0 (2016-02-03)
- Refactor example folder (now accessible on gh-pages)
- Allow id and className to be passed as parameters
#### 0.2.0 (2016-01-27)
- Add binding for in-port through properties
- Remove the need of an internal id
#### 0.1.0 (2016-01-26)
- First version, display an existing module and allow binding from `Elm` to `React`