feat: clear date value (#2700)

* chore: Add _ClearDateFieldButton

* chore: Add new DateCellCalendarEvent to clear date

* chore: Add grid_field_clearDate translation token

* refactor: _ClearDateFieldButton -> _ClearDateButton

* fix: Fix dart(unused_element) in _ClearDateButton

* feat: Handle clearDate

* Revert "feat: Handle clearDate"

This reverts commit fd145ef8e9589f3b4aa1a16e5d72c15b6d0b53c4.

* feat: Handle clearDate

* feat: Add clear_flag field

* feat: check clear_flag to clear date

* chore: update exisitng tests

* fix: add mssing import

* refactor: remove check for timeFormatError

* fix: fix margin on _ClearDateButton

* refactor: _ClearDateButton -> ClearDateButton

* test: add clear date backend unit test

* test: add clear date integration test

* test: add clear date to edit time cell test

* chore: mark ClearDateButton visible for testing

* feat: close date editor popover on clear date

* style: make AppFlowyPopover taller

* fix: trim dateStr in _dateStrFromCellData

* fix: don't dismiss CellEditor after clearDate
This commit is contained in:
dejvizelo
2023-07-31 04:23:20 +02:00
committed by GitHub
parent ea37f46f88
commit f28c5d849c
17 changed files with 187 additions and 30 deletions

View File

@ -35,6 +35,9 @@ pub struct DateChangesetPB {
#[pb(index = 4, one_of)]
pub include_time: Option<bool>,
#[pb(index = 5, one_of)]
pub clear_flag: Option<bool>,
}
// Date

View File

@ -640,6 +640,7 @@ pub(crate) async fn update_date_cell_handler(
date: data.date,
time: data.time,
include_time: data.include_time,
clear_flag: data.clear_flag,
};
let database_editor = manager.get_database_with_view_id(&cell_id.view_id).await?;
database_editor

View File

@ -212,6 +212,7 @@ pub fn insert_date_cell(timestamp: i64, include_time: Option<bool>, field: &Fiel
date: Some(timestamp.to_string()),
time: None,
include_time,
clear_flag: None,
})
.unwrap();
apply_cell_changeset(cell_data, None, field, None).unwrap()

View File

@ -27,6 +27,7 @@ mod tests {
date: Some("1647251762".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"Mar 14, 2022",
@ -40,6 +41,7 @@ mod tests {
date: Some("1647251762".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"2022/03/14",
@ -53,6 +55,7 @@ mod tests {
date: Some("1647251762".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"2022-03-14",
@ -66,6 +69,7 @@ mod tests {
date: Some("1647251762".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"03/14/2022",
@ -79,6 +83,7 @@ mod tests {
date: Some("1647251762".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"14/03/2022",
@ -104,6 +109,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: None,
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 00:00",
@ -115,6 +121,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("9:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 09:00",
@ -126,6 +133,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("23:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 23:00",
@ -139,6 +147,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: None,
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 12:00 AM",
@ -150,6 +159,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("9:00 AM".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 09:00 AM",
@ -161,6 +171,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("11:23 pm".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 11:23 PM",
@ -182,6 +193,7 @@ mod tests {
date: Some("abc".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
None,
"",
@ -202,6 +214,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("1:".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 01:00",
@ -222,6 +235,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 01:00",
@ -240,6 +254,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("00:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 00:00",
@ -260,6 +275,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("1:00 am".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 01:00 AM",
@ -283,6 +299,7 @@ mod tests {
date: Some("1653609600".to_owned()),
time: Some("20:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
None,
"May 27, 2022 08:00 PM",
@ -330,6 +347,7 @@ mod tests {
date: Some("1700006400".to_owned()),
time: Some("08:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
);
assert_date(
@ -339,6 +357,7 @@ mod tests {
date: Some("1701302400".to_owned()),
time: None,
include_time: None,
clear_flag: None,
},
Some(old_cell_data),
"Nov 30, 2023 08:00",
@ -356,6 +375,7 @@ mod tests {
date: Some("1700006400".to_owned()),
time: Some("08:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
);
assert_date(
@ -365,12 +385,41 @@ mod tests {
date: None,
time: Some("14:00".to_owned()),
include_time: None,
clear_flag: None,
},
Some(old_cell_data),
"Nov 15, 2023 14:00",
);
}
#[test]
fn clear_date() {
let type_option = DateTypeOption::test();
let field = FieldBuilder::from_field_type(FieldType::DateTime).build();
let old_cell_data = initialize_date_cell(
&type_option,
DateCellChangeset {
date: Some("1700006400".to_owned()),
time: Some("08:00".to_owned()),
include_time: Some(true),
clear_flag: None,
},
);
assert_date(
&type_option,
&field,
DateCellChangeset {
date: None,
time: None,
include_time: Some(true),
clear_flag: Some(true),
},
Some(old_cell_data),
"",
);
}
fn assert_date(
type_option: &DateTypeOption,
field: &Field,

View File

@ -232,6 +232,18 @@ impl CellDataChangeset for DateTypeOption {
None => (None, false),
};
if changeset.clear_flag == Some(true) {
let (timestamp, include_time) = (None, include_time);
let cell_data = DateCellData {
timestamp,
include_time,
};
let cell_wrapper: DateCellDataWrapper = (self.field_type.clone(), cell_data.clone()).into();
return Ok((Cell::from(cell_wrapper), cell_data));
}
// update include_time if necessary
let include_time = changeset.include_time.unwrap_or(include_time);

View File

@ -22,6 +22,7 @@ pub struct DateCellChangeset {
pub date: Option<String>,
pub time: Option<String>,
pub include_time: Option<bool>,
pub clear_flag: Option<bool>,
}
impl DateCellChangeset {