From b1e9561633129d8c7e149c4098d1cd54364ff017 Mon Sep 17 00:00:00 2001 From: Elliot Hesp Date: Fri, 26 May 2017 15:18:09 +0100 Subject: [PATCH] [admob][android] Add custom Banner component wrapper --- lib/modules/admob/Banner.js | 63 ++++++++++++++++++++++++++++++++----- 1 file changed, 55 insertions(+), 8 deletions(-) diff --git a/lib/modules/admob/Banner.js b/lib/modules/admob/Banner.js index 99aea05d..9ac725ad 100644 --- a/lib/modules/admob/Banner.js +++ b/lib/modules/admob/Banner.js @@ -1,11 +1,58 @@ -import { PropTypes } from 'react'; +import React, { PropTypes } from 'react'; import { requireNativeComponent, View } from 'react-native'; -const Banner = { - name: 'Banner', - propTypes: { - src: PropTypes.string, - }, -}; +class Banner extends React.Component { -module.exports = requireNativeComponent('RNFirebaseAdMobBanner', Banner); + static propTypes = { + ...View.propTypes, + size: PropTypes.string, + unitId: PropTypes.string, + onAdLoaded: PropTypes.func, + }; + + static defaultProps = { + size: 'SMART_BANNER', + unitId: 'ca-app-pub-3940256099942544/6300978111', // Testing + }; + + constructor() { + super(); + this.state = { + width: 0, + height: 0, + }; + } + + onBannerEvent = ({ nativeEvent }) => { + if (this.props[nativeEvent.type]) { + if (nativeEvent.type === 'onAdFailedToLoad') { + const error = new Error(nativeEvent.payload.message); + error.code = nativeEvent.payload.code; + this.props[nativeEvent.type](error); + } else { + this.props[nativeEvent.type](nativeEvent.payload || {}); + } + } + + if (nativeEvent.type === 'onSizeChange') this.updateSize(nativeEvent.payload); + }; + + updateSize = ({ width, height }) => { + this.setState({ width, height }); + }; + + render() { + return ( + + ); + } + +} + +const RNFirebaseAdMobBanner = requireNativeComponent('RNFirebaseAdMobBanner', Banner); + +export default Banner;