mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: implement checklist UI
This commit is contained in:
@ -226,7 +226,7 @@ impl GridRowTest {
|
||||
assert_eq!(s, expected);
|
||||
}
|
||||
|
||||
FieldType::CheckList => {
|
||||
FieldType::Checklist => {
|
||||
let cell_data = self
|
||||
.editor
|
||||
.get_cell_bytes(&cell_id)
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
mod checkbox_filter_test;
|
||||
mod checklist_filter_test;
|
||||
mod date_filter_test;
|
||||
mod number_filter_test;
|
||||
mod script;
|
||||
|
@ -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());
|
||||
|
@ -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 => {}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user