Skip to content

Commit b4671c1

Browse files
committed
feat: support checklist
1 parent aa85970 commit b4671c1

File tree

37 files changed

+431
-28
lines changed

37 files changed

+431
-28
lines changed

frontend/app_flowy/assets/translations/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@
222222
"singleSelectFieldName": "Select",
223223
"multiSelectFieldName": "Multiselect",
224224
"urlFieldName": "URL",
225+
"checklistFieldName": "Checklist",
225226
"numberFormat": " Number format",
226227
"dateFormat": " Date format",
227228
"includeTime": " Include time",

frontend/app_flowy/lib/plugins/board/application/group.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,3 @@ class BoardGroupService {
1010
groupField = field;
1111
}
1212
}
13-
14-
abstract class CanBeGroupField {
15-
String get groupContent;
16-
}
17-
18-
// class SingleSelectGroup extends CanBeGroupField {
19-
// final SingleSelectTypeOptionContext typeOptionContext;
20-
// }

frontend/app_flowy/lib/plugins/board/presentation/board_page.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,8 @@ Widget? _buildHeaderIcon(GroupData customData) {
358358
break;
359359
case FieldType.URL:
360360
break;
361+
case FieldType.CheckList:
362+
break;
361363
}
362364

363365
if (widget != null) {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import 'package:flutter/material.dart';
2+
3+
class BoardChecklistCell extends StatelessWidget {
4+
const BoardChecklistCell({Key? key}) : super(key: key);
5+
6+
@override
7+
Widget build(BuildContext context) {
8+
return Container();
9+
}
10+
}

frontend/app_flowy/lib/plugins/board/presentation/card/card_cell_builder.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
44

55
import 'board_cell.dart';
66
import 'board_checkbox_cell.dart';
7+
import 'board_checklist_cell.dart';
78
import 'board_date_cell.dart';
89
import 'board_number_cell.dart';
910
import 'board_select_option_cell.dart';
@@ -58,6 +59,10 @@ class BoardCellBuilder {
5859
editableNotifier: cellNotifier,
5960
key: key,
6061
);
62+
case FieldType.CheckList:
63+
return BoardChecklistCell(
64+
key: key,
65+
);
6166
case FieldType.Number:
6267
return BoardNumberCell(
6368
groupId: groupId,

frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ class GridCellControllerBuilder {
8181
);
8282
case FieldType.MultiSelect:
8383
case FieldType.SingleSelect:
84+
case FieldType.CheckList:
8485
final cellDataLoader = GridCellDataLoader(
8586
cellId: _cellId,
8687
parser: SelectOptionCellDataParser(),

frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -506,22 +506,12 @@ class FieldInfo {
506506
bool get canGroup {
507507
switch (_field.fieldType) {
508508
case FieldType.Checkbox:
509-
return true;
510-
case FieldType.DateTime:
511-
return false;
512509
case FieldType.MultiSelect:
513-
return true;
514-
case FieldType.Number:
515-
return false;
516-
case FieldType.RichText:
517-
return false;
518510
case FieldType.SingleSelect:
519511
return true;
520-
case FieldType.URL:
512+
default:
521513
return false;
522514
}
523-
524-
return false;
525515
}
526516

527517
bool get canCreateFilter {

frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'package:flowy_sdk/dispatch/dispatch.dart';
22
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
33
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart';
4+
import 'package:flowy_sdk/protobuf/flowy-grid/checklist_type_option.pb.dart';
45
import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option.pb.dart';
56
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
67
import 'package:dartz/dartz.dart';
@@ -95,6 +96,17 @@ class MultiSelectTypeOptionWidgetDataParser
9596
}
9697
}
9798

99+
// Multi-select
100+
typedef ChecklistTypeOptionContext = TypeOptionContext<ChecklistTypeOptionPB>;
101+
102+
class ChecklistTypeOptionWidgetDataParser
103+
extends TypeOptionDataParser<ChecklistTypeOptionPB> {
104+
@override
105+
ChecklistTypeOptionPB fromBuffer(List<int> buffer) {
106+
return ChecklistTypeOptionPB.fromBuffer(buffer);
107+
}
108+
}
109+
98110
class TypeOptionContext<T extends GeneratedMessage> {
99111
T? _typeOptionObject;
100112
final TypeOptionDataParser<T> dataParser;

frontend/app_flowy/lib/plugins/grid/application/filter/filter_create_bloc.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:app_flowy/plugins/grid/application/field/field_controller.dart';
22
import 'package:dartz/dartz.dart';
33
import 'package:flowy_sdk/protobuf/flowy-error/errors.pbserver.dart';
44
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_filter.pbenum.dart';
5+
import 'package:flowy_sdk/protobuf/flowy-grid/checklist_filter.pb.dart';
56
import 'package:flowy_sdk/protobuf/flowy-grid/date_filter.pbenum.dart';
67
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
78
import 'package:flowy_sdk/protobuf/flowy-grid/number_filter.pb.dart';
@@ -104,6 +105,11 @@ class GridCreateFilterBloc
104105
condition: SelectOptionCondition.OptionIs,
105106
fieldType: FieldType.MultiSelect,
106107
);
108+
case FieldType.CheckList:
109+
return _ffiService.insertChecklistFilter(
110+
fieldId: fieldId,
111+
condition: ChecklistFilterCondition.IsIncomplete,
112+
);
107113
case FieldType.Number:
108114
return _ffiService.insertNumberFilter(
109115
fieldId: fieldId,

frontend/app_flowy/lib/plugins/grid/application/filter/filter_service.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import 'package:flowy_sdk/dispatch/dispatch.dart';
33
import 'package:flowy_sdk/log.dart';
44
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
55
import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_filter.pbserver.dart';
6+
import 'package:flowy_sdk/protobuf/flowy-grid/checklist_filter.pb.dart';
67
import 'package:flowy_sdk/protobuf/flowy-grid/date_filter.pbserver.dart';
78
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
89
import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart';
@@ -145,6 +146,24 @@ class FilterFFIService {
145146
);
146147
}
147148

149+
Future<Either<Unit, FlowyError>> insertChecklistFilter({
150+
required String fieldId,
151+
required ChecklistFilterCondition condition,
152+
String? filterId,
153+
List<String> optionIds = const [],
154+
}) {
155+
final filter = ChecklistFilterPB()
156+
..condition = condition
157+
..optionIds.addAll(optionIds);
158+
159+
return insertFilter(
160+
fieldId: fieldId,
161+
filterId: filterId,
162+
fieldType: FieldType.CheckList,
163+
data: filter.writeToBuffer(),
164+
);
165+
}
166+
148167
Future<Either<Unit, FlowyError>> insertFilter({
149168
required String fieldId,
150169
String? filterId,

0 commit comments

Comments
 (0)