2019-02-07 12:39:55 +03:00
|
|
|
import { Component } from 'preact';
|
|
|
|
|
|
|
|
const layer0 = require('../layer0');
|
|
|
|
|
|
|
|
export default class MembersProvider extends Component {
|
|
|
|
constructor() {
|
|
|
|
super();
|
|
|
|
this.setGatewayFrame = gatewayFrame => this.gatewayFrame = gatewayFrame;
|
2019-02-14 19:59:41 +03:00
|
|
|
this.ready = new Promise((resolve) => {
|
|
|
|
this.setReady = resolve;
|
|
|
|
})
|
2019-02-07 12:39:55 +03:00
|
|
|
this.gateway = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
getChildContext() {
|
|
|
|
return {
|
|
|
|
members: {
|
|
|
|
createSubscription: this.createMethod('createSubscription'),
|
|
|
|
signin: this.createMethod('signin'),
|
|
|
|
signup: this.createMethod('signup'),
|
|
|
|
requestPasswordReset: this.createMethod('requestPasswordReset'),
|
2019-02-14 19:59:41 +03:00
|
|
|
resetPassword: this.createMethod('resetPassword'),
|
|
|
|
getConfig: this.createMethod('getConfig'),
|
2019-02-07 12:39:55 +03:00
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
render({apiUrl, children}) {
|
|
|
|
const src = `${apiUrl}/members/gateway`;
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
{ children }
|
|
|
|
<iframe src={src} ref={this.setGatewayFrame} id="members-gateway" style="display: none;"/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
componentDidMount() {
|
|
|
|
const gatewayFrame = this.gatewayFrame;
|
|
|
|
gatewayFrame.addEventListener('load', () => {
|
|
|
|
this.gateway = layer0(gatewayFrame)
|
2019-02-14 19:59:41 +03:00
|
|
|
this.setReady();
|
2019-02-07 12:39:55 +03:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
createMethod(method) {
|
|
|
|
return (options) => {
|
2019-02-14 19:59:41 +03:00
|
|
|
return this.ready.then(() => {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
this.gateway.call(method, options, (err, successful) => {
|
|
|
|
if (err || !successful) {
|
|
|
|
reject(err || !successful);
|
|
|
|
}
|
|
|
|
resolve(successful);
|
|
|
|
})
|
|
|
|
});
|
|
|
|
});
|
2019-02-07 12:39:55 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|