@ -165,9 +165,8 @@ class AdVM extends BaseVM {
notifyListeners ( ) ;
}
List < EnumsModel > exploreAdsEnums = [ ] ;
List < EnumsModel > myAdsEnums = [ ] ;
List < EnumsModel > myAdsStatusEnums = [ ] ;
List < VehicleBrandsModel > vehicleBrandsForFilters = [ ] ;
List < FilterListModel > exploreAdsFilterOptions = [ ] ;
List < FilterListModel > myAdsFilterOptions = [ ] ;
@ -177,45 +176,49 @@ class AdVM extends BaseVM {
return ;
}
if ( myAds Enums. isEmpty ) {
myAds Enums = await commonRepo . getEnumTypeValues ( enumTypeID: AppEnums . myAdsFilterEnumId ) ;
if ( myAds Status Enums. isEmpty ) {
myAds Status Enums = await commonRepo . getEnumTypeValues ( enumTypeID: AppEnums . myAdsFilterEnumId ) ;
}
if ( exploreAdsEnum s. isEmpty ) {
exploreAdsEnums = await commonRepo . getEnumTypeValues ( enumTypeID: AppEnums . exploreAdsFilterEnumId ) ;
if ( vehicleBrandsForFilter s. isEmpty ) {
vehicleBrandsForFilters = await commonRepo . getVehicleBrands ( vehicleTypeId: - 1 ) ; / / to get all the brands
}
exploreAdsFilterOptions . clear ( ) ;
myAdsFilterOptions . clear ( ) ;
for ( int i = 0 ; i < myAds Enums. length ; i + + ) {
myAdsFilterOptions . add ( FilterListModel ( title: myAds Enums[ i ] . enumValueStr , isSelected: false , id: myAd sEnums[ i ] . enumValue ) ) ;
for ( int i = 0 ; i < myAds Status Enums. length ; i + + ) {
myAdsFilterOptions . add ( FilterListModel ( title: myAds Status Enums[ i ] . enumValueStr , isSelected: false , id: myAd sStatu sEnums[ i ] . enumValue ) ) ;
}
myAdsFilterOptions . insert ( 0 , FilterListModel ( title: " All Ads " , isSelected: true , id: 0 ) ) ;
log ( " myAdsFilterOptions: ${ myAdsFilterOptions . last . id } " ) ;
for ( int i = 0 ; i < exploreAdsEnums . length ; i + + ) {
exploreAdsFilterOptions . add ( FilterListModel ( title: " ${ exploreAdsEnums [ i ] . enumValueStr } Ads " , isSelected: false , id: exploreAdsEnums [ i ] . enumValue ) ) ;
for ( int i = 0 ; i < vehicleBrandsForFilters . length ; i + + ) {
exploreAdsFilterOptions . add ( FilterListModel (
id: vehicleBrandsForFilters [ i ] . id ! ,
title: " ${ vehicleBrandsForFilters [ i ] . vehicleBrandDescription } " ,
iconUrl: " " ,
isSelected: false ,
) ) ;
}
exploreAdsFilterOptions . insert ( 0 , FilterListModel ( title: " All Ads " , isSelected: true , id: 0 ) ) ;
notifyListeners ( ) ;
}
applyFilterOnExploreAds ( { required CreatedByRoleEnum createdByRoleFilter } ) async {
applyFilterOnExploreAds ( { required int vehicleBrandId } ) async {
pageIndexForExploreAds = 1 ;
hasMoreDataForExploreAds = true ;
if ( exploreAdsFilterOptions . isEmpty ) return ;
int index = exploreAdsFilterOptions . indexWhere ( ( element ) = > element . id . toCreatedByRoleEnum ( ) = = createdByRoleFilter ) ;
int index = exploreAdsFilterOptions . indexWhere ( ( element ) = > element . id = = vehicleBrandId ) ;
for ( var value in exploreAdsFilterOptions ) {
value . isSelected = false ;
}
exploreAdsFilterOptions [ index ] . isSelected = true ;
if ( createdByRoleFilter = = CreatedByRoleEnum . allAds ) {
if ( vehicleBrandId = = 0 ) {
/ / all ads
getExploreAds ( ) ;
return ;
}
setState ( ViewState . busy ) ;
exploreAdsFilteredList = await getAdsByFilter ( createdByRoleEnum: createdByRoleFilter , isMyAds: false ) ;
exploreAdsFilteredList = await getAdsByFilter ( vehicleBrandId: vehicleBrandId , isMyAds: false ) ;
setState ( ViewState . idle ) ;
notifyListeners ( ) ;
@ -233,7 +236,7 @@ class AdVM extends BaseVM {
hasMoreDataForExploreAds = true ;
notifyListeners ( ) ;
try {
final List < AdDetailsModel > newAds = await adsRepo. getExplore AdsBasedOnFilters( page : pageIndexForExploreAds ) ;
final List < AdDetailsModel > newAds = await getAdsBasedOnFilters( page Index : pageIndexForExploreAds , isFromLazyLoad: true ) ;
if ( newAds . isEmpty ) {
hasMoreDataForExploreAds = false ;
} else {
@ -279,8 +282,8 @@ class AdVM extends BaseVM {
notifyListeners ( ) ;
}
Future < List < AdDetailsModel > > getAdsByFilter ( { AdPostStatus ? adPostStatus , required bool isMyAds , CreatedByRoleEnum ? createdByRoleEnum }) async {
return await adsRepo . getAllAds ( isMyAds: isMyAds , adPostStatus: adPostStatus , createdByRoleEnum: createdByRoleEnum );
Future < List < AdDetailsModel > > getAdsByFilter ( { AdPostStatus ? adPostStatus , required bool isMyAds , CreatedByRoleEnum ? createdByRoleEnum , int ? vehicleBrandId }) async {
return await adsRepo . getAllAds ( isMyAds: isMyAds , adPostStatus: adPostStatus , createdByRoleEnum: createdByRoleEnum , vehicleBrandId: vehicleBrandId );
}
applyFilterOnMyAds ( { required AdPostStatus adPostStatusEnum } ) async {
@ -1655,6 +1658,7 @@ class AdVM extends BaseVM {
/ / * * * * * * * * * * * * ADS SEARCH VIEW * * * * * * * * * * * * * * * *
List < EnumsModel > vehicleConditionsEnum = [ ] ;
List < EnumsModel > adOwnerEnumsFilter = [ ] ;
Future < void > populateDataForAdFilter ( ) async {
setState ( ViewState . busy ) ;
@ -1664,16 +1668,22 @@ class AdVM extends BaseVM {
hasMoreDataForMyAds = true ;
isLoadingMore = false ;
if ( adOwnerEnumsFilter . isEmpty ) {
adOwnerEnumsFilter = await commonRepo . getEnumTypeValues ( enumTypeID: AppEnums . adOwnersFilterEnumId ) ;
}
if ( vehicleConditionsEnum . isEmpty ) {
vehicleConditionsEnum = await commonRepo . getEnumTypeValues ( enumTypeID: AppEnums . conditionEnumId ) ;
}
if ( vehicleBrands . isEmpty ) {
vehicleBrands = await commonRepo . getVehicleBrands ( vehicleTypeId: - 1 ) ;
if ( vehicleBrands ForFilters . isEmpty ) {
vehicleBrands ForFilters = await commonRepo . getVehicleBrands ( vehicleTypeId: - 1 ) ; / / to get all the brands
}
if ( vehicleModelYears . isEmpty ) {
vehicleModelYears = await commonRepo . getVehicleModelYears ( vehicleTypeId: - 1 ) ;
}
vehicleCities = await commonRepo . getVehicleCities ( countryId: - 1 ) ; / / fetch all the cities
setState ( ViewState . idle ) ;
}
@ -1742,9 +1752,9 @@ class AdVM extends BaseVM {
SelectionModel vehicleOwnerId = SelectionModel ( selectedOption: " " , selectedId: - 1 , errorValue: " " ) ;
void updateSelectionVehicleAdOwnerId ( SelectionModel id , { bool isForSearch = false } ) {
void updateSelectionVehicleAdOwnerId ( SelectionModel id , { bool showSelectionInDropdown = true , bool isForSearch = false } ) {
if ( isForSearch ) {
EnumsModel owner = explo reAds Enums. firstWhere ( ( element ) = > element . enumValue = = id . selectedId ) ;
EnumsModel owner = adOwn erEnumsFilter . firstWhere ( ( element ) = > element . enumValue = = id . selectedId ) ;
DropValue ownerValue = DropValue ( owner . enumValue , " ${ owner . enumValueStr } Ads " , " " ) ;
if ( ! ifAlreadyExist ( list: vehicleAdOwnerSearchHistory , value: ownerValue ) ) {
addToVehicleAdOwnerSearchHistory ( value: ownerValue ) ;
@ -1752,7 +1762,9 @@ class AdVM extends BaseVM {
notifyListeners ( ) ;
return ;
}
vehicleOwnerId = id ;
if ( showSelectionInDropdown ) {
vehicleOwnerId = id ;
}
notifyListeners ( ) ;
}
@ -1883,9 +1895,14 @@ class AdVM extends BaseVM {
vehicleOwnerId = SelectionModel ( selectedOption: " " , selectedId: - 1 , errorValue: " " ) ;
}
Future < void > getAdsBasedOnFilters ( ) async {
exploreAdsFilteredList . clear ( ) ;
setState ( ViewState . busy ) ;
Future < List < AdDetailsModel > > getAdsBasedOnFilters ( {
required int pageIndex ,
required bool isFromLazyLoad ,
} ) async {
if ( ! isFromLazyLoad ) {
exploreAdsFilteredList . clear ( ) ;
setState ( ViewState . busy ) ;
}
List < String > cityIdsList = [ ] ;
if ( vehicleLocationAdSearchHistory . isNotEmpty ) {
for ( var element in vehicleLocationAdSearchHistory ) {
@ -1927,15 +1944,25 @@ class AdVM extends BaseVM {
}
}
exploreAdsFilteredList = await adsRepo . getExploreAdsBasedOnFilters (
cityIdsList: cityIdsList ,
createdByRolesIdsList: adOwnerIdsList ,
vehicleBrandIdsList: brandsIdsList ,
vehicleModelYearIdsList: vehicleYearIdsList ,
vehicleAdConditionIdsList: conditionsIdsList ,
vehicleAdCreatedDateList: createdDatesList ,
page: pageIndexForExploreAds ) ;
setState ( ViewState . idle ) ;
List < AdDetailsModel > list = await adsRepo . getExploreAdsBasedOnFilters (
cityIdsList: cityIdsList ,
createdByRolesIdsList: adOwnerIdsList ,
vehicleBrandIdsList: brandsIdsList ,
vehicleModelYearIdsList: vehicleYearIdsList ,
vehicleAdConditionIdsList: conditionsIdsList ,
vehicleAdCreatedDateList: createdDatesList ,
page: pageIndex ,
) ;
if ( ! isFromLazyLoad ) {
exploreAdsFilteredList . clear ( ) ;
exploreAdsFilteredList = list ;
setState ( ViewState . idle ) ;
} else {
return list ;
}
return [ ] ;
}
void onEditUpdateAdPressed ( { required BuildContext context , required AdDetailsModel previousDetails , required bool isFromExtendAd } ) {