Skip to content

Commit 38e9cc7

Browse files
fix: handling correctly show all categories (#2335)
Co-authored-by: Dominik Toton <[email protected]>
1 parent b05a56c commit 38e9cc7

File tree

7 files changed

+41
-30
lines changed

7 files changed

+41
-30
lines changed

catalyst_voices/apps/voices/lib/pages/category/change_category_button.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:catalyst_voices/widgets/dropdown/category_dropdown.dart';
44
import 'package:catalyst_voices_assets/catalyst_voices_assets.dart';
55
import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart';
66
import 'package:catalyst_voices_localization/catalyst_voices_localization.dart';
7-
import 'package:catalyst_voices_models/catalyst_voices_models.dart';
87
import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'
98
hide PopupMenuItem;
109
import 'package:flutter/material.dart';
@@ -24,13 +23,13 @@ class _ChangeCategoryButtonState extends State<ChangeCategoryButton> {
2423
@override
2524
Widget build(BuildContext context) {
2625
return BlocSelector<CategoryDetailCubit, CategoryDetailState,
27-
List<DropdownMenuViewModel<SignedDocumentRef>>>(
26+
List<DropdownMenuViewModel<ProposalsCategoryFilter>>>(
2827
selector: (state) {
2928
final selectedCategory = state.category?.id ?? '';
3029
return state.categories
3130
.map(
3231
(e) => DropdownMenuViewModel(
33-
value: e.id,
32+
value: ProposalsRefCategoryFilter(ref: e.id),
3433
name: e.formattedName,
3534
isSelected: e.id == selectedCategory,
3635
),
@@ -69,11 +68,12 @@ class _ChangeCategoryButtonState extends State<ChangeCategoryButton> {
6968
);
7069
}
7170

72-
Future<void> _changeCategory(SignedDocumentRef? categoryId) async {
73-
if (categoryId == null) {
71+
Future<void> _changeCategory(ProposalsCategoryFilter value) async {
72+
final ref = value.ref;
73+
if (ref == null) {
7474
return;
7575
}
76-
await context.read<CategoryDetailCubit>().getCategoryDetail(categoryId);
76+
await context.read<CategoryDetailCubit>().getCategoryDetail(ref);
7777
}
7878

7979
void _handleClose() {

catalyst_voices/apps/voices/lib/pages/proposals/widgets/category_selector.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:catalyst_voices/widgets/dropdown/category_dropdown.dart';
33
import 'package:catalyst_voices_assets/catalyst_voices_assets.dart';
44
import 'package:catalyst_voices_blocs/catalyst_voices_blocs.dart';
55
import 'package:catalyst_voices_localization/catalyst_voices_localization.dart';
6-
import 'package:catalyst_voices_models/catalyst_voices_models.dart';
76
import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart';
87
import 'package:collection/collection.dart';
98
import 'package:flutter/material.dart';
@@ -46,15 +45,16 @@ class _CategorySelectorState extends State<_CategorySelector> {
4645
Widget build(BuildContext context) {
4746
return CategoryDropdown(
4847
items: [
49-
DropdownMenuViewModel.all(
50-
context.l10n,
48+
DropdownMenuViewModel(
49+
value: const ProposalsAnyCategoryFilter(),
50+
name: context.l10n.showAll,
5151
isSelected: widget.items.none((e) => e.isSelected),
5252
),
5353
...widget.items.map((item) => item.toDropdownItem()),
5454
],
5555
highlightColor: context.colors.onSurfacePrimary08,
5656
onSelected: (value) {
57-
context.read<ProposalsCubit>().changeSelectedCategory(value);
57+
context.read<ProposalsCubit>().changeSelectedCategory(value.ref);
5858
},
5959
popupMenuButtonKey: _popupMenuButtonKey,
6060
child: Container(
@@ -91,9 +91,9 @@ class _CategorySelectorState extends State<_CategorySelector> {
9191
}
9292

9393
extension on ProposalsCategorySelectorItem {
94-
DropdownMenuViewModel<SignedDocumentRef> toDropdownItem() {
94+
DropdownMenuViewModel<ProposalsCategoryFilter> toDropdownItem() {
9595
return DropdownMenuViewModel(
96-
value: ref,
96+
value: ProposalsRefCategoryFilter(ref: ref),
9797
name: name.trim().isNotEmpty ? name : '-TBD-',
9898
isSelected: isSelected,
9999
);

catalyst_voices/apps/voices/lib/widgets/dropdown/category_dropdown.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
import 'package:catalyst_voices_models/catalyst_voices_models.dart';
21
import 'package:catalyst_voices_view_models/catalyst_voices_view_models.dart'
32
hide PopupMenuItem;
43
import 'package:flutter/material.dart';
54

65
class CategoryDropdown extends StatelessWidget {
7-
final List<DropdownMenuViewModel<SignedDocumentRef>> items;
6+
final List<DropdownMenuViewModel<ProposalsCategoryFilter>> items;
87
final Color? highlightColor;
98
final Clip clipBehavior;
109
final GlobalKey<PopupMenuButtonState<dynamic>> popupMenuButtonKey;
11-
final ValueChanged<SignedDocumentRef?>? onSelected;
10+
final ValueChanged<ProposalsCategoryFilter>? onSelected;
1211
final VoidCallback? onCanceled;
1312
final VoidCallback? onOpened;
1413
final Offset offset;

catalyst_voices/apps/voices/test/widgets/dropdown/category_dropdown_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ void main() {
1010
final items = [
1111
const DropdownMenuViewModel(
1212
name: 'Item 1',
13-
value: SignedDocumentRef(id: 'value1'),
13+
value: ProposalsRefCategoryFilter(ref: SignedDocumentRef(id: 'value1')),
1414
isSelected: false,
1515
),
1616
const DropdownMenuViewModel(
1717
name: 'Item 2',
18-
value: SignedDocumentRef(id: 'value2'),
18+
value: ProposalsRefCategoryFilter(ref: SignedDocumentRef(id: 'value2')),
1919
isSelected: true,
2020
),
2121
];
@@ -34,7 +34,7 @@ void main() {
3434
popupMenuButtonKey: popupMenuButtonKey,
3535
highlightColor: Colors.blue,
3636
onSelected: (value) {
37-
selectedValue = value;
37+
selectedValue = value.ref;
3838
},
3939
child: const Text('Dropdown'),
4040
),

catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/catalyst_voices_view_models.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export 'proposal/proposal_view_model.dart';
3232
export 'proposal_builder/exception/proposal_builder_exception.dart';
3333
export 'proposal_comments/proposal_comments_segment.dart';
3434
export 'proposal_comments/proposal_comments_sort.dart';
35+
export 'proposals/proposals_category_filter.dart';
3536
export 'proposals/proposals_category_selector_item.dart';
3637
export 'proposals/proposals_filter_type_ext.dart';
3738
export 'registration/exception/localized_registration_exception.dart';

catalyst_voices/packages/internal/catalyst_voices_view_models/lib/src/category/dropdown_menu_view_model.dart

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:catalyst_voices_localization/generated/catalyst_voices_localizations.dart';
21
import 'package:equatable/equatable.dart';
32

43
class DropdownMenuViewModel<T extends Object> extends Equatable {
@@ -12,17 +11,6 @@ class DropdownMenuViewModel<T extends Object> extends Equatable {
1211
required this.isSelected,
1312
});
1413

15-
factory DropdownMenuViewModel.all(
16-
VoicesLocalizations l10n, {
17-
required bool isSelected,
18-
}) {
19-
return DropdownMenuViewModel(
20-
value: null,
21-
name: l10n.showAll,
22-
isSelected: isSelected,
23-
);
24-
}
25-
2614
@override
2715
List<Object?> get props => [
2816
value,
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import 'package:catalyst_voices_models/catalyst_voices_models.dart';
2+
import 'package:equatable/equatable.dart';
3+
4+
final class ProposalsAnyCategoryFilter extends ProposalsCategoryFilter {
5+
const ProposalsAnyCategoryFilter() : super(ref: null);
6+
}
7+
8+
sealed class ProposalsCategoryFilter extends Equatable {
9+
final SignedDocumentRef? ref;
10+
11+
const ProposalsCategoryFilter({
12+
this.ref,
13+
});
14+
15+
@override
16+
List<Object?> get props => [ref];
17+
}
18+
19+
final class ProposalsRefCategoryFilter extends ProposalsCategoryFilter {
20+
const ProposalsRefCategoryFilter({
21+
required SignedDocumentRef super.ref,
22+
});
23+
}

0 commit comments

Comments
 (0)