Skip to content

Commit f57ba8b

Browse files
committed
chore: read setting
1 parent b3e5bb0 commit f57ba8b

File tree

15 files changed

+178
-45
lines changed

15 files changed

+178
-45
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import '../../field/type_option/type_option_context.dart';
2121
import 'cell_field_notifier.dart';
2222
part 'cell_service.freezed.dart';
2323
part 'cell_data_loader.dart';
24-
part 'context_builder.dart';
24+
part 'cell_controller.dart';
2525
part 'cell_cache.dart';
2626
part 'cell_data_persistence.dart';
2727

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ class GridFieldCache {
5252
_fieldNotifier = null;
5353
}
5454

55-
UnmodifiableListView<FieldPB> get unmodifiableFields =>
56-
UnmodifiableListView(_fieldNotifier?.fields ?? []);
57-
5855
List<FieldPB> get fields => [..._fieldNotifier?.fields ?? []];
5956

6057
set fields(List<FieldPB> fields) {
@@ -158,7 +155,8 @@ class GridRowFieldNotifierImpl extends IGridRowFieldNotifier {
158155
GridRowFieldNotifierImpl(GridFieldCache cache) : _cache = cache;
159156

160157
@override
161-
UnmodifiableListView<FieldPB> get fields => _cache.unmodifiableFields;
158+
UnmodifiableListView<FieldPB> get fields =>
159+
UnmodifiableListView(_cache.fields);
162160

163161
@override
164162
void onRowFieldsChanged(VoidCallback callback) {

frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,19 @@ import 'package:freezed_annotation/freezed_annotation.dart';
66
import 'dart:async';
77

88
import '../field/field_cache.dart';
9+
import 'setting_controller.dart';
910

1011
part 'group_bloc.freezed.dart';
1112

1213
class GridGroupBloc extends Bloc<GridGroupEvent, GridGroupState> {
1314
final GridFieldCache _fieldCache;
15+
final SettingController _settingController;
1416
Function(List<FieldPB>)? _onFieldsFn;
1517

16-
GridGroupBloc({required String gridId, required GridFieldCache fieldCache})
18+
GridGroupBloc({required String viewId, required GridFieldCache fieldCache})
1719
: _fieldCache = fieldCache,
18-
super(GridGroupState.initial(gridId, fieldCache.fields)) {
20+
_settingController = SettingController(viewId: viewId),
21+
super(GridGroupState.initial(viewId, fieldCache.fields)) {
1922
on<GridGroupEvent>(
2023
(event, emit) async {
2124
await event.map(
@@ -24,7 +27,7 @@ class GridGroupBloc extends Bloc<GridGroupEvent, GridGroupState> {
2427
},
2528
setFieldVisibility: (_SetFieldVisibility value) async {
2629
final fieldService =
27-
FieldService(gridId: gridId, fieldId: value.fieldId);
30+
FieldService(gridId: viewId, fieldId: value.fieldId);
2831
final result =
2932
await fieldService.updateField(visibility: value.visibility);
3033
result.fold(
@@ -58,6 +61,11 @@ class GridGroupBloc extends Bloc<GridGroupEvent, GridGroupState> {
5861
onFields: _onFieldsFn,
5962
listenWhen: () => !isClosed,
6063
);
64+
65+
_settingController.startListeing(
66+
onSettingUpdated: (setting) {},
67+
onError: (err) {},
68+
);
6169
}
6270
}
6371

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import 'package:app_flowy/plugins/grid/application/setting/setting_service.dart';
2+
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
3+
import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart';
4+
import 'setting_listener.dart';
5+
6+
typedef OnError = void Function(FlowyError);
7+
typedef OnSettingUpdated = void Function(GridSettingPB);
8+
9+
class SettingController {
10+
final String viewId;
11+
final SettingFFIService _ffiService;
12+
final SettingListener _listener;
13+
OnSettingUpdated? _onSettingUpdated;
14+
OnError? _onError;
15+
GridSettingPB? _setting;
16+
GridSettingPB? get setting => _setting;
17+
18+
SettingController({
19+
required this.viewId,
20+
}) : _ffiService = SettingFFIService(viewId: viewId),
21+
_listener = SettingListener(gridId: viewId) {
22+
// Load setting
23+
_ffiService.getSetting().then((result) {
24+
result.fold(
25+
(newSetting) => updateSetting(newSetting),
26+
(err) => _onError?.call(err),
27+
);
28+
});
29+
30+
// Listen on the seting changes
31+
_listener.start(onSettingUpdated: (result) {
32+
result.fold(
33+
(newSetting) => updateSetting(newSetting),
34+
(err) => _onError?.call(err),
35+
);
36+
});
37+
}
38+
39+
void startListeing({
40+
required OnSettingUpdated onSettingUpdated,
41+
required OnError onError,
42+
}) {
43+
assert(_onSettingUpdated == null, 'Should call once');
44+
_onSettingUpdated = onSettingUpdated;
45+
_onError = onError;
46+
}
47+
48+
void updateSetting(GridSettingPB newSetting) {
49+
_setting = newSetting;
50+
_onSettingUpdated?.call(newSetting);
51+
}
52+
53+
void dispose() {
54+
_onSettingUpdated = null;
55+
_onError = null;
56+
_listener.stop();
57+
}
58+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'dart:typed_data';
2+
3+
import 'package:app_flowy/core/grid_notification.dart';
4+
import 'package:dartz/dartz.dart';
5+
import 'package:flowy_infra/notifier.dart';
6+
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
7+
import 'package:flowy_sdk/protobuf/flowy-grid/dart_notification.pbserver.dart';
8+
import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart';
9+
10+
typedef UpdateSettingNotifiedValue = Either<GridSettingPB, FlowyError>;
11+
12+
class SettingListener {
13+
final String gridId;
14+
GridNotificationListener? _listener;
15+
PublishNotifier<UpdateSettingNotifiedValue>? _updateSettingNotifier =
16+
PublishNotifier();
17+
18+
SettingListener({required this.gridId});
19+
20+
void start({
21+
required void Function(UpdateSettingNotifiedValue) onSettingUpdated,
22+
}) {
23+
_updateSettingNotifier?.addPublishListener(onSettingUpdated);
24+
_listener = GridNotificationListener(objectId: gridId, handler: _handler);
25+
}
26+
27+
void _handler(GridNotification ty, Either<Uint8List, FlowyError> result) {
28+
switch (ty) {
29+
case GridNotification.DidUpdateGridSetting:
30+
result.fold(
31+
(payload) => _updateSettingNotifier?.value = left(
32+
GridSettingPB.fromBuffer(payload),
33+
),
34+
(error) => _updateSettingNotifier?.value = right(error),
35+
);
36+
break;
37+
default:
38+
break;
39+
}
40+
}
41+
42+
Future<void> stop() async {
43+
await _listener?.stop();
44+
_updateSettingNotifier?.dispose();
45+
_updateSettingNotifier = null;
46+
}
47+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import 'package:dartz/dartz.dart';
2+
import 'package:flowy_sdk/dispatch/dispatch.dart';
3+
import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart';
4+
import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart';
5+
import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart';
6+
7+
class SettingFFIService {
8+
final String viewId;
9+
10+
const SettingFFIService({required this.viewId});
11+
12+
Future<Either<GridSettingPB, FlowyError>> getSetting() {
13+
final payload = GridIdPB.create()..value = viewId;
14+
return GridEventGetGridSetting(payload).send();
15+
}
16+
}

frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,11 @@
11
import 'package:app_flowy/plugins/grid/application/field/field_cache.dart';
2-
<<<<<<< HEAD
3-
=======
42
import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart';
5-
>>>>>>> 0e1004785 (chore: config switch group field UI)
63
import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart';
74
import 'package:flowy_infra/image.dart';
85
import 'package:flowy_infra/theme.dart';
96
import 'package:flowy_infra_ui/style_widget/button.dart';
107
import 'package:flowy_infra_ui/style_widget/text.dart';
11-
<<<<<<< HEAD
12-
=======
138
import 'package:flowy_infra_ui/widget/spacing.dart';
14-
>>>>>>> 0e1004785 (chore: config switch group field UI)
159
import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart';
1610
import 'package:flutter/material.dart';
1711
import 'package:app_flowy/plugins/grid/application/setting/group_bloc.dart';
@@ -30,8 +24,10 @@ class GridGroupList extends StatelessWidget {
3024
@override
3125
Widget build(BuildContext context) {
3226
return BlocProvider(
33-
create: (context) => GridGroupBloc(gridId: viewId, fieldCache: fieldCache)
34-
..add(const GridGroupEvent.initial()),
27+
create: (context) => GridGroupBloc(
28+
viewId: viewId,
29+
fieldCache: fieldCache,
30+
)..add(const GridGroupEvent.initial()),
3531
child: BlocBuilder<GridGroupBloc, GridGroupState>(
3632
builder: (context, state) {
3733
final cells = state.fields.map((field) {

frontend/rust-lib/flowy-grid/src/dart_notification.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ pub enum GridNotification {
1414
DidUpdateGroupView = 60,
1515
DidUpdateGroup = 61,
1616
DidGroupByNewField = 62,
17+
DidUpdateGridSetting = 70,
1718
}
1819

1920
impl std::default::Default for GridNotification {

frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,33 @@ use std::convert::TryInto;
1010
use std::sync::Arc;
1111

1212
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
13-
pub struct GridFilterConfiguration {
13+
pub struct GridFilterConfigurationPB {
1414
#[pb(index = 1)]
1515
pub id: String,
1616
}
1717

1818
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
19-
pub struct RepeatedGridConfigurationFilterPB {
19+
pub struct RepeatedGridFilterConfigurationPB {
2020
#[pb(index = 1)]
21-
pub items: Vec<GridFilterConfiguration>,
21+
pub items: Vec<GridFilterConfigurationPB>,
2222
}
2323

24-
impl std::convert::From<&FilterConfigurationRevision> for GridFilterConfiguration {
24+
impl std::convert::From<&FilterConfigurationRevision> for GridFilterConfigurationPB {
2525
fn from(rev: &FilterConfigurationRevision) -> Self {
2626
Self { id: rev.id.clone() }
2727
}
2828
}
2929

30-
impl std::convert::From<Vec<Arc<FilterConfigurationRevision>>> for RepeatedGridConfigurationFilterPB {
30+
impl std::convert::From<Vec<Arc<FilterConfigurationRevision>>> for RepeatedGridFilterConfigurationPB {
3131
fn from(revs: Vec<Arc<FilterConfigurationRevision>>) -> Self {
32-
RepeatedGridConfigurationFilterPB {
32+
RepeatedGridFilterConfigurationPB {
3333
items: revs.into_iter().map(|rev| rev.as_ref().into()).collect(),
3434
}
3535
}
3636
}
3737

38-
impl std::convert::From<Vec<GridFilterConfiguration>> for RepeatedGridConfigurationFilterPB {
39-
fn from(items: Vec<GridFilterConfiguration>) -> Self {
38+
impl std::convert::From<Vec<GridFilterConfigurationPB>> for RepeatedGridFilterConfigurationPB {
39+
fn from(items: Vec<GridFilterConfigurationPB>) -> Self {
4040
Self { items }
4141
}
4242
}

0 commit comments

Comments
 (0)