@wscsports/blaze-rtn-sdk
Version:
WSC Sports Blaze SDK component for React Native
111 lines (108 loc) • 5.08 kB
JavaScript
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