package com.blaze.rtnblazesdk.moments import android.content.Context import android.util.AttributeSet import com.blaze.blazesdk.data_source.BlazeDataSourceType import com.blaze.blazesdk.features.moments.widgets.row.BlazeMomentsWidgetRowView import com.blaze.blazesdk.prefetch.models.BlazeCachingLevel 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.extractMomentsPlayerStyle import com.facebook.react.bridge.ReadableMap class BlazeMomentsRowView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : BaseWidgetView(context, attrs, defStyleAttr) { private fun getWidget(): BlazeMomentsWidgetRowView? = (widgetView as? BlazeMomentsWidgetRowView) 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() } override fun createNewWidgetView(): BlazeMomentsWidgetRowView { return BlazeMomentsWidgetRowView(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 customizeMomentsPlayerStyle = reactWidgetPlayerStyleMap.extractMomentsPlayerStyle(context) val widgetId = "Moments-Row: $id" widget.initWidget( widgetLayout = widgetLayout, playerStyle = customizeMomentsPlayerStyle, dataSource = dataSource, shouldOrderWidgetByReadStatus = shouldOrderWidgetByReadStatus, cachingLevel = cachingLevel, widgetId = widgetId, widgetDelegate = widgetDelegate, perItemStyleOverrides = perItemStylesOverridesMap ?: emptyMap() ) widget.updateWidgetLayout(widgetLayout) } private fun parseWidgetLayout(presetStyle: String?, reactWidgetLayout: ReadableMap?): BlazeWidgetLayout { val widgetLayout = when (presetStyle) { "widgetRectangle" -> BlazeWidgetLayout.Presets.MomentsWidget.Row.verticalRectangles else -> BlazeWidgetLayout.Presets.MomentsWidget.Row.verticalRectangles // As of now this is the fallback } val customizedWidgetLayout = applyWidgetLayoutCustomization( reactWidgetLayout = reactWidgetLayout, widgetLayout = widgetLayout, context = context ) return customizedWidgetLayout } }