feat: implement checklist UI

This commit is contained in:
nathan
2022-11-29 22:40:49 +08:00
parent b4671c1d99
commit 1ba299815e
64 changed files with 715 additions and 110 deletions

View File

@ -226,7 +226,7 @@ impl GridRowTest {
assert_eq!(s, expected);
}
FieldType::CheckList => {
FieldType::Checklist => {
let cell_data = self
.editor
.get_cell_bytes(&cell_id)

View File

@ -94,12 +94,12 @@ impl<'a> GridRowTestBuilder<'a> {
where
F: Fn(Vec<SelectOptionPB>) -> Vec<SelectOptionPB>,
{
let checklist_field = self.field_rev_with_type(&FieldType::CheckList);
let checklist_field = self.field_rev_with_type(&FieldType::Checklist);
let type_option = ChecklistTypeOptionPB::from(&checklist_field);
let options = f(type_option.options);
let ops_ids = options.iter().map(|option| option.id.clone()).collect::<Vec<_>>();
self.inner_builder
.insert_select_option_cell(&multi_select_field.id, ops_ids);
.insert_select_option_cell(&checklist_field.id, ops_ids);
checklist_field.id.clone()
}

View File

@ -31,7 +31,7 @@ async fn grid_cell_update() {
let type_option = MultiSelectTypeOptionPB::from(field_rev);
SelectOptionCellChangeset::from_insert_option_id(&type_option.options.first().unwrap().id).to_str()
}
FieldType::CheckList => {
FieldType::Checklist => {
let type_option = ChecklistTypeOptionPB::from(field_rev);
SelectOptionCellChangeset::from_insert_option_id(&type_option.options.first().unwrap().id).to_str()
}

View File

@ -0,0 +1,27 @@
use crate::grid::filter_test::script::FilterScript::*;
use crate::grid::filter_test::script::GridFilterTest;
use flowy_grid::entities::{ChecklistFilterCondition, SelectOptionCondition};
#[tokio::test]
async fn grid_filter_checklist_is_incomplete_test() {
let mut test = GridFilterTest::new().await;
let scripts = vec![
CreateChecklistFilter {
condition: ChecklistFilterCondition::IsIncomplete,
},
AssertNumberOfVisibleRows { expected: 4 },
];
test.run_scripts(scripts).await;
}
#[tokio::test]
async fn grid_filter_checklist_is_complete_test() {
let mut test = GridFilterTest::new().await;
let scripts = vec![
CreateChecklistFilter {
condition: ChecklistFilterCondition::IsComplete,
},
AssertNumberOfVisibleRows { expected: 1 },
];
test.run_scripts(scripts).await;
}

View File

@ -1,4 +1,5 @@
mod checkbox_filter_test;
mod checklist_filter_test;
mod date_filter_test;
mod number_filter_test;
mod script;

View File

@ -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};
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::services::field::{SelectOptionCellChangeset, SelectOptionIds};
use flowy_grid::services::setting::GridSettingChangesetBuilder;
use grid_rev_model::{FieldRevision, FieldTypeRevision};
@ -57,6 +57,9 @@ pub enum FilterScript {
condition: SelectOptionCondition,
option_ids: Vec<String>,
},
CreateChecklistFilter {
condition: ChecklistFilterCondition,
},
AssertFilterCount {
count: i32,
},
@ -184,6 +187,14 @@ impl GridFilterTest {
AlterFilterPayloadPB::new(field_rev, filter);
self.insert_filter(payload).await;
}
FilterScript::CreateChecklistFilter { condition} => {
let field_rev = self.get_first_field_rev(FieldType::Checklist);
// let type_option = self.get_checklist_type_option(&field_rev.id);
let filter = ChecklistFilterPB { condition };
let payload =
AlterFilterPayloadPB::new(field_rev, filter);
self.insert_filter(payload).await;
}
FilterScript::AssertFilterCount { count } => {
let filters = self.editor.get_all_filters().await.unwrap();
assert_eq!(count as usize, filters.len());

View File

@ -131,6 +131,14 @@ impl GridEditorTest {
type_option
}
pub fn get_checklist_type_option(&self, field_id: &str) -> ChecklistTypeOptionPB {
let field_type = FieldType::Checklist;
let field_rev = self.get_field_rev(field_id, field_type.clone());
let type_option = field_rev
.get_type_option::<ChecklistTypeOptionPB>(field_type.into())
.unwrap();
type_option
}
pub fn get_checkbox_type_option(&self, field_id: &str) -> CheckboxTypeOptionPB {
let field_type = FieldType::Checkbox;
let field_rev = self.get_field_rev(field_id, field_type.clone());
@ -220,7 +228,7 @@ fn make_test_grid() -> BuildGridContext {
let url_field = FieldBuilder::new(url).name("link").visibility(true).build();
grid_builder.add_field(url_field);
}
FieldType::CheckList => {
FieldType::Checklist => {
let checklist = ChecklistTypeOptionBuilder::default()
.add_option(SelectOptionPB::new(FIRST_THING))
.add_option(SelectOptionPB::new(SECOND_THING))
@ -245,7 +253,7 @@ fn make_test_grid() -> BuildGridContext {
FieldType::DateTime => row_builder.insert_date_cell("1647251762"),
FieldType::MultiSelect => row_builder
.insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]),
FieldType::CheckList => row_builder.insert_checklist_cell(|options| options),
FieldType::Checklist => row_builder.insert_checklist_cell(|options| options),
FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
_ => "".to_owned(),
};
@ -382,7 +390,7 @@ fn make_test_board() -> BuildGridContext {
let url_field = FieldBuilder::new(url).name("link").visibility(true).build();
grid_builder.add_field(url_field);
}
FieldType::CheckList => {}
FieldType::Checklist => {}
}
}