mirror of
				https://github.com/AppFlowy-IO/AppFlowy.git
				synced 2025-11-04 03:54:44 +00:00 
			
		
		
		
	
		
			
	
	
		
			127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
		
		
			
		
	
	
			127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| 
								 | 
							
								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;
							 | 
						||
| 
								 | 
							
								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")),
							 | 
						||
| 
								 | 
							
								      _ => {},
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  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()
							 | 
						||
| 
								 | 
							
								}
							 |