mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: add suffix PB to filter structs
This commit is contained in:
parent
6b4291ccc7
commit
1ac1fabb6e
@ -28,7 +28,7 @@ class CheckboxFilterEditorBloc
|
||||
initial: () async {
|
||||
_startListening();
|
||||
},
|
||||
updateCondition: (CheckboxFilterCondition condition) {
|
||||
updateCondition: (CheckboxFilterConditionPB condition) {
|
||||
_ffiService.insertCheckboxFilter(
|
||||
filterId: filterInfo.filter.id,
|
||||
fieldId: filterInfo.fieldInfo.id,
|
||||
@ -79,7 +79,7 @@ class CheckboxFilterEditorEvent with _$CheckboxFilterEditorEvent {
|
||||
const factory CheckboxFilterEditorEvent.didReceiveFilter(FilterPB filter) =
|
||||
_DidReceiveFilter;
|
||||
const factory CheckboxFilterEditorEvent.updateCondition(
|
||||
CheckboxFilterCondition condition) = _UpdateCondition;
|
||||
CheckboxFilterConditionPB condition) = _UpdateCondition;
|
||||
const factory CheckboxFilterEditorEvent.delete() = _Delete;
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ class ChecklistFilterEditorBloc
|
||||
initial: () async {
|
||||
_startListening();
|
||||
},
|
||||
updateCondition: (ChecklistFilterCondition condition) {
|
||||
updateCondition: (ChecklistFilterConditionPB condition) {
|
||||
_ffiService.insertChecklistFilter(
|
||||
filterId: filterInfo.filter.id,
|
||||
fieldId: filterInfo.fieldInfo.id,
|
||||
@ -85,7 +85,7 @@ class ChecklistFilterEditorEvent with _$ChecklistFilterEditorEvent {
|
||||
const factory ChecklistFilterEditorEvent.didReceiveFilter(FilterPB filter) =
|
||||
_DidReceiveFilter;
|
||||
const factory ChecklistFilterEditorEvent.updateCondition(
|
||||
ChecklistFilterCondition condition) = _UpdateCondition;
|
||||
ChecklistFilterConditionPB condition) = _UpdateCondition;
|
||||
const factory ChecklistFilterEditorEvent.delete() = _Delete;
|
||||
}
|
||||
|
||||
|
@ -90,48 +90,48 @@ class GridCreateFilterBloc
|
||||
case FieldType.Checkbox:
|
||||
return _ffiService.insertCheckboxFilter(
|
||||
fieldId: fieldId,
|
||||
condition: CheckboxFilterCondition.IsChecked,
|
||||
condition: CheckboxFilterConditionPB.IsChecked,
|
||||
);
|
||||
case FieldType.DateTime:
|
||||
final timestamp = DateTime.now().millisecondsSinceEpoch ~/ 1000;
|
||||
return _ffiService.insertDateFilter(
|
||||
fieldId: fieldId,
|
||||
condition: DateFilterCondition.DateIs,
|
||||
condition: DateFilterConditionPB.DateIs,
|
||||
timestamp: timestamp,
|
||||
);
|
||||
case FieldType.MultiSelect:
|
||||
return _ffiService.insertSelectOptionFilter(
|
||||
fieldId: fieldId,
|
||||
condition: SelectOptionCondition.OptionIs,
|
||||
condition: SelectOptionConditionPB.OptionIs,
|
||||
fieldType: FieldType.MultiSelect,
|
||||
);
|
||||
case FieldType.Checklist:
|
||||
return _ffiService.insertChecklistFilter(
|
||||
fieldId: fieldId,
|
||||
condition: ChecklistFilterCondition.IsIncomplete,
|
||||
condition: ChecklistFilterConditionPB.IsIncomplete,
|
||||
);
|
||||
case FieldType.Number:
|
||||
return _ffiService.insertNumberFilter(
|
||||
fieldId: fieldId,
|
||||
condition: NumberFilterCondition.Equal,
|
||||
condition: NumberFilterConditionPB.Equal,
|
||||
content: "",
|
||||
);
|
||||
case FieldType.RichText:
|
||||
return _ffiService.insertTextFilter(
|
||||
fieldId: fieldId,
|
||||
condition: TextFilterCondition.Contains,
|
||||
condition: TextFilterConditionPB.Contains,
|
||||
content: '',
|
||||
);
|
||||
case FieldType.SingleSelect:
|
||||
return _ffiService.insertSelectOptionFilter(
|
||||
fieldId: fieldId,
|
||||
condition: SelectOptionCondition.OptionIs,
|
||||
condition: SelectOptionConditionPB.OptionIs,
|
||||
fieldType: FieldType.SingleSelect,
|
||||
);
|
||||
case FieldType.URL:
|
||||
return _ffiService.insertURLFilter(
|
||||
fieldId: fieldId,
|
||||
condition: TextFilterCondition.Contains,
|
||||
condition: TextFilterConditionPB.Contains,
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -32,7 +32,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertTextFilter({
|
||||
required String fieldId,
|
||||
String? filterId,
|
||||
required TextFilterCondition condition,
|
||||
required TextFilterConditionPB condition,
|
||||
required String content,
|
||||
}) {
|
||||
final filter = TextFilterPB()
|
||||
@ -50,7 +50,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertCheckboxFilter({
|
||||
required String fieldId,
|
||||
String? filterId,
|
||||
required CheckboxFilterCondition condition,
|
||||
required CheckboxFilterConditionPB condition,
|
||||
}) {
|
||||
final filter = CheckboxFilterPB()..condition = condition;
|
||||
|
||||
@ -65,7 +65,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertNumberFilter({
|
||||
required String fieldId,
|
||||
String? filterId,
|
||||
required NumberFilterCondition condition,
|
||||
required NumberFilterConditionPB condition,
|
||||
String content = "",
|
||||
}) {
|
||||
final filter = NumberFilterPB()
|
||||
@ -83,7 +83,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertDateFilter({
|
||||
required String fieldId,
|
||||
String? filterId,
|
||||
required DateFilterCondition condition,
|
||||
required DateFilterConditionPB condition,
|
||||
int? start,
|
||||
int? end,
|
||||
int? timestamp,
|
||||
@ -112,7 +112,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertURLFilter({
|
||||
required String fieldId,
|
||||
String? filterId,
|
||||
required TextFilterCondition condition,
|
||||
required TextFilterConditionPB condition,
|
||||
String content = "",
|
||||
}) {
|
||||
final filter = TextFilterPB()
|
||||
@ -130,7 +130,7 @@ class FilterFFIService {
|
||||
Future<Either<Unit, FlowyError>> insertSelectOptionFilter({
|
||||
required String fieldId,
|
||||
required FieldType fieldType,
|
||||
required SelectOptionCondition condition,
|
||||
required SelectOptionConditionPB condition,
|
||||
String? filterId,
|
||||
List<String> optionIds = const [],
|
||||
}) {
|
||||
@ -148,7 +148,7 @@ class FilterFFIService {
|
||||
|
||||
Future<Either<Unit, FlowyError>> insertChecklistFilter({
|
||||
required String fieldId,
|
||||
required ChecklistFilterCondition condition,
|
||||
required ChecklistFilterConditionPB condition,
|
||||
String? filterId,
|
||||
List<String> optionIds = const [],
|
||||
}) {
|
||||
@ -196,7 +196,7 @@ class FilterFFIService {
|
||||
required String filterId,
|
||||
required FieldType fieldType,
|
||||
}) {
|
||||
TextFilterCondition.DoesNotContain.value;
|
||||
TextFilterConditionPB.DoesNotContain.value;
|
||||
|
||||
final deleteFilterPayload = DeleteFilterPayloadPB.create()
|
||||
..fieldId = fieldId
|
||||
|
@ -33,7 +33,7 @@ class SelectOptionFilterEditorBloc
|
||||
_startListening();
|
||||
_loadOptions();
|
||||
},
|
||||
updateCondition: (SelectOptionCondition condition) {
|
||||
updateCondition: (SelectOptionConditionPB condition) {
|
||||
_ffiService.insertSelectOptionFilter(
|
||||
filterId: filterInfo.filter.id,
|
||||
fieldId: filterInfo.fieldInfo.id,
|
||||
@ -114,7 +114,7 @@ class SelectOptionFilterEditorEvent with _$SelectOptionFilterEditorEvent {
|
||||
const factory SelectOptionFilterEditorEvent.didReceiveFilter(
|
||||
FilterPB filter) = _DidReceiveFilter;
|
||||
const factory SelectOptionFilterEditorEvent.updateCondition(
|
||||
SelectOptionCondition condition) = _UpdateCondition;
|
||||
SelectOptionConditionPB condition) = _UpdateCondition;
|
||||
const factory SelectOptionFilterEditorEvent.updateContent(
|
||||
List<String> optionIds) = _UpdateContent;
|
||||
const factory SelectOptionFilterEditorEvent.updateFilterDescription(
|
||||
|
@ -28,7 +28,7 @@ class TextFilterEditorBloc
|
||||
initial: () async {
|
||||
_startListening();
|
||||
},
|
||||
updateCondition: (TextFilterCondition condition) {
|
||||
updateCondition: (TextFilterConditionPB condition) {
|
||||
_ffiService.insertTextFilter(
|
||||
filterId: filterInfo.filter.id,
|
||||
fieldId: filterInfo.fieldInfo.id,
|
||||
@ -88,7 +88,7 @@ class TextFilterEditorEvent with _$TextFilterEditorEvent {
|
||||
const factory TextFilterEditorEvent.didReceiveFilter(FilterPB filter) =
|
||||
_DidReceiveFilter;
|
||||
const factory TextFilterEditorEvent.updateCondition(
|
||||
TextFilterCondition condition) = _UpdateCondition;
|
||||
TextFilterConditionPB condition) = _UpdateCondition;
|
||||
const factory TextFilterEditorEvent.updateContent(String content) =
|
||||
_UpdateContent;
|
||||
const factory TextFilterEditorEvent.delete() = _Delete;
|
||||
|
@ -108,7 +108,7 @@ class _CheckboxFilterEditorState extends State<CheckboxFilterEditor> {
|
||||
children: [
|
||||
FlowyText(state.filterInfo.fieldInfo.name),
|
||||
const HSpace(4),
|
||||
CheckboxFilterConditionList(
|
||||
CheckboxFilterConditionPBList(
|
||||
filterInfo: state.filterInfo,
|
||||
popoverMutex: popoverMutex,
|
||||
onCondition: (condition) {
|
||||
@ -136,11 +136,11 @@ class _CheckboxFilterEditorState extends State<CheckboxFilterEditor> {
|
||||
}
|
||||
}
|
||||
|
||||
class CheckboxFilterConditionList extends StatelessWidget {
|
||||
class CheckboxFilterConditionPBList extends StatelessWidget {
|
||||
final FilterInfo filterInfo;
|
||||
final PopoverMutex popoverMutex;
|
||||
final Function(CheckboxFilterCondition) onCondition;
|
||||
const CheckboxFilterConditionList({
|
||||
final Function(CheckboxFilterConditionPB) onCondition;
|
||||
const CheckboxFilterConditionPBList({
|
||||
required this.filterInfo,
|
||||
required this.popoverMutex,
|
||||
required this.onCondition,
|
||||
@ -154,7 +154,7 @@ class CheckboxFilterConditionList extends StatelessWidget {
|
||||
asBarrier: true,
|
||||
mutex: popoverMutex,
|
||||
direction: PopoverDirection.bottomWithCenterAligned,
|
||||
actions: CheckboxFilterCondition.values
|
||||
actions: CheckboxFilterConditionPB.values
|
||||
.map(
|
||||
(action) => ConditionWrapper(
|
||||
action,
|
||||
@ -177,7 +177,7 @@ class CheckboxFilterConditionList extends StatelessWidget {
|
||||
}
|
||||
|
||||
class ConditionWrapper extends ActionCell {
|
||||
final CheckboxFilterCondition inner;
|
||||
final CheckboxFilterConditionPB inner;
|
||||
final bool isSelected;
|
||||
|
||||
ConditionWrapper(this.inner, this.isSelected);
|
||||
@ -195,12 +195,12 @@ class ConditionWrapper extends ActionCell {
|
||||
String get name => inner.filterName;
|
||||
}
|
||||
|
||||
extension TextFilterConditionExtension on CheckboxFilterCondition {
|
||||
extension TextFilterConditionPBExtension on CheckboxFilterConditionPB {
|
||||
String get filterName {
|
||||
switch (this) {
|
||||
case CheckboxFilterCondition.IsChecked:
|
||||
case CheckboxFilterConditionPB.IsChecked:
|
||||
return LocaleKeys.grid_checkboxFilter_isChecked.tr();
|
||||
case CheckboxFilterCondition.IsUnChecked:
|
||||
case CheckboxFilterConditionPB.IsUnChecked:
|
||||
return LocaleKeys.grid_checkboxFilter_isUnchecked.tr();
|
||||
default:
|
||||
return "";
|
||||
|
@ -92,7 +92,7 @@ class ChecklistState extends State<ChecklistFilterEditor> {
|
||||
children: [
|
||||
FlowyText(state.filterInfo.fieldInfo.name),
|
||||
const HSpace(4),
|
||||
ChecklistFilterConditionList(
|
||||
ChecklistFilterConditionPBList(
|
||||
filterInfo: state.filterInfo,
|
||||
),
|
||||
const Spacer(),
|
||||
@ -117,9 +117,9 @@ class ChecklistState extends State<ChecklistFilterEditor> {
|
||||
}
|
||||
}
|
||||
|
||||
class ChecklistFilterConditionList extends StatelessWidget {
|
||||
class ChecklistFilterConditionPBList extends StatelessWidget {
|
||||
final FilterInfo filterInfo;
|
||||
const ChecklistFilterConditionList({
|
||||
const ChecklistFilterConditionPBList({
|
||||
required this.filterInfo,
|
||||
Key? key,
|
||||
}) : super(key: key);
|
||||
@ -130,7 +130,7 @@ class ChecklistFilterConditionList extends StatelessWidget {
|
||||
return PopoverActionList<ConditionWrapper>(
|
||||
asBarrier: true,
|
||||
direction: PopoverDirection.bottomWithCenterAligned,
|
||||
actions: ChecklistFilterCondition.values
|
||||
actions: ChecklistFilterConditionPB.values
|
||||
.map((action) => ConditionWrapper(action))
|
||||
.toList(),
|
||||
buildChild: (controller) {
|
||||
@ -150,7 +150,7 @@ class ChecklistFilterConditionList extends StatelessWidget {
|
||||
}
|
||||
|
||||
class ConditionWrapper extends ActionCell {
|
||||
final ChecklistFilterCondition inner;
|
||||
final ChecklistFilterConditionPB inner;
|
||||
|
||||
ConditionWrapper(this.inner);
|
||||
|
||||
@ -158,12 +158,12 @@ class ConditionWrapper extends ActionCell {
|
||||
String get name => inner.filterName;
|
||||
}
|
||||
|
||||
extension ChecklistFilterConditionExtension on ChecklistFilterCondition {
|
||||
extension ChecklistFilterConditionPBExtension on ChecklistFilterConditionPB {
|
||||
String get filterName {
|
||||
switch (this) {
|
||||
case ChecklistFilterCondition.IsComplete:
|
||||
case ChecklistFilterConditionPB.IsComplete:
|
||||
return LocaleKeys.grid_checklistFilter_isComplete.tr();
|
||||
case ChecklistFilterCondition.IsIncomplete:
|
||||
case ChecklistFilterConditionPB.IsIncomplete:
|
||||
return LocaleKeys.grid_checklistFilter_isIncomplted.tr();
|
||||
default:
|
||||
return "";
|
||||
|
@ -12,7 +12,7 @@ import 'package:flutter/material.dart';
|
||||
class SelectOptionFilterConditionList extends StatelessWidget {
|
||||
final FilterInfo filterInfo;
|
||||
final PopoverMutex popoverMutex;
|
||||
final Function(SelectOptionCondition) onCondition;
|
||||
final Function(SelectOptionConditionPB) onCondition;
|
||||
const SelectOptionFilterConditionList({
|
||||
required this.filterInfo,
|
||||
required this.popoverMutex,
|
||||
@ -27,7 +27,7 @@ class SelectOptionFilterConditionList extends StatelessWidget {
|
||||
asBarrier: true,
|
||||
mutex: popoverMutex,
|
||||
direction: PopoverDirection.bottomWithCenterAligned,
|
||||
actions: SelectOptionCondition.values
|
||||
actions: SelectOptionConditionPB.values
|
||||
.map(
|
||||
(action) => ConditionWrapper(
|
||||
action,
|
||||
@ -59,7 +59,7 @@ class SelectOptionFilterConditionList extends StatelessWidget {
|
||||
}
|
||||
|
||||
class ConditionWrapper extends ActionCell {
|
||||
final SelectOptionCondition inner;
|
||||
final SelectOptionConditionPB inner;
|
||||
final bool isSelected;
|
||||
final FieldType fieldType;
|
||||
|
||||
@ -84,16 +84,16 @@ class ConditionWrapper extends ActionCell {
|
||||
}
|
||||
}
|
||||
|
||||
extension SelectOptionConditionExtension on SelectOptionCondition {
|
||||
extension SelectOptionConditionPBExtension on SelectOptionConditionPB {
|
||||
String get singleSelectFilterName {
|
||||
switch (this) {
|
||||
case SelectOptionCondition.OptionIs:
|
||||
case SelectOptionConditionPB.OptionIs:
|
||||
return LocaleKeys.grid_singleSelectOptionFilter_is.tr();
|
||||
case SelectOptionCondition.OptionIsEmpty:
|
||||
case SelectOptionConditionPB.OptionIsEmpty:
|
||||
return LocaleKeys.grid_singleSelectOptionFilter_isEmpty.tr();
|
||||
case SelectOptionCondition.OptionIsNot:
|
||||
case SelectOptionConditionPB.OptionIsNot:
|
||||
return LocaleKeys.grid_singleSelectOptionFilter_isNot.tr();
|
||||
case SelectOptionCondition.OptionIsNotEmpty:
|
||||
case SelectOptionConditionPB.OptionIsNotEmpty:
|
||||
return LocaleKeys.grid_singleSelectOptionFilter_isNotEmpty.tr();
|
||||
default:
|
||||
return "";
|
||||
@ -102,13 +102,13 @@ extension SelectOptionConditionExtension on SelectOptionCondition {
|
||||
|
||||
String get multiSelectFilterName {
|
||||
switch (this) {
|
||||
case SelectOptionCondition.OptionIs:
|
||||
case SelectOptionConditionPB.OptionIs:
|
||||
return LocaleKeys.grid_multiSelectOptionFilter_contains.tr();
|
||||
case SelectOptionCondition.OptionIsEmpty:
|
||||
case SelectOptionConditionPB.OptionIsEmpty:
|
||||
return LocaleKeys.grid_multiSelectOptionFilter_isEmpty.tr();
|
||||
case SelectOptionCondition.OptionIsNot:
|
||||
case SelectOptionConditionPB.OptionIsNot:
|
||||
return LocaleKeys.grid_multiSelectOptionFilter_doesNotContain.tr();
|
||||
case SelectOptionCondition.OptionIsNotEmpty:
|
||||
case SelectOptionConditionPB.OptionIsNotEmpty:
|
||||
return LocaleKeys.grid_multiSelectOptionFilter_isNotEmpty.tr();
|
||||
default:
|
||||
return "";
|
||||
|
@ -101,9 +101,9 @@ class _SelectOptionFilterEditorState extends State<SelectOptionFilterEditor> {
|
||||
SliverToBoxAdapter(child: _buildFilterPannel(context, state)),
|
||||
];
|
||||
|
||||
if (state.filter.condition != SelectOptionCondition.OptionIsEmpty &&
|
||||
if (state.filter.condition != SelectOptionConditionPB.OptionIsEmpty &&
|
||||
state.filter.condition !=
|
||||
SelectOptionCondition.OptionIsNotEmpty) {
|
||||
SelectOptionConditionPB.OptionIsNotEmpty) {
|
||||
slivers.add(const SliverToBoxAdapter(child: VSpace(4)));
|
||||
slivers.add(
|
||||
SliverToBoxAdapter(
|
||||
|
@ -64,8 +64,8 @@ class _TextFilterChoicechipState extends State<TextFilterChoicechip> {
|
||||
|
||||
String _makeFilterDesc(TextFilterEditorState state) {
|
||||
String filterDesc = state.filter.condition.choicechipPrefix;
|
||||
if (state.filter.condition == TextFilterCondition.TextIsEmpty ||
|
||||
state.filter.condition == TextFilterCondition.TextIsNotEmpty) {
|
||||
if (state.filter.condition == TextFilterConditionPB.TextIsEmpty ||
|
||||
state.filter.condition == TextFilterConditionPB.TextIsNotEmpty) {
|
||||
return filterDesc;
|
||||
}
|
||||
|
||||
@ -98,8 +98,8 @@ class _TextFilterEditorState extends State<TextFilterEditor> {
|
||||
_buildFilterPannel(context, state),
|
||||
];
|
||||
|
||||
if (state.filter.condition != TextFilterCondition.TextIsEmpty &&
|
||||
state.filter.condition != TextFilterCondition.TextIsNotEmpty) {
|
||||
if (state.filter.condition != TextFilterConditionPB.TextIsEmpty &&
|
||||
state.filter.condition != TextFilterConditionPB.TextIsNotEmpty) {
|
||||
children.add(const VSpace(4));
|
||||
children.add(_buildFilterTextField(context, state));
|
||||
}
|
||||
@ -120,7 +120,7 @@ class _TextFilterEditorState extends State<TextFilterEditor> {
|
||||
children: [
|
||||
FlowyText(state.filterInfo.fieldInfo.name),
|
||||
const HSpace(4),
|
||||
TextFilterConditionList(
|
||||
TextFilterConditionPBList(
|
||||
filterInfo: state.filterInfo,
|
||||
popoverMutex: popoverMutex,
|
||||
onCondition: (condition) {
|
||||
@ -163,11 +163,11 @@ class _TextFilterEditorState extends State<TextFilterEditor> {
|
||||
}
|
||||
}
|
||||
|
||||
class TextFilterConditionList extends StatelessWidget {
|
||||
class TextFilterConditionPBList extends StatelessWidget {
|
||||
final FilterInfo filterInfo;
|
||||
final PopoverMutex popoverMutex;
|
||||
final Function(TextFilterCondition) onCondition;
|
||||
const TextFilterConditionList({
|
||||
final Function(TextFilterConditionPB) onCondition;
|
||||
const TextFilterConditionPBList({
|
||||
required this.filterInfo,
|
||||
required this.popoverMutex,
|
||||
required this.onCondition,
|
||||
@ -181,7 +181,7 @@ class TextFilterConditionList extends StatelessWidget {
|
||||
asBarrier: true,
|
||||
mutex: popoverMutex,
|
||||
direction: PopoverDirection.bottomWithCenterAligned,
|
||||
actions: TextFilterCondition.values
|
||||
actions: TextFilterConditionPB.values
|
||||
.map(
|
||||
(action) => ConditionWrapper(
|
||||
action,
|
||||
@ -204,7 +204,7 @@ class TextFilterConditionList extends StatelessWidget {
|
||||
}
|
||||
|
||||
class ConditionWrapper extends ActionCell {
|
||||
final TextFilterCondition inner;
|
||||
final TextFilterConditionPB inner;
|
||||
final bool isSelected;
|
||||
|
||||
ConditionWrapper(this.inner, this.isSelected);
|
||||
@ -222,24 +222,24 @@ class ConditionWrapper extends ActionCell {
|
||||
String get name => inner.filterName;
|
||||
}
|
||||
|
||||
extension TextFilterConditionExtension on TextFilterCondition {
|
||||
extension TextFilterConditionPBExtension on TextFilterConditionPB {
|
||||
String get filterName {
|
||||
switch (this) {
|
||||
case TextFilterCondition.Contains:
|
||||
case TextFilterConditionPB.Contains:
|
||||
return LocaleKeys.grid_textFilter_contains.tr();
|
||||
case TextFilterCondition.DoesNotContain:
|
||||
case TextFilterConditionPB.DoesNotContain:
|
||||
return LocaleKeys.grid_textFilter_doesNotContain.tr();
|
||||
case TextFilterCondition.EndsWith:
|
||||
case TextFilterConditionPB.EndsWith:
|
||||
return LocaleKeys.grid_textFilter_endsWith.tr();
|
||||
case TextFilterCondition.Is:
|
||||
case TextFilterConditionPB.Is:
|
||||
return LocaleKeys.grid_textFilter_is.tr();
|
||||
case TextFilterCondition.IsNot:
|
||||
case TextFilterConditionPB.IsNot:
|
||||
return LocaleKeys.grid_textFilter_isNot.tr();
|
||||
case TextFilterCondition.StartsWith:
|
||||
case TextFilterConditionPB.StartsWith:
|
||||
return LocaleKeys.grid_textFilter_startWith.tr();
|
||||
case TextFilterCondition.TextIsEmpty:
|
||||
case TextFilterConditionPB.TextIsEmpty:
|
||||
return LocaleKeys.grid_textFilter_isEmpty.tr();
|
||||
case TextFilterCondition.TextIsNotEmpty:
|
||||
case TextFilterConditionPB.TextIsNotEmpty:
|
||||
return LocaleKeys.grid_textFilter_isNotEmpty.tr();
|
||||
default:
|
||||
return "";
|
||||
@ -248,17 +248,17 @@ extension TextFilterConditionExtension on TextFilterCondition {
|
||||
|
||||
String get choicechipPrefix {
|
||||
switch (this) {
|
||||
case TextFilterCondition.DoesNotContain:
|
||||
case TextFilterConditionPB.DoesNotContain:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_isNot.tr();
|
||||
case TextFilterCondition.EndsWith:
|
||||
case TextFilterConditionPB.EndsWith:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_endWith.tr();
|
||||
case TextFilterCondition.IsNot:
|
||||
case TextFilterConditionPB.IsNot:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_isNot.tr();
|
||||
case TextFilterCondition.StartsWith:
|
||||
case TextFilterConditionPB.StartsWith:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_startWith.tr();
|
||||
case TextFilterCondition.TextIsEmpty:
|
||||
case TextFilterConditionPB.TextIsEmpty:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_isEmpty.tr();
|
||||
case TextFilterCondition.TextIsNotEmpty:
|
||||
case TextFilterConditionPB.TextIsNotEmpty:
|
||||
return LocaleKeys.grid_textFilter_choicechipPrefix_isNotEmpty.tr();
|
||||
default:
|
||||
return "";
|
||||
|
@ -19,7 +19,7 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
|
||||
@ -32,7 +32,7 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
|
||||
@ -60,7 +60,7 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
|
||||
@ -81,7 +81,7 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
|
||||
@ -102,7 +102,7 @@ void main() {
|
||||
await gridResponseFuture();
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsNotEmpty,
|
||||
condition: TextFilterConditionPB.TextIsNotEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.isEmpty);
|
||||
@ -121,7 +121,7 @@ void main() {
|
||||
await gridResponseFuture();
|
||||
await service.insertCheckboxFilter(
|
||||
fieldId: checkboxField.id,
|
||||
condition: CheckboxFilterCondition.IsUnChecked,
|
||||
condition: CheckboxFilterConditionPB.IsUnChecked,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
assert(gridBloc.state.rowInfos.length == 3);
|
||||
@ -140,7 +140,7 @@ void main() {
|
||||
await gridResponseFuture();
|
||||
await service.insertCheckboxFilter(
|
||||
fieldId: checkboxField.id,
|
||||
condition: CheckboxFilterCondition.IsChecked,
|
||||
condition: CheckboxFilterConditionPB.IsChecked,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
assert(gridBloc.state.rowInfos.isEmpty);
|
||||
|
@ -28,7 +28,7 @@ void main() {
|
||||
// Insert filter for the text field
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(menuBloc.state.filters.length == 1);
|
||||
|
@ -23,7 +23,7 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(menuBloc.state.creatableFields.length == 2);
|
||||
@ -42,7 +42,7 @@ void main() {
|
||||
// Create filter
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
|
||||
@ -51,11 +51,11 @@ void main() {
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
filterId: textFilter.filter.id,
|
||||
condition: TextFilterCondition.Is,
|
||||
condition: TextFilterConditionPB.Is,
|
||||
content: "ABC");
|
||||
await gridResponseFuture();
|
||||
assert(menuBloc.state.filters.first.textFilter()!.condition ==
|
||||
TextFilterCondition.Is);
|
||||
TextFilterConditionPB.Is);
|
||||
assert(menuBloc.state.filters.first.textFilter()!.content == "ABC");
|
||||
});
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ void main() {
|
||||
final checkboxField = context.checkboxFieldContext();
|
||||
await service.insertCheckboxFilter(
|
||||
fieldId: checkboxField.id,
|
||||
condition: CheckboxFilterCondition.IsChecked,
|
||||
condition: CheckboxFilterConditionPB.IsChecked,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 1,
|
||||
@ -42,7 +42,7 @@ void main() {
|
||||
final checkboxField = context.checkboxFieldContext();
|
||||
await service.insertCheckboxFilter(
|
||||
fieldId: checkboxField.id,
|
||||
condition: CheckboxFilterCondition.IsUnChecked,
|
||||
condition: CheckboxFilterConditionPB.IsUnChecked,
|
||||
);
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 2,
|
||||
|
@ -19,7 +19,7 @@ void main() {
|
||||
// create a new filter
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(context.fieldController.filterInfos.length == 1,
|
||||
@ -46,7 +46,7 @@ void main() {
|
||||
// create a new filter
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsNotEmpty,
|
||||
condition: TextFilterConditionPB.TextIsNotEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 2,
|
||||
@ -71,7 +71,7 @@ void main() {
|
||||
// create a new filter
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterCondition.TextIsEmpty,
|
||||
condition: TextFilterConditionPB.TextIsEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(context.fieldController.filterInfos.length == 1,
|
||||
@ -84,7 +84,7 @@ void main() {
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
filterId: textFilter.filter.id,
|
||||
condition: TextFilterCondition.TextIsNotEmpty,
|
||||
condition: TextFilterConditionPB.TextIsNotEmpty,
|
||||
content: "");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 2);
|
||||
@ -106,7 +106,9 @@ void main() {
|
||||
final textField = context.textFieldContext();
|
||||
// create a new filter
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id, condition: TextFilterCondition.Is, content: "A");
|
||||
fieldId: textField.id,
|
||||
condition: TextFilterConditionPB.Is,
|
||||
content: "A");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 1,
|
||||
"expect 1 but receive ${context.rowInfos.length}");
|
||||
@ -116,7 +118,7 @@ void main() {
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
filterId: textFilter.filter.id,
|
||||
condition: TextFilterCondition.Is,
|
||||
condition: TextFilterConditionPB.Is,
|
||||
content: "B");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 1);
|
||||
@ -125,7 +127,7 @@ void main() {
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
filterId: textFilter.filter.id,
|
||||
condition: TextFilterCondition.Is,
|
||||
condition: TextFilterConditionPB.Is,
|
||||
content: "b");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.length == 1);
|
||||
@ -134,7 +136,7 @@ void main() {
|
||||
await service.insertTextFilter(
|
||||
fieldId: textField.id,
|
||||
filterId: textFilter.filter.id,
|
||||
condition: TextFilterCondition.Is,
|
||||
condition: TextFilterConditionPB.Is,
|
||||
content: "C");
|
||||
await gridResponseFuture();
|
||||
assert(context.rowInfos.isEmpty);
|
||||
|
@ -5,35 +5,35 @@ use grid_rev_model::FilterRevision;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct CheckboxFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: CheckboxFilterCondition,
|
||||
pub condition: CheckboxFilterConditionPB,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum CheckboxFilterCondition {
|
||||
pub enum CheckboxFilterConditionPB {
|
||||
IsChecked = 0,
|
||||
IsUnChecked = 1,
|
||||
}
|
||||
|
||||
impl std::convert::From<CheckboxFilterCondition> for u32 {
|
||||
fn from(value: CheckboxFilterCondition) -> Self {
|
||||
impl std::convert::From<CheckboxFilterConditionPB> for u32 {
|
||||
fn from(value: CheckboxFilterConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
|
||||
impl std::default::Default for CheckboxFilterCondition {
|
||||
impl std::default::Default for CheckboxFilterConditionPB {
|
||||
fn default() -> Self {
|
||||
CheckboxFilterCondition::IsChecked
|
||||
CheckboxFilterConditionPB::IsChecked
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::TryFrom<u8> for CheckboxFilterCondition {
|
||||
impl std::convert::TryFrom<u8> for CheckboxFilterConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
0 => Ok(CheckboxFilterCondition::IsChecked),
|
||||
1 => Ok(CheckboxFilterCondition::IsUnChecked),
|
||||
0 => Ok(CheckboxFilterConditionPB::IsChecked),
|
||||
1 => Ok(CheckboxFilterConditionPB::IsUnChecked),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
@ -42,7 +42,8 @@ impl std::convert::TryFrom<u8> for CheckboxFilterCondition {
|
||||
impl std::convert::From<&FilterRevision> for CheckboxFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
CheckboxFilterPB {
|
||||
condition: CheckboxFilterCondition::try_from(rev.condition).unwrap_or(CheckboxFilterCondition::IsChecked),
|
||||
condition: CheckboxFilterConditionPB::try_from(rev.condition)
|
||||
.unwrap_or(CheckboxFilterConditionPB::IsChecked),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5,35 +5,35 @@ use grid_rev_model::FilterRevision;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct ChecklistFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: ChecklistFilterCondition,
|
||||
pub condition: ChecklistFilterConditionPB,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum ChecklistFilterCondition {
|
||||
pub enum ChecklistFilterConditionPB {
|
||||
IsComplete = 0,
|
||||
IsIncomplete = 1,
|
||||
}
|
||||
|
||||
impl std::convert::From<ChecklistFilterCondition> for u32 {
|
||||
fn from(value: ChecklistFilterCondition) -> Self {
|
||||
impl std::convert::From<ChecklistFilterConditionPB> for u32 {
|
||||
fn from(value: ChecklistFilterConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
|
||||
impl std::default::Default for ChecklistFilterCondition {
|
||||
impl std::default::Default for ChecklistFilterConditionPB {
|
||||
fn default() -> Self {
|
||||
ChecklistFilterCondition::IsIncomplete
|
||||
ChecklistFilterConditionPB::IsIncomplete
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::TryFrom<u8> for ChecklistFilterCondition {
|
||||
impl std::convert::TryFrom<u8> for ChecklistFilterConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
0 => Ok(ChecklistFilterCondition::IsComplete),
|
||||
1 => Ok(ChecklistFilterCondition::IsIncomplete),
|
||||
0 => Ok(ChecklistFilterConditionPB::IsComplete),
|
||||
1 => Ok(ChecklistFilterConditionPB::IsIncomplete),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
@ -42,8 +42,8 @@ impl std::convert::TryFrom<u8> for ChecklistFilterCondition {
|
||||
impl std::convert::From<&FilterRevision> for ChecklistFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
ChecklistFilterPB {
|
||||
condition: ChecklistFilterCondition::try_from(rev.condition)
|
||||
.unwrap_or(ChecklistFilterCondition::IsIncomplete),
|
||||
condition: ChecklistFilterConditionPB::try_from(rev.condition)
|
||||
.unwrap_or(ChecklistFilterConditionPB::IsIncomplete),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ use std::str::FromStr;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct DateFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: DateFilterCondition,
|
||||
pub condition: DateFilterConditionPB,
|
||||
|
||||
#[pb(index = 2, one_of)]
|
||||
pub start: Option<i64>,
|
||||
@ -20,19 +20,19 @@ pub struct DateFilterPB {
|
||||
}
|
||||
|
||||
#[derive(Deserialize, Serialize, Default, Clone, Debug)]
|
||||
pub struct DateFilterContent {
|
||||
pub struct DateFilterContentPB {
|
||||
pub start: Option<i64>,
|
||||
pub end: Option<i64>,
|
||||
pub timestamp: Option<i64>,
|
||||
}
|
||||
|
||||
impl ToString for DateFilterContent {
|
||||
impl ToString for DateFilterContentPB {
|
||||
fn to_string(&self) -> String {
|
||||
serde_json::to_string(self).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for DateFilterContent {
|
||||
impl FromStr for DateFilterContentPB {
|
||||
type Err = serde_json::Error;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
@ -42,7 +42,7 @@ impl FromStr for DateFilterContent {
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum DateFilterCondition {
|
||||
pub enum DateFilterConditionPB {
|
||||
DateIs = 0,
|
||||
DateBefore = 1,
|
||||
DateAfter = 2,
|
||||
@ -53,42 +53,42 @@ pub enum DateFilterCondition {
|
||||
DateIsNotEmpty = 7,
|
||||
}
|
||||
|
||||
impl std::convert::From<DateFilterCondition> for u32 {
|
||||
fn from(value: DateFilterCondition) -> Self {
|
||||
impl std::convert::From<DateFilterConditionPB> for u32 {
|
||||
fn from(value: DateFilterConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
impl std::default::Default for DateFilterCondition {
|
||||
impl std::default::Default for DateFilterConditionPB {
|
||||
fn default() -> Self {
|
||||
DateFilterCondition::DateIs
|
||||
DateFilterConditionPB::DateIs
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::TryFrom<u8> for DateFilterCondition {
|
||||
impl std::convert::TryFrom<u8> for DateFilterConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
0 => Ok(DateFilterCondition::DateIs),
|
||||
1 => Ok(DateFilterCondition::DateBefore),
|
||||
2 => Ok(DateFilterCondition::DateAfter),
|
||||
3 => Ok(DateFilterCondition::DateOnOrBefore),
|
||||
4 => Ok(DateFilterCondition::DateOnOrAfter),
|
||||
5 => Ok(DateFilterCondition::DateWithIn),
|
||||
6 => Ok(DateFilterCondition::DateIsEmpty),
|
||||
0 => Ok(DateFilterConditionPB::DateIs),
|
||||
1 => Ok(DateFilterConditionPB::DateBefore),
|
||||
2 => Ok(DateFilterConditionPB::DateAfter),
|
||||
3 => Ok(DateFilterConditionPB::DateOnOrBefore),
|
||||
4 => Ok(DateFilterConditionPB::DateOnOrAfter),
|
||||
5 => Ok(DateFilterConditionPB::DateWithIn),
|
||||
6 => Ok(DateFilterConditionPB::DateIsEmpty),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl std::convert::From<&FilterRevision> for DateFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
let condition = DateFilterCondition::try_from(rev.condition).unwrap_or(DateFilterCondition::DateIs);
|
||||
let condition = DateFilterConditionPB::try_from(rev.condition).unwrap_or(DateFilterConditionPB::DateIs);
|
||||
let mut filter = DateFilterPB {
|
||||
condition,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
if let Ok(content) = DateFilterContent::from_str(&rev.content) {
|
||||
if let Ok(content) = DateFilterContentPB::from_str(&rev.content) {
|
||||
filter.start = content.start;
|
||||
filter.end = content.end;
|
||||
filter.timestamp = content.timestamp;
|
||||
|
@ -5,7 +5,7 @@ use grid_rev_model::FilterRevision;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct NumberFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: NumberFilterCondition,
|
||||
pub condition: NumberFilterConditionPB,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub content: String,
|
||||
@ -13,7 +13,7 @@ pub struct NumberFilterPB {
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum NumberFilterCondition {
|
||||
pub enum NumberFilterConditionPB {
|
||||
Equal = 0,
|
||||
NotEqual = 1,
|
||||
GreaterThan = 2,
|
||||
@ -24,30 +24,30 @@ pub enum NumberFilterCondition {
|
||||
NumberIsNotEmpty = 7,
|
||||
}
|
||||
|
||||
impl std::default::Default for NumberFilterCondition {
|
||||
impl std::default::Default for NumberFilterConditionPB {
|
||||
fn default() -> Self {
|
||||
NumberFilterCondition::Equal
|
||||
NumberFilterConditionPB::Equal
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::From<NumberFilterCondition> for u32 {
|
||||
fn from(value: NumberFilterCondition) -> Self {
|
||||
impl std::convert::From<NumberFilterConditionPB> for u32 {
|
||||
fn from(value: NumberFilterConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
impl std::convert::TryFrom<u8> for NumberFilterCondition {
|
||||
impl std::convert::TryFrom<u8> for NumberFilterConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(n: u8) -> Result<Self, Self::Error> {
|
||||
match n {
|
||||
0 => Ok(NumberFilterCondition::Equal),
|
||||
1 => Ok(NumberFilterCondition::NotEqual),
|
||||
2 => Ok(NumberFilterCondition::GreaterThan),
|
||||
3 => Ok(NumberFilterCondition::LessThan),
|
||||
4 => Ok(NumberFilterCondition::GreaterThanOrEqualTo),
|
||||
5 => Ok(NumberFilterCondition::LessThanOrEqualTo),
|
||||
6 => Ok(NumberFilterCondition::NumberIsEmpty),
|
||||
7 => Ok(NumberFilterCondition::NumberIsNotEmpty),
|
||||
0 => Ok(NumberFilterConditionPB::Equal),
|
||||
1 => Ok(NumberFilterConditionPB::NotEqual),
|
||||
2 => Ok(NumberFilterConditionPB::GreaterThan),
|
||||
3 => Ok(NumberFilterConditionPB::LessThan),
|
||||
4 => Ok(NumberFilterConditionPB::GreaterThanOrEqualTo),
|
||||
5 => Ok(NumberFilterConditionPB::LessThanOrEqualTo),
|
||||
6 => Ok(NumberFilterConditionPB::NumberIsEmpty),
|
||||
7 => Ok(NumberFilterConditionPB::NumberIsNotEmpty),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
@ -56,7 +56,7 @@ impl std::convert::TryFrom<u8> for NumberFilterCondition {
|
||||
impl std::convert::From<&FilterRevision> for NumberFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
NumberFilterPB {
|
||||
condition: NumberFilterCondition::try_from(rev.condition).unwrap_or(NumberFilterCondition::Equal),
|
||||
condition: NumberFilterConditionPB::try_from(rev.condition).unwrap_or(NumberFilterConditionPB::Equal),
|
||||
content: rev.content.clone(),
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@ use grid_rev_model::FilterRevision;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct SelectOptionFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: SelectOptionCondition,
|
||||
pub condition: SelectOptionConditionPB,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub option_ids: Vec<String>,
|
||||
@ -14,34 +14,34 @@ pub struct SelectOptionFilterPB {
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum SelectOptionCondition {
|
||||
pub enum SelectOptionConditionPB {
|
||||
OptionIs = 0,
|
||||
OptionIsNot = 1,
|
||||
OptionIsEmpty = 2,
|
||||
OptionIsNotEmpty = 3,
|
||||
}
|
||||
|
||||
impl std::convert::From<SelectOptionCondition> for u32 {
|
||||
fn from(value: SelectOptionCondition) -> Self {
|
||||
impl std::convert::From<SelectOptionConditionPB> for u32 {
|
||||
fn from(value: SelectOptionConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
|
||||
impl std::default::Default for SelectOptionCondition {
|
||||
impl std::default::Default for SelectOptionConditionPB {
|
||||
fn default() -> Self {
|
||||
SelectOptionCondition::OptionIs
|
||||
SelectOptionConditionPB::OptionIs
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::TryFrom<u8> for SelectOptionCondition {
|
||||
impl std::convert::TryFrom<u8> for SelectOptionConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
0 => Ok(SelectOptionCondition::OptionIs),
|
||||
1 => Ok(SelectOptionCondition::OptionIsNot),
|
||||
2 => Ok(SelectOptionCondition::OptionIsEmpty),
|
||||
3 => Ok(SelectOptionCondition::OptionIsNotEmpty),
|
||||
0 => Ok(SelectOptionConditionPB::OptionIs),
|
||||
1 => Ok(SelectOptionConditionPB::OptionIsNot),
|
||||
2 => Ok(SelectOptionConditionPB::OptionIsEmpty),
|
||||
3 => Ok(SelectOptionConditionPB::OptionIsNotEmpty),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
@ -51,7 +51,7 @@ impl std::convert::From<&FilterRevision> for SelectOptionFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
let ids = SelectOptionIds::from(rev.content.clone());
|
||||
SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::try_from(rev.condition).unwrap_or(SelectOptionCondition::OptionIs),
|
||||
condition: SelectOptionConditionPB::try_from(rev.condition).unwrap_or(SelectOptionConditionPB::OptionIs),
|
||||
option_ids: ids.into_inner(),
|
||||
}
|
||||
}
|
||||
|
@ -5,7 +5,7 @@ use grid_rev_model::FilterRevision;
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct TextFilterPB {
|
||||
#[pb(index = 1)]
|
||||
pub condition: TextFilterCondition,
|
||||
pub condition: TextFilterConditionPB,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub content: String,
|
||||
@ -13,7 +13,7 @@ pub struct TextFilterPB {
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum TextFilterCondition {
|
||||
pub enum TextFilterConditionPB {
|
||||
Is = 0,
|
||||
IsNot = 1,
|
||||
Contains = 2,
|
||||
@ -24,31 +24,31 @@ pub enum TextFilterCondition {
|
||||
TextIsNotEmpty = 7,
|
||||
}
|
||||
|
||||
impl std::convert::From<TextFilterCondition> for u32 {
|
||||
fn from(value: TextFilterCondition) -> Self {
|
||||
impl std::convert::From<TextFilterConditionPB> for u32 {
|
||||
fn from(value: TextFilterConditionPB) -> Self {
|
||||
value as u32
|
||||
}
|
||||
}
|
||||
|
||||
impl std::default::Default for TextFilterCondition {
|
||||
impl std::default::Default for TextFilterConditionPB {
|
||||
fn default() -> Self {
|
||||
TextFilterCondition::Is
|
||||
TextFilterConditionPB::Is
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::TryFrom<u8> for TextFilterCondition {
|
||||
impl std::convert::TryFrom<u8> for TextFilterConditionPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_from(value: u8) -> Result<Self, Self::Error> {
|
||||
match value {
|
||||
0 => Ok(TextFilterCondition::Is),
|
||||
1 => Ok(TextFilterCondition::IsNot),
|
||||
2 => Ok(TextFilterCondition::Contains),
|
||||
3 => Ok(TextFilterCondition::DoesNotContain),
|
||||
4 => Ok(TextFilterCondition::StartsWith),
|
||||
5 => Ok(TextFilterCondition::EndsWith),
|
||||
6 => Ok(TextFilterCondition::TextIsEmpty),
|
||||
7 => Ok(TextFilterCondition::TextIsNotEmpty),
|
||||
0 => Ok(TextFilterConditionPB::Is),
|
||||
1 => Ok(TextFilterConditionPB::IsNot),
|
||||
2 => Ok(TextFilterConditionPB::Contains),
|
||||
3 => Ok(TextFilterConditionPB::DoesNotContain),
|
||||
4 => Ok(TextFilterConditionPB::StartsWith),
|
||||
5 => Ok(TextFilterConditionPB::EndsWith),
|
||||
6 => Ok(TextFilterConditionPB::TextIsEmpty),
|
||||
7 => Ok(TextFilterConditionPB::TextIsNotEmpty),
|
||||
_ => Err(ErrorCode::InvalidData),
|
||||
}
|
||||
}
|
||||
@ -57,7 +57,7 @@ impl std::convert::TryFrom<u8> for TextFilterCondition {
|
||||
impl std::convert::From<&FilterRevision> for TextFilterPB {
|
||||
fn from(rev: &FilterRevision) -> Self {
|
||||
TextFilterPB {
|
||||
condition: TextFilterCondition::try_from(rev.condition).unwrap_or(TextFilterCondition::Is),
|
||||
condition: TextFilterConditionPB::try_from(rev.condition).unwrap_or(TextFilterConditionPB::Is),
|
||||
content: rev.content.clone(),
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::entities::parser::NotEmptyStr;
|
||||
use crate::entities::{
|
||||
CheckboxFilterPB, ChecklistFilterPB, DateFilterContent, DateFilterPB, FieldType, NumberFilterPB,
|
||||
CheckboxFilterPB, ChecklistFilterPB, DateFilterContentPB, DateFilterPB, FieldType, NumberFilterPB,
|
||||
SelectOptionFilterPB, TextFilterPB,
|
||||
};
|
||||
use crate::services::field::SelectOptionIds;
|
||||
@ -116,6 +116,7 @@ pub struct AlterFilterPayloadPB {
|
||||
#[pb(index = 2)]
|
||||
pub field_type: FieldType,
|
||||
|
||||
/// Create a new filter if the filter_id is None
|
||||
#[pb(index = 3, one_of)]
|
||||
pub filter_id: Option<String>,
|
||||
|
||||
@ -169,7 +170,7 @@ impl TryInto<AlterFilterParams> for AlterFilterPayloadPB {
|
||||
FieldType::DateTime => {
|
||||
let filter = DateFilterPB::try_from(bytes).map_err(|_| ErrorCode::ProtobufSerde)?;
|
||||
condition = filter.condition as u8;
|
||||
content = DateFilterContent {
|
||||
content = DateFilterContentPB {
|
||||
start: filter.start,
|
||||
end: filter.end,
|
||||
timestamp: filter.timestamp,
|
||||
@ -196,6 +197,7 @@ impl TryInto<AlterFilterParams> for AlterFilterPayloadPB {
|
||||
#[derive(Debug)]
|
||||
pub struct AlterFilterParams {
|
||||
pub field_id: String,
|
||||
/// Create a new filter if the filter_id is None
|
||||
pub filter_id: Option<String>,
|
||||
pub field_type: FieldTypeRevision,
|
||||
pub condition: u8,
|
||||
|
@ -6,6 +6,7 @@ mod group_entities;
|
||||
pub mod parser;
|
||||
mod row_entities;
|
||||
pub mod setting_entities;
|
||||
mod sort_entities;
|
||||
mod view_entities;
|
||||
|
||||
pub use cell_entities::*;
|
||||
@ -15,4 +16,5 @@ pub use grid_entities::*;
|
||||
pub use group_entities::*;
|
||||
pub use row_entities::*;
|
||||
pub use setting_entities::*;
|
||||
pub use sort_entities::*;
|
||||
pub use view_entities::*;
|
||||
|
@ -1,7 +1,8 @@
|
||||
use crate::entities::parser::NotEmptyStr;
|
||||
use crate::entities::{
|
||||
AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, DeleteFilterPayloadPB, DeleteGroupParams,
|
||||
DeleteGroupPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB, RepeatedGroupConfigurationPB,
|
||||
AlterFilterParams, AlterFilterPayloadPB, AlterSortParams, AlterSortPayloadPB, DeleteFilterParams,
|
||||
DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, DeleteSortParams, DeleteSortPayloadPB,
|
||||
InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB, RepeatedGroupConfigurationPB,
|
||||
};
|
||||
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
|
||||
use flowy_error::ErrorCode;
|
||||
@ -83,7 +84,7 @@ pub struct GridSettingChangesetPB {
|
||||
pub layout_type: GridLayout,
|
||||
|
||||
#[pb(index = 3, one_of)]
|
||||
pub insert_filter: Option<AlterFilterPayloadPB>,
|
||||
pub alter_filter: Option<AlterFilterPayloadPB>,
|
||||
|
||||
#[pb(index = 4, one_of)]
|
||||
pub delete_filter: Option<DeleteFilterPayloadPB>,
|
||||
@ -93,6 +94,12 @@ pub struct GridSettingChangesetPB {
|
||||
|
||||
#[pb(index = 6, one_of)]
|
||||
pub delete_group: Option<DeleteGroupPayloadPB>,
|
||||
|
||||
#[pb(index = 7, one_of)]
|
||||
pub alter_sort: Option<AlterSortPayloadPB>,
|
||||
|
||||
#[pb(index = 8, one_of)]
|
||||
pub delete_sort: Option<DeleteSortPayloadPB>,
|
||||
}
|
||||
|
||||
impl TryInto<GridSettingChangesetParams> for GridSettingChangesetPB {
|
||||
@ -103,7 +110,7 @@ impl TryInto<GridSettingChangesetParams> for GridSettingChangesetPB {
|
||||
.map_err(|_| ErrorCode::ViewIdInvalid)?
|
||||
.0;
|
||||
|
||||
let insert_filter = match self.insert_filter {
|
||||
let insert_filter = match self.alter_filter {
|
||||
None => None,
|
||||
Some(payload) => Some(payload.try_into()?),
|
||||
};
|
||||
@ -123,6 +130,16 @@ impl TryInto<GridSettingChangesetParams> for GridSettingChangesetPB {
|
||||
None => None,
|
||||
};
|
||||
|
||||
let alert_sort = match self.alter_sort {
|
||||
None => None,
|
||||
Some(payload) => Some(payload.try_into()?),
|
||||
};
|
||||
|
||||
let delete_sort = match self.delete_sort {
|
||||
None => None,
|
||||
Some(payload) => Some(payload.try_into()?),
|
||||
};
|
||||
|
||||
Ok(GridSettingChangesetParams {
|
||||
grid_id: view_id,
|
||||
layout_type: self.layout_type.into(),
|
||||
@ -130,6 +147,8 @@ impl TryInto<GridSettingChangesetParams> for GridSettingChangesetPB {
|
||||
delete_filter,
|
||||
insert_group,
|
||||
delete_group,
|
||||
alert_sort,
|
||||
delete_sort,
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -141,6 +160,8 @@ pub struct GridSettingChangesetParams {
|
||||
pub delete_filter: Option<DeleteFilterParams>,
|
||||
pub insert_group: Option<InsertGroupParams>,
|
||||
pub delete_group: Option<DeleteGroupParams>,
|
||||
pub alert_sort: Option<AlterSortParams>,
|
||||
pub delete_sort: Option<DeleteSortParams>,
|
||||
}
|
||||
|
||||
impl GridSettingChangesetParams {
|
||||
|
118
frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs
Normal file
118
frontend/rust-lib/flowy-grid/src/entities/sort_entities.rs
Normal file
@ -0,0 +1,118 @@
|
||||
use crate::entities::parser::NotEmptyStr;
|
||||
use crate::entities::FieldType;
|
||||
use crate::services::sort::SortType;
|
||||
use bytes::Bytes;
|
||||
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
|
||||
use flowy_error::ErrorCode;
|
||||
use grid_rev_model::{FieldRevision, FieldTypeRevision};
|
||||
|
||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct GridSortPB {
|
||||
#[pb(index = 1)]
|
||||
pub id: String,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub field_id: String,
|
||||
|
||||
#[pb(index = 3)]
|
||||
pub field_type: FieldType,
|
||||
|
||||
#[pb(index = 4)]
|
||||
pub condition: GridSortConditionPB,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum)]
|
||||
#[repr(u8)]
|
||||
pub enum GridSortConditionPB {
|
||||
Ascending = 0,
|
||||
Descending = 1,
|
||||
}
|
||||
impl std::default::Default for GridSortConditionPB {
|
||||
fn default() -> Self {
|
||||
Self::Ascending
|
||||
}
|
||||
}
|
||||
#[derive(ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct AlterSortPayloadPB {
|
||||
#[pb(index = 1)]
|
||||
pub field_id: String,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub field_type: FieldType,
|
||||
|
||||
/// Create a new filter if the filter_id is None
|
||||
#[pb(index = 3, one_of)]
|
||||
pub sort_id: Option<String>,
|
||||
|
||||
#[pb(index = 4)]
|
||||
pub condition: GridSortConditionPB,
|
||||
}
|
||||
|
||||
impl TryInto<AlterSortParams> for AlterSortPayloadPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_into(self) -> Result<AlterSortParams, Self::Error> {
|
||||
let field_id = NotEmptyStr::parse(self.field_id)
|
||||
.map_err(|_| ErrorCode::FieldIdIsEmpty)?
|
||||
.0;
|
||||
let sort_id = match self.sort_id {
|
||||
None => None,
|
||||
Some(filter_id) => Some(NotEmptyStr::parse(filter_id).map_err(|_| ErrorCode::FilterIdIsEmpty)?.0),
|
||||
};
|
||||
|
||||
Ok(AlterSortParams {
|
||||
field_id,
|
||||
sort_id,
|
||||
field_type: self.field_type.into(),
|
||||
condition: self.condition as u8,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct AlterSortParams {
|
||||
pub field_id: String,
|
||||
/// Create a new sort if the sort is None
|
||||
pub sort_id: Option<String>,
|
||||
pub field_type: FieldTypeRevision,
|
||||
pub condition: u8,
|
||||
}
|
||||
|
||||
#[derive(ProtoBuf, Debug, Default, Clone)]
|
||||
pub struct DeleteSortPayloadPB {
|
||||
#[pb(index = 1)]
|
||||
pub field_id: String,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub field_type: FieldType,
|
||||
|
||||
#[pb(index = 3)]
|
||||
pub sort_id: String,
|
||||
}
|
||||
|
||||
impl TryInto<DeleteSortParams> for DeleteSortPayloadPB {
|
||||
type Error = ErrorCode;
|
||||
|
||||
fn try_into(self) -> Result<DeleteSortParams, Self::Error> {
|
||||
let field_id = NotEmptyStr::parse(self.field_id)
|
||||
.map_err(|_| ErrorCode::FieldIdIsEmpty)?
|
||||
.0;
|
||||
|
||||
let sort_id = NotEmptyStr::parse(self.sort_id)
|
||||
.map_err(|_| ErrorCode::UnexpectedEmptyString)?
|
||||
.0;
|
||||
|
||||
let sort_type = SortType {
|
||||
field_id,
|
||||
field_type: self.field_type,
|
||||
};
|
||||
|
||||
Ok(DeleteSortParams { sort_type, sort_id })
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct DeleteSortParams {
|
||||
pub sort_type: SortType,
|
||||
pub sort_id: String,
|
||||
}
|
@ -58,6 +58,13 @@ pub(crate) async fn update_grid_setting_handler(
|
||||
if let Some(delete_filter) = params.delete_filter {
|
||||
let _ = editor.delete_filter(delete_filter).await?;
|
||||
}
|
||||
|
||||
if let Some(alter_sort) = params.alert_sort {
|
||||
let _ = editor.create_or_update_sort(alter_sort).await?;
|
||||
}
|
||||
if let Some(delete_sort) = params.delete_sort {
|
||||
let _ = editor.delete_sort(delete_sort).await?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::entities::{CheckboxFilterCondition, CheckboxFilterPB};
|
||||
use crate::entities::{CheckboxFilterConditionPB, CheckboxFilterPB};
|
||||
use crate::services::cell::{CellData, CellFilterOperation, TypeCellData};
|
||||
use crate::services::field::{CheckboxCellData, CheckboxTypeOptionPB};
|
||||
use flowy_error::FlowyResult;
|
||||
@ -7,8 +7,8 @@ impl CheckboxFilterPB {
|
||||
pub fn is_visible(&self, cell_data: &CheckboxCellData) -> bool {
|
||||
let is_check = cell_data.is_check();
|
||||
match self.condition {
|
||||
CheckboxFilterCondition::IsChecked => is_check,
|
||||
CheckboxFilterCondition::IsUnChecked => !is_check,
|
||||
CheckboxFilterConditionPB::IsChecked => is_check,
|
||||
CheckboxFilterConditionPB::IsUnChecked => !is_check,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -26,14 +26,14 @@ impl CellFilterOperation<CheckboxFilterPB> for CheckboxTypeOptionPB {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::entities::{CheckboxFilterCondition, CheckboxFilterPB};
|
||||
use crate::entities::{CheckboxFilterConditionPB, CheckboxFilterPB};
|
||||
use crate::services::field::CheckboxCellData;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[test]
|
||||
fn checkbox_filter_is_check_test() {
|
||||
let checkbox_filter = CheckboxFilterPB {
|
||||
condition: CheckboxFilterCondition::IsChecked,
|
||||
condition: CheckboxFilterConditionPB::IsChecked,
|
||||
};
|
||||
for (value, visible) in [("true", true), ("yes", true), ("false", false), ("no", false)] {
|
||||
let data = CheckboxCellData::from_str(value).unwrap();
|
||||
@ -44,7 +44,7 @@ mod tests {
|
||||
#[test]
|
||||
fn checkbox_filter_is_uncheck_test() {
|
||||
let checkbox_filter = CheckboxFilterPB {
|
||||
condition: CheckboxFilterCondition::IsUnChecked,
|
||||
condition: CheckboxFilterConditionPB::IsUnChecked,
|
||||
};
|
||||
for (value, visible) in [("false", true), ("no", true), ("true", false), ("yes", false)] {
|
||||
let data = CheckboxCellData::from_str(value).unwrap();
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::entities::{DateFilterCondition, DateFilterPB};
|
||||
use crate::entities::{DateFilterConditionPB, DateFilterPB};
|
||||
use crate::services::cell::{CellData, CellFilterOperation, TypeCellData};
|
||||
use crate::services::field::{DateTimestamp, DateTypeOptionPB};
|
||||
use chrono::NaiveDateTime;
|
||||
@ -7,13 +7,13 @@ use flowy_error::FlowyResult;
|
||||
impl DateFilterPB {
|
||||
pub fn is_visible<T: Into<Option<i64>>>(&self, cell_timestamp: T) -> bool {
|
||||
match cell_timestamp.into() {
|
||||
None => DateFilterCondition::DateIsEmpty == self.condition,
|
||||
None => DateFilterConditionPB::DateIsEmpty == self.condition,
|
||||
Some(timestamp) => {
|
||||
match self.condition {
|
||||
DateFilterCondition::DateIsNotEmpty => {
|
||||
DateFilterConditionPB::DateIsNotEmpty => {
|
||||
return true;
|
||||
}
|
||||
DateFilterCondition::DateIsEmpty => {
|
||||
DateFilterConditionPB::DateIsEmpty => {
|
||||
return false;
|
||||
}
|
||||
_ => {}
|
||||
@ -45,11 +45,11 @@ impl DateFilterPB {
|
||||
|
||||
// We assume that the cell_timestamp doesn't contain hours, just day.
|
||||
match self.condition {
|
||||
DateFilterCondition::DateIs => cell_date == expected_date,
|
||||
DateFilterCondition::DateBefore => cell_date < expected_date,
|
||||
DateFilterCondition::DateAfter => cell_date > expected_date,
|
||||
DateFilterCondition::DateOnOrBefore => cell_date <= expected_date,
|
||||
DateFilterCondition::DateOnOrAfter => cell_date >= expected_date,
|
||||
DateFilterConditionPB::DateIs => cell_date == expected_date,
|
||||
DateFilterConditionPB::DateBefore => cell_date < expected_date,
|
||||
DateFilterConditionPB::DateAfter => cell_date > expected_date,
|
||||
DateFilterConditionPB::DateOnOrBefore => cell_date <= expected_date,
|
||||
DateFilterConditionPB::DateOnOrAfter => cell_date >= expected_date,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
@ -73,12 +73,12 @@ impl CellFilterOperation<DateFilterPB> for DateTypeOptionPB {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#![allow(clippy::all)]
|
||||
use crate::entities::{DateFilterCondition, DateFilterPB};
|
||||
use crate::entities::{DateFilterConditionPB, DateFilterPB};
|
||||
|
||||
#[test]
|
||||
fn date_filter_is_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateIs,
|
||||
condition: DateFilterConditionPB::DateIs,
|
||||
timestamp: Some(1668387885),
|
||||
end: None,
|
||||
start: None,
|
||||
@ -91,7 +91,7 @@ mod tests {
|
||||
#[test]
|
||||
fn date_filter_before_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateBefore,
|
||||
condition: DateFilterConditionPB::DateBefore,
|
||||
timestamp: Some(1668387885),
|
||||
start: None,
|
||||
end: None,
|
||||
@ -105,7 +105,7 @@ mod tests {
|
||||
#[test]
|
||||
fn date_filter_before_or_on_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateOnOrBefore,
|
||||
condition: DateFilterConditionPB::DateOnOrBefore,
|
||||
timestamp: Some(1668387885),
|
||||
start: None,
|
||||
end: None,
|
||||
@ -118,7 +118,7 @@ mod tests {
|
||||
#[test]
|
||||
fn date_filter_after_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateAfter,
|
||||
condition: DateFilterConditionPB::DateAfter,
|
||||
timestamp: Some(1668387885),
|
||||
start: None,
|
||||
end: None,
|
||||
@ -132,7 +132,7 @@ mod tests {
|
||||
#[test]
|
||||
fn date_filter_within_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateWithIn,
|
||||
condition: DateFilterConditionPB::DateWithIn,
|
||||
start: Some(1668272685), // 11/13
|
||||
end: Some(1668618285), // 11/17
|
||||
timestamp: None,
|
||||
@ -150,7 +150,7 @@ mod tests {
|
||||
#[test]
|
||||
fn date_filter_is_empty_test() {
|
||||
let filter = DateFilterPB {
|
||||
condition: DateFilterCondition::DateIsEmpty,
|
||||
condition: DateFilterConditionPB::DateIsEmpty,
|
||||
start: None,
|
||||
end: None,
|
||||
timestamp: None,
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::entities::{NumberFilterCondition, NumberFilterPB};
|
||||
use crate::entities::{NumberFilterConditionPB, NumberFilterPB};
|
||||
use crate::services::cell::{CellFilterOperation, TypeCellData};
|
||||
use crate::services::field::{NumberCellData, NumberTypeOptionPB};
|
||||
use flowy_error::FlowyResult;
|
||||
@ -10,10 +10,10 @@ impl NumberFilterPB {
|
||||
pub fn is_visible(&self, num_cell_data: &NumberCellData) -> bool {
|
||||
if self.content.is_empty() {
|
||||
match self.condition {
|
||||
NumberFilterCondition::NumberIsEmpty => {
|
||||
NumberFilterConditionPB::NumberIsEmpty => {
|
||||
return num_cell_data.is_empty();
|
||||
}
|
||||
NumberFilterCondition::NumberIsNotEmpty => {
|
||||
NumberFilterConditionPB::NumberIsNotEmpty => {
|
||||
return !num_cell_data.is_empty();
|
||||
}
|
||||
_ => {}
|
||||
@ -24,12 +24,12 @@ impl NumberFilterPB {
|
||||
Some(cell_decimal) => {
|
||||
let decimal = Decimal::from_str(&self.content).unwrap_or_else(|_| Decimal::zero());
|
||||
match self.condition {
|
||||
NumberFilterCondition::Equal => cell_decimal == &decimal,
|
||||
NumberFilterCondition::NotEqual => cell_decimal != &decimal,
|
||||
NumberFilterCondition::GreaterThan => cell_decimal > &decimal,
|
||||
NumberFilterCondition::LessThan => cell_decimal < &decimal,
|
||||
NumberFilterCondition::GreaterThanOrEqualTo => cell_decimal >= &decimal,
|
||||
NumberFilterCondition::LessThanOrEqualTo => cell_decimal <= &decimal,
|
||||
NumberFilterConditionPB::Equal => cell_decimal == &decimal,
|
||||
NumberFilterConditionPB::NotEqual => cell_decimal != &decimal,
|
||||
NumberFilterConditionPB::GreaterThan => cell_decimal > &decimal,
|
||||
NumberFilterConditionPB::LessThan => cell_decimal < &decimal,
|
||||
NumberFilterConditionPB::GreaterThanOrEqualTo => cell_decimal >= &decimal,
|
||||
NumberFilterConditionPB::LessThanOrEqualTo => cell_decimal <= &decimal,
|
||||
_ => true,
|
||||
}
|
||||
}
|
||||
@ -52,12 +52,12 @@ impl CellFilterOperation<NumberFilterPB> for NumberTypeOptionPB {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::entities::{NumberFilterCondition, NumberFilterPB};
|
||||
use crate::entities::{NumberFilterConditionPB, NumberFilterPB};
|
||||
use crate::services::field::{NumberCellData, NumberFormat};
|
||||
#[test]
|
||||
fn number_filter_equal_test() {
|
||||
let number_filter = NumberFilterPB {
|
||||
condition: NumberFilterCondition::Equal,
|
||||
condition: NumberFilterConditionPB::Equal,
|
||||
content: "123".to_owned(),
|
||||
};
|
||||
|
||||
@ -75,7 +75,7 @@ mod tests {
|
||||
#[test]
|
||||
fn number_filter_greater_than_test() {
|
||||
let number_filter = NumberFilterPB {
|
||||
condition: NumberFilterCondition::GreaterThan,
|
||||
condition: NumberFilterConditionPB::GreaterThan,
|
||||
content: "12".to_owned(),
|
||||
};
|
||||
for (num_str, visible) in [("123", true), ("10", false), ("30", true), ("", false)] {
|
||||
@ -87,7 +87,7 @@ mod tests {
|
||||
#[test]
|
||||
fn number_filter_less_than_test() {
|
||||
let number_filter = NumberFilterPB {
|
||||
condition: NumberFilterCondition::LessThan,
|
||||
condition: NumberFilterConditionPB::LessThan,
|
||||
content: "100".to_owned(),
|
||||
};
|
||||
for (num_str, visible) in [("12", true), ("1234", false), ("30", true), ("", false)] {
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::entities::{ChecklistFilterCondition, ChecklistFilterPB};
|
||||
use crate::entities::{ChecklistFilterConditionPB, ChecklistFilterPB};
|
||||
use crate::services::field::{SelectOptionPB, SelectedSelectOptions};
|
||||
|
||||
impl ChecklistFilterPB {
|
||||
@ -15,7 +15,7 @@ impl ChecklistFilterPB {
|
||||
.collect::<Vec<&str>>();
|
||||
|
||||
match self.condition {
|
||||
ChecklistFilterCondition::IsComplete => {
|
||||
ChecklistFilterConditionPB::IsComplete => {
|
||||
if selected_option_ids.is_empty() {
|
||||
return false;
|
||||
}
|
||||
@ -23,7 +23,7 @@ impl ChecklistFilterPB {
|
||||
all_option_ids.retain(|option_id| !selected_option_ids.contains(option_id));
|
||||
all_option_ids.is_empty()
|
||||
}
|
||||
ChecklistFilterCondition::IsIncomplete => {
|
||||
ChecklistFilterConditionPB::IsIncomplete => {
|
||||
if selected_option_ids.is_empty() {
|
||||
return true;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
#![allow(clippy::needless_collect)]
|
||||
|
||||
use crate::entities::{ChecklistFilterPB, FieldType, SelectOptionCondition, SelectOptionFilterPB};
|
||||
use crate::entities::{ChecklistFilterPB, FieldType, SelectOptionConditionPB, SelectOptionFilterPB};
|
||||
use crate::services::cell::{CellFilterOperation, TypeCellData};
|
||||
use crate::services::field::{ChecklistTypeOptionPB, MultiSelectTypeOptionPB, SingleSelectTypeOptionPB};
|
||||
use crate::services::field::{SelectTypeOptionSharedAction, SelectedSelectOptions};
|
||||
@ -10,7 +10,7 @@ impl SelectOptionFilterPB {
|
||||
pub fn is_visible(&self, selected_options: &SelectedSelectOptions, field_type: FieldType) -> bool {
|
||||
let selected_option_ids: Vec<&String> = selected_options.options.iter().map(|option| &option.id).collect();
|
||||
match self.condition {
|
||||
SelectOptionCondition::OptionIs => match field_type {
|
||||
SelectOptionConditionPB::OptionIs => match field_type {
|
||||
FieldType::SingleSelect => {
|
||||
if self.option_ids.is_empty() {
|
||||
return true;
|
||||
@ -43,7 +43,7 @@ impl SelectOptionFilterPB {
|
||||
}
|
||||
_ => false,
|
||||
},
|
||||
SelectOptionCondition::OptionIsNot => match field_type {
|
||||
SelectOptionConditionPB::OptionIsNot => match field_type {
|
||||
FieldType::SingleSelect => {
|
||||
if self.option_ids.is_empty() {
|
||||
return true;
|
||||
@ -72,8 +72,8 @@ impl SelectOptionFilterPB {
|
||||
}
|
||||
_ => false,
|
||||
},
|
||||
SelectOptionCondition::OptionIsEmpty => selected_option_ids.is_empty(),
|
||||
SelectOptionCondition::OptionIsNotEmpty => !selected_option_ids.is_empty(),
|
||||
SelectOptionConditionPB::OptionIsEmpty => selected_option_ids.is_empty(),
|
||||
SelectOptionConditionPB::OptionIsNotEmpty => !selected_option_ids.is_empty(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -112,14 +112,14 @@ impl CellFilterOperation<ChecklistFilterPB> for ChecklistTypeOptionPB {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#![allow(clippy::all)]
|
||||
use crate::entities::{FieldType, SelectOptionCondition, SelectOptionFilterPB};
|
||||
use crate::entities::{FieldType, SelectOptionConditionPB, SelectOptionFilterPB};
|
||||
use crate::services::field::selection_type_option::{SelectOptionPB, SelectedSelectOptions};
|
||||
|
||||
#[test]
|
||||
fn select_option_filter_is_empty_test() {
|
||||
let option = SelectOptionPB::new("A");
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIsEmpty,
|
||||
condition: SelectOptionConditionPB::OptionIsEmpty,
|
||||
option_ids: vec![],
|
||||
};
|
||||
|
||||
@ -152,7 +152,7 @@ mod tests {
|
||||
let option_1 = SelectOptionPB::new("A");
|
||||
let option_2 = SelectOptionPB::new("B");
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIsNotEmpty,
|
||||
condition: SelectOptionConditionPB::OptionIsNotEmpty,
|
||||
option_ids: vec![option_1.id.clone(), option_2.id.clone()],
|
||||
};
|
||||
|
||||
@ -191,7 +191,7 @@ mod tests {
|
||||
let option_2 = SelectOptionPB::new("B");
|
||||
let option_3 = SelectOptionPB::new("C");
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIsNot,
|
||||
condition: SelectOptionConditionPB::OptionIsNot,
|
||||
option_ids: vec![option_1.id.clone(), option_2.id.clone()],
|
||||
};
|
||||
|
||||
@ -215,7 +215,7 @@ mod tests {
|
||||
let option_3 = SelectOptionPB::new("c");
|
||||
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![option_1.id.clone()],
|
||||
};
|
||||
for (options, is_visible) in vec![
|
||||
@ -237,7 +237,7 @@ mod tests {
|
||||
let option_2 = SelectOptionPB::new("B");
|
||||
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![],
|
||||
};
|
||||
for (options, is_visible) in vec![
|
||||
@ -258,7 +258,7 @@ mod tests {
|
||||
let option_2 = SelectOptionPB::new("B");
|
||||
let option_3 = SelectOptionPB::new("C");
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIsNot,
|
||||
condition: SelectOptionConditionPB::OptionIsNot,
|
||||
option_ids: vec![option_1.id.clone(), option_2.id.clone()],
|
||||
};
|
||||
|
||||
@ -283,7 +283,7 @@ mod tests {
|
||||
let option_3 = SelectOptionPB::new("C");
|
||||
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![option_1.id.clone(), option_2.id.clone()],
|
||||
};
|
||||
for (options, is_visible) in vec![
|
||||
@ -305,7 +305,7 @@ mod tests {
|
||||
let option_1 = SelectOptionPB::new("A");
|
||||
|
||||
let filter = SelectOptionFilterPB {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![],
|
||||
};
|
||||
for (options, is_visible) in vec![(vec![option_1.clone()], true), (vec![], true)] {
|
||||
|
@ -1,4 +1,4 @@
|
||||
use crate::entities::{TextFilterCondition, TextFilterPB};
|
||||
use crate::entities::{TextFilterConditionPB, TextFilterPB};
|
||||
use crate::services::cell::{CellData, CellFilterOperation, TypeCellData};
|
||||
use crate::services::field::{RichTextTypeOptionPB, TextCellData};
|
||||
use flowy_error::FlowyResult;
|
||||
@ -8,14 +8,14 @@ impl TextFilterPB {
|
||||
let cell_data = cell_data.as_ref().to_lowercase();
|
||||
let content = &self.content.to_lowercase();
|
||||
match self.condition {
|
||||
TextFilterCondition::Is => &cell_data == content,
|
||||
TextFilterCondition::IsNot => &cell_data != content,
|
||||
TextFilterCondition::Contains => cell_data.contains(content),
|
||||
TextFilterCondition::DoesNotContain => !cell_data.contains(content),
|
||||
TextFilterCondition::StartsWith => cell_data.starts_with(content),
|
||||
TextFilterCondition::EndsWith => cell_data.ends_with(content),
|
||||
TextFilterCondition::TextIsEmpty => cell_data.is_empty(),
|
||||
TextFilterCondition::TextIsNotEmpty => !cell_data.is_empty(),
|
||||
TextFilterConditionPB::Is => &cell_data == content,
|
||||
TextFilterConditionPB::IsNot => &cell_data != content,
|
||||
TextFilterConditionPB::Contains => cell_data.contains(content),
|
||||
TextFilterConditionPB::DoesNotContain => !cell_data.contains(content),
|
||||
TextFilterConditionPB::StartsWith => cell_data.starts_with(content),
|
||||
TextFilterConditionPB::EndsWith => cell_data.ends_with(content),
|
||||
TextFilterConditionPB::TextIsEmpty => cell_data.is_empty(),
|
||||
TextFilterConditionPB::TextIsNotEmpty => !cell_data.is_empty(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -34,12 +34,12 @@ impl CellFilterOperation<TextFilterPB> for RichTextTypeOptionPB {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
#![allow(clippy::all)]
|
||||
use crate::entities::{TextFilterCondition, TextFilterPB};
|
||||
use crate::entities::{TextFilterConditionPB, TextFilterPB};
|
||||
|
||||
#[test]
|
||||
fn text_filter_equal_test() {
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::Is,
|
||||
condition: TextFilterConditionPB::Is,
|
||||
content: "appflowy".to_owned(),
|
||||
};
|
||||
|
||||
@ -51,7 +51,7 @@ mod tests {
|
||||
#[test]
|
||||
fn text_filter_start_with_test() {
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::StartsWith,
|
||||
condition: TextFilterConditionPB::StartsWith,
|
||||
content: "appflowy".to_owned(),
|
||||
};
|
||||
|
||||
@ -63,7 +63,7 @@ mod tests {
|
||||
#[test]
|
||||
fn text_filter_end_with_test() {
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::EndsWith,
|
||||
condition: TextFilterConditionPB::EndsWith,
|
||||
content: "appflowy".to_owned(),
|
||||
};
|
||||
|
||||
@ -74,7 +74,7 @@ mod tests {
|
||||
#[test]
|
||||
fn text_filter_empty_test() {
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::TextIsEmpty,
|
||||
condition: TextFilterConditionPB::TextIsEmpty,
|
||||
content: "appflowy".to_owned(),
|
||||
};
|
||||
|
||||
@ -84,7 +84,7 @@ mod tests {
|
||||
#[test]
|
||||
fn text_filter_contain_test() {
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::Contains,
|
||||
condition: TextFilterConditionPB::Contains,
|
||||
content: "appflowy".to_owned(),
|
||||
};
|
||||
|
||||
|
@ -588,6 +588,14 @@ impl GridRevisionEditor {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn delete_sort(&self, params: DeleteSortParams) -> FlowyResult<()> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub async fn create_or_update_sort(&self, params: AlterSortParams) -> FlowyResult<()> {
|
||||
todo!()
|
||||
}
|
||||
|
||||
pub async fn move_row(&self, params: MoveRowParams) -> FlowyResult<()> {
|
||||
let MoveRowParams {
|
||||
view_id: _,
|
||||
|
@ -133,6 +133,7 @@ impl GridViewRevisionEditor {
|
||||
self.rev_manager.generate_snapshot().await;
|
||||
self.rev_manager.close().await;
|
||||
self.filter_controller.read().await.close().await;
|
||||
self.sort_controller.read().await.close().await;
|
||||
}
|
||||
|
||||
pub async fn handle_block_event(&self, event: Cow<'_, GridBlockEvent>) {
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::GridFilterTest;
|
||||
use flowy_grid::entities::CheckboxFilterCondition;
|
||||
use flowy_grid::entities::CheckboxFilterConditionPB;
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_filter_checkbox_is_check_test() {
|
||||
@ -9,7 +9,7 @@ async fn grid_filter_checkbox_is_check_test() {
|
||||
// The initial number of checked is 2
|
||||
let scripts = vec![
|
||||
CreateCheckboxFilter {
|
||||
condition: CheckboxFilterCondition::IsChecked,
|
||||
condition: CheckboxFilterConditionPB::IsChecked,
|
||||
},
|
||||
AssertFilterChanged {
|
||||
visible_row_len: 0,
|
||||
@ -24,7 +24,7 @@ async fn grid_filter_checkbox_is_uncheck_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateCheckboxFilter {
|
||||
condition: CheckboxFilterCondition::IsUnChecked,
|
||||
condition: CheckboxFilterConditionPB::IsUnChecked,
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 3 },
|
||||
];
|
||||
|
@ -1,13 +1,13 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::GridFilterTest;
|
||||
use flowy_grid::entities::ChecklistFilterCondition;
|
||||
use flowy_grid::entities::ChecklistFilterConditionPB;
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_filter_checklist_is_incomplete_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateChecklistFilter {
|
||||
condition: ChecklistFilterCondition::IsIncomplete,
|
||||
condition: ChecklistFilterConditionPB::IsIncomplete,
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 4 },
|
||||
];
|
||||
@ -19,7 +19,7 @@ async fn grid_filter_checklist_is_complete_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateChecklistFilter {
|
||||
condition: ChecklistFilterCondition::IsComplete,
|
||||
condition: ChecklistFilterConditionPB::IsComplete,
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 1 },
|
||||
];
|
||||
|
@ -1,13 +1,13 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::GridFilterTest;
|
||||
use flowy_grid::entities::DateFilterCondition;
|
||||
use flowy_grid::entities::DateFilterConditionPB;
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_filter_date_is_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateDateFilter {
|
||||
condition: DateFilterCondition::DateIs,
|
||||
condition: DateFilterConditionPB::DateIs,
|
||||
start: None,
|
||||
end: None,
|
||||
timestamp: Some(1647251762),
|
||||
@ -22,7 +22,7 @@ async fn grid_filter_date_after_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateDateFilter {
|
||||
condition: DateFilterCondition::DateAfter,
|
||||
condition: DateFilterConditionPB::DateAfter,
|
||||
start: None,
|
||||
end: None,
|
||||
timestamp: Some(1647251762),
|
||||
@ -37,7 +37,7 @@ async fn grid_filter_date_on_or_after_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateDateFilter {
|
||||
condition: DateFilterCondition::DateOnOrAfter,
|
||||
condition: DateFilterConditionPB::DateOnOrAfter,
|
||||
start: None,
|
||||
end: None,
|
||||
timestamp: Some(1668359085),
|
||||
@ -52,7 +52,7 @@ async fn grid_filter_date_on_or_before_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateDateFilter {
|
||||
condition: DateFilterCondition::DateOnOrBefore,
|
||||
condition: DateFilterConditionPB::DateOnOrBefore,
|
||||
start: None,
|
||||
end: None,
|
||||
timestamp: Some(1668359085),
|
||||
@ -67,7 +67,7 @@ async fn grid_filter_date_within_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateDateFilter {
|
||||
condition: DateFilterCondition::DateWithIn,
|
||||
condition: DateFilterConditionPB::DateWithIn,
|
||||
start: Some(1647251762),
|
||||
end: Some(1668704685),
|
||||
timestamp: None,
|
||||
|
@ -1,13 +1,13 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::GridFilterTest;
|
||||
use flowy_grid::entities::NumberFilterCondition;
|
||||
use flowy_grid::entities::NumberFilterConditionPB;
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_filter_number_is_equal_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::Equal,
|
||||
condition: NumberFilterConditionPB::Equal,
|
||||
content: "1".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 1 },
|
||||
@ -20,7 +20,7 @@ async fn grid_filter_number_is_less_than_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::LessThan,
|
||||
condition: NumberFilterConditionPB::LessThan,
|
||||
content: "3".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -34,7 +34,7 @@ async fn grid_filter_number_is_less_than_test2() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::LessThan,
|
||||
condition: NumberFilterConditionPB::LessThan,
|
||||
content: "$3".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -47,7 +47,7 @@ async fn grid_filter_number_is_less_than_or_equal_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::LessThanOrEqualTo,
|
||||
condition: NumberFilterConditionPB::LessThanOrEqualTo,
|
||||
content: "3".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 3 },
|
||||
@ -60,7 +60,7 @@ async fn grid_filter_number_is_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::NumberIsEmpty,
|
||||
condition: NumberFilterConditionPB::NumberIsEmpty,
|
||||
content: "".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 1 },
|
||||
@ -73,7 +73,7 @@ async fn grid_filter_number_is_not_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition::NumberIsNotEmpty,
|
||||
condition: NumberFilterConditionPB::NumberIsNotEmpty,
|
||||
content: "".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 4 },
|
||||
|
@ -6,7 +6,7 @@
|
||||
use std::time::Duration;
|
||||
use bytes::Bytes;
|
||||
use futures::TryFutureExt;
|
||||
use flowy_grid::entities::{AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB, RowPB, TextFilterCondition, FieldType, NumberFilterCondition, CheckboxFilterCondition, DateFilterCondition, DateFilterContent, SelectOptionCondition, TextFilterPB, NumberFilterPB, CheckboxFilterPB, DateFilterPB, SelectOptionFilterPB, CellChangesetPB, FilterPB, ChecklistFilterCondition, ChecklistFilterPB};
|
||||
use flowy_grid::entities::{AlterFilterParams, AlterFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB, RowPB, TextFilterConditionPB, FieldType, NumberFilterConditionPB, CheckboxFilterConditionPB, DateFilterConditionPB, DateFilterContentPB, SelectOptionConditionPB, TextFilterPB, NumberFilterPB, CheckboxFilterPB, DateFilterPB, SelectOptionFilterPB, CellChangesetPB, FilterPB, ChecklistFilterConditionPB, ChecklistFilterPB};
|
||||
use flowy_grid::services::field::{SelectOptionCellChangeset, SelectOptionIds};
|
||||
use flowy_grid::services::setting::GridSettingChangesetBuilder;
|
||||
use grid_rev_model::{FieldRevision, FieldTypeRevision};
|
||||
@ -28,37 +28,37 @@ pub enum FilterScript {
|
||||
payload: AlterFilterPayloadPB,
|
||||
},
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition,
|
||||
condition: TextFilterConditionPB,
|
||||
content: String,
|
||||
},
|
||||
UpdateTextFilter {
|
||||
filter: FilterPB,
|
||||
condition: TextFilterCondition,
|
||||
condition: TextFilterConditionPB,
|
||||
content: String,
|
||||
},
|
||||
CreateNumberFilter {
|
||||
condition: NumberFilterCondition,
|
||||
condition: NumberFilterConditionPB,
|
||||
content: String,
|
||||
},
|
||||
CreateCheckboxFilter {
|
||||
condition: CheckboxFilterCondition,
|
||||
condition: CheckboxFilterConditionPB,
|
||||
},
|
||||
CreateDateFilter{
|
||||
condition: DateFilterCondition,
|
||||
condition: DateFilterConditionPB,
|
||||
start: Option<i64>,
|
||||
end: Option<i64>,
|
||||
timestamp: Option<i64>,
|
||||
},
|
||||
CreateMultiSelectFilter {
|
||||
condition: SelectOptionCondition,
|
||||
condition: SelectOptionConditionPB,
|
||||
option_ids: Vec<String>,
|
||||
},
|
||||
CreateSingleSelectFilter {
|
||||
condition: SelectOptionCondition,
|
||||
condition: SelectOptionConditionPB,
|
||||
option_ids: Vec<String>,
|
||||
},
|
||||
CreateChecklistFilter {
|
||||
condition: ChecklistFilterCondition,
|
||||
condition: ChecklistFilterConditionPB,
|
||||
},
|
||||
AssertFilterCount {
|
||||
count: i32,
|
||||
|
@ -1,13 +1,13 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::GridFilterTest;
|
||||
use flowy_grid::entities::{FieldType, SelectOptionCondition};
|
||||
use flowy_grid::entities::{FieldType, SelectOptionConditionPB};
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_filter_multi_select_is_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateMultiSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIsEmpty,
|
||||
condition: SelectOptionConditionPB::OptionIsEmpty,
|
||||
option_ids: vec![],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -20,7 +20,7 @@ async fn grid_filter_multi_select_is_not_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateMultiSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIsNotEmpty,
|
||||
condition: SelectOptionConditionPB::OptionIsNotEmpty,
|
||||
option_ids: vec![],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 3 },
|
||||
@ -35,7 +35,7 @@ async fn grid_filter_multi_select_is_test() {
|
||||
let mut options = test.get_multi_select_type_option(&field_rev.id);
|
||||
let scripts = vec![
|
||||
CreateMultiSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![options.remove(0).id, options.remove(0).id],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 3 },
|
||||
@ -50,7 +50,7 @@ async fn grid_filter_multi_select_is_test2() {
|
||||
let mut options = test.get_multi_select_type_option(&field_rev.id);
|
||||
let scripts = vec![
|
||||
CreateMultiSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![options.remove(1).id],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 3 },
|
||||
@ -63,7 +63,7 @@ async fn grid_filter_single_select_is_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateSingleSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIsEmpty,
|
||||
condition: SelectOptionConditionPB::OptionIsEmpty,
|
||||
option_ids: vec![],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -78,7 +78,7 @@ async fn grid_filter_single_select_is_test() {
|
||||
let mut options = test.get_single_select_type_option(&field_rev.id).options;
|
||||
let scripts = vec![
|
||||
CreateSingleSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![options.remove(0).id],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -94,7 +94,7 @@ async fn grid_filter_single_select_is_test2() {
|
||||
let option = options.remove(0);
|
||||
let scripts = vec![
|
||||
CreateSingleSelectFilter {
|
||||
condition: SelectOptionCondition::OptionIs,
|
||||
condition: SelectOptionConditionPB::OptionIs,
|
||||
option_ids: vec![option.id.clone()],
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::grid::filter_test::script::FilterScript::*;
|
||||
use crate::grid::filter_test::script::*;
|
||||
use flowy_grid::entities::{AlterFilterPayloadPB, FieldType, TextFilterCondition, TextFilterPB};
|
||||
use flowy_grid::entities::{AlterFilterPayloadPB, FieldType, TextFilterConditionPB, TextFilterPB};
|
||||
use flowy_grid::services::filter::FilterType;
|
||||
|
||||
#[tokio::test]
|
||||
@ -8,7 +8,7 @@ async fn grid_filter_text_is_empty_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::TextIsEmpty,
|
||||
condition: TextFilterConditionPB::TextIsEmpty,
|
||||
content: "".to_string(),
|
||||
},
|
||||
AssertFilterCount { count: 1 },
|
||||
@ -26,7 +26,7 @@ async fn grid_filter_text_is_not_empty_test() {
|
||||
// Only one row's text of the initial rows is ""
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::TextIsNotEmpty,
|
||||
condition: TextFilterConditionPB::TextIsNotEmpty,
|
||||
content: "".to_string(),
|
||||
},
|
||||
AssertFilterCount { count: 1 },
|
||||
@ -58,7 +58,7 @@ async fn grid_filter_is_text_test() {
|
||||
// Only one row's text of the initial rows is "A"
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::Is,
|
||||
condition: TextFilterConditionPB::Is,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertFilterChanged {
|
||||
@ -74,7 +74,7 @@ async fn grid_filter_contain_text_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::Contains,
|
||||
condition: TextFilterConditionPB::Contains,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertFilterChanged {
|
||||
@ -90,7 +90,7 @@ async fn grid_filter_contain_text_test2() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::Contains,
|
||||
condition: TextFilterConditionPB::Contains,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertFilterChanged {
|
||||
@ -115,7 +115,7 @@ async fn grid_filter_does_not_contain_text_test() {
|
||||
// None of the initial rows contains the text "AB"
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::DoesNotContain,
|
||||
condition: TextFilterConditionPB::DoesNotContain,
|
||||
content: "AB".to_string(),
|
||||
},
|
||||
AssertFilterChanged {
|
||||
@ -131,7 +131,7 @@ async fn grid_filter_start_with_text_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::StartsWith,
|
||||
condition: TextFilterConditionPB::StartsWith,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertFilterChanged {
|
||||
@ -147,7 +147,7 @@ async fn grid_filter_ends_with_text_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::EndsWith,
|
||||
condition: TextFilterConditionPB::EndsWith,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -160,7 +160,7 @@ async fn grid_update_text_filter_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::EndsWith,
|
||||
condition: TextFilterConditionPB::EndsWith,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 2 },
|
||||
@ -172,7 +172,7 @@ async fn grid_update_text_filter_test() {
|
||||
let scripts = vec![
|
||||
UpdateTextFilter {
|
||||
filter,
|
||||
condition: TextFilterCondition::Is,
|
||||
condition: TextFilterConditionPB::Is,
|
||||
content: "A".to_string(),
|
||||
},
|
||||
AssertNumberOfVisibleRows { expected: 1 },
|
||||
@ -186,7 +186,7 @@ async fn grid_filter_delete_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let field_rev = test.get_first_field_rev(FieldType::RichText).clone();
|
||||
let text_filter = TextFilterPB {
|
||||
condition: TextFilterCondition::TextIsEmpty,
|
||||
condition: TextFilterConditionPB::TextIsEmpty,
|
||||
content: "".to_string(),
|
||||
};
|
||||
let payload = AlterFilterPayloadPB::new(&field_rev, text_filter);
|
||||
@ -214,7 +214,7 @@ async fn grid_filter_update_empty_text_cell_test() {
|
||||
let mut test = GridFilterTest::new().await;
|
||||
let scripts = vec![
|
||||
CreateTextFilter {
|
||||
condition: TextFilterCondition::TextIsEmpty,
|
||||
condition: TextFilterConditionPB::TextIsEmpty,
|
||||
content: "".to_string(),
|
||||
},
|
||||
AssertFilterCount { count: 1 },
|
||||
|
Loading…
Reference in New Issue
Block a user