UNPKG

storyly-react-native

Version:
348 lines (314 loc) 13.4 kB
import React, { Component, useState, forwardRef, useImperativeHandle } from 'react'; import { requireNativeComponent, UIManager, findNodeHandle, processColor, } from 'react-native'; import { string, arrayOf, func, number, bool, object } from 'prop-types'; class VerticalFeedPresenter extends Component { refresh = () => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.refresh, [], ); }; play = () => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.play, [], ); }; pause = () => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.pause, [], ); }; hydrateProducts = (products) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.hydrateProducts, [products], ); } hydrateWishlist = (products) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.hydrateWishlist, [products], ); } updateCart = (cart) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.updateCart, [cart], ); } approveCartChange = (responseId, cart) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.approveCartChange, [responseId, cart], ); } rejectCartChange = (responseId, failMessage) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.rejectCartChange, [responseId, failMessage], ); } approveWishlistChange = (responseId, item) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.approveWishlistChange, [responseId, item], ); } rejectWishlistChange = (responseId, failMessage) => { UIManager.dispatchViewManagerCommand( findNodeHandle(this._verticalFeedBarView), UIManager.getViewManagerConfig('STVerticalFeedPresenter').Commands.rejectWishlistChange, [responseId, failMessage], ); } _onStorylyLoaded = (eventPayload) => { if (this.props.onLoad) { this.props.onLoad(eventPayload.nativeEvent); } } _onStorylyLoadFailed = (eventPayload) => { if (this.props.onFail) { this.props.onFail(eventPayload.nativeEvent); } } _onStorylyEvent = (eventPayload) => { if (this.props.onEvent) { this.props.onEvent(eventPayload.nativeEvent); } } _onStorylyActionClicked = (eventPayload) => { if (this.props.onPress) { this.props.onPress(eventPayload.nativeEvent); } } _onStorylyVerticalFeedPresented = (eventPayload) => { if (this.props.onVerticalFeedOpen) { this.props.onVerticalFeedOpen(); } } _onStorylyVerticalFeedPresentFailed = (eventPayload) => { if (this.props.onVerticalFeedOpenFailed) { this.props.onVerticalFeedOpenFailed(eventPayload.nativeEvent); } } _onStorylyVerticalFeedDismissed = (eventPayload) => { if (this.props.onVerticalFeedClose) { this.props.onVerticalFeedClose(); } } _onStorylyUserInteracted = (eventPayload) => { if (this.props.onUserInteracted) { this.props.onUserInteracted(eventPayload.nativeEvent); } } _onStorylyProductHydration = (eventPayload) => { if (this.props.onProductHydration) { this.props.onProductHydration(eventPayload.nativeEvent); } } _onStorylyCartUpdated = (eventPayload) => { if (this.props.onCartUpdate) { this.props.onCartUpdate(eventPayload.nativeEvent); } } _onStorylyWishlistUpdated = (eventPayload) => { if (this.props.onWishlistUpdate) { this.props.onWishlistUpdate(eventPayload.nativeEvent); } } _onStorylyProductEvent = (eventPayload) => { if (this.props.onProductEvent) { this.props.onProductEvent(eventPayload.nativeEvent); } } render() { const { storylyId, storylySegments, storylyUserProperty, customParameter, storylyTestMode, storylyShareUrl, storylyFacebookAppID, verticalFeedGroupIconHeight, verticalFeedGroupIconCornerRadius, verticalFeedGroupListSections, verticalFeedGroupListHorizontalEdgePadding, verticalFeedGroupListVerticalEdgePadding, verticalFeedGroupListHorizontalPaddingBetweenItems, verticalFeedGroupListVerticalPaddingBetweenItems, verticalFeedGroupTextIsVisible, verticalFeedGroupOrder, verticalFeedGroupMinLikeCountToShowIcon, verticalFeedGroupMinImpressionCountToShowIcon, verticalFeedGroupImpressionIcon, verticalFeedGroupLikeIcon, verticalFeedGroupTextTypeface, verticalFeedGroupTextSize, verticalFeedGroupTextColor, verticalFeedTypeIndicatorIsVisible, verticalFeedGroupIconBackgroundColor, storylyLayoutDirection, storylyLocale, verticalFeedItemProgressBarColor, verticalFeedItemProgressBarVisibility, verticalFeedItemTextTypeface, verticalFeedItemInteractiveTextTypeface, verticalFeedItemTitleVisibility, verticalFeedItemCloseButtonIsVisible, verticalFeedItemLikeButtonIsVisible, verticalFeedItemShareButtonIsVisible, verticalFeedItemCloseIcon, verticalFeedItemShareIcon, verticalFeedItemLikeIcon, verticalFeedFallbackIsEnabled, verticalFeedCartIsEnabled, verticalFeedProductFeed, ...otherProps } = this.props; const storylyConfig = { 'storylyInit': { 'storylyId': storylyId, 'storylySegments': storylySegments, 'userProperty': storylyUserProperty, 'customParameter': customParameter, 'storylyIsTestMode': storylyTestMode, 'storylyLayoutDirection': storylyLayoutDirection, 'storylyLocale': storylyLocale, }, 'verticalFeedGroupStyling': { 'iconBackgroundColor': processColor(verticalFeedGroupIconBackgroundColor), 'iconCornerRadius': verticalFeedGroupIconCornerRadius, 'iconHeight': verticalFeedGroupIconHeight, 'textColor': processColor(verticalFeedGroupTextColor), 'titleFont': verticalFeedGroupTextTypeface, 'titleTextSize': verticalFeedGroupTextSize, 'titleVisible': verticalFeedGroupTextIsVisible, 'groupOrder': verticalFeedGroupOrder, 'typeIndicatorVisible': verticalFeedTypeIndicatorIsVisible, 'minLikeCountToShowIcon': verticalFeedGroupMinLikeCountToShowIcon, 'minImpressionCountToShowIcon': verticalFeedGroupMinImpressionCountToShowIcon, 'impressionIcon': verticalFeedGroupImpressionIcon, 'likeIcon': verticalFeedGroupLikeIcon, }, 'verticalFeedBarStyling': { 'sections': verticalFeedGroupListSections, 'horizontalEdgePadding': verticalFeedGroupListHorizontalEdgePadding, 'verticalEdgePadding': verticalFeedGroupListVerticalEdgePadding, 'horizontalPaddingBetweenItems': verticalFeedGroupListHorizontalPaddingBetweenItems, 'verticalPaddingBetweenItems': verticalFeedGroupListVerticalPaddingBetweenItems, }, 'verticalFeedCustomization': { 'titleFont': verticalFeedItemTextTypeface, 'interactiveFont': verticalFeedItemInteractiveTextTypeface, 'progressBarColor': verticalFeedItemProgressBarColor ? verticalFeedItemProgressBarColor.map(processColor) : null, 'isTitleVisible': verticalFeedItemTitleVisibility, 'isCloseButtonVisible': verticalFeedItemCloseButtonIsVisible, 'isLikeButtonVisible': verticalFeedItemLikeButtonIsVisible, 'isShareButtonVisible': verticalFeedItemShareButtonIsVisible, 'closeButtonIcon': verticalFeedItemCloseIcon, 'shareButtonIcon': verticalFeedItemShareIcon, "likeButtonIcon": verticalFeedItemLikeIcon, 'isProgressBarVisible': verticalFeedItemProgressBarVisibility, }, 'verticalFeedItemShareConfig': { 'storylyShareUrl': storylyShareUrl, 'storylyFacebookAppID': storylyFacebookAppID, }, 'verticalFeedItemProductConfig': { 'isFallbackEnabled': verticalFeedFallbackIsEnabled, 'isCartEnabled': verticalFeedCartIsEnabled, 'productFeed': verticalFeedProductFeed, }, } return ( <STVerticalFeedPresenter {...otherProps} onStorylyLoaded={this._onStorylyLoaded} onStorylyLoadFailed={this._onStorylyLoadFailed} onStorylyEvent={this._onStorylyEvent} onStorylyActionClicked={this._onStorylyActionClicked} onStorylyStoryPresented={this._onStorylyVerticalFeedPresented} onStorylyStoryPresentFailed={this._onStorylyVerticalFeedPresentFailed} onStorylyStoryDismissed={this._onStorylyVerticalFeedDismissed} onStorylyUserInteracted={this._onStorylyUserInteracted} onStorylyProductHydration={this._onStorylyProductHydration} onStorylyCartUpdated={this._onStorylyCartUpdated} onStorylyWishlistUpdated={this._onStorylyWishlistUpdated} onStorylyProductEvent={this._onStorylyProductEvent} storyly={ storylyConfig } ref={el => (this._verticalFeedBarView = el)}> </STVerticalFeedPresenter> ) } } VerticalFeedPresenter.propTypes = { storylyId: string.isRequired, storylySegments: arrayOf(string), storylyUserProperty: object, customParameter: string, storylyTestMode: bool, storylyShareUrl: string, verticalFeedGroupIconBackgroundColor: string, verticalFeedGroupTextIsVisible: bool, verticalFeedGroupOrder: string, verticalFeedGroupTextTypeface: string, verticalFeedGroupTextSize: number, verticalFeedGroupIconHeight: number, verticalFeedGroupIconCornerRadius: number, verticalFeedGroupTextColor: string, verticalFeedGroupMinLikeCountToShowIcon: number, verticalFeedGroupMinImpressionCountToShowIcon: number, verticalFeedGroupImpressionIcon: string, verticalFeedGroupLikeIcon: string, verticalFeedTypeIndicatorIsVisible: bool, verticalFeedGroupListSections: number, verticalFeedGroupListHorizontalEdgePadding: number, verticalFeedGroupListVerticalEdgePadding: number, verticalFeedGroupListHorizontalPaddingBetweenItems: number, verticalFeedGroupListVerticalPaddingBetweenItems: number, verticalFeedItemProgressBarColor: arrayOf(string), verticalFeedItemProgressBarVisibility: bool, verticalFeedItemLikeButtonIsVisible: bool, verticalFeedItemShareButtonIsVisible: bool, verticalFeedItemTextTypeface: string, verticalFeedItemInteractiveTextTypeface: string, verticalFeedItemTitleVisibility: bool, verticalFeedItemCloseButtonIsVisible: bool, verticalFeedItemCloseIcon: string, verticalFeedItemShareIcon: string, verticalFeedItemLikeIcon: string, storylyLayoutDirection: string, verticalFeedFallbackIsEnabled: bool, verticalFeedCartIsEnabled: bool, verticalFeedProductFeed: object, onLoad: func, onFail: func, onPress: func, onEvent: func, onVerticalFeedOpen: func, onVerticalFeedOpenFailed: func, onVerticalFeedClose: func, onUserInteracted: func, onProductHydration: func, onCartUpdate: func, onProductEvent: func, } const STVerticalFeedPresenter = requireNativeComponent('STVerticalFeedPresenter', null); export default VerticalFeedPresenter;