mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: rebuild card when create new field from row detail page
This commit is contained in:
@ -13,12 +13,12 @@ import 'card_data_controller.dart';
|
|||||||
part 'card_bloc.freezed.dart';
|
part 'card_bloc.freezed.dart';
|
||||||
|
|
||||||
class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
|
class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
|
||||||
final String fieldId;
|
final String groupFieldId;
|
||||||
final RowFFIService _rowService;
|
final RowFFIService _rowService;
|
||||||
final CardDataController _dataController;
|
final CardDataController _dataController;
|
||||||
|
|
||||||
BoardCardBloc({
|
BoardCardBloc({
|
||||||
required this.fieldId,
|
required this.groupFieldId,
|
||||||
required String gridId,
|
required String gridId,
|
||||||
required CardDataController dataController,
|
required CardDataController dataController,
|
||||||
}) : _rowService = RowFFIService(
|
}) : _rowService = RowFFIService(
|
||||||
@ -29,7 +29,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
|
|||||||
super(
|
super(
|
||||||
BoardCardState.initial(
|
BoardCardState.initial(
|
||||||
dataController.rowPB,
|
dataController.rowPB,
|
||||||
_makeCells(fieldId, dataController.loadData()),
|
_makeCells(groupFieldId, dataController.loadData()),
|
||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
on<BoardCardEvent>(
|
on<BoardCardEvent>(
|
||||||
@ -69,7 +69,7 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
|
|||||||
_dataController.addListener(
|
_dataController.addListener(
|
||||||
onRowChanged: (cellMap, reason) {
|
onRowChanged: (cellMap, reason) {
|
||||||
if (!isClosed) {
|
if (!isClosed) {
|
||||||
final cells = _makeCells(fieldId, cellMap);
|
final cells = _makeCells(groupFieldId, cellMap);
|
||||||
add(BoardCardEvent.didReceiveCells(cells, reason));
|
add(BoardCardEvent.didReceiveCells(cells, reason));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -78,10 +78,11 @@ class BoardCardBloc extends Bloc<BoardCardEvent, BoardCardState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UnmodifiableListView<BoardCellEquatable> _makeCells(
|
UnmodifiableListView<BoardCellEquatable> _makeCells(
|
||||||
String fieldId, GridCellMap originalCellMap) {
|
String groupFieldId, GridCellMap originalCellMap) {
|
||||||
List<BoardCellEquatable> cells = [];
|
List<BoardCellEquatable> cells = [];
|
||||||
for (final entry in originalCellMap.entries) {
|
for (final entry in originalCellMap.entries) {
|
||||||
if (entry.value.fieldId != fieldId) {
|
// Filter out the cell if it's fieldId equal to the groupFieldId
|
||||||
|
if (entry.value.fieldId != groupFieldId) {
|
||||||
cells.add(BoardCellEquatable(entry.value));
|
cells.add(BoardCellEquatable(entry.value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import 'package:flowy_infra_ui/style_widget/text.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
|
import 'define.dart';
|
||||||
|
|
||||||
class BoardDateCell extends StatefulWidget {
|
class BoardDateCell extends StatefulWidget {
|
||||||
final String groupId;
|
final String groupId;
|
||||||
final GridCellControllerBuilder cellControllerBuilder;
|
final GridCellControllerBuilder cellControllerBuilder;
|
||||||
@ -44,10 +46,15 @@ class _BoardDateCellState extends State<BoardDateCell> {
|
|||||||
} else {
|
} else {
|
||||||
return Align(
|
return Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: FlowyText.regular(
|
child: Padding(
|
||||||
state.dateStr,
|
padding: EdgeInsets.symmetric(
|
||||||
fontSize: 13,
|
vertical: BoardSizes.cardCellVPadding,
|
||||||
color: context.read<AppTheme>().shader3,
|
),
|
||||||
|
child: FlowyText.regular(
|
||||||
|
state.dateStr,
|
||||||
|
fontSize: 13,
|
||||||
|
color: context.read<AppTheme>().shader3,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import 'package:flowy_infra_ui/style_widget/text.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
|
import 'define.dart';
|
||||||
|
|
||||||
class BoardNumberCell extends StatefulWidget {
|
class BoardNumberCell extends StatefulWidget {
|
||||||
final String groupId;
|
final String groupId;
|
||||||
final GridCellControllerBuilder cellControllerBuilder;
|
final GridCellControllerBuilder cellControllerBuilder;
|
||||||
@ -43,9 +45,14 @@ class _BoardNumberCellState extends State<BoardNumberCell> {
|
|||||||
} else {
|
} else {
|
||||||
return Align(
|
return Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: FlowyText.medium(
|
child: Padding(
|
||||||
state.content,
|
padding: EdgeInsets.symmetric(
|
||||||
fontSize: 14,
|
vertical: BoardSizes.cardCellVPadding,
|
||||||
|
),
|
||||||
|
child: FlowyText.medium(
|
||||||
|
state.content,
|
||||||
|
fontSize: 14,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import 'package:flowy_infra/theme.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
|
||||||
|
import 'define.dart';
|
||||||
|
|
||||||
class BoardUrlCell extends StatefulWidget {
|
class BoardUrlCell extends StatefulWidget {
|
||||||
final String groupId;
|
final String groupId;
|
||||||
final GridCellControllerBuilder cellControllerBuilder;
|
final GridCellControllerBuilder cellControllerBuilder;
|
||||||
@ -43,14 +45,19 @@ class _BoardUrlCellState extends State<BoardUrlCell> {
|
|||||||
} else {
|
} else {
|
||||||
return Align(
|
return Align(
|
||||||
alignment: Alignment.centerLeft,
|
alignment: Alignment.centerLeft,
|
||||||
child: RichText(
|
child: Padding(
|
||||||
textAlign: TextAlign.left,
|
padding: EdgeInsets.symmetric(
|
||||||
text: TextSpan(
|
vertical: BoardSizes.cardCellVPadding,
|
||||||
text: state.content,
|
),
|
||||||
style: TextStyle(
|
child: RichText(
|
||||||
color: theme.main2,
|
textAlign: TextAlign.left,
|
||||||
fontSize: 14,
|
text: TextSpan(
|
||||||
decoration: TextDecoration.underline,
|
text: state.content,
|
||||||
|
style: TextStyle(
|
||||||
|
color: theme.main2,
|
||||||
|
fontSize: 14,
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -44,7 +44,7 @@ class _BoardCardState extends State<BoardCard> {
|
|||||||
rowNotifier = EditableRowNotifier();
|
rowNotifier = EditableRowNotifier();
|
||||||
_cardBloc = BoardCardBloc(
|
_cardBloc = BoardCardBloc(
|
||||||
gridId: widget.gridId,
|
gridId: widget.gridId,
|
||||||
fieldId: widget.fieldId,
|
groupFieldId: widget.fieldId,
|
||||||
dataController: widget.dataController,
|
dataController: widget.dataController,
|
||||||
)..add(const BoardCardEvent.initial());
|
)..add(const BoardCardEvent.initial());
|
||||||
super.initState();
|
super.initState();
|
||||||
@ -56,7 +56,7 @@ class _BoardCardState extends State<BoardCard> {
|
|||||||
value: _cardBloc,
|
value: _cardBloc,
|
||||||
child: BlocBuilder<BoardCardBloc, BoardCardState>(
|
child: BlocBuilder<BoardCardBloc, BoardCardState>(
|
||||||
buildWhen: (previous, current) {
|
buildWhen: (previous, current) {
|
||||||
return previous.cells.length != current.cells.length;
|
return previous.cells != current.cells;
|
||||||
},
|
},
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
return BoardCardContainer(
|
return BoardCardContainer(
|
||||||
|
@ -43,7 +43,8 @@ class _DateCellState extends GridCellState<GridDateCell> {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
final cellController = widget.cellControllerBuilder.build();
|
final cellController =
|
||||||
|
widget.cellControllerBuilder.build() as GridDateCellController;
|
||||||
_cellBloc = getIt<DateCellBloc>(param1: cellController)
|
_cellBloc = getIt<DateCellBloc>(param1: cellController)
|
||||||
..add(const DateCellEvent.initial());
|
..add(const DateCellEvent.initial());
|
||||||
super.initState();
|
super.initState();
|
||||||
|
@ -243,7 +243,7 @@ where
|
|||||||
let cell_data = cell_bytes.parser::<P>()?;
|
let cell_data = cell_bytes.parser::<P>()?;
|
||||||
let mut changesets = self.add_row_if_match(row_rev, &cell_data);
|
let mut changesets = self.add_row_if_match(row_rev, &cell_data);
|
||||||
let default_group_changeset = self.update_default_group(row_rev, &changesets);
|
let default_group_changeset = self.update_default_group(row_rev, &changesets);
|
||||||
tracing::info!("default_group_changeset: {}", default_group_changeset);
|
tracing::trace!("default_group_changeset: {}", default_group_changeset);
|
||||||
if !default_group_changeset.is_empty() {
|
if !default_group_changeset.is_empty() {
|
||||||
changesets.push(default_group_changeset);
|
changesets.push(default_group_changeset);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user