Skip to content

Commit b66d8fc

Browse files
committed
chore: filter for select options
1 parent 2848ecb commit b66d8fc

File tree

4 files changed

+33
-4
lines changed

4 files changed

+33
-4
lines changed

frontend/app_flowy/lib/workspace/application/grid/cell/selection_editor_bloc.dart

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ class SelectOptionEditorBloc extends Bloc<SelectOptionEditorEvent, SelectOptionE
2525
},
2626
didReceiveOptions: (_DidReceiveOptions value) {
2727
emit(state.copyWith(
28-
options: value.options,
28+
allOptions: value.options,
29+
options: _makeOptions(state.filter, value.options),
2930
selectedOptions: value.selectedOptions,
3031
));
3132
},
@@ -41,6 +42,9 @@ class SelectOptionEditorBloc extends Bloc<SelectOptionEditorEvent, SelectOptionE
4142
selectOption: (_SelectOption value) {
4243
_onSelectOption(value.optionId);
4344
},
45+
filterOption: (_SelectOptionFilter value) {
46+
_filterOption(value.optionName, emit);
47+
},
4448
);
4549
},
4650
);
@@ -86,6 +90,16 @@ class SelectOptionEditorBloc extends Bloc<SelectOptionEditorEvent, SelectOptionE
8690
}
8791
}
8892

93+
void _filterOption(String optionName, Emitter<SelectOptionEditorState> emit) {
94+
emit(state.copyWith(filter: optionName, options: _makeOptions(optionName, state.allOptions)));
95+
}
96+
97+
List<SelectOption> _makeOptions(String filter, List<SelectOption> allOptions) {
98+
final List<SelectOption> options = List.from(allOptions);
99+
options.retainWhere((option) => option.name.contains(filter));
100+
return options;
101+
}
102+
89103
void _startListening() {
90104
_onCellChangedFn = cellContext.startListening(
91105
onCellChanged: ((selectOptionContext) {
@@ -109,20 +123,25 @@ class SelectOptionEditorEvent with _$SelectOptionEditorEvent {
109123
const factory SelectOptionEditorEvent.selectOption(String optionId) = _SelectOption;
110124
const factory SelectOptionEditorEvent.updateOption(SelectOption option) = _UpdateOption;
111125
const factory SelectOptionEditorEvent.deleteOption(SelectOption option) = _DeleteOption;
126+
const factory SelectOptionEditorEvent.filterOption(String optionName) = _SelectOptionFilter;
112127
}
113128

114129
@freezed
115130
class SelectOptionEditorState with _$SelectOptionEditorState {
116131
const factory SelectOptionEditorState({
117132
required List<SelectOption> options,
133+
required List<SelectOption> allOptions,
118134
required List<SelectOption> selectedOptions,
135+
required String filter,
119136
}) = _SelectOptionEditorState;
120137

121138
factory SelectOptionEditorState.initial(GridSelectOptionCellContext context) {
122139
final data = context.getCellData();
123140
return SelectOptionEditorState(
124141
options: data?.options ?? [],
142+
allOptions: data?.options ?? [],
125143
selectedOptions: data?.selectOptions ?? [],
144+
filter: "",
126145
);
127146
}
128147
}

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/layout/sizes.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ class GridSize {
99
static double get leadingHeaderPadding => 50 * scale;
1010
static double get trailHeaderPadding => 140 * scale;
1111
static double get headerContainerPadding => 0 * scale;
12-
static double get cellHPadding => 8 * scale;
13-
static double get cellVPadding => 8 * scale;
12+
static double get cellHPadding => 10 * scale;
13+
static double get cellVPadding => 10 * scale;
1414
static double get typeOptionItemHeight => 32 * scale;
1515
static double get typeOptionSeparatorHeight => 6 * scale;
1616

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/selection_cell/selection_editor.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,9 @@ class _TextField extends StatelessWidget {
144144
selectedOptionMap: optionMap,
145145
distanceToText: _editorPannelWidth * 0.7,
146146
tagController: _tagController,
147+
newText: (text) {
148+
context.read<SelectOptionEditorBloc>().add(SelectOptionEditorEvent.filterOption(text));
149+
},
147150
onNewTag: (tagName) {
148151
context.read<SelectOptionEditorBloc>().add(SelectOptionEditorEvent.newOption(tagName));
149152
},

frontend/app_flowy/lib/workspace/presentation/plugins/grid/src/widgets/cell/selection_cell/text_field.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@ class SelectOptionTextField extends StatelessWidget {
2121
final double distanceToText;
2222

2323
final Function(String) onNewTag;
24+
final Function(String) newText;
2425

2526
SelectOptionTextField({
2627
required this.options,
2728
required this.selectedOptionMap,
2829
required this.distanceToText,
2930
required this.tagController,
3031
required this.onNewTag,
32+
required this.newText,
3133
TextEditingController? controller,
3234
FocusNode? focusNode,
3335
Key? key,
@@ -51,7 +53,12 @@ class SelectOptionTextField extends StatelessWidget {
5153
autofocus: true,
5254
controller: editController,
5355
focusNode: focusNode,
54-
onChanged: onChanged,
56+
onChanged: (text) {
57+
if (onChanged != null) {
58+
onChanged(text);
59+
}
60+
newText(text);
61+
},
5562
onSubmitted: (text) {
5663
if (onSubmitted != null) {
5764
onSubmitted(text);

0 commit comments

Comments
 (0)