diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index c3d5b0fe..0e6926ff 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -817,5 +817,6 @@ abstract class LocaleKeys { static const favoriteError = 'favoriteError'; static const locationServicesRequiredForNearestOffers = 'locationServicesRequiredForNearestOffers'; static const locationPermissionRequiredForNearestOffers = 'locationPermissionRequiredForNearestOffers'; + static const favoriteMerchant = 'favoriteMerchant'; } diff --git a/lib/ui/landing/dashboard_screen_for_dependet.dart b/lib/ui/landing/dashboard_screen_for_dependet.dart index 42d371d6..c35b96d0 100644 --- a/lib/ui/landing/dashboard_screen_for_dependet.dart +++ b/lib/ui/landing/dashboard_screen_for_dependet.dart @@ -310,12 +310,11 @@ class _DashboardScreenForDependetState extends State }); try { - String catParam = (targetCategoryId == "all" || targetCategoryId == "0") ? "" : targetCategoryId; - String? offerTypeParam = OffersAndDiscountsApiClient.mapOfferTypeFilter(selectedTypeFilter); + String catParam = (isFavoriteOnly || targetCategoryId == "all" || targetCategoryId == "0") ? "" : targetCategoryId; + String? offerTypeParam = isFavoriteOnly ? null : OffersAndDiscountsApiClient.mapOfferTypeFilter(selectedTypeFilter); String? queryParam = searchQuery.trim().isNotEmpty ? searchQuery.trim() : null; - int? radiusParam = _radiusFromFilterDistance(_filterDistance); - int? minDiscountParam = _filterMinDiscount == 'any' ? null : int.tryParse(_filterMinDiscount); - print("Fetching WalaPlus retailers: category='$catParam', offerType='$offerTypeParam', query='$queryParam', sortBy='$_filterSortBy', radius=$radiusParam, minDiscount=$minDiscountParam, page=1, per_page=$pageSize"); + int? radiusParam = isFavoriteOnly ? null : _radiusFromFilterDistance(_filterDistance); + int? minDiscountParam = (isFavoriteOnly || _filterMinDiscount == 'any') ? null : int.tryParse(_filterMinDiscount); String? userRef = isFavoriteOnly ? _getUserReferenceForFavorites() : null; print("Fetching WalaPlus retailers: category='$catParam', offerType='$offerTypeParam', query='$queryParam', userReference='$userRef', page=1, per_page=$pageSize"); WalaPlusRetailersResponse? response = await OffersAndDiscountsApiClient().getWalaPlusRetailers( @@ -324,10 +323,10 @@ class _DashboardScreenForDependetState extends State perPage: pageSize, offerType: offerTypeParam, query: queryParam, - sortBy: _filterSortBy, + sortBy: isFavoriteOnly ? null : _filterSortBy, radius: radiusParam, minDiscount: minDiscountParam, - context: wantsNearest ? context : null, + context: (!isFavoriteOnly && wantsNearest) ? context : null, userReference: userRef, ); @@ -369,14 +368,14 @@ class _DashboardScreenForDependetState extends State try { int nextPage = currentPage + 1; - String catParam = (currentCategoryId == "all" || currentCategoryId == "0") ? "" : currentCategoryId; - String? offerTypeParam = OffersAndDiscountsApiClient.mapOfferTypeFilter(selectedTypeFilter); + String catParam = (isFavoriteOnly || currentCategoryId == "all" || currentCategoryId == "0") ? "" : currentCategoryId; + String? offerTypeParam = isFavoriteOnly ? null : OffersAndDiscountsApiClient.mapOfferTypeFilter(selectedTypeFilter); String? queryParam = searchQuery.trim().isNotEmpty ? searchQuery.trim() : null; String? userRef = isFavoriteOnly ? _getUserReferenceForFavorites() : null; - int? radiusParam = _radiusFromFilterDistance(_filterDistance); - int? minDiscountParam = _filterMinDiscount == 'any' ? null : int.tryParse(_filterMinDiscount); + int? radiusParam = isFavoriteOnly ? null : _radiusFromFilterDistance(_filterDistance); + int? minDiscountParam = (isFavoriteOnly || _filterMinDiscount == 'any') ? null : int.tryParse(_filterMinDiscount); - print("Fetching WalaPlus retailers next page: $nextPage of $totalPages, category: '$catParam', offerType: '$offerTypeParam', query: '$queryParam'"); + print("Fetching WalaPlus retailers next page: $nextPage of $totalPages, category: '$catParam', offerType: '$offerTypeParam', query: '$queryParam', userReference='$userRef'"); WalaPlusRetailersResponse? response = await OffersAndDiscountsApiClient().getWalaPlusRetailers( categoryId: catParam, @@ -384,10 +383,10 @@ class _DashboardScreenForDependetState extends State perPage: pageSize, offerType: offerTypeParam, query: queryParam, - sortBy: _filterSortBy, + sortBy: isFavoriteOnly ? null : _filterSortBy, radius: radiusParam, minDiscount: minDiscountParam, - context: wantsNearest ? context : null, + context: (!isFavoriteOnly && wantsNearest) ? context : null, userReference: userRef, ); @@ -689,7 +688,7 @@ class _DashboardScreenForDependetState extends State setState(() { isFavoriteOnly = !isFavoriteOnly; }); - fetchOffers(categoryId: currentCategoryId.isEmpty ? "all" : currentCategoryId); + fetchOffers(categoryId: isFavoriteOnly ? "" : (currentCategoryId.isEmpty ? "all" : currentCategoryId)); }, child: Padding( padding: const EdgeInsets.all(3), @@ -740,16 +739,23 @@ class _DashboardScreenForDependetState extends State // Search Input Card _buildSearchBar(isAr), - // "Browse Categories" Header - _buildBrowseCategoriesHeader(isAr), + if (isFavoriteOnly) ...[ + Padding( + padding: const EdgeInsets.only(top: 22, bottom: 14), + child: LocaleKeys.favoriteMerchant.tr().toText18(weight: FontWeight.w600, color: const Color(0xFF1E293B)), + ), + ] else ...[ + // "Browse Categories" Header + _buildBrowseCategoriesHeader(isAr), - // Categories Section - if (categoriesList.isNotEmpty) _buildCategoriesList(isAr) else _buildCategoriesShimmer(), + // Categories Section + if (categoriesList.isNotEmpty) _buildCategoriesList(isAr) else _buildCategoriesShimmer(), - // Type Filter Chips (All, In Store, Online) - _buildFiltersRow(isAr), + // Type Filter Chips (All, In Store, Online) + _buildFiltersRow(isAr), - const SizedBox(height: 16), + const SizedBox(height: 16), + ], // Offers Grid if (isLoading) @@ -1326,7 +1332,6 @@ class _DashboardScreenForDependetState extends State // type can be a comma-separated combo (e.g. "online,instore") - normalizedTypes already // splits that into its distinct parts, so a retailer offering both ways gets a chip each. List offerTypes = item.normalizedTypes; - String validityText = item.getDisplayValidity(); String usageText = ""; if (item.displayUsage.isNotEmpty) { usageText = item.displayUsage.replaceAll('usage:', LocaleKeys.usageLabel.tr()).replaceAll('Usage :', LocaleKeys.usageLabel.tr());