2024-05-05 22:04:34 +08:00
|
|
|
use collab_database::database::{gen_database_id, gen_database_view_id, gen_row_id, DatabaseData};
|
|
|
|
use collab_database::views::{DatabaseLayout, DatabaseView};
|
|
|
|
use event_integration_test::database_event::TestRowBuilder;
|
|
|
|
|
|
|
|
use collab_database::fields::Field;
|
|
|
|
use collab_database::rows::Row;
|
|
|
|
use flowy_database2::entities::FieldType;
|
|
|
|
use flowy_database2::services::field::summary_type_option::summary::SummarizationTypeOption;
|
2024-06-12 16:32:28 +08:00
|
|
|
use flowy_database2::services::field::translate_type_option::translate::TranslateTypeOption;
|
2024-05-05 22:04:34 +08:00
|
|
|
use flowy_database2::services::field::{
|
|
|
|
FieldBuilder, NumberFormat, NumberTypeOption, SelectOption, SelectOptionColor,
|
|
|
|
SingleSelectTypeOption,
|
|
|
|
};
|
|
|
|
use flowy_database2::services::field_settings::default_field_settings_for_fields;
|
|
|
|
use strum::IntoEnumIterator;
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
pub fn make_test_summary_grid() -> DatabaseData {
|
|
|
|
let database_id = gen_database_id();
|
|
|
|
let fields = create_fields();
|
|
|
|
let field_settings = default_field_settings_for_fields(&fields, DatabaseLayout::Grid);
|
|
|
|
|
|
|
|
let single_select_field = fields
|
|
|
|
.iter()
|
|
|
|
.find(|field| field.field_type == FieldType::SingleSelect.value())
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let options = single_select_field
|
|
|
|
.type_options
|
|
|
|
.get(&FieldType::SingleSelect.to_string())
|
|
|
|
.cloned()
|
|
|
|
.map(|t| SingleSelectTypeOption::from(t).options)
|
|
|
|
.unwrap();
|
|
|
|
|
|
|
|
let rows = create_rows(&database_id, &fields, options);
|
|
|
|
|
|
|
|
let inline_view_id = gen_database_view_id();
|
|
|
|
let view = DatabaseView {
|
|
|
|
database_id: database_id.clone(),
|
|
|
|
id: inline_view_id.clone(),
|
|
|
|
name: "".to_string(),
|
|
|
|
layout: DatabaseLayout::Grid,
|
|
|
|
field_settings,
|
|
|
|
..Default::default()
|
|
|
|
};
|
|
|
|
|
|
|
|
DatabaseData {
|
|
|
|
database_id,
|
|
|
|
inline_view_id,
|
|
|
|
views: vec![view],
|
|
|
|
fields,
|
|
|
|
rows,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_fields() -> Vec<Field> {
|
|
|
|
let mut fields = Vec::new();
|
|
|
|
for field_type in FieldType::iter() {
|
|
|
|
match field_type {
|
|
|
|
FieldType::RichText => fields.push(create_text_field("Product Name", true)),
|
|
|
|
FieldType::Number => fields.push(create_number_field("Price", NumberFormat::USD)),
|
|
|
|
FieldType::SingleSelect => fields.push(create_single_select_field("Status")),
|
|
|
|
FieldType::Summary => fields.push(create_summary_field("AI summary")),
|
2024-06-12 16:32:28 +08:00
|
|
|
FieldType::Translate => fields.push(create_translate_field("AI Translate")),
|
2024-05-05 22:04:34 +08:00
|
|
|
_ => {},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
fields
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_rows(database_id: &str, fields: &[Field], _options: Vec<SelectOption>) -> Vec<Row> {
|
|
|
|
let mut rows = Vec::new();
|
|
|
|
let fruits = ["Apple", "Pear", "Banana", "Orange"];
|
|
|
|
for (i, fruit) in fruits.iter().enumerate() {
|
|
|
|
let mut row_builder = TestRowBuilder::new(database_id, gen_row_id(), fields);
|
|
|
|
row_builder.insert_text_cell(fruit);
|
|
|
|
row_builder.insert_number_cell(match i {
|
|
|
|
0 => "2.6",
|
|
|
|
1 => "1.6",
|
|
|
|
2 => "3.6",
|
|
|
|
_ => "1.2",
|
|
|
|
});
|
|
|
|
row_builder.insert_single_select_cell(|mut options| options.remove(i % options.len()));
|
|
|
|
rows.push(row_builder.build());
|
|
|
|
}
|
|
|
|
rows
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_text_field(name: &str, primary: bool) -> Field {
|
|
|
|
FieldBuilder::from_field_type(FieldType::RichText)
|
|
|
|
.name(name)
|
|
|
|
.primary(primary)
|
|
|
|
.build()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_number_field(name: &str, format: NumberFormat) -> Field {
|
|
|
|
let mut type_option = NumberTypeOption::default();
|
|
|
|
type_option.set_format(format);
|
|
|
|
FieldBuilder::new(FieldType::Number, type_option)
|
|
|
|
.name(name)
|
|
|
|
.build()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_single_select_field(name: &str) -> Field {
|
|
|
|
let options = vec![
|
|
|
|
SelectOption::with_color("COMPLETED", SelectOptionColor::Purple),
|
|
|
|
SelectOption::with_color("PLANNED", SelectOptionColor::Orange),
|
|
|
|
SelectOption::with_color("PAUSED", SelectOptionColor::Yellow),
|
|
|
|
];
|
|
|
|
let mut type_option = SingleSelectTypeOption::default();
|
|
|
|
type_option.options.extend(options);
|
|
|
|
FieldBuilder::new(FieldType::SingleSelect, type_option)
|
|
|
|
.name(name)
|
|
|
|
.build()
|
|
|
|
}
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_summary_field(name: &str) -> Field {
|
|
|
|
let type_option = SummarizationTypeOption { auto_fill: false };
|
|
|
|
FieldBuilder::new(FieldType::Summary, type_option)
|
|
|
|
.name(name)
|
|
|
|
.build()
|
|
|
|
}
|
2024-06-12 16:32:28 +08:00
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
fn create_translate_field(name: &str) -> Field {
|
|
|
|
let type_option = TranslateTypeOption {
|
|
|
|
auto_fill: false,
|
|
|
|
language_type: 2,
|
|
|
|
};
|
|
|
|
FieldBuilder::new(FieldType::Translate, type_option)
|
|
|
|
.name(name)
|
|
|
|
.build()
|
|
|
|
}
|