mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
fix: using freeze to refactor the FieldInfo class (#3152)
This commit is contained in:
@ -1,4 +1,5 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_listener.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_listener.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_meta_listener.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_meta_listener.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
||||||
@ -8,7 +9,6 @@ import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
|||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import '../field/field_controller.dart';
|
|
||||||
import '../field/field_service.dart';
|
import '../field/field_service.dart';
|
||||||
import '../field/type_option/type_option_context.dart';
|
import '../field/type_option/type_option_context.dart';
|
||||||
import 'cell_listener.dart';
|
import 'cell_listener.dart';
|
||||||
@ -104,7 +104,7 @@ class CellController<T, D> extends Equatable {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// Only the primary can listen on the row meta changes.
|
// Only the primary can listen on the row meta changes.
|
||||||
if (_cellContext.fieldInfo.isPrimary) {
|
if (_cellContext.fieldInfo.field.isPrimary) {
|
||||||
_rowMetaListener?.start(
|
_rowMetaListener?.start(
|
||||||
callback: (newRowMeta) {
|
callback: (newRowMeta) {
|
||||||
_cellContext = _cellContext.copyWith(rowMeta: newRowMeta);
|
_cellContext = _cellContext.copyWith(rowMeta: newRowMeta);
|
||||||
|
@ -15,7 +15,7 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'dart:convert' show utf8;
|
import 'dart:convert' show utf8;
|
||||||
|
|
||||||
import '../field/field_controller.dart';
|
import '../field/field_info.dart';
|
||||||
import '../row/row_service.dart';
|
import '../row/row_service.dart';
|
||||||
part 'cell_service.freezed.dart';
|
part 'cell_service.freezed.dart';
|
||||||
part 'cell_data_loader.dart';
|
part 'cell_data_loader.dart';
|
||||||
@ -62,14 +62,14 @@ class DatabaseCellContext with _$DatabaseCellContext {
|
|||||||
|
|
||||||
String get rowId => rowMeta.id;
|
String get rowId => rowMeta.id;
|
||||||
|
|
||||||
String get fieldId => fieldInfo.id;
|
String get fieldId => fieldInfo.field.id;
|
||||||
|
|
||||||
FieldType get fieldType => fieldInfo.fieldType;
|
FieldType get fieldType => fieldInfo.field.fieldType;
|
||||||
|
|
||||||
ValueKey key() {
|
ValueKey key() {
|
||||||
return ValueKey("${rowMeta.id}$fieldId${fieldInfo.fieldType}");
|
return ValueKey("${rowMeta.id}$fieldId${fieldInfo.field.fieldType}");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Only the primary field can have an emoji.
|
/// Only the primary field can have an emoji.
|
||||||
String? get emoji => fieldInfo.isPrimary ? rowMeta.icon : null;
|
String? get emoji => fieldInfo.field.isPrimary ? rowMeta.icon : null;
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ import 'package:dartz/dartz.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'database_view_service.dart';
|
import 'database_view_service.dart';
|
||||||
import 'defines.dart';
|
import 'defines.dart';
|
||||||
|
import 'field/field_info.dart';
|
||||||
import 'layout/layout_service.dart';
|
import 'layout/layout_service.dart';
|
||||||
import 'layout/layout_setting_listener.dart';
|
import 'layout/layout_setting_listener.dart';
|
||||||
import 'row/row_cache.dart';
|
import 'row/row_cache.dart';
|
||||||
|
@ -7,7 +7,7 @@ import 'package:dartz/dartz.dart';
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../grid/presentation/widgets/filter/filter_info.dart';
|
import '../grid/presentation/widgets/filter/filter_info.dart';
|
||||||
import 'field/field_controller.dart';
|
import 'field/field_info.dart';
|
||||||
import 'row/row_cache.dart';
|
import 'row/row_cache.dart';
|
||||||
import 'row/row_service.dart';
|
import 'row/row_service.dart';
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@ import '../setting/setting_listener.dart';
|
|||||||
import '../setting/setting_service.dart';
|
import '../setting/setting_service.dart';
|
||||||
import '../sort/sort_listener.dart';
|
import '../sort/sort_listener.dart';
|
||||||
import '../sort/sort_service.dart';
|
import '../sort/sort_service.dart';
|
||||||
|
import 'field_info.dart';
|
||||||
import 'field_listener.dart';
|
import 'field_listener.dart';
|
||||||
|
|
||||||
class _GridFieldNotifier extends ChangeNotifier {
|
class _GridFieldNotifier extends ChangeNotifier {
|
||||||
@ -438,12 +439,18 @@ class FieldController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _updateFieldInfos() {
|
void _updateFieldInfos() {
|
||||||
|
final List<FieldInfo> newFieldInfos = [];
|
||||||
for (final field in _fieldNotifier.fieldInfos) {
|
for (final field in _fieldNotifier.fieldInfos) {
|
||||||
field._isGroupField = _groupConfigurationByFieldId[field.id] != null;
|
newFieldInfos.add(
|
||||||
field._hasFilter = _filterPBByFieldId[field.id] != null;
|
field.copyWith(
|
||||||
field._hasSort = _sortPBByFieldId[field.id] != null;
|
isGroupField: _groupConfigurationByFieldId[field.id] != null,
|
||||||
|
hasFilter: _filterPBByFieldId[field.id] != null,
|
||||||
|
hasSort: _sortPBByFieldId[field.id] != null,
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
_fieldNotifier.notify();
|
|
||||||
|
_fieldNotifier.fieldInfos = newFieldInfos;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> dispose() async {
|
Future<void> dispose() async {
|
||||||
@ -488,7 +495,7 @@ class FieldController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_fieldNotifier.fieldInfos =
|
_fieldNotifier.fieldInfos =
|
||||||
newFields.map((field) => FieldInfo(field: field)).toList();
|
newFields.map((field) => FieldInfo.initial(field)).toList();
|
||||||
_loadFilters();
|
_loadFilters();
|
||||||
_loadSorts();
|
_loadSorts();
|
||||||
_updateFieldInfos();
|
_updateFieldInfos();
|
||||||
@ -652,7 +659,7 @@ class FieldController {
|
|||||||
}
|
}
|
||||||
final List<FieldInfo> newFieldInfos = fieldInfos;
|
final List<FieldInfo> newFieldInfos = fieldInfos;
|
||||||
for (final indexField in insertedFields) {
|
for (final indexField in insertedFields) {
|
||||||
final fieldInfo = FieldInfo(field: indexField.field_1);
|
final fieldInfo = FieldInfo.initial(indexField.field_1);
|
||||||
if (newFieldInfos.length > indexField.index) {
|
if (newFieldInfos.length > indexField.index) {
|
||||||
newFieldInfos.insert(indexField.index, fieldInfo);
|
newFieldInfos.insert(indexField.index, fieldInfo);
|
||||||
} else {
|
} else {
|
||||||
@ -674,7 +681,7 @@ class FieldController {
|
|||||||
newFields.indexWhere((field) => field.id == updatedFieldPB.id);
|
newFields.indexWhere((field) => field.id == updatedFieldPB.id);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
newFields.removeAt(index);
|
newFields.removeAt(index);
|
||||||
final fieldInfo = FieldInfo(field: updatedFieldPB);
|
final fieldInfo = FieldInfo.initial(updatedFieldPB);
|
||||||
newFields.insert(index, fieldInfo);
|
newFields.insert(index, fieldInfo);
|
||||||
updatedFields.add(fieldInfo);
|
updatedFields.add(fieldInfo);
|
||||||
}
|
}
|
||||||
@ -693,7 +700,7 @@ class RowCacheDependenciesImpl extends RowFieldsDelegate with RowLifeCycle {
|
|||||||
RowCacheDependenciesImpl(FieldController cache) : _fieldController = cache;
|
RowCacheDependenciesImpl(FieldController cache) : _fieldController = cache;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
UnmodifiableListView<FieldInfo> get fields =>
|
UnmodifiableListView<FieldInfo> get fieldInfos =>
|
||||||
UnmodifiableListView(_fieldController.fieldInfos);
|
UnmodifiableListView(_fieldController.fieldInfos);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -729,75 +736,3 @@ FieldInfo? _findFieldInfo({
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class FieldInfo {
|
|
||||||
final FieldPB _field;
|
|
||||||
bool _isGroupField = false;
|
|
||||||
|
|
||||||
bool _hasFilter = false;
|
|
||||||
|
|
||||||
bool _hasSort = false;
|
|
||||||
|
|
||||||
String get id => _field.id;
|
|
||||||
|
|
||||||
FieldType get fieldType => _field.fieldType;
|
|
||||||
|
|
||||||
bool get visibility => _field.visibility;
|
|
||||||
|
|
||||||
double get width => _field.width.toDouble();
|
|
||||||
|
|
||||||
bool get isPrimary => _field.isPrimary;
|
|
||||||
|
|
||||||
String get name => _field.name;
|
|
||||||
|
|
||||||
FieldPB get field => _field;
|
|
||||||
|
|
||||||
bool get isGroupField => _isGroupField;
|
|
||||||
|
|
||||||
bool get hasFilter => _hasFilter;
|
|
||||||
|
|
||||||
bool get canBeGroup {
|
|
||||||
switch (_field.fieldType) {
|
|
||||||
case FieldType.URL:
|
|
||||||
case FieldType.Checkbox:
|
|
||||||
case FieldType.MultiSelect:
|
|
||||||
case FieldType.SingleSelect:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool get canCreateFilter {
|
|
||||||
if (hasFilter) return false;
|
|
||||||
|
|
||||||
switch (_field.fieldType) {
|
|
||||||
case FieldType.Checkbox:
|
|
||||||
case FieldType.MultiSelect:
|
|
||||||
case FieldType.RichText:
|
|
||||||
case FieldType.SingleSelect:
|
|
||||||
case FieldType.Checklist:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool get canCreateSort {
|
|
||||||
if (_hasSort) return false;
|
|
||||||
|
|
||||||
switch (_field.fieldType) {
|
|
||||||
case FieldType.RichText:
|
|
||||||
case FieldType.Checkbox:
|
|
||||||
case FieldType.Number:
|
|
||||||
case FieldType.DateTime:
|
|
||||||
case FieldType.SingleSelect:
|
|
||||||
case FieldType.MultiSelect:
|
|
||||||
return true;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FieldInfo({required FieldPB field}) : _field = field;
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,71 @@
|
|||||||
|
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
|
||||||
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
part 'field_info.freezed.dart';
|
||||||
|
|
||||||
|
@freezed
|
||||||
|
class FieldInfo with _$FieldInfo {
|
||||||
|
const FieldInfo._();
|
||||||
|
|
||||||
|
const factory FieldInfo({
|
||||||
|
required FieldPB field,
|
||||||
|
required bool isGroupField,
|
||||||
|
required bool hasFilter,
|
||||||
|
required bool hasSort,
|
||||||
|
}) = _FieldInfo;
|
||||||
|
|
||||||
|
String get id => field.id;
|
||||||
|
|
||||||
|
FieldType get fieldType => field.fieldType;
|
||||||
|
|
||||||
|
String get name => field.name;
|
||||||
|
|
||||||
|
factory FieldInfo.initial(FieldPB field) => FieldInfo(
|
||||||
|
field: field,
|
||||||
|
hasFilter: false,
|
||||||
|
hasSort: false,
|
||||||
|
isGroupField: false,
|
||||||
|
);
|
||||||
|
|
||||||
|
bool get canBeGroup {
|
||||||
|
switch (field.fieldType) {
|
||||||
|
case FieldType.URL:
|
||||||
|
case FieldType.Checkbox:
|
||||||
|
case FieldType.MultiSelect:
|
||||||
|
case FieldType.SingleSelect:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get canCreateFilter {
|
||||||
|
if (hasFilter) return false;
|
||||||
|
|
||||||
|
switch (field.fieldType) {
|
||||||
|
case FieldType.Checkbox:
|
||||||
|
case FieldType.MultiSelect:
|
||||||
|
case FieldType.RichText:
|
||||||
|
case FieldType.SingleSelect:
|
||||||
|
case FieldType.Checklist:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get canCreateSort {
|
||||||
|
if (hasSort) return false;
|
||||||
|
|
||||||
|
switch (field.fieldType) {
|
||||||
|
case FieldType.RichText:
|
||||||
|
case FieldType.Checkbox:
|
||||||
|
case FieldType.Number:
|
||||||
|
case FieldType.DateTime:
|
||||||
|
case FieldType.SingleSelect:
|
||||||
|
case FieldType.MultiSelect:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
|
||||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||||
import 'package:flowy_infra/notifier.dart';
|
import 'package:flowy_infra/notifier.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||||
@ -6,7 +7,6 @@ import 'package:flutter/foundation.dart';
|
|||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
|
||||||
import '../cell/cell_service.dart';
|
import '../cell/cell_service.dart';
|
||||||
import '../field/field_controller.dart';
|
|
||||||
import 'row_list.dart';
|
import 'row_list.dart';
|
||||||
import 'row_service.dart';
|
import 'row_service.dart';
|
||||||
part 'row_cache.freezed.dart';
|
part 'row_cache.freezed.dart';
|
||||||
@ -15,7 +15,7 @@ typedef RowUpdateCallback = void Function();
|
|||||||
|
|
||||||
/// A delegate that provides the fields of the row.
|
/// A delegate that provides the fields of the row.
|
||||||
abstract class RowFieldsDelegate {
|
abstract class RowFieldsDelegate {
|
||||||
UnmodifiableListView<FieldInfo> get fields;
|
UnmodifiableListView<FieldInfo> get fieldInfos;
|
||||||
void onFieldsChanged(void Function(List<FieldInfo>) callback);
|
void onFieldsChanged(void Function(List<FieldInfo>) callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,12 +244,12 @@ class RowCache {
|
|||||||
CellContextByFieldId _makeCells(RowMetaPB rowMeta) {
|
CellContextByFieldId _makeCells(RowMetaPB rowMeta) {
|
||||||
// ignore: prefer_collection_literals
|
// ignore: prefer_collection_literals
|
||||||
final cellContextMap = CellContextByFieldId();
|
final cellContextMap = CellContextByFieldId();
|
||||||
for (final field in _fieldDelegate.fields) {
|
for (final fieldInfo in _fieldDelegate.fieldInfos) {
|
||||||
if (field.visibility) {
|
if (fieldInfo.field.visibility) {
|
||||||
cellContextMap[field.id] = DatabaseCellContext(
|
cellContextMap[fieldInfo.id] = DatabaseCellContext(
|
||||||
rowMeta: rowMeta,
|
rowMeta: rowMeta,
|
||||||
viewId: viewId,
|
viewId: viewId,
|
||||||
fieldInfo: field,
|
fieldInfo: fieldInfo,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -259,7 +259,7 @@ class RowCache {
|
|||||||
RowInfo buildGridRow(RowMetaPB rowMetaPB) {
|
RowInfo buildGridRow(RowMetaPB rowMetaPB) {
|
||||||
return RowInfo(
|
return RowInfo(
|
||||||
viewId: viewId,
|
viewId: viewId,
|
||||||
fields: _fieldDelegate.fields,
|
fields: _fieldDelegate.fieldInfos,
|
||||||
rowId: rowMetaPB.id,
|
rowId: rowMetaPB.id,
|
||||||
rowMeta: rowMetaPB,
|
rowMeta: rowMetaPB,
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
@ -26,8 +27,8 @@ class DatabaseGroupBloc extends Bloc<DatabaseGroupEvent, DatabaseGroupState> {
|
|||||||
initial: () {
|
initial: () {
|
||||||
_startListening();
|
_startListening();
|
||||||
},
|
},
|
||||||
didReceiveFieldUpdate: (fieldContexts) {
|
didReceiveFieldUpdate: (fieldInfos) {
|
||||||
emit(state.copyWith(fieldContexts: fieldContexts));
|
emit(state.copyWith(fieldInfos: fieldInfos));
|
||||||
},
|
},
|
||||||
setGroupByField: (String fieldId, FieldType fieldType) async {
|
setGroupByField: (String fieldId, FieldType fieldType) async {
|
||||||
final result = await _groupBackendSvc.groupByField(
|
final result = await _groupBackendSvc.groupByField(
|
||||||
@ -50,8 +51,8 @@ class DatabaseGroupBloc extends Bloc<DatabaseGroupEvent, DatabaseGroupState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _startListening() {
|
void _startListening() {
|
||||||
_onFieldsFn = (fieldContexts) =>
|
_onFieldsFn = (fieldInfos) =>
|
||||||
add(DatabaseGroupEvent.didReceiveFieldUpdate(fieldContexts));
|
add(DatabaseGroupEvent.didReceiveFieldUpdate(fieldInfos));
|
||||||
_fieldController.addListener(
|
_fieldController.addListener(
|
||||||
onReceiveFields: _onFieldsFn,
|
onReceiveFields: _onFieldsFn,
|
||||||
listenWhen: () => !isClosed,
|
listenWhen: () => !isClosed,
|
||||||
@ -75,15 +76,15 @@ class DatabaseGroupEvent with _$DatabaseGroupEvent {
|
|||||||
class DatabaseGroupState with _$DatabaseGroupState {
|
class DatabaseGroupState with _$DatabaseGroupState {
|
||||||
const factory DatabaseGroupState({
|
const factory DatabaseGroupState({
|
||||||
required String viewId,
|
required String viewId,
|
||||||
required List<FieldInfo> fieldContexts,
|
required List<FieldInfo> fieldInfos,
|
||||||
}) = _DatabaseGroupState;
|
}) = _DatabaseGroupState;
|
||||||
|
|
||||||
factory DatabaseGroupState.initial(
|
factory DatabaseGroupState.initial(
|
||||||
String viewId,
|
String viewId,
|
||||||
List<FieldInfo> fieldContexts,
|
List<FieldInfo> fieldInfos,
|
||||||
) =>
|
) =>
|
||||||
DatabaseGroupState(
|
DatabaseGroupState(
|
||||||
viewId: viewId,
|
viewId: viewId,
|
||||||
fieldContexts: fieldContexts,
|
fieldInfos: fieldInfos,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
@ -2,6 +2,7 @@ import 'dart:async';
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
|
||||||
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
||||||
import 'package:appflowy_board/appflowy_board.dart';
|
import 'package:appflowy_board/appflowy_board.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/cell/cell_service.dart';
|
import 'package:appflowy/plugins/database_view/application/cell/cell_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
||||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/cell/cell_service.dart';
|
import 'package:appflowy/plugins/database_view/application/cell/cell_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
||||||
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
import 'package:appflowy_backend/dispatch/dispatch.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/filter/filter_service.dart';
|
import 'package:appflowy/plugins/database_view/application/filter/filter_service.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
|
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/filter/filter_info.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/filter/filter_info.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
import 'package:appflowy/plugins/database_view/application/defines.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_cache.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_cache.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/filter/filter_info.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/filter/filter_info.dart';
|
||||||
@ -10,7 +11,6 @@ import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
|
|||||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import '../../application/field/field_controller.dart';
|
|
||||||
import '../../application/database_controller.dart';
|
import '../../application/database_controller.dart';
|
||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
|
||||||
@ -200,24 +200,25 @@ class GridState with _$GridState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class GridFieldEquatable extends Equatable {
|
class GridFieldEquatable extends Equatable {
|
||||||
final List<FieldInfo> _fields;
|
final List<FieldInfo> _fieldInfos;
|
||||||
const GridFieldEquatable(
|
const GridFieldEquatable(
|
||||||
List<FieldInfo> fields,
|
List<FieldInfo> fieldInfos,
|
||||||
) : _fields = fields;
|
) : _fieldInfos = fieldInfos;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props {
|
List<Object?> get props {
|
||||||
if (_fields.isEmpty) {
|
if (_fieldInfos.isEmpty) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
_fields.length,
|
_fieldInfos.length,
|
||||||
_fields
|
_fieldInfos
|
||||||
.map((field) => field.width)
|
.map((fieldInfo) => fieldInfo.field.width)
|
||||||
.reduce((value, element) => value + element),
|
.reduce((value, element) => value + element),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
UnmodifiableListView<FieldInfo> get value => UnmodifiableListView(_fields);
|
UnmodifiableListView<FieldInfo> get value =>
|
||||||
|
UnmodifiableListView(_fieldInfos);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/log.dart';
|
import 'package:appflowy_backend/log.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/field_entities.pb.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
@ -26,7 +27,7 @@ class GridHeaderBloc extends Bloc<GridHeaderEvent, GridHeaderState> {
|
|||||||
emit(
|
emit(
|
||||||
state.copyWith(
|
state.copyWith(
|
||||||
fields: value.fields
|
fields: value.fields
|
||||||
.where((element) => element.visibility)
|
.where((element) => element.field.visibility)
|
||||||
.toList(),
|
.toList(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'dart:collection';
|
import 'dart:collection';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_listener.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_listener.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/protobuf.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
@ -7,7 +8,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import '../../../application/cell/cell_service.dart';
|
import '../../../application/cell/cell_service.dart';
|
||||||
import '../../../application/field/field_controller.dart';
|
|
||||||
import '../../../application/row/row_cache.dart';
|
import '../../../application/row/row_cache.dart';
|
||||||
import '../../../application/row/row_controller.dart';
|
import '../../../application/row/row_controller.dart';
|
||||||
import '../../../application/row/row_service.dart';
|
import '../../../application/row/row_service.dart';
|
||||||
@ -119,16 +119,16 @@ class RowState with _$RowState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class GridCellEquatable extends Equatable {
|
class GridCellEquatable extends Equatable {
|
||||||
final FieldInfo _fieldContext;
|
final FieldInfo _fieldInfo;
|
||||||
|
|
||||||
const GridCellEquatable(FieldInfo field) : _fieldContext = field;
|
const GridCellEquatable(FieldInfo field) : _fieldInfo = field;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
_fieldContext.id,
|
_fieldInfo.id,
|
||||||
_fieldContext.fieldType,
|
_fieldInfo.fieldType,
|
||||||
_fieldContext.visibility,
|
_fieldInfo.field.visibility,
|
||||||
_fieldContext.width,
|
_fieldInfo.field.width,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
|
import 'package:appflowy_backend/protobuf/flowy-error/errors.pbserver.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pbenum.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pbenum.dart';
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/sort/sort_service.dart';
|
import 'package:appflowy/plugins/database_view/application/sort/sort_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/sort/sort_info.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/sort/sort_info.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pbenum.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pbenum.dart';
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import '../../../application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
|
|
||||||
List<FieldInfo> getCreatableSorts(List<FieldInfo> fieldInfos) {
|
List<FieldInfo> getCreatableSorts(List<FieldInfo> fieldInfos) {
|
||||||
final List<FieldInfo> creatableFields = List.from(fieldInfos);
|
final List<FieldInfo> creatableFields = List.from(fieldInfos);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'sizes.dart';
|
import 'sizes.dart';
|
||||||
|
|
||||||
class GridLayout {
|
class GridLayout {
|
||||||
@ -6,7 +6,7 @@ class GridLayout {
|
|||||||
if (fields.isEmpty) return 0;
|
if (fields.isEmpty) return 0;
|
||||||
|
|
||||||
final fieldsWidth = fields
|
final fieldsWidth = fields
|
||||||
.map((field) => field.width.toDouble())
|
.map((fieldInfo) => fieldInfo.field.width.toDouble())
|
||||||
.reduce((value, element) => value + element);
|
.reduce((value, element) => value + element);
|
||||||
|
|
||||||
return fieldsWidth +
|
return fieldsWidth +
|
||||||
|
@ -109,7 +109,7 @@ class _CheckboxFilterEditorState extends State<CheckboxFilterEditor> {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: FlowyText(
|
child: FlowyText(
|
||||||
state.filterInfo.fieldInfo.name,
|
state.filterInfo.fieldInfo.field.name,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -93,7 +93,7 @@ class ChecklistState extends State<ChecklistFilterEditor> {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: FlowyText(
|
child: FlowyText(
|
||||||
state.filterInfo.fieldInfo.name,
|
state.filterInfo.fieldInfo.field.name,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -39,7 +39,7 @@ class ChoiceChipButton extends StatelessWidget {
|
|||||||
decoration: decoration,
|
decoration: decoration,
|
||||||
useIntrinsicWidth: true,
|
useIntrinsicWidth: true,
|
||||||
text: FlowyText(
|
text: FlowyText(
|
||||||
filterInfo.fieldInfo.name,
|
filterInfo.fieldInfo.field.name,
|
||||||
color: AFThemeExtension.of(context).textColor,
|
color: AFThemeExtension.of(context).textColor,
|
||||||
),
|
),
|
||||||
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
|
margin: const EdgeInsets.symmetric(horizontal: 8, vertical: 2),
|
||||||
|
@ -144,7 +144,7 @@ class _SelectOptionFilterEditorState extends State<SelectOptionFilterEditor> {
|
|||||||
children: [
|
children: [
|
||||||
Expanded(
|
Expanded(
|
||||||
child: FlowyText(
|
child: FlowyText(
|
||||||
state.filterInfo.fieldInfo.name,
|
state.filterInfo.fieldInfo.field.name,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
@ -161,7 +162,7 @@ class GridFilterPropertyCell extends StatelessWidget {
|
|||||||
return FlowyButton(
|
return FlowyButton(
|
||||||
hoverColor: AFThemeExtension.of(context).lightGreyHover,
|
hoverColor: AFThemeExtension.of(context).lightGreyHover,
|
||||||
text: FlowyText.medium(
|
text: FlowyText.medium(
|
||||||
fieldInfo.name,
|
fieldInfo.field.name,
|
||||||
color: AFThemeExtension.of(context).textColor,
|
color: AFThemeExtension.of(context).textColor,
|
||||||
),
|
),
|
||||||
onTap: () => onTap(fieldInfo),
|
onTap: () => onTap(fieldInfo),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/checkbox_filter.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/checkbox_filter.pb.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/checklist_filter.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/checklist_filter.pb.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/date_filter.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/date_filter.pb.dart';
|
||||||
|
@ -96,7 +96,7 @@ class _GridHeaderState extends State<_GridHeader> {
|
|||||||
buildWhen: (previous, current) => previous.fields != current.fields,
|
buildWhen: (previous, current) => previous.fields != current.fields,
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
final cells = state.fields
|
final cells = state.fields
|
||||||
.where((field) => field.visibility)
|
.where((fieldInfo) => fieldInfo.field.visibility)
|
||||||
.map(
|
.map(
|
||||||
(field) => FieldContext(
|
(field) => FieldContext(
|
||||||
viewId: widget.viewId,
|
viewId: widget.viewId,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_data_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_data_controller.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/checkbox_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/checkbox_entities.pb.dart';
|
||||||
|
@ -276,13 +276,13 @@ class RowContent extends StatelessWidget {
|
|||||||
final GridCellWidget child = builder.build(cellId);
|
final GridCellWidget child = builder.build(cellId);
|
||||||
|
|
||||||
return CellContainer(
|
return CellContainer(
|
||||||
width: cellId.fieldInfo.width.toDouble(),
|
width: cellId.fieldInfo.field.width.toDouble(),
|
||||||
isPrimary: cellId.fieldInfo.isPrimary,
|
isPrimary: cellId.fieldInfo.field.isPrimary,
|
||||||
cellContainerNotifier: CellContainerNotifier(child),
|
cellContainerNotifier: CellContainerNotifier(child),
|
||||||
accessoryBuilder: (buildContext) {
|
accessoryBuilder: (buildContext) {
|
||||||
final builder = child.accessoryBuilder;
|
final builder = child.accessoryBuilder;
|
||||||
final List<GridCellAccessoryBuilder> accessories = [];
|
final List<GridCellAccessoryBuilder> accessories = [];
|
||||||
if (cellId.fieldInfo.isPrimary) {
|
if (cellId.fieldInfo.field.isPrimary) {
|
||||||
accessories.add(
|
accessories.add(
|
||||||
GridCellAccessoryBuilder(
|
GridCellAccessoryBuilder(
|
||||||
builder: (key) => PrimaryCellAccessory(
|
builder: (key) => PrimaryCellAccessory(
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import 'package:appflowy/generated/locale_keys.g.dart';
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/application/sort/sort_create_bloc.dart';
|
import 'package:appflowy/plugins/database_view/grid/application/sort/sort_create_bloc.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/sort_entities.pb.dart';
|
||||||
|
|
||||||
class SortInfo {
|
class SortInfo {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import '../../../application/cell/cell_controller_builder.dart';
|
import '../../../application/cell/cell_controller_builder.dart';
|
||||||
import '../../../application/field/field_controller.dart';
|
|
||||||
part 'date_card_cell_bloc.freezed.dart';
|
part 'date_card_cell_bloc.freezed.dart';
|
||||||
|
|
||||||
class DateCardCellBloc extends Bloc<DateCardCellEvent, DateCardCellState> {
|
class DateCardCellBloc extends Bloc<DateCardCellEvent, DateCardCellState> {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/setting/property_bloc.dart';
|
import 'package:appflowy/plugins/database_view/application/setting/property_bloc.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
||||||
@ -95,7 +96,7 @@ class _GridPropertyCellState extends State<_GridPropertyCell> {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final checkmark = svgWidget(
|
final checkmark = svgWidget(
|
||||||
widget.fieldInfo.visibility ? 'home/show' : 'home/hide',
|
widget.fieldInfo.field.visibility ? 'home/show' : 'home/hide',
|
||||||
color: Theme.of(context).iconTheme.color,
|
color: Theme.of(context).iconTheme.color,
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -130,7 +131,7 @@ class _GridPropertyCellState extends State<_GridPropertyCell> {
|
|||||||
context.read<DatabasePropertyBloc>().add(
|
context.read<DatabasePropertyBloc>().add(
|
||||||
DatabasePropertyEvent.setFieldVisibility(
|
DatabasePropertyEvent.setFieldVisibility(
|
||||||
widget.fieldInfo.id,
|
widget.fieldInfo.id,
|
||||||
!widget.fieldInfo.visibility,
|
!widget.fieldInfo.field.visibility,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/setting/group_bloc.dart';
|
import 'package:appflowy/plugins/database_view/application/setting/group_bloc.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/layout/sizes.dart';
|
||||||
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
import 'package:appflowy/plugins/database_view/grid/presentation/widgets/header/field_type_extension.dart';
|
||||||
@ -30,8 +31,9 @@ class DatabaseGroupList extends StatelessWidget {
|
|||||||
fieldController: fieldController,
|
fieldController: fieldController,
|
||||||
)..add(const DatabaseGroupEvent.initial()),
|
)..add(const DatabaseGroupEvent.initial()),
|
||||||
child: BlocBuilder<DatabaseGroupBloc, DatabaseGroupState>(
|
child: BlocBuilder<DatabaseGroupBloc, DatabaseGroupState>(
|
||||||
|
buildWhen: (previous, current) => true,
|
||||||
builder: (context, state) {
|
builder: (context, state) {
|
||||||
final cells = state.fieldContexts.map((fieldInfo) {
|
final cells = state.fieldInfos.map((fieldInfo) {
|
||||||
Widget cell = _GridGroupCell(
|
Widget cell = _GridGroupCell(
|
||||||
fieldInfo: fieldInfo,
|
fieldInfo: fieldInfo,
|
||||||
onSelected: () => onDismissed(),
|
onSelected: () => onDismissed(),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart';
|
import 'package:appflowy_backend/protobuf/flowy-database2/date_entities.pb.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:freezed_annotation/freezed_annotation.dart';
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
||||||
|
@ -44,7 +44,7 @@ class RowPropertyList extends StatelessWidget {
|
|||||||
// The rest of the fields are displayed in the order of the field
|
// The rest of the fields are displayed in the order of the field
|
||||||
// list
|
// list
|
||||||
...state.cells
|
...state.cells
|
||||||
.where((element) => !element.fieldInfo.isPrimary)
|
.where((element) => !element.fieldInfo.field.isPrimary)
|
||||||
.map(
|
.map(
|
||||||
(cell) => _PropertyCell(
|
(cell) => _PropertyCell(
|
||||||
cellContext: cell,
|
cellContext: cell,
|
||||||
|
@ -2,6 +2,7 @@ import 'package:appflowy/plugins/database_view/application/cell/cell_controller.
|
|||||||
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_service.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/row/row_cache.dart';
|
import 'package:appflowy/plugins/database_view/application/row/row_cache.dart';
|
||||||
|
@ -2,6 +2,7 @@ import 'package:appflowy/plugins/database_view/application/cell/cell_controller.
|
|||||||
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
import 'package:appflowy/plugins/database_view/application/cell/cell_controller_builder.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_controller.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_editor_bloc.dart';
|
||||||
|
import 'package:appflowy/plugins/database_view/application/field/field_info.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/field_service.dart';
|
import 'package:appflowy/plugins/database_view/application/field/field_service.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_context.dart';
|
||||||
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_service.dart';
|
import 'package:appflowy/plugins/database_view/application/field/type_option/type_option_service.dart';
|
||||||
@ -149,7 +150,7 @@ Future<FieldEditorBloc> createFieldEditor({
|
|||||||
field: data.field_2,
|
field: data.field_2,
|
||||||
);
|
);
|
||||||
return FieldEditorBloc(
|
return FieldEditorBloc(
|
||||||
isGroupField: FieldInfo(field: data.field_2).isGroupField,
|
isGroupField: FieldInfo.initial(data.field_2).isGroupField,
|
||||||
loader: loader,
|
loader: loader,
|
||||||
field: data.field_2,
|
field: data.field_2,
|
||||||
);
|
);
|
||||||
|
@ -34,13 +34,13 @@ default = ["custom-protocol"]
|
|||||||
custom-protocol = ["tauri/custom-protocol"]
|
custom-protocol = ["tauri/custom-protocol"]
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-persistence = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-persistence = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
appflowy-integrate = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
appflowy-integrate = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
|
|
||||||
#collab = { path = "../../../../AppFlowy-Collab/collab" }
|
#collab = { path = "../../../../AppFlowy-Collab/collab" }
|
||||||
#collab-folder = { path = "../../../../AppFlowy-Collab/collab-folder" }
|
#collab-folder = { path = "../../../../AppFlowy-Collab/collab-folder" }
|
||||||
|
20
frontend/rust-lib/Cargo.lock
generated
20
frontend/rust-lib/Cargo.lock
generated
@ -96,7 +96,7 @@ checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "appflowy-integrate"
|
name = "appflowy-integrate"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"collab",
|
"collab",
|
||||||
@ -925,7 +925,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab"
|
name = "collab"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"bytes",
|
"bytes",
|
||||||
@ -943,7 +943,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-client-ws"
|
name = "collab-client-ws"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"collab-sync",
|
"collab-sync",
|
||||||
@ -961,7 +961,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-database"
|
name = "collab-database"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -988,7 +988,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-derive"
|
name = "collab-derive"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
@ -1000,7 +1000,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-document"
|
name = "collab-document"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"collab",
|
"collab",
|
||||||
@ -1019,7 +1019,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-folder"
|
name = "collab-folder"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"chrono",
|
"chrono",
|
||||||
@ -1039,7 +1039,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-persistence"
|
name = "collab-persistence"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bincode",
|
"bincode",
|
||||||
"chrono",
|
"chrono",
|
||||||
@ -1059,7 +1059,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-plugins"
|
name = "collab-plugins"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
@ -1089,7 +1089,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "collab-sync"
|
name = "collab-sync"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=aac4e56#aac4e56bdb6a61598697283582d369a7af85d9c8"
|
source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=ba963f#ba963fa299d294e5b2cafd940b9eaa8520280b7b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"collab",
|
"collab",
|
||||||
|
@ -38,17 +38,17 @@ opt-level = 3
|
|||||||
incremental = false
|
incremental = false
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
appflowy-integrate = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
appflowy-integrate = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "aac4e56" }
|
collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "ba963f" }
|
||||||
#
|
|
||||||
#collab = { path = "../../../AppFlowy-Collab/collab" }
|
#collab = { path = "../AppFlowy-Collab/collab" }
|
||||||
#collab-folder = { path = "../../../AppFlowy-Collab/collab-folder" }
|
#collab-folder = { path = "../AppFlowy-Collab/collab-folder" }
|
||||||
#collab-database= { path = "../../../AppFlowy-Collab/collab-database" }
|
#collab-database= { path = "../AppFlowy-Collab/collab-database" }
|
||||||
#collab-document = { path = "../../../AppFlowy-Collab/collab-document" }
|
#collab-document = { path = "../AppFlowy-Collab/collab-document" }
|
||||||
#collab-plugins = { path = "../../../AppFlowy-Collab/collab-plugins" }
|
#collab-plugins = { path = "../AppFlowy-Collab/collab-plugins" }
|
||||||
#appflowy-integrate = { path = "../../../AppFlowy-Collab/appflowy-integrate" }
|
#appflowy-integrate = { path = "../AppFlowy-Collab/appflowy-integrate" }
|
||||||
|
|
||||||
|
@ -134,7 +134,9 @@ impl DatabaseEditor {
|
|||||||
let field = database.fields.get_field(field_id);
|
let field = database.fields.get_field(field_id);
|
||||||
if let Some(field) = field {
|
if let Some(field) = field {
|
||||||
let group_setting = default_group_setting(&field);
|
let group_setting = default_group_setting(&field);
|
||||||
database.insert_group_setting(view_id, group_setting);
|
database.views.update_database_view(view_id, |view| {
|
||||||
|
view.set_groups(vec![group_setting.into()]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user