Skip to content

Commit c36e6f7

Browse files
Sayak GhoshSayak Ghosh
authored andcommitted
changed advance filter
1 parent 4af02cd commit c36e6f7

File tree

2 files changed

+83
-16
lines changed

2 files changed

+83
-16
lines changed

frontend/appflowy_flutter/lib/plugins/database/application/field/filter_entities.dart

Lines changed: 60 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@ abstract class DatabaseFilter extends Equatable {
2727
});
2828

2929
factory DatabaseFilter.fromPB(FilterPB filterPB) {
30+
if (filterPB.filterType == FilterType.And ||
31+
filterPB.filterType == FilterType.Or) {
32+
return GroupFilter(
33+
filterId: filterPB.id,
34+
filterType: filterPB.filterType,
35+
children: filterPB.children.map(DatabaseFilter.fromPB).toList(),
36+
);
37+
}
38+
39+
if (!filterPB.hasData()) {
40+
return PlaceholderFilter(filterId: filterPB.id);
41+
}
42+
3043
final FilterDataPB(:fieldId, :fieldType) = filterPB.data;
3144
switch (fieldType) {
3245
case FieldType.RichText:
@@ -88,7 +101,7 @@ abstract class DatabaseFilter extends Equatable {
88101
end: data.hasEnd() ? data.end.toDateTime() : null,
89102
);
90103
default:
91-
throw ArgumentError();
104+
return PlaceholderFilter(filterId: filterPB.id);
92105
}
93106
}
94107

@@ -746,3 +759,49 @@ final class TimeFilter extends DatabaseFilter {
746759
@override
747760
List<Object?> get props => [filterId, fieldId, condition, content];
748761
}
762+
763+
final class PlaceholderFilter extends DatabaseFilter {
764+
const PlaceholderFilter({required super.filterId})
765+
: super(fieldId: '', fieldType: FieldType.RichText);
766+
767+
@override
768+
String get conditionName => "";
769+
770+
@override
771+
bool get canAttachContent => false;
772+
773+
@override
774+
String getContentDescription(FieldInfo field) => "";
775+
776+
@override
777+
Uint8List writeToBuffer() => Uint8List(0);
778+
779+
@override
780+
List<Object?> get props => [filterId];
781+
}
782+
783+
final class GroupFilter extends DatabaseFilter {
784+
const GroupFilter({
785+
required super.filterId,
786+
required this.filterType,
787+
required this.children,
788+
}) : super(fieldId: '', fieldType: FieldType.RichText);
789+
790+
final FilterType filterType;
791+
final List<DatabaseFilter> children;
792+
793+
@override
794+
String get conditionName => filterType == FilterType.And ? "And" : "Or";
795+
796+
@override
797+
bool get canAttachContent => false;
798+
799+
@override
800+
String getContentDescription(FieldInfo field) => "";
801+
802+
@override
803+
Uint8List writeToBuffer() => Uint8List(0);
804+
805+
@override
806+
List<Object?> get props => [filterId, filterType, children];
807+
}

frontend/appflowy_flutter/lib/plugins/database/grid/presentation/widgets/filter/filter_menu.dart

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'package:collection/collection.dart';
12
import 'package:appflowy/generated/flowy_svgs.g.dart';
23
import 'package:appflowy/generated/locale_keys.g.dart';
34
import 'package:appflowy/plugins/database/application/field/field_controller.dart';
@@ -35,21 +36,28 @@ class FilterMenu extends StatelessWidget {
3536
},
3637
builder: (context, state) {
3738
final List<Widget> children = [];
38-
children.addAll(
39-
state.filters
40-
.map(
41-
(filter) => FilterMenuItem(
42-
key: ValueKey(filter.filterId),
43-
filterId: filter.filterId,
44-
fieldType: state.fields
45-
.firstWhere(
46-
(element) => element.id == filter.fieldId,
47-
)
48-
.fieldType,
49-
),
50-
)
51-
.toList(),
52-
);
39+
void addFilters(List<DatabaseFilter> filters) {
40+
for (final filter in filters) {
41+
if (filter is GroupFilter) {
42+
addFilters(filter.children);
43+
} else {
44+
final field = state.fields.firstWhereOrNull(
45+
(element) => element.id == filter.fieldId,
46+
);
47+
if (field != null) {
48+
children.add(
49+
FilterMenuItem(
50+
key: ValueKey(filter.filterId),
51+
filterId: filter.filterId,
52+
fieldType: field.fieldType,
53+
),
54+
);
55+
}
56+
}
57+
}
58+
}
59+
60+
addFilters(state.filters);
5361

5462
if (state.fields.isNotEmpty) {
5563
children.add(

0 commit comments

Comments
 (0)