NTP-38165 | Quick filter functionality for fund listing v4 (#15286)
This commit is contained in:
@@ -334,16 +334,26 @@ class FundListingFragmentV2 : AmcBaseFragment(), WidgetCallback {
|
||||
)
|
||||
}
|
||||
if (selectedItems.isNotNullAndNotEmpty()) {
|
||||
selectedItems?.let { addFilterDataChips(it, isQuickFilter = false) }
|
||||
if (viewModel.isEligibleForThemeChange == true) {
|
||||
binding.filter.filterTitle.visibility = View.GONE
|
||||
if (viewModel.isQuickFilterEnabled) {
|
||||
viewModel.quickFilters?.let {
|
||||
binding.filter.quickFilterTitle.setSpannableString(it.title)
|
||||
it.suggestedItems?.let { it1 ->
|
||||
addQuickFilterChips(it1, isQuickFilter = true)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
selectedItems?.let { addFilterDataChips(it, isQuickFilter = false) }
|
||||
binding.filter.quickFilterTitle.visibility = View.GONE
|
||||
}
|
||||
if (viewModel.isEligibleForThemeChange == true) {
|
||||
binding.filter.filterTitle.visibility = View.GONE
|
||||
}
|
||||
} else {
|
||||
viewModel.isQuickFilterEnabled = true
|
||||
viewModel.quickFilters?.let {
|
||||
binding.filter.quickFilterTitle.setSpannableString(it.title)
|
||||
it.suggestedItems?.let { quickFilters ->
|
||||
addFilterDataChips(quickFilters, isQuickFilter = true)
|
||||
addQuickFilterChips(quickFilters, isQuickFilter = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -439,6 +449,7 @@ class FundListingFragmentV2 : AmcBaseFragment(), WidgetCallback {
|
||||
),
|
||||
),
|
||||
key = it.value,
|
||||
isSelected = viewModel.isFilterAlreadyApplied(it.value),
|
||||
)
|
||||
}
|
||||
binding.filter.chips.apply {
|
||||
@@ -455,6 +466,63 @@ class FundListingFragmentV2 : AmcBaseFragment(), WidgetCallback {
|
||||
if (viewModel.isEligibleForThemeChange != true) list.isNotEmpty() else false
|
||||
}
|
||||
|
||||
private fun addQuickFilterChips(
|
||||
quickFilterList: List<Identifier>,
|
||||
isQuickFilter: Boolean = false,
|
||||
) {
|
||||
val chipUiData =
|
||||
quickFilterList.map {
|
||||
ChipData(
|
||||
borderColor = PURPLE,
|
||||
title =
|
||||
TextWithStyle(
|
||||
text = it.value,
|
||||
style =
|
||||
listOf(
|
||||
NaviSpan(
|
||||
fontSize = 14.0,
|
||||
fontName = FontWeightEnum.NAVI_HEADLINE_REGULAR.name,
|
||||
spanColor = PURPLE,
|
||||
)
|
||||
),
|
||||
),
|
||||
key = it.value,
|
||||
isSelected = viewModel.isFilterAlreadyApplied(it.value),
|
||||
)
|
||||
}
|
||||
binding.filter.chips.apply {
|
||||
visibility = View.VISIBLE
|
||||
setProperties(
|
||||
chipUiData,
|
||||
{ key ->
|
||||
if (viewModel.isFilterAlreadyApplied(key)) {
|
||||
sendEvent(
|
||||
AmcAnalytics.AMC_QUICK_FILTER_TAG_TAGGED,
|
||||
hashMapOf(
|
||||
Pair(AmcAnalytics.SCREEN_NAME, screenName),
|
||||
Pair(AmcAnalytics.TYPE, "remove"),
|
||||
Pair(FUND_CATEGORY, key),
|
||||
),
|
||||
)
|
||||
removeFilterDataKey(key)
|
||||
} else {
|
||||
sendEvent(
|
||||
AmcAnalytics.AMC_QUICK_FILTER_TAG_TAGGED,
|
||||
hashMapOf(
|
||||
Pair(AmcAnalytics.SCREEN_NAME, screenName),
|
||||
Pair(AmcAnalytics.TYPE, "add"),
|
||||
Pair(FUND_CATEGORY, key),
|
||||
),
|
||||
)
|
||||
addFilterDataKey(key)
|
||||
}
|
||||
},
|
||||
isQuickFilter,
|
||||
)
|
||||
}
|
||||
quickFilterList.let {}
|
||||
}
|
||||
|
||||
private fun removeFilterDataKey(key: String) {
|
||||
viewModel.removeFilterKey(key)
|
||||
}
|
||||
@@ -537,6 +605,10 @@ class FundListingFragmentV2 : AmcBaseFragment(), WidgetCallback {
|
||||
strokeWidth = dpToPxInInt(1),
|
||||
)
|
||||
} else {
|
||||
sendEvent(
|
||||
AmcAnalytics.AMC_FUND_SEARCH_CLICKED,
|
||||
hashMapOf(Pair(AmcAnalytics.SCREEN_NAME, screenName)),
|
||||
)
|
||||
binding.filter.searchField.background =
|
||||
getNaviDrawable(
|
||||
backgroundColor = WHITE.parseColorSafe(),
|
||||
@@ -648,6 +720,7 @@ class FundListingFragmentV2 : AmcBaseFragment(), WidgetCallback {
|
||||
}
|
||||
|
||||
private fun setFilterItemList(list: List<Identifier>) {
|
||||
viewModel.isQuickFilterEnabled = false
|
||||
viewModel.setSelectedFilterItems(list, screenName)
|
||||
}
|
||||
|
||||
|
||||
@@ -14,4 +14,5 @@ data class ChipData(
|
||||
@SerializedName("title") val title: TextWithStyle? = null,
|
||||
@SerializedName("borderColor") val borderColor: String? = null,
|
||||
@SerializedName("key") val key: String? = null,
|
||||
@SerializedName("isSelected") var isSelected: Boolean = true,
|
||||
)
|
||||
|
||||
@@ -93,6 +93,7 @@ class FundListViewModel @Inject constructor(private val repository: FundListRepo
|
||||
|
||||
private var faqListItems: List<FaqItemData>? = null
|
||||
var quickFilters: FilterItems? = null
|
||||
var isQuickFilterEnabled: Boolean = true
|
||||
|
||||
fun fetchFundsData(fundCategory: String?, screenName: String) {
|
||||
viewModelScope.launch {
|
||||
@@ -441,6 +442,7 @@ class FundListViewModel @Inject constructor(private val repository: FundListRepo
|
||||
response.errors.isNullOrEmpty() &&
|
||||
response.data.isNotNull()
|
||||
) {
|
||||
fundCategory?.let { isQuickFilterEnabled = false }
|
||||
_fundListDataV3.value = response.data
|
||||
} else {
|
||||
setErrorData(response.errors, response.error)
|
||||
@@ -601,4 +603,8 @@ class FundListViewModel @Inject constructor(private val repository: FundListRepo
|
||||
)
|
||||
return null
|
||||
}
|
||||
|
||||
fun isFilterAlreadyApplied(key: String?): Boolean {
|
||||
return selectedFilterItems.value?.any { it.value == key }.orFalse()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,13 +52,13 @@ class HorizontalChipGroupView(context: Context, attributeSet: AttributeSet? = nu
|
||||
DataBindingUtil.inflate(inflater, R.layout.chip_view, binding.group, false)
|
||||
childBinding.apply {
|
||||
title.setSpannableString(data.title)
|
||||
if (!isQuickFilter) {
|
||||
if (data.isSelected) {
|
||||
icon.setColorFilter(data.borderColor.parseColorSafe())
|
||||
} else {
|
||||
icon.visibility = View.GONE
|
||||
}
|
||||
root.background =
|
||||
if (isQuickFilter)
|
||||
if (!data.isSelected)
|
||||
getNaviDrawable(
|
||||
cornerRadius = resources.getDimension(DesignR.dimen.dp_4).toInt(),
|
||||
backgroundColor = WHITE.parseColorSafe(),
|
||||
|
||||
@@ -278,6 +278,9 @@ object AmcAnalytics {
|
||||
const val AMC_TARGET_SETUP_CTA_CLICK = "amc_target_setup_cta_click"
|
||||
const val AMC_TARGET_SETUP_BOTTOMSHEET_CTA_CLICK = "amc_target_setup_bottom_sheet_cta_click"
|
||||
|
||||
const val AMC_FUND_SEARCH_CLICKED = "amc_fund_search_clicked"
|
||||
const val AMC_QUICK_FILTER_TAG_TAGGED = "amc_quick_filter_tag_tagged"
|
||||
|
||||
fun sendEvent(
|
||||
eventsData: GenericAnalyticsData?,
|
||||
extraAttributes: HashMap<String, String>? = null,
|
||||
|
||||
Reference in New Issue
Block a user