@@ -42,44 +42,51 @@ class FilterGroupID {
4242enum FilterOperator { and, or }
4343
4444/// Represents a filter group
45- abstract class FilterGroup <T > extends DelegatingSet <T > {
45+ abstract class FilterGroup <T extends Filter > extends DelegatingSet <T > {
4646 /// Creates [FilterGroupID] instance.
4747 const FilterGroup ._(this .groupID, this ._filters) : super (_filters);
4848
4949 /// Creates [FilterGroup] as [FacetFilterGroup] .
5050 @factory
5151 static FacetFilterGroup facet ({
52+ required Set <FilterFacet > filters,
5253 String name = '' ,
53- Set <FilterFacet > filters = const {},
5454 FilterOperator operator = FilterOperator .and,
5555 }) =>
5656 FacetFilterGroup (FilterGroupID (name, operator ), filters);
5757
5858 /// Creates [FilterGroup] as [TagFilterGroup] .
5959 @factory
6060 static TagFilterGroup tag ({
61+ required Set <FilterTag > filters,
6162 String name = '' ,
62- Set <FilterTag > filters = const {},
6363 FilterOperator operator = FilterOperator .and,
6464 }) =>
6565 TagFilterGroup (FilterGroupID (name, operator ), filters);
6666
6767 /// Creates [FilterGroup] as [NumericFilterGroup] .
6868 @factory
6969 static NumericFilterGroup numeric ({
70+ required Set <FilterNumeric > filters,
7071 String name = '' ,
71- Set <FilterNumeric > filters = const {},
7272 FilterOperator operator = FilterOperator .and,
7373 }) =>
7474 NumericFilterGroup (FilterGroupID (name, operator ), filters);
7575
7676 /// Creates [FilterGroup] as [HierarchicalFilterGroup] .
7777 @factory
7878 static HierarchicalFilterGroup hierarchical ({
79+ required Set <FilterFacet > filters,
80+ required List <FilterFacet > path,
81+ required List <String > attributes,
7982 String name = '' ,
80- Set <HierarchicalFilter > filters = const {},
8183 }) =>
82- HierarchicalFilterGroup (name, filters);
84+ HierarchicalFilterGroup (
85+ FilterGroupID .and (name),
86+ filters,
87+ path,
88+ attributes,
89+ );
8390
8491 /// Filter group ID (name and operator)
8592 final FilterGroupID groupID;
@@ -110,7 +117,7 @@ class FacetFilterGroup extends FilterGroup<FilterFacet> {
110117
111118 /// Make a copy of the facet filters group.
112119 @override
113- FilterGroup < FilterFacet > copyWith ({
120+ FacetFilterGroup copyWith ({
114121 FilterGroupID ? groupID,
115122 Set <FilterFacet >? filters,
116123 }) =>
@@ -131,7 +138,7 @@ class TagFilterGroup extends FilterGroup<FilterTag> {
131138
132139 /// Make a copy of the tag filters group.
133140 @override
134- FilterGroup < FilterTag > copyWith ({
141+ TagFilterGroup copyWith ({
135142 FilterGroupID ? groupID,
136143 Set <FilterTag >? filters,
137144 }) =>
@@ -151,7 +158,7 @@ class NumericFilterGroup extends FilterGroup<FilterNumeric> {
151158
152159 /// Make a copy of the numeric filters group.
153160 @override
154- FilterGroup < FilterNumeric > copyWith ({
161+ NumericFilterGroup copyWith ({
155162 FilterGroupID ? groupID,
156163 Set <FilterNumeric >? filters,
157164 }) =>
@@ -166,28 +173,51 @@ class NumericFilterGroup extends FilterGroup<FilterNumeric> {
166173}
167174
168175/// Hierarchical filter group
169- class HierarchicalFilterGroup extends FilterGroup <HierarchicalFilter > {
176+ class HierarchicalFilterGroup extends FilterGroup <FilterFacet > {
170177 /// Creates an [HierarchicalFilterGroup] instance.
171- HierarchicalFilterGroup (String name, Set <HierarchicalFilter > filters)
172- : this ._(FilterGroupID (name), filters);
173-
174- /// Creates a [HierarchicalFilterGroup] instance.
175- HierarchicalFilterGroup ._(super .groupID, super .filters) : super ._() {
178+ HierarchicalFilterGroup (
179+ super .groupID,
180+ super .filters,
181+ this .path,
182+ this .attributes,
183+ ) : super ._() {
176184 assert (groupID.operator == FilterOperator .and);
177185 }
178186
187+ /// Filter facets path.
188+ final List <FilterFacet > path;
189+
190+ /// Attributes names.
191+ final List <String > attributes;
192+
179193 /// Make a copy of the hierarchical filters group.
180194 @override
181- FilterGroup < HierarchicalFilter > copyWith ({
195+ HierarchicalFilterGroup copyWith ({
182196 FilterGroupID ? groupID,
183- Set <HierarchicalFilter >? filters,
197+ Set <FilterFacet >? filters,
198+ List <FilterFacet >? path,
199+ List <String >? attributes,
184200 }) =>
185- HierarchicalFilterGroup ._ (
201+ HierarchicalFilterGroup (
186202 groupID ?? this .groupID,
187203 filters ?? _filters,
204+ path ?? this .path,
205+ attributes ?? this .attributes,
188206 );
189207
190208 @override
191209 String toString () =>
192210 'HierarchicalFilterGroup{groupID: $groupID , filters: $_filters }' ;
211+
212+ @override
213+ bool operator == (Object other) =>
214+ identical (this , other) ||
215+ super == other &&
216+ other is HierarchicalFilterGroup &&
217+ runtimeType == other.runtimeType &&
218+ path == other.path &&
219+ attributes == other.attributes;
220+
221+ @override
222+ int get hashCode => super .hashCode ^ path.hashCode ^ attributes.hashCode;
193223}
0 commit comments