UNPKG

@wscsports/blaze-rtn-sdk

Version:
111 lines (108 loc) 5.08 kB
import { Component } from 'react'; import { UIManager, findNodeHandle } from 'react-native'; import { BlazeBasePlayerDelegateHandler } from '../classes/base-player-delegate'; import { mapToObject } from '../utils'; export class BlazeBaseWidgetView extends Component { state = { height: 0 }; _onDataLoadStarted = event => { BlazeBasePlayerDelegateHandler.handleDataLoadStarted(event.nativeEvent, this.props.widgetDelegate?.onDataLoadStarted); }; _onDataLoadCompleted = event => { BlazeBasePlayerDelegateHandler.handleDataLoadComplete(event.nativeEvent, this.props.widgetDelegate?.onDataLoadComplete); }; _onPlayerDidAppear = event => { BlazeBasePlayerDelegateHandler.handlePlayerDidAppear(event.nativeEvent, this.props.widgetDelegate?.onPlayerDidAppear); }; _onPlayerDismiss = event => { BlazeBasePlayerDelegateHandler.handlePlayerDidDismiss(event.nativeEvent, this.props.widgetDelegate?.onPlayerDidDismiss); }; _onItemClicked = event => { if (this.props.widgetDelegate?.onItemClicked) { const params = { sourceId: event.nativeEvent.sourceId, widgetItemId: event.nativeEvent.widgetItemId, widgetItemTitle: event.nativeEvent.widgetItemTitle }; this.props.widgetDelegate.onItemClicked(params); } }; _onTriggerCTA = event => { // Pass the native event directly to the shared handler BlazeBasePlayerDelegateHandler.handleTriggerCTA(event.nativeEvent, this.props.widgetDelegate?.onTriggerCTA); }; _onTriggerPlayerBodyTextLink = event => { // Pass the native event directly to the shared handler BlazeBasePlayerDelegateHandler.handleTriggerPlayerBodyTextLink(event.nativeEvent, this.props.widgetDelegate?.onTriggerPlayerBodyTextLink); }; _onPlayerEventTriggered = event => { BlazeBasePlayerDelegateHandler.handlePlayerEventTriggered(event.nativeEvent, this.props.widgetDelegate?.onPlayerEventTriggered); }; _onTriggerCustomActionButton = event => { BlazeBasePlayerDelegateHandler.handleTriggerCustomActionButton(event.nativeEvent, this.props.widgetDelegate?.onTriggerCustomActionButton); }; _onHeightChange = event => { this.setState({ height: Number(event.nativeEvent.newHeight) }); }; reloadData(isSilentRefresh = false) { if (this.ref) { UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref), UIManager.getViewManagerConfig(this.getComponentName()).Commands.reloadData, [isSilentRefresh]); } } updateDataSource(dataSource, isSilentRefresh = false) { if (this.ref) { UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref), UIManager.getViewManagerConfig(this.getComponentName()).Commands.updateDataSource, [dataSource, isSilentRefresh]); } } play() { if (this.ref) { UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref), UIManager.getViewManagerConfig(this.getComponentName()).Commands.play, []); } } updateOverrideStyles(perItemStyleOverrides, shouldUpdateUi) { if (this.ref) { const perItemStyleOverridesRecord = mapToObject(perItemStyleOverrides); UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref), UIManager.getViewManagerConfig(this.getComponentName()).Commands.updateOverrideStyles, [perItemStyleOverridesRecord, shouldUpdateUi]); } } updateWidgetsUi() { if (this.ref) { UIManager.dispatchViewManagerCommand(findNodeHandle(this.ref), UIManager.getViewManagerConfig(this.getComponentName()).Commands.updateWidgetsUi, []); } } // This method should be overridden by derived components getComponentName() { throw new Error('getComponentName() not implemented'); } createBaseProps() { const baseProps = { ...this.props, onWidgetDataLoadStartedInternal: this._onDataLoadStarted, onWidgetDataLoadCompletedInternal: this._onDataLoadCompleted, onWidgetPlayerDidAppearInternal: this._onPlayerDidAppear, onWidgetPlayerDismissedInternal: this._onPlayerDismiss, onItemClickedInternal: this._onItemClicked, onTriggerCTAInternal: this._onTriggerCTA, onTriggerPlayerBodyTextLinkInternal: this._onTriggerPlayerBodyTextLink, onPlayerEventTriggeredInternal: this._onPlayerEventTriggered, onTriggerCustomActionButtonInternal: this._onTriggerCustomActionButton, onHeightChangedInternal: this._onHeightChange }; // If perItemStyleOverrides is defined and is a Map, convert it to an object if (this.props.perItemStyleOverrides instanceof Map) { baseProps.perItemStyleOverridesInternal = mapToObject(this.props.perItemStyleOverrides); } return baseProps; } shouldComponentUpdate(nextProps, nextState, nextContext) { // Allow Re-render if state has changed (Contains the widget's height) const hasStateChanged = this.state != nextState; if (hasStateChanged) return true; // ATM we don't re-render in any other case - because ReactNative sometimes render multiple times and the shimmer animation is glitched. return false; } } //# sourceMappingURL=BlazeBaseWidgetComponent.js.map