11import 'dart:async' ;
2+ import 'dart:collection' ;
3+
24import 'package:app_flowy/plugins/grid/application/block/block_cache.dart' ;
35import 'package:app_flowy/plugins/grid/application/field/field_controller.dart' ;
46import 'package:app_flowy/plugins/grid/application/row/row_cache.dart' ;
@@ -12,7 +14,6 @@ import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart';
1214import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart' ;
1315import 'package:flutter_bloc/flutter_bloc.dart' ;
1416import 'package:freezed_annotation/freezed_annotation.dart' ;
15- import 'dart:collection' ;
1617
1718import 'board_data_controller.dart' ;
1819import 'group_controller.dart' ;
@@ -164,19 +165,25 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
164165 boardController.clear ();
165166
166167 //
167- List <AFBoardColumnData > columns = groups.map ((group) {
168+ List <AFBoardColumnData > columns = groups
169+ .where ((group) => fieldController.getField (group.fieldId) != null )
170+ .map ((group) {
168171 return AFBoardColumnData (
169172 id: group.groupId,
170173 name: group.desc,
171174 items: _buildRows (group),
172- customData: group,
175+ customData: BoardCustomData (
176+ group: group,
177+ fieldContext: fieldController.getField (group.fieldId)! ,
178+ ),
173179 );
174180 }).toList ();
175181 boardController.addColumns (columns);
176182
177183 for (final group in groups) {
178184 final delegate = GroupControllerDelegateImpl (
179185 controller: boardController,
186+ fieldController: fieldController,
180187 onNewColumnItem: (groupId, row, index) {
181188 add (BoardEvent .didCreateRow (groupId, row, index));
182189 },
@@ -238,10 +245,8 @@ class BoardBloc extends Bloc<BoardEvent, BoardState> {
238245
239246 List <AFColumnItem > _buildRows (GroupPB group) {
240247 final items = group.rows.map ((row) {
241- return BoardColumnItem (
242- row: row,
243- fieldId: group.fieldId,
244- );
248+ final fieldContext = fieldController.getField (group.fieldId);
249+ return BoardColumnItem (row: row, fieldContext: fieldContext! );
245250 }).toList ();
246251
247252 return < AFColumnItem > [...items];
@@ -332,40 +337,41 @@ class GridFieldEquatable extends Equatable {
332337
333338class BoardColumnItem extends AFColumnItem {
334339 final RowPB row;
335-
336- final String fieldId;
337-
338- final bool requestFocus;
340+ final GridFieldContext fieldContext;
339341
340342 BoardColumnItem ({
341343 required this .row,
342- required this .fieldId,
343- this .requestFocus = false ,
344+ required this .fieldContext,
344345 });
345346
346347 @override
347348 String get id => row.id;
348349}
349350
350351class GroupControllerDelegateImpl extends GroupControllerDelegate {
352+ final GridFieldController fieldController;
351353 final AFBoardDataController controller;
352354 final void Function (String , RowPB , int ? ) onNewColumnItem;
353355
354356 GroupControllerDelegateImpl ({
355357 required this .controller,
358+ required this .fieldController,
356359 required this .onNewColumnItem,
357360 });
358361
359362 @override
360363 void insertRow (GroupPB group, RowPB row, int ? index) {
364+ final fieldContext = fieldController.getField (group.fieldId);
365+ if (fieldContext == null ) {
366+ Log .warn ("FieldContext should not be null" );
367+ return ;
368+ }
369+
361370 if (index != null ) {
362- final item = BoardColumnItem (row: row, fieldId : group.fieldId );
371+ final item = BoardColumnItem (row: row, fieldContext : fieldContext );
363372 controller.insertColumnItem (group.groupId, index, item);
364373 } else {
365- final item = BoardColumnItem (
366- row: row,
367- fieldId: group.fieldId,
368- );
374+ final item = BoardColumnItem (row: row, fieldContext: fieldContext);
369375 controller.addColumnItem (group.groupId, item);
370376 }
371377 }
@@ -377,22 +383,25 @@ class GroupControllerDelegateImpl extends GroupControllerDelegate {
377383
378384 @override
379385 void updateRow (GroupPB group, RowPB row) {
386+ final fieldContext = fieldController.getField (group.fieldId);
387+ if (fieldContext == null ) {
388+ Log .warn ("FieldContext should not be null" );
389+ return ;
390+ }
380391 controller.updateColumnItem (
381392 group.groupId,
382- BoardColumnItem (
383- row: row,
384- fieldId: group.fieldId,
385- ),
393+ BoardColumnItem (row: row, fieldContext: fieldContext),
386394 );
387395 }
388396
389397 @override
390398 void addNewRow (GroupPB group, RowPB row, int ? index) {
391- final item = BoardColumnItem (
392- row: row,
393- fieldId: group.fieldId,
394- requestFocus: true ,
395- );
399+ final fieldContext = fieldController.getField (group.fieldId);
400+ if (fieldContext == null ) {
401+ Log .warn ("FieldContext should not be null" );
402+ return ;
403+ }
404+ final item = BoardColumnItem (row: row, fieldContext: fieldContext);
396405
397406 if (index != null ) {
398407 controller.insertColumnItem (group.groupId, index, item);
@@ -414,3 +423,29 @@ class BoardEditingRow {
414423 required this .index,
415424 });
416425}
426+
427+ class BoardCustomData {
428+ final GroupPB group;
429+ final GridFieldContext fieldContext;
430+ BoardCustomData ({
431+ required this .group,
432+ required this .fieldContext,
433+ });
434+
435+ CheckboxGroup ? asCheckboxGroup () {
436+ if (fieldType != FieldType .Checkbox ) return null ;
437+ return CheckboxGroup (group);
438+ }
439+
440+ FieldType get fieldType => fieldContext.fieldType;
441+ }
442+
443+ class CheckboxGroup {
444+ final GroupPB group;
445+
446+ CheckboxGroup (this .group);
447+
448+ // Hardcode value: "Yes" that equal to the value defined in Rust
449+ // pub const CHECK: &str = "Yes";
450+ bool get isCheck => group.groupId == "Yes" ;
451+ }
0 commit comments