feat: open a row as a full page (#5111)

* feat: open a row as a full page

* chore: don't set latest open view

* chore: fix calendar open

* chore: disable in relation

* chore: code cleanup

* chore: fix merge conflicts
This commit is contained in:
Richard Shiue
2024-04-29 13:44:42 +08:00
committed by GitHub
parent 3c446d5e78
commit 969726ef73
38 changed files with 1118 additions and 113 deletions

View File

@ -29,6 +29,7 @@ class RelatedRowDetailPage extends StatelessWidget {
return RowDetailPage(
databaseController: databaseController,
rowController: rowController,
allowOpenAsFullPage: false,
);
},
);

View File

@ -4,11 +4,17 @@ import 'package:appflowy/plugins/database/application/cell/cell_controller.dart'
import 'package:appflowy/plugins/database/application/field/field_controller.dart';
import 'package:appflowy/plugins/database/application/row/row_banner_bloc.dart';
import 'package:appflowy/plugins/database/application/row/row_controller.dart';
import 'package:appflowy/plugins/database/domain/database_view_service.dart';
import 'package:appflowy/plugins/database/widgets/cell/editable_cell_builder.dart';
import 'package:appflowy/plugins/database/widgets/cell/editable_cell_skeleton/text.dart';
import 'package:appflowy/plugins/database/widgets/row/cells/cell_container.dart';
import 'package:appflowy/plugins/database/application/cell/bloc/text_cell_bloc.dart';
import 'package:appflowy/plugins/database/widgets/row/row_action.dart';
import 'package:appflowy/plugins/database_document/database_document_plugin.dart';
import 'package:appflowy/startup/plugin/plugin.dart';
import 'package:appflowy/startup/startup.dart';
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
import 'package:appflowy/workspace/application/view/view_bloc.dart';
import 'package:appflowy/workspace/presentation/settings/widgets/emoji_picker/emoji_picker.dart';
import 'package:appflowy_popover/appflowy_popover.dart';
import 'package:easy_localization/easy_localization.dart';
@ -25,11 +31,13 @@ class RowBanner extends StatefulWidget {
required this.fieldController,
required this.rowController,
required this.cellBuilder,
this.allowOpenAsFullPage = true,
});
final FieldController fieldController;
final RowController rowController;
final EditableCellBuilder cellBuilder;
final bool allowOpenAsFullPage;
@override
State<RowBanner> createState() => _RowBannerState();
@ -84,6 +92,42 @@ class _RowBannerState extends State<RowBanner> {
right: 12,
child: RowActionButton(rowController: widget.rowController),
),
if (widget.allowOpenAsFullPage)
Positioned(
top: 12,
left: 12,
child: FlowyIconButton(
width: 20,
height: 20,
icon: const FlowySvg(FlowySvgs.full_view_s),
onPressed: () async {
Navigator.of(context).pop();
final viewBloc = context.read<ViewBloc>();
final databaseId = await DatabaseViewBackendService(
viewId: widget.cellBuilder.databaseController.viewId,
)
.getDatabaseId()
.then((value) => value.fold((s) => s, (f) => null));
final documentId = widget.rowController.rowMeta.documentId;
if (databaseId != null) {
getIt<TabsBloc>().add(
TabsEvent.openPlugin(
plugin: DatabaseDocumentPlugin(
data: DatabaseDocumentContext(
view: viewBloc.state.view,
databaseId: databaseId,
rowId: widget.rowController.rowId,
documentId: documentId,
),
pluginType: PluginType.databaseDocument,
),
setLatest: false,
),
);
}
},
),
),
],
),
),

View File

@ -19,10 +19,12 @@ class RowDetailPage extends StatefulWidget with FlowyOverlayDelegate {
super.key,
required this.rowController,
required this.databaseController,
this.allowOpenAsFullPage = true,
});
final RowController rowController;
final DatabaseController databaseController;
final bool allowOpenAsFullPage;
@override
State<RowDetailPage> createState() => _RowDetailPageState();
@ -60,6 +62,7 @@ class _RowDetailPageState extends State<RowDetailPage> {
fieldController: widget.databaseController.fieldController,
rowController: widget.rowController,
cellBuilder: cellBuilder,
allowOpenAsFullPage: widget.allowOpenAsFullPage,
),
const VSpace(16),
Padding(

View File

@ -69,7 +69,7 @@ class _RowEditorState extends State<RowEditor> {
@override
void initState() {
super.initState();
documentBloc = DocumentBloc(view: widget.viewPB)
documentBloc = DocumentBloc(documentId: widget.viewPB.id)
..add(const DocumentEvent.initial());
}