@@ -3,7 +3,7 @@ import styled from 'styled-components'
33import { connect } from 'react-redux'
44import { bindActionCreators } from 'redux'
55import { actions } from 'data'
6- import { prop } from 'ramda'
6+ import { path , prop } from 'ramda'
77import { Button , Text , TooltipHost , Icon } from 'blockchain-info-components'
88import { FormattedMessage } from 'react-intl'
99
@@ -83,6 +83,162 @@ class ISignThisContainer extends PureComponent {
8383 quoteExpired : false
8484 }
8585
86+ componentDidMount ( ) {
87+ window . addEventListener ( 'message' , function ( e ) { } )
88+
89+ const onComplete = e => {
90+ // eslint-disable-next-line
91+ console . log ( e )
92+ this . props . coinifyActions . fromISX ( e )
93+ }
94+
95+ var e = document . getElementById ( 'isx-iframe' )
96+ const iSignThisDomain = this . props . walletOptions
97+ . map ( path ( [ 'platforms' , 'web' , 'coinify' , 'config' , 'iSignThisDomain' ] ) )
98+ . getOrElse ( null )
99+ const coinifyPaymentDomain = this . props . walletOptions
100+ . map ( path ( [ 'domains' , 'coinifyPaymentDomain' ] ) )
101+ . getOrElse ( null )
102+
103+ var _isx = {
104+ transactionId : '' ,
105+ version : '1.0.0' ,
106+ configOptions : null
107+ }
108+
109+ _isx . applyContainerStyles = function ( c ) {
110+ c . style [ 'width' ] = '100%'
111+ if ( this . configOptions . height ) {
112+ c . style [ 'height' ] = this . configOptions . height
113+ } else {
114+ c . style [ 'height' ] = '700px'
115+ }
116+ c . style [ 'overflow' ] = 'hidden'
117+ }
118+
119+ _isx . setup = function ( setup ) {
120+ this . transactionId = setup . transaction_id
121+ this . configOptions = setup
122+
123+ return this
124+ }
125+
126+ _isx . done = function ( _completeListener ) {
127+ this . completeListener = _completeListener
128+ return this
129+ }
130+
131+ _isx . fail = function ( _errorListener ) {
132+ this . errorListener = _errorListener
133+ return this
134+ }
135+
136+ _isx . route = function ( _routeListener ) {
137+ this . routeListener = _routeListener
138+ return this
139+ }
140+
141+ _isx . resized = function ( _resizeListener ) {
142+ this . resizeListener = _resizeListener
143+ return this
144+ }
145+
146+ _isx . publish = function ( ) {
147+ this . iframe = e
148+ // Create IE + others compatible event handler
149+ let eventMethod = window . addEventListener
150+ ? 'addEventListener'
151+ : 'attachEvent'
152+ let eventer = window [ eventMethod ]
153+ let messageEvent = eventMethod === 'attachEvent' ? 'onmessage' : 'message'
154+ let self = this
155+ // Listen to message from child window
156+ eventer (
157+ messageEvent ,
158+ function ( e ) {
159+ // Check for the domain who sent the messageEvent
160+ let origin = e . origin || e . originalEvent . origin
161+ // eslint-disable-next-line
162+ console . log ( e )
163+ if ( ! [ iSignThisDomain , coinifyPaymentDomain ] . includes ( origin ) ) {
164+ // Event not generated from ISX or coinifyPaymentDomain, simply return
165+ return
166+ }
167+
168+ let frame = document . getElementById ( 'isx-iframe' )
169+ if ( e . source !== prop ( 'contentWindow' , frame ) ) {
170+ // Source of message isn't from the iframe
171+ return
172+ }
173+
174+ try {
175+ let d = JSON . parse ( e . data . split ( '[ISX-Embed]' ) [ 1 ] )
176+ // eslint-disable-next-line
177+ console . log ( d )
178+
179+ if ( d . event . toLowerCase ( ) === 'complete' ) {
180+ if ( self . completeListener ) {
181+ self . completeListener ( d )
182+ }
183+ } else if ( d . event . toLowerCase ( ) === 'route' ) {
184+ if ( self . routeListener ) {
185+ self . routeListener ( d )
186+ }
187+ } else if ( d . event . toLowerCase ( ) === 'error' ) {
188+ if ( self . errorListener ) {
189+ self . errorListener ( d )
190+ }
191+ } else if ( d . event . toLowerCase ( ) === 'resized' ) {
192+ if ( self . resizeListener ) {
193+ self . resizeListener ( d )
194+ }
195+ }
196+ } catch ( err ) { }
197+ } ,
198+ false
199+ )
200+
201+ return this
202+ }
203+ var widget = {
204+ transaction_id : this . props . iSignThisId ,
205+ container_id : 'isx-iframe'
206+ }
207+
208+ var setState = state => {
209+ // console.log('V4 ISX_COMPONENT: setState', state)
210+ switch ( state ) {
211+ case 'SUCCESS' :
212+ onComplete ( 'processing' )
213+ break
214+ case 'CANCELLED' :
215+ onComplete ( 'cancelled' )
216+ break
217+ case 'EXPIRED' :
218+ onComplete ( 'expired' )
219+ break
220+ case 'DECLINED' :
221+ case 'FAILED' :
222+ case 'REJECTED' :
223+ onComplete ( 'rejected' )
224+ break
225+ case 'PENDING' :
226+ onComplete ( 'reviewing' )
227+ break
228+ }
229+ }
230+
231+ _isx
232+ . setup ( widget )
233+ . done ( function ( e ) {
234+ setState ( e . state )
235+ } )
236+ . fail ( function ( e ) { } )
237+ . resized ( function ( e ) { } )
238+ . route ( function ( e ) { } )
239+ . publish ( )
240+ }
241+
86242 onQuoteExpiration = ( ) => {
87243 this . setState ( { quoteExpired : true } )
88244 }
0 commit comments