package com.blaze.rtnblazesdk.base import androidx.annotation.Keep import com.blaze.rtnblazesdk.events.WidgetCTAClickEvent import com.blaze.rtnblazesdk.events.WidgetDataLoadCompletedEvent import com.blaze.rtnblazesdk.events.WidgetDataLoadStartedEvent import com.blaze.rtnblazesdk.events.WidgetHeightChangedEvent import com.blaze.rtnblazesdk.events.WidgetItemClickedEvent import com.blaze.rtnblazesdk.events.WidgetOnPlayerEventTriggered import com.blaze.rtnblazesdk.events.WidgetOnTriggerPlayerBodyTextLinkEvent import com.blaze.rtnblazesdk.events.WidgetPlayerDidAppearEvent import com.blaze.rtnblazesdk.events.WidgetPlayerDismissedEvent import com.blaze.rtnblazesdk.stories.BlazeStoriesGridView import com.facebook.react.bridge.ReactApplicationContext import com.facebook.react.bridge.ReadableArray import com.facebook.react.bridge.ReadableMap import com.facebook.react.uimanager.ReactStylesDiffMap import com.facebook.react.uimanager.SimpleViewManager import com.facebook.react.uimanager.annotations.ReactProp abstract class BlazeWidgetViewManager( context: ReactApplicationContext?, ) : SimpleViewManager() { override fun receiveCommand(view: TWidget, commandId: Int, args: ReadableArray?) { when (commandId) { COMMAND_RELOAD_DATA_ID -> args?.let { view.getIsSilentRefreshAndReloadData(it) } COMMAND_UPDATE_DATA_SOURCE_ID -> args?.let { view.updateDataSourceFromArgs(it) } COMMAND_PLAY_WIDGET_ID -> view.play() COMMAND_UPDATE_OVERRIDE_STYLES_ID -> args?.let { view.updateOverrideStylesFromArgs(it) } COMMAND_UPDATE_WIDGETS_UI_ID -> view.updateWidgetsUi() } } override fun getExportedCustomDirectEventTypeConstants(): Map? { val map: Map = mapOf( WidgetDataLoadStartedEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onWidgetDataLoadStartedInternal")), WidgetDataLoadCompletedEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onWidgetDataLoadCompletedInternal")), WidgetPlayerDidAppearEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onWidgetPlayerDidAppearInternal")), WidgetPlayerDismissedEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onWidgetPlayerDismissedInternal")), WidgetItemClickedEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onItemClickedInternal")), WidgetCTAClickEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onTriggerCTAInternal")), WidgetOnTriggerPlayerBodyTextLinkEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onTriggerPlayerBodyTextLinkInternal")), WidgetOnPlayerEventTriggered.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onPlayerEventTriggeredInternal")), WidgetHeightChangedEvent.EVENT_NAME to mapOf(Pair(KEY_EVENT_REGISTRATION_NAME, "onHeightChangedInternal")), ) return map } companion object { const val COMMAND_RELOAD_DATA = "reloadData" const val COMMAND_UPDATE_DATA_SOURCE = "updateDataSource" const val COMMAND_PLAY_WIDGET = "play" const val KEY_EVENT_REGISTRATION_NAME = "registrationName" const val COMMAND_UPDATE_OVERRIDE_STYLES = "updateOverrideStyles" const val COMMAND_UPDATE_WIDGETS_UI = "updateWidgetsUi" //COMMAND IDs const val COMMAND_RELOAD_DATA_ID = 0 const val COMMAND_UPDATE_DATA_SOURCE_ID = 1 const val COMMAND_PLAY_WIDGET_ID = 2 const val COMMAND_UPDATE_OVERRIDE_STYLES_ID = 3 const val COMMAND_UPDATE_WIDGETS_UI_ID = 4 } override fun getCommandsMap(): MutableMap { return mutableMapOf( COMMAND_RELOAD_DATA to COMMAND_RELOAD_DATA_ID, COMMAND_UPDATE_DATA_SOURCE to COMMAND_UPDATE_DATA_SOURCE_ID, COMMAND_PLAY_WIDGET to COMMAND_PLAY_WIDGET_ID, COMMAND_UPDATE_OVERRIDE_STYLES to COMMAND_UPDATE_OVERRIDE_STYLES_ID, COMMAND_UPDATE_WIDGETS_UI to COMMAND_UPDATE_WIDGETS_UI_ID, ) } override fun updateProperties(viewToUpdate: TWidget, props: ReactStylesDiffMap) { super.updateProperties(viewToUpdate, props) viewToUpdate.onPropsUpdate(props) } //---------- Shared props ----------// @Keep @ReactProp(name = "dataSource") fun setDataSource(view: TWidget, value: ReadableMap?) { view.setDataSourceTypeFromMap(value) } @Keep @ReactProp(name = "presetWidgetLayout") fun setPresetWidgetLayout(view: TWidget, value: String?) { view.presetWidgetLayoutString = value } @Keep @ReactProp(name = "appOverridesCTAHandling") fun setAppOverridesCTAHandling(view: TWidget, value: Boolean) { view.appOverridesCTAHandling = value } @Keep @ReactProp(name = "blazeWidgetLayout") fun setBlazeWidgetLayout(view: TWidget, value: ReadableMap?) { view.reactWidgetLayoutStyleMap = value } @Keep @ReactProp(name = "shouldOrderWidgetByReadStatus") fun setShouldOrderWidgetByReadStatus(view: TWidget, value: Boolean) { view.shouldOrderWidgetByReadStatus = value } @Keep @ReactProp(name = "perItemStyleOverridesInternal") fun setPerItemStyleOverrides(view: TWidget, value: ReadableMap?) { view.perItemStyleOverridesReadableMap = value } @Keep @ReactProp(name = "cachingLevel") fun setCachingLevel(view: TWidget, value: String?) { view.reactCachingLevel = value } //---------- Props for Grids ----------// @Keep @ReactProp(name = "isEmbeddedInScrollView") fun setIsEmbeddedInScrollView(view: TWidget, value: Boolean) { view.isEmbeddedInScrollView = value } //---------- Props for Moment widget ----------// @Keep @ReactProp(name = "blazeMomentsPlayerStyle") fun setBlazeMomentsPlayerStyle(view: TWidget, value: ReadableMap?) { view.reactWidgetPlayerStyleMap = value } //---------- Props for Story widget ----------// @Keep @ReactProp(name = "blazeStoryPlayerStyle") fun setBlazeStoryPlayerStyle(view: TWidget, value: ReadableMap?) { view.reactWidgetPlayerStyleMap = value } }