Skip to content

Commit 8b8faff

Browse files
committed
chore: support embedded view (#435)
* chore: support embedded view * chore: fmt
1 parent 3d54295 commit 8b8faff

File tree

10 files changed

+33
-11
lines changed

10 files changed

+33
-11
lines changed

collab/src/database/database.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,14 +384,14 @@ impl Database {
384384
}
385385
}
386386

387-
pub fn get_all_views(&self) -> Vec<DatabaseView> {
387+
pub fn get_all_views(&self, include_embedded: bool) -> Vec<DatabaseView> {
388388
let txn = self.collab.transact();
389389
self
390390
.body
391391
.views
392-
.get_all_views(&txn)
392+
.get_all_views(&txn, include_embedded)
393393
.into_iter()
394-
.filter(|view| !view.is_inline)
394+
.filter(|view| !view.is_inline && !view.embedded)
395395
.collect()
396396
}
397397

@@ -1492,7 +1492,7 @@ impl Database {
14921492

14931493
let database_id = self.body.get_database_id(&txn)?;
14941494
let inline_view_id = self.body.get_inline_view_id(&txn);
1495-
let views = self.get_all_views();
1495+
let views = self.get_all_views(true);
14961496
let fields = self.body.get_fields_in_view(&txn, &inline_view_id, None);
14971497
let rows_stream = self.get_all_rows(chunk_size, None, auto_fetch).await?;
14981498
let rows: Vec<Row> = rows_stream
@@ -1571,7 +1571,7 @@ impl Database {
15711571
self
15721572
.body
15731573
.views
1574-
.get_all_views(&txn)
1574+
.get_all_views(&txn, false)
15751575
.first()
15761576
.map(|result| result.id.to_string())
15771577
}
@@ -1773,7 +1773,7 @@ where
17731773
.get_with_path::<_, _, MapRef>(&txn, [DATABASE, VIEWS])
17741774
{
17751775
let views = DatabaseViews::new(origin, container, None);
1776-
let mut reset_views = views.get_all_views(&txn);
1776+
let mut reset_views = views.get_all_views(&txn, true);
17771777

17781778
reset_views.iter_mut().for_each(f);
17791779
for view in reset_views {
@@ -2214,6 +2214,7 @@ impl DatabaseBody {
22142214
created_at: params.created_at,
22152215
modified_at: params.modified_at,
22162216
is_inline: false,
2217+
embedded: params.embedded,
22172218
};
22182219

22192220
trace!(

collab/src/database/database_remapper.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ impl DatabaseCollabRemapper {
161161
group_settings: view.group_settings,
162162
sorts: view.sorts,
163163
field_settings: view.field_settings,
164+
embedded: view.embedded,
164165
created_at: timestamp,
165166
modified_at: timestamp,
166167
..Default::default()

collab/src/database/entity.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ pub struct DatabaseView {
7272
pub modified_at: i64,
7373
#[serde(default)]
7474
pub is_inline: bool,
75+
#[serde(default)]
76+
pub embedded: bool,
7577
}
7678

7779
impl DatabaseView {
@@ -100,6 +102,7 @@ pub struct DatabaseViewMeta {
100102
pub id: DatabaseViewId,
101103
pub name: String,
102104
pub is_inline: bool,
105+
pub embedded: bool,
103106
}
104107

105108
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
@@ -123,6 +126,8 @@ pub struct CreateViewParams {
123126
/// Each new field in `deps_fields` must also have an associated FieldSettings
124127
/// that will be inserted into each view according to the view's layout type
125128
pub deps_field_setting: Vec<HashMap<DatabaseLayout, FieldSettingsMap>>,
129+
#[serde(default)]
130+
pub embedded: bool,
126131
}
127132

128133
impl CreateViewParams {
@@ -195,6 +200,7 @@ impl From<DatabaseView> for CreateViewParams {
195200
group_settings: view.group_settings,
196201
sorts: view.sorts,
197202
field_settings: view.field_settings,
203+
embedded: view.embedded,
198204
..Default::default()
199205
}
200206
}
@@ -265,6 +271,7 @@ impl CreateDatabaseParams {
265271
group_settings: view.group_settings,
266272
sorts: view.sorts,
267273
field_settings: view.field_settings,
274+
embedded: view.embedded,
268275
created_at: timestamp,
269276
modified_at: timestamp,
270277
..Default::default()

collab/src/database/template/util.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ pub(crate) fn create_database_params_from_template(
8282
modified_at: timestamp,
8383
deps_fields: vec![],
8484
deps_field_setting: vec![],
85+
embedded: false,
8586
});
8687
}
8788

collab/src/database/views/define.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ pub const DATABASE_VIEW_FIELD_ORDERS: &str = "field_orders";
1212
pub const VIEW_CREATE_AT: &str = "created_at";
1313
pub const VIEW_MODIFY_AT: &str = "modified_at";
1414
pub const IS_INLINE: &str = "is_inline";
15+
pub const EMBEDDED: &str = "embedded";
1516
pub const VIEW_CALCULATIONS: &str = "calculations";

collab/src/database/views/view.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,11 @@ impl<'a, 'b> DatabaseViewUpdate<'a, 'b> {
7878
self
7979
}
8080

81+
pub fn set_embedded(self, embedded: bool) -> Self {
82+
self.map_ref.insert(self.txn, EMBEDDED, embedded);
83+
self
84+
}
85+
8186
pub fn set_database_id<T: AsRef<str>>(self, value: T) -> Self {
8287
self
8388
.map_ref
@@ -473,11 +478,13 @@ pub fn view_meta_from_value<T: ReadTxn>(value: YrsValue, txn: &T) -> Option<Data
473478
let id: String = map_ref.get_with_txn(txn, VIEW_ID)?;
474479
let name: String = map_ref.get_with_txn(txn, VIEW_NAME).unwrap_or_default();
475480
let is_inline = map_ref.get_with_txn(txn, IS_INLINE).unwrap_or_default();
481+
let embedded = map_ref.get_with_txn(txn, EMBEDDED).unwrap_or_default();
476482
Some(DatabaseViewMeta {
477483
id: crate::entity::uuid_validation::try_parse_database_view_id(&id)
478484
.unwrap_or_else(crate::entity::uuid_validation::generate_database_view_id),
479485
name,
480486
is_inline,
487+
embedded,
481488
})
482489
}
483490

@@ -603,6 +610,7 @@ pub fn view_from_map_ref<T: ReadTxn>(map_ref: &MapRef, txn: &T) -> Option<Databa
603610
.unwrap_or_default();
604611

605612
let is_inline: bool = map_ref.get_with_txn(txn, IS_INLINE).unwrap_or(false);
613+
let embedded: bool = map_ref.get_with_txn(txn, EMBEDDED).unwrap_or(false);
606614

607615
Some(DatabaseView {
608616
id: crate::entity::uuid_validation::try_parse_database_view_id(&id)
@@ -621,6 +629,7 @@ pub fn view_from_map_ref<T: ReadTxn>(map_ref: &MapRef, txn: &T) -> Option<Databa
621629
created_at,
622630
modified_at,
623631
is_inline,
632+
embedded,
624633
})
625634
}
626635

collab/src/database/views/view_map.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ impl DatabaseViews {
8383
.set_sorts(view.sorts)
8484
.set_field_orders(view.field_orders)
8585
.set_row_orders(view.row_orders)
86-
.set_is_inline(view.is_inline);
86+
.set_is_inline(view.is_inline)
87+
.set_embedded(view.embedded);
8788
});
8889
}
8990

@@ -159,11 +160,12 @@ impl DatabaseViews {
159160
view_from_map_ref(&map_ref, txn)
160161
}
161162

162-
pub fn get_all_views<T: ReadTxn>(&self, txn: &T) -> Vec<DatabaseView> {
163+
pub fn get_all_views<T: ReadTxn>(&self, txn: &T, include_embedded: bool) -> Vec<DatabaseView> {
163164
self
164165
.container
165166
.iter(txn)
166167
.flat_map(|(_k, v)| view_from_value(v, txn))
168+
.filter(|view| include_embedded || !view.embedded)
167169
.collect::<Vec<_>>()
168170
}
169171

collab/src/importer/notion/page.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ impl NotionPage {
515515
let mut resources = vec![content.resource];
516516
let view_ids = content
517517
.database
518-
.get_all_views()
518+
.get_all_views(false)
519519
.into_iter()
520520
.map(|view| view.id)
521521
.collect::<Vec<_>>();

collab/tests/importer/notion_test/import_test.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ async fn check_task_database(linked_view: &NotionPage) {
521521

522522
let csv_file = parse_csv(linked_view.notion_file.file_path().unwrap());
523523
let database = linked_view.as_database().await.unwrap().database;
524-
let views = database.get_all_views();
524+
let views = database.get_all_views(true);
525525
assert_eq!(views.len(), 1);
526526
assert_eq!(linked_view.view_id, views[0].id.to_string());
527527

collab/tests/importer/workspace/database_collab_remapper.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ async fn test_parse_real_database_json() {
2828
assert_eq!(database.get_database_id().unwrap(), new_database_id);
2929
}
3030

31-
let views = database.get_all_views();
31+
let views = database.get_all_views(true);
3232
assert_eq!(views.len(), 2);
3333

3434
for view in &views {

0 commit comments

Comments
 (0)