field_service.dart 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import 'package:dartz/dartz.dart';
  2. import 'package:appflowy_backend/dispatch/dispatch.dart';
  3. import 'package:appflowy_backend/protobuf/flowy-error/errors.pb.dart';
  4. import 'package:appflowy_backend/protobuf/flowy-database/field_entities.pb.dart';
  5. import 'package:appflowy_backend/protobuf/flowy-database/grid_entities.pb.dart';
  6. import 'package:freezed_annotation/freezed_annotation.dart';
  7. part 'field_service.freezed.dart';
  8. /// FieldService consists of lots of event functions. We define the events in the backend(Rust),
  9. /// you can find the corresponding event implementation in event_map.rs of the corresponding crate.
  10. ///
  11. /// You could check out the rust-lib/flowy-database/event_map.rs for more information.
  12. class FieldService {
  13. final String viewId;
  14. final String fieldId;
  15. FieldService({required this.viewId, required this.fieldId});
  16. Future<Either<Unit, FlowyError>> moveField(int fromIndex, int toIndex) {
  17. final payload = MoveFieldPayloadPB.create()
  18. ..viewId = viewId
  19. ..fieldId = fieldId
  20. ..fromIndex = fromIndex
  21. ..toIndex = toIndex;
  22. return DatabaseEventMoveField(payload).send();
  23. }
  24. Future<Either<Unit, FlowyError>> updateField({
  25. String? name,
  26. FieldType? fieldType,
  27. bool? frozen,
  28. bool? visibility,
  29. double? width,
  30. }) {
  31. var payload = FieldChangesetPB.create()
  32. ..databaseId = viewId
  33. ..fieldId = fieldId;
  34. if (name != null) {
  35. payload.name = name;
  36. }
  37. if (fieldType != null) {
  38. payload.fieldType = fieldType;
  39. }
  40. if (frozen != null) {
  41. payload.frozen = frozen;
  42. }
  43. if (visibility != null) {
  44. payload.visibility = visibility;
  45. }
  46. if (width != null) {
  47. payload.width = width.toInt();
  48. }
  49. return DatabaseEventUpdateField(payload).send();
  50. }
  51. static Future<Either<Unit, FlowyError>> updateFieldTypeOption({
  52. required String viewId,
  53. required String fieldId,
  54. required List<int> typeOptionData,
  55. }) {
  56. var payload = TypeOptionChangesetPB.create()
  57. ..viewId = viewId
  58. ..fieldId = fieldId
  59. ..typeOptionData = typeOptionData;
  60. return DatabaseEventUpdateFieldTypeOption(payload).send();
  61. }
  62. Future<Either<Unit, FlowyError>> deleteField() {
  63. final payload = DeleteFieldPayloadPB.create()
  64. ..viewId = viewId
  65. ..fieldId = fieldId;
  66. return DatabaseEventDeleteField(payload).send();
  67. }
  68. Future<Either<Unit, FlowyError>> duplicateField() {
  69. final payload = DuplicateFieldPayloadPB.create()
  70. ..viewId = viewId
  71. ..fieldId = fieldId;
  72. return DatabaseEventDuplicateField(payload).send();
  73. }
  74. Future<Either<TypeOptionPB, FlowyError>> getFieldTypeOptionData({
  75. required FieldType fieldType,
  76. }) {
  77. final payload = TypeOptionPathPB.create()
  78. ..viewId = viewId
  79. ..fieldId = fieldId
  80. ..fieldType = fieldType;
  81. return DatabaseEventGetTypeOption(payload).send().then((result) {
  82. return result.fold(
  83. (data) => left(data),
  84. (err) => right(err),
  85. );
  86. });
  87. }
  88. }
  89. @freezed
  90. class GridFieldCellContext with _$GridFieldCellContext {
  91. const factory GridFieldCellContext({
  92. required String viewId,
  93. required FieldPB field,
  94. }) = _GridFieldCellContext;
  95. }