Skip to content

Commit

Permalink
feat(filters): Added job offer list filter modal
Browse files Browse the repository at this point in the history
  • Loading branch information
DCampagnola committed May 1, 2023
1 parent afd46b6 commit 56bced5
Show file tree
Hide file tree
Showing 12 changed files with 54 additions and 105 deletions.
6 changes: 3 additions & 3 deletions ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
{
"images" : [
{
"filename" : "LaunchImage.png",
"filename" : "iPhone 1x.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "LaunchImage 1.png",
"filename" : "iPhone 2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "LaunchImage 3x.png",
"filename" : "iPhone 3x.png",
"idiom" : "universal",
"scale" : "3x"
}
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
105 changes: 40 additions & 65 deletions lib/job_offer_list/bloc/job_offer_list_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
[],
OpportunityType.jobOffer,
OpportunityFilter(),
OpportunityFilter(),
),
) {
on<JobOfferListChange>(_handleJobOfferListChange);
Expand Down Expand Up @@ -69,12 +70,8 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
Emitter<JobOfferListState> emit,
) {
emit(
JobOfferListFilled(
state.jobOfferList,
event.freelanceList,
state.selectedType,
state.filter,
),
JobOfferListFilled(state.jobOfferList, event.freelanceList,
state.selectedType, state.filter, state.filterToApply),
);
}

Expand All @@ -87,6 +84,7 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
state.freelanceList,
state.selectedType,
state.filter,
state.filterToApply,
));
}

Expand All @@ -102,6 +100,7 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
? OpportunityType.freelanceProject
: OpportunityType.jobOffer,
state.filter,
state.filterToApply,
),
);
}
Expand All @@ -112,11 +111,11 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
) {
emit(
JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter.copyWith(title: event.searchText),
),
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter.copyWith(title: event.searchText),
state.filterToApply),
);
}

Expand All @@ -137,24 +136,8 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
OpportunityFilterTap event,
Emitter<JobOfferListState> emit,
) async {
emit(
state is JobOfferListFilled
? OpportunityFilterEditing(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
filterToApply: state.filter,
)
: state is OpportunityFilterEditing
? JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
)
: state,
);
emit(JobOfferListFilled(state.jobOfferList, state.freelanceList,
state.selectedType, state.filter, state.filterToApply));
await _openFilterDialogCallback(
this,
);
Expand All @@ -164,67 +147,58 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
CancelFilterTap event,
Emitter<JobOfferListState> emit,
) {
emit(
state is OpportunityFilterEditing
? JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
)
: state,
);
emit(JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
const OpportunityFilter(),
));
}

void _handleApplyFilterTap(
ApplyFilterTap event,
Emitter<JobOfferListState> emit,
) {
emit(
state is OpportunityFilterEditing
? JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
(state as OpportunityFilterEditing).filterToApply,
)
: state,
);
emit(JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filterToApply,
state.filterToApply,
));
}

void _handleFilterTap(
FilterTap event,
Emitter<JobOfferListState> emit,
) {
emit(
state is OpportunityFilterEditing
? OpportunityFilterEditing(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
filterToApply: (state as OpportunityFilterEditing)
.filterToApply
.toggleFilter(
event.filter,
),
)
: state,
JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter,
state.filterToApply.toggleFilter(
event.filter,
),
),
);
}

void _handleFilterChipTap(
FilterChipTap event,
Emitter<JobOfferListState> emit,
) {
final newFilter = state.filter.copyWith(
filters: state.filter.filters.where((f) => f != event.filter).toList());
emit(
JobOfferListFilled(
state.jobOfferList,
state.freelanceList,
state.selectedType,
state.filter.copyWith(
filters:
state.filter.filters.where((f) => f != event.filter).toList()),
newFilter,
newFilter,
),
);
}
Expand All @@ -239,6 +213,7 @@ class JobOfferListBloc extends Bloc<JobOfferListEvent, JobOfferListState> {
state.freelanceList,
state.selectedType,
const OpportunityFilter(),
const OpportunityFilter(),
),
);
}
Expand Down
24 changes: 7 additions & 17 deletions lib/job_offer_list/bloc/job_offer_list_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ enum Filter {

class OpportunityFilter extends Equatable {
const OpportunityFilter({this.title, this.filters = const []});

final String? title;
final List<Filter> filters;

Expand Down Expand Up @@ -45,11 +46,14 @@ abstract class JobOfferListState extends Equatable {
this.freelanceList,
this.selectedType,
this.filter,
this.filterToApply,
);

final List<JobOffer> jobOfferList;
final List<Freelance> freelanceList;
final OpportunityType selectedType;
final OpportunityFilter filter;
final OpportunityFilter filterToApply;

List<Opportunity> get filteredOpportunities {
final opportunities = selectedType == OpportunityType.jobOffer
Expand All @@ -72,7 +76,7 @@ abstract class JobOfferListState extends Equatable {

@override
List<Object?> get props =>
[jobOfferList, freelanceList, selectedType, filter];
[jobOfferList, freelanceList, selectedType, filter, filterToApply];
}

class JobOfferListInitial extends JobOfferListState {
Expand All @@ -81,6 +85,7 @@ class JobOfferListInitial extends JobOfferListState {
super.freelanceList,
super.selectedType,
super.filter,
super.filterToApply,
);
}

Expand All @@ -90,21 +95,6 @@ class JobOfferListFilled extends JobOfferListState {
super.freelanceList,
super.selectedType,
super.filter,
super.filterToApply,
);
}

class OpportunityFilterEditing extends JobOfferListState {
const OpportunityFilterEditing(
super.jobOfferList,
super.freelanceList,
super.selectedType,
super.searchText, {
required this.filterToApply,
});

final OpportunityFilter filterToApply;

@override
List<Object> get props =>
[jobOfferList, freelanceList, selectedType, filter, filterToApply];
}
8 changes: 0 additions & 8 deletions lib/job_offer_list/dialog/job_offer_list_filter_dialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,6 @@ class JobOfferListFilterDialog extends StatelessWidget {
Widget build(BuildContext context) {
return BlocBuilder<JobOfferListBloc, JobOfferListState>(
builder: (context, state) {
if (state is! OpportunityFilterEditing) {
return const ColoredBox(
color: AppColors.accentLight,
child: Center(
child: CircularProgressIndicator(),
),
);
}
return ColoredBox(
color: AppColors.accentLight,
child: Padding(
Expand Down
5 changes: 1 addition & 4 deletions lib/job_offer_list/widget/filters/dialog/FilterItem.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,7 @@ class FilterItem extends StatelessWidget {
width: 24,
height: 24,
child: Checkbox(
value: (state as OpportunityFilterEditing)
.filterToApply
.filters
.contains(_filter),
value: state.filterToApply.filters.contains(_filter),
onChanged: (_) => BlocProvider.of<JobOfferListBloc>(context)
.add(FilterTap(_filter)),
),
Expand Down
11 changes: 3 additions & 8 deletions lib/job_offer_list/widget/filters/filters.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,7 @@ class Filters extends StatelessWidget {
children: [
Container(
decoration: BoxDecoration(
color: state is OpportunityFilterEditing
? AppColors.sky
: AppColors.ultraLightGrey,
color: AppColors.ultraLightGrey,
borderRadius: BorderRadius.circular(16),
),
child: IconButton(
Expand All @@ -42,15 +40,12 @@ class Filters extends StatelessWidget {
.add(OpportunityFilterTap()),
icon: Icon(
PhosphorIcons.regular.slidersHorizontal,
color: state is OpportunityFilterEditing
? AppColors.white
: AppColors.black,
color: AppColors.black,
),
),
),
Visibility(
visible: state is! OpportunityFilterEditing &&
state.filter.filters.isNotEmpty,
visible: state.filter.filters.isNotEmpty,
child: Positioned(
right: 0,
top: 0,
Expand Down

0 comments on commit 56bced5

Please sign in to comment.