vigour-pay
Version:
Native store purchasing and web payment
140 lines (131 loc) • 4.64 kB
JavaScript
var Product = require('./product')
var plain = require('vigour-js/lib/methods/plain')
module.exports = {
validated: {
val: false,
inject: require('vigour-js/lib/observable/is')
},
store: {
on: {
value () {
console.log('-----------> [pay] store is set!', this.val)
var store = this
var pay = store.parent
pay._platform.ready.on('data', function onReady () {
if (this.val === true) {
// console.error('[PAY] ok platform is ready!!!')
if (this.parent._isOrientationWeb) {
pay.ready.val = false
pay._platform.ready.val = false
} else {
pay._platform.ready.off('data', onReady)
var storeName = store.val
var storeInfo = pay[storeName]
if (storeInfo) {
// console.log('-----------> GOT STORE CONFIG!', storeInfo.serialize())
pay.set(storeInfo.serialize())
} else {
// console.error('could not detect config for', storeName)
}
}
}
})
}
}
},
products: {
inject: plain,
on: {
property (data) {
var added = data.added
if (added) {
this.parent.validateProducts()
}
},
storeProducts (data) {
console.log('[pay][shared][products] >> on storeProducts > set products!')
console.log('[pay][shared][products] products', products)
// console.log('[products on storeProducts] event triggered!')
var products = this
var pay = products.parent
var storeProducts = data.storeProducts
var cb = data.cb
var unverified
products.each(function (product, label) {
console.log('[pay][shared][products] each product', label)
// console.log('[products on storeProducts] i have product', label)
var storeId = product.val
var storeInfo = storeProducts[storeId] || storeProducts[label]
if (storeInfo) {
console.log('[pay][shared][products] got storeInfo! set!', storeInfo)
product.set(storeInfo)
} else {
console.log('[pay][shared][products] ERROR cant find storeInfo! emit error!')
console.log('[pay][shared][products] ERROR product', product)
unverified = stack(unverified, product)
pay.emit('error', {
message: 'unverified product',
product: product
})
}
})
if (cb) {
cb(unverified, storeProducts)
}
}
},
ChildConstructor: Product
},
define: {
validateProducts () {
var pay = this
var products = pay.products
// // console.log('---- product added > verifyProducts!')
var unknown
products.each(function validateEach (product, label) {
if (!product.val) {
unknown = 'failed to get storeId for ' + label + ' with ' + product._val
return true
}
})
if (unknown) {
// console.warn(unknown)
return
}
console.log('[pay][shared][validateProducts] >> validateProducts > emit getProducts')
pay._platform.emit('getProducts', { products, cb: function (err, storeProducts) {
console.log('[pay][shared][validateProducts] << getProducts callback! storeProducts', storeProducts)
// console.log('[validateProducts] got storeProducts', err || storeProducts)
if (!err) {
// console.log('emit on products')
console.log('[pay][shared][validateProducts] >> have storeProducts > emit storeProducts on pay.products!')
products.emit('storeProducts', { storeProducts, cb (err) {
console.log('[pay][shared][validateProducts] << got pay.store storeProducts callback > if no error > validated!')
// console.log('[validateProducts] products.emit(storeProducts callback', err)
if (!err) {
console.log('[pay][shared][validateProducts] ---- ok all good', pay.products.serialize())
// console.log('[validateProducts] ready before set?', pay.ready.val)
pay.validated.val = true
// pay.ready.val = true
} else {
console.log('[pay][shared][validateProducts] ---- not all good', err)
}
}})
}
}})
}
}
}
function stack (have, add) {
if (have) {
if (have instanceof Array) {
have.push(add)
} else {
have = [ have, add ]
}
} else {
have = add
}
return have
}