package com.blaze.rtnblazesdk.videos import android.content.Context import android.util.AttributeSet import com.blaze.blazesdk.data_source.BlazeDataSourceType import com.blaze.blazesdk.features.videos.widgets.grid.BlazeVideosWidgetGridView import com.blaze.blazesdk.style.widgets.BlazeWidgetItemCustomMapping import com.blaze.blazesdk.style.widgets.BlazeWidgetItemStyleOverrides import com.blaze.blazesdk.style.widgets.BlazeWidgetLayout import com.blaze.rtnblazesdk.base.BaseWidgetView import com.blaze.rtnblazesdk.utils.asWidgetLayoutPreset import com.blaze.rtnblazesdk.utils.extractVideosPlaybackConfiguration import com.blaze.rtnblazesdk.utils.extractVideosPlayerStyle import com.facebook.react.bridge.ReadableMap class BlazeVideosGridView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : BaseWidgetView(context, attrs, defStyleAttr) { private fun getWidget(): BlazeVideosWidgetGridView? = (widgetView as? BlazeVideosWidgetGridView) override fun createNewWidgetView(): BlazeVideosWidgetGridView { return BlazeVideosWidgetGridView(context, null, 0, 0) } override fun callInitWidget(dataSource: BlazeDataSourceType) { val widget = getWidget() ?: return val widgetLayout = parseWidgetLayout( presetStyle = presetWidgetLayoutString, reactWidgetLayout = reactWidgetLayoutStyleMap, ).also { nativeWidgetLayout = it } val perItemStylesOverridesMap = applyWidgetItemStyleOverrides( reactPerItemStyleOverrides = perItemStyleOverridesReadableMap, widgetLayout = widgetLayout, context = context ) val customizePlayerStyle = reactWidgetPlayerStyleMap.extractVideosPlayerStyle(context) val customizePlaybackConfiguration = reactWidgetPlaybackConfigurationMap.extractVideosPlaybackConfiguration() val widgetId = "Videos-Grid: $id" widget.initWidget( widgetLayout = widgetLayout, playerStyle = customizePlayerStyle, dataSource = dataSource, cachingLevel = cachingLevel, widgetId = widgetId, widgetDelegate = widgetDelegate, shouldOrderWidgetByReadStatus = shouldOrderWidgetByReadStatus, playbackConfiguration = customizePlaybackConfiguration, perItemStyleOverrides = perItemStylesOverridesMap ?: emptyMap() ) widget.updateWidgetLayout(widgetLayout) } override fun reloadData(isSilentRefresh: Boolean) { getWidget()?.reloadData(isSilentRefresh) } override fun updateWidgetDataSource(sourceType: BlazeDataSourceType, isSilentRefresh: Boolean) { getWidget()?.updateDataSource( dataSourceType = sourceType, isSilentRefresh = isSilentRefresh ) } override fun updateOverrideStyles( perItemStyleOverrides: Map, shouldUpdateUi: Boolean ) { getWidget()?.updateOverrideStyles( perItemStyleOverrides = perItemStyleOverrides, shouldUpdateUi = shouldUpdateUi ) } override fun updateWidgetsUi() { getWidget()?.updateWidgetsUi() } override fun play() { getWidget()?.play() } private fun parseWidgetLayout(presetStyle: String?, reactWidgetLayout: ReadableMap?): BlazeWidgetLayout { val widgetLayout = presetStyle?.asWidgetLayoutPreset() ?: BlazeWidgetLayout.Presets.VideosWidget.Grid.twoColumnsHorizontalRectangles // Default val customizedWidgetLayout = applyWidgetLayoutCustomization( reactWidgetLayout = reactWidgetLayout, widgetLayout = widgetLayout, context = context ) return customizedWidgetLayout } }