Skip to content

Updates for 0.12 #149

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

Merged
merged 13 commits into from
Jun 9, 2018
Merged
18 changes: 9 additions & 9 deletions bower.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,16 @@
"url": "git://github.com/purescript-contrib/purescript-react.git"
},
"dependencies": {
"purescript-eff": "^3.0.0",
"purescript-prelude": "^3.0.0",
"purescript-unsafe-coerce": "^3.0.0",
"purescript-exceptions": "^3.1.0",
"purescript-maybe": "^3.0.0",
"purescript-nullable": "^3.0.0",
"purescript-typelevel-prelude": "^2.5.0"
"purescript-effect": "^2.0.0",
"purescript-prelude": "^4.0.0",
"purescript-unsafe-coerce": "^4.0.0",
"purescript-exceptions": "^4.0.0",
"purescript-maybe": "^4.0.0",
"purescript-nullable": "^4.0.0",
"purescript-typelevel-prelude": "^3.0.0"
},
"devDependencies": {
"purescript-console": "^3.0.0",
"purescript-psci-support": "^3.0.0"
"purescript-console": "^4.1.0",
"purescript-psci-support": "^4.0.0"
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"name": "purescript-react",
"files": [],
"peerDependencies": {
"react": "^16.0.0"
"react": "^16.3.0"
}
}
102 changes: 61 additions & 41 deletions src/React.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,38 @@ var React = require("react");
function createClass(baseClass) {
function bindProperty(instance, prop, value) {
switch (prop) {
case 'state':
case 'render':
case 'componentDidMount':
case 'componentDidUpdate':
case 'componentWillMount':
case 'componentWillUnmount':
case 'render':
case 'state':
instance[prop] = value;
break;

case 'componentWillReceiveProps':
instance[prop] = function (a) { return value(a)(); };
break;

case 'componentDidCatch':
case 'componentWillUpdate':
case 'shouldComponentUpdate':
case 'getSnapshotBeforeUpdate':
instance[prop] = function (a, b) { return value(a)(b)(); };
break;

case 'componentDidUpdate':
instance[prop] = function (a, b, c) { return value(a)(b)(c)(); };
break;

case 'unsafeComponentWillMount':
instance['UNSAFE_componentWillMount'] = value;
break;

case 'unsafeComponentWillReceiveProps':
instance['UNSAFE_componentWillReceiveProps'] = function (a) { return value(a)(); };
break;

case 'unsafeComponentWillUpdate':
instance['UNSAFE_componentWillUpdate'] = function (a, b) { return value(a)(b)(); };
break;

default:
throw new Error('Not a component property: ' + prop);
throw new Error('[purescript-react] Not a component property: ' + prop);
}
}

Expand All @@ -49,9 +60,25 @@ function createClass(baseClass) {
};
}

exports.componentImpl = createClass(React.Component);
function createClassWithDerivedState(classCtr) {
return function(displayName) {
return function(getDerivedStateFromProps) {
return function(ctrFn) {
var Constructor = componentImpl(displayName)(ctrFn);
Constructor.getDerivedStateFromProps = function(a, b) { return getDerivedStateFromProps(a)(b) };
return Constructor;
};
};
};
}

exports.pureComponentImpl = createClass(React.PureComponent);
var componentImpl = createClass(React.Component);
exports.componentImpl = componentImpl;
exports.componentWithDerivedStateImpl = createClassWithDerivedState(componentImpl);

var pureComponentImpl = createClass(React.PureComponent);
exports.pureComponentImpl = pureComponentImpl
exports.pureComponentWithDerivedStateImpl = createClassWithDerivedState(pureComponentImpl);

exports.statelessComponent = function(x) { return x; };

Expand All @@ -68,60 +95,44 @@ exports.childrenToArray = React.Children.toArray

exports.childrenCount = React.Children.count;

function writeState(this_) {
function setStateImpl(this_) {
return function(state){
return function(){
this_.setState(state);
return state;
};
};
}
exports.writeState = writeState;
exports.setStateImpl = setStateImpl;

function writeStateWithCallback(this_, cb) {
function setStateWithCallbackImpl(this_) {
return function(state){
return function(cb){
return function() {
this_.setState(state, cb);
return state;
};
};
};
}
exports.writeStateWithCallback = writeStateWithCallback;
exports.setStateWithCallbackImpl = setStateWithCallbackImpl;

function readState(this_) {
function getState(this_) {
return function(){
if (!this_.state) {
throw new Error('[purescript-react] Cannot get state within constructor');
}
return this_.state;
};
}
exports.readState = readState;
exports.getState = getState;

function transformState(this_){
return function(update){
return function(){
this_.setState(function(old, props){
return update(old);
});
function forceUpdateWithCallback(this_) {
return function(cb) {
return function() {
this_.forceUpdate(cb);
};
};
}
exports.transformState = transformState;

function forceUpdateCbImpl(this_, cb) {
this_.forceUpdate(function() {
return cb();
});
return {};
};
exports.forceUpdateCbImpl = forceUpdateCbImpl;

function handle(f) {
return function(e){
return f(e)();
};
};
exports.handle = handle;
exports.forceUpdateWithCallback = forceUpdateWithCallback;

function createElement(class_) {
return function(props){
Expand Down Expand Up @@ -149,3 +160,12 @@ function createElementDynamic(class_) {
};
exports.createElementDynamicImpl = createElementDynamic;
exports.createElementTagNameDynamic = createElementDynamic;

function createContext(defaultValue) {
var context = React.createContext(defaultValue);
return {
consumer: context.Consumer,
provider: context.Provider
};
}
exports.createContext = createContext;
Loading