feat: hide ref database view (#2682)

This commit is contained in:
Nathan.fooo
2023-06-02 12:04:14 +08:00
committed by GitHub
parent 82dcd4b99e
commit 265177e444
7 changed files with 50 additions and 9 deletions

View File

@ -17,6 +17,14 @@ class DatabaseViewBackendService {
required this.viewId, required this.viewId,
}); });
/// Returns the datbaase id associated with the view.
Future<Either<String, FlowyError>> getDatabaseId() async {
final payload = DatabaseViewIdPB(value: viewId);
return DatabaseEventGetDatabaseId(payload)
.send()
.then((value) => value.leftMap((l) => l.value));
}
Future<Either<DatabasePB, FlowyError>> openGrid() async { Future<Either<DatabasePB, FlowyError>> openGrid() async {
await FolderEventSetLatestView(ViewIdPB(value: viewId)).send(); await FolderEventSetLatestView(ViewIdPB(value: viewId)).send();

View File

@ -25,12 +25,12 @@ extension InsertDatabase on EditorState {
return; return;
} }
// get the database that the view is associated with // get the database id that the view is associated with
final database = await DatabaseViewBackendService(viewId: childView.id) final databaseId = await DatabaseViewBackendService(viewId: childView.id)
.openGrid() .getDatabaseId()
.then((value) => value.swap().toOption().toNullable()); .then((value) => value.swap().toOption().toNullable());
if (database == null) { if (databaseId == null) {
throw StateError( throw StateError(
'The database associated with ${childView.id} could not be found while attempting to create a referenced ${childView.layout.name}.', 'The database associated with ${childView.id} could not be found while attempting to create a referenced ${childView.layout.name}.',
); );
@ -38,10 +38,10 @@ extension InsertDatabase on EditorState {
final prefix = _referencedDatabasePrefix(childView.layout); final prefix = _referencedDatabasePrefix(childView.layout);
final ref = await ViewBackendService.createDatabaseReferenceView( final ref = await ViewBackendService.createDatabaseReferenceView(
parentViewId: parentView.id, parentViewId: childView.id,
name: "$prefix ${childView.name}", name: "$prefix ${childView.name}",
layoutType: childView.layout, layoutType: childView.layout,
databaseId: database.id, databaseId: databaseId,
).then((value) => value.swap().toOption().toNullable()); ).then((value) => value.swap().toOption().toNullable());
// TODO(a-wallen): Show error dialog here. // TODO(a-wallen): Show error dialog here.
@ -55,7 +55,7 @@ extension InsertDatabase on EditorState {
Node( Node(
type: _convertPageType(childView), type: _convertPageType(childView),
attributes: { attributes: {
DatabaseBlockKeys.parentID: parentView.id, DatabaseBlockKeys.parentID: childView.id,
DatabaseBlockKeys.viewID: ref.id, DatabaseBlockKeys.viewID: ref.id,
}, },
), ),

View File

@ -50,6 +50,18 @@ impl TryInto<CreateDatabaseViewParams> for CreateDatabaseViewPayloadPB {
} }
} }
#[derive(Clone, ProtoBuf, Default, Debug)]
pub struct DatabaseIdPB {
#[pb(index = 1)]
pub value: String,
}
impl AsRef<str> for DatabaseIdPB {
fn as_ref(&self) -> &str {
&self.value
}
}
#[derive(Clone, ProtoBuf, Default, Debug)] #[derive(Clone, ProtoBuf, Default, Debug)]
pub struct DatabaseViewIdPB { pub struct DatabaseViewIdPB {
#[pb(index = 1)] #[pb(index = 1)]

View File

@ -29,6 +29,18 @@ pub(crate) async fn get_database_data_handler(
data_result_ok(data) data_result_ok(data)
} }
#[tracing::instrument(level = "trace", skip_all, err)]
pub(crate) async fn get_database_id_handler(
data: AFPluginData<DatabaseViewIdPB>,
manager: AFPluginState<Arc<DatabaseManager2>>,
) -> DataResult<DatabaseIdPB, FlowyError> {
let view_id: DatabaseViewIdPB = data.into_inner();
let database_id = manager
.get_database_id_with_view_id(view_id.as_ref())
.await?;
data_result_ok(DatabaseIdPB { value: database_id })
}
#[tracing::instrument(level = "trace", skip(data, manager), err)] #[tracing::instrument(level = "trace", skip(data, manager), err)]
pub(crate) async fn get_database_setting_handler( pub(crate) async fn get_database_setting_handler(
data: AFPluginData<DatabaseViewIdPB>, data: AFPluginData<DatabaseViewIdPB>,

View File

@ -14,6 +14,7 @@ pub fn init(database_manager: Arc<DatabaseManager2>) -> AFPlugin {
.state(database_manager); .state(database_manager);
plugin plugin
.event(DatabaseEvent::GetDatabase, get_database_data_handler) .event(DatabaseEvent::GetDatabase, get_database_data_handler)
.event(DatabaseEvent::GetDatabaseId, get_database_id_handler)
.event(DatabaseEvent::GetDatabaseSetting, get_database_setting_handler) .event(DatabaseEvent::GetDatabaseSetting, get_database_setting_handler)
.event(DatabaseEvent::UpdateDatabaseSetting, update_database_setting_handler) .event(DatabaseEvent::UpdateDatabaseSetting, update_database_setting_handler)
.event(DatabaseEvent::GetAllFilters, get_all_filters_handler) .event(DatabaseEvent::GetAllFilters, get_all_filters_handler)
@ -81,6 +82,9 @@ pub enum DatabaseEvent {
#[event(input = "DatabaseViewIdPB", output = "DatabasePB")] #[event(input = "DatabaseViewIdPB", output = "DatabasePB")]
GetDatabase = 0, GetDatabase = 0,
#[event(input = "DatabaseViewIdPB", output = "DatabaseIdPB")]
GetDatabaseId = 1,
/// [GetDatabaseSetting] event is used to get the database's settings. /// [GetDatabaseSetting] event is used to get the database's settings.
/// ///
/// The event handler accepts [DatabaseViewIdPB] and return [DatabaseViewSettingPB] /// The event handler accepts [DatabaseViewIdPB] and return [DatabaseViewSettingPB]

View File

@ -79,12 +79,17 @@ impl DatabaseManager2 {
} }
pub async fn get_database_with_view_id(&self, view_id: &str) -> FlowyResult<Arc<DatabaseEditor>> { pub async fn get_database_with_view_id(&self, view_id: &str) -> FlowyResult<Arc<DatabaseEditor>> {
let database_id = self.get_database_id_with_view_id(view_id).await?;
self.get_database(&database_id).await
}
pub async fn get_database_id_with_view_id(&self, view_id: &str) -> FlowyResult<String> {
let database_id = self.with_user_database(Err(FlowyError::internal()), |database| { let database_id = self.with_user_database(Err(FlowyError::internal()), |database| {
database database
.get_database_id_with_view_id(view_id) .get_database_id_with_view_id(view_id)
.ok_or_else(FlowyError::record_not_found) .ok_or_else(FlowyError::record_not_found)
})?; })?;
self.get_database(&database_id).await Ok(database_id)
} }
pub async fn get_database(&self, database_id: &str) -> FlowyResult<Arc<DatabaseEditor>> { pub async fn get_database(&self, database_id: &str) -> FlowyResult<Arc<DatabaseEditor>> {

View File

@ -67,7 +67,7 @@ impl DocumentManager {
// subscribe to the document changes. // subscribe to the document changes.
document.lock().open(move |events, is_remote| { document.lock().open(move |events, is_remote| {
tracing::debug!( tracing::trace!(
"document changed: {:?}, from remote: {}", "document changed: {:?}, from remote: {}",
&events, &events,
is_remote is_remote