-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ui/ux improvements notifications, type filters
- Loading branch information
1 parent
e6ae7cd
commit 7a08cf8
Showing
17 changed files
with
915 additions
and
180 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
109 changes: 109 additions & 0 deletions
109
dnas/whosin/zomes/coordinator/coordinator/src/viewed.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
use hdk::prelude::*; | ||
use coordinator_integrity::*; | ||
#[hdk_extern] | ||
pub fn create_viewed(viewed: Viewed) -> ExternResult<Record> { | ||
let viewed_hash = create_entry(&EntryTypes::Viewed(viewed.clone()))?; | ||
let record = get(viewed_hash.clone(), GetOptions::default())? | ||
.ok_or( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("Could not find the newly created Viewed")) | ||
), | ||
)?; | ||
Ok(record) | ||
} | ||
#[hdk_extern] | ||
pub fn get_viewed(viewed_hash: ActionHash) -> ExternResult<Option<Record>> { | ||
let Some(details) = get_details(viewed_hash, GetOptions::default())? else { | ||
return Ok(None); | ||
}; | ||
match details { | ||
Details::Record(details) => Ok(Some(details.record)), | ||
_ => { | ||
Err( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("Malformed get details response")) | ||
), | ||
) | ||
} | ||
} | ||
} | ||
|
||
#[hdk_extern] | ||
pub fn get_all_viewed() -> ExternResult<Vec<Viewed>> { | ||
emit_signal("viewed below")?; | ||
|
||
let viewed_entry_type: EntryType = UnitEntryTypes::Viewed.try_into()?; | ||
let filter = ChainQueryFilter::new() | ||
.entry_type(viewed_entry_type) | ||
.include_entries(true); | ||
let all_records = query(filter)?; | ||
|
||
emit_signal(all_records.clone())?; | ||
|
||
let all_viewed: Vec<Viewed> = all_records | ||
.into_iter() | ||
.map(|record| { | ||
let viewed: Viewed = record | ||
.entry | ||
.clone() | ||
.into_option() | ||
.ok_or( | ||
wasm_error!(WasmErrorInner::Guest( | ||
String::from("Could not find the Viewed entry") | ||
)), | ||
)? | ||
.try_into()?; | ||
Ok(viewed) | ||
}) | ||
.collect::<ExternResult<Vec<Viewed>>>()?; | ||
|
||
Ok(all_viewed) | ||
} | ||
|
||
#[hdk_extern] | ||
pub fn delete_viewed(original_viewed_hash: ActionHash) -> ExternResult<ActionHash> { | ||
let details = get_details(original_viewed_hash.clone(), GetOptions::default())? | ||
.ok_or( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("{pascal_entry_def_name} not found")) | ||
), | ||
)?; | ||
let record = match details { | ||
Details::Record(details) => Ok(details.record), | ||
_ => { | ||
Err( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("Malformed get details response")) | ||
), | ||
) | ||
} | ||
}?; | ||
delete_entry(original_viewed_hash) | ||
} | ||
#[hdk_extern] | ||
pub fn get_all_deletes_for_viewed( | ||
original_viewed_hash: ActionHash, | ||
) -> ExternResult<Option<Vec<SignedActionHashed>>> { | ||
let Some(details) = get_details(original_viewed_hash, GetOptions::default())? else { | ||
return Ok(None); | ||
}; | ||
match details { | ||
Details::Entry(_) => { | ||
Err(wasm_error!(WasmErrorInner::Guest("Malformed details".into()))) | ||
} | ||
Details::Record(record_details) => Ok(Some(record_details.deletes)), | ||
} | ||
} | ||
#[hdk_extern] | ||
pub fn get_oldest_delete_for_viewed( | ||
original_viewed_hash: ActionHash, | ||
) -> ExternResult<Option<SignedActionHashed>> { | ||
let Some(mut deletes) = get_all_deletes_for_viewed(original_viewed_hash)? else { | ||
return Ok(None); | ||
}; | ||
deletes | ||
.sort_by(|delete_a, delete_b| { | ||
delete_a.action().timestamp().cmp(&delete_b.action().timestamp()) | ||
}); | ||
Ok(deletes.first().cloned()) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
use hdi::prelude::*; | ||
#[hdk_entry_helper] | ||
#[derive(Clone, PartialEq)] | ||
pub struct Viewed { | ||
pub viewed_hash: ActionHash, | ||
pub viewed_date: Timestamp, | ||
} | ||
pub fn validate_create_viewed( | ||
_action: EntryCreationAction, | ||
_viewed: Viewed, | ||
) -> ExternResult<ValidateCallbackResult> { | ||
Ok(ValidateCallbackResult::Valid) | ||
} | ||
pub fn validate_update_viewed( | ||
_action: Update, | ||
_viewed: Viewed, | ||
_original_action: EntryCreationAction, | ||
_original_viewed: Viewed, | ||
) -> ExternResult<ValidateCallbackResult> { | ||
Ok(ValidateCallbackResult::Invalid(String::from("Vieweds cannot be updated"))) | ||
} | ||
pub fn validate_delete_viewed( | ||
_action: Delete, | ||
_original_action: EntryCreationAction, | ||
_original_viewed: Viewed, | ||
) -> ExternResult<ValidateCallbackResult> { | ||
Ok(ValidateCallbackResult::Valid) | ||
} | ||
pub fn validate_create_link_all_viewed( | ||
_action: CreateLink, | ||
_base_address: AnyLinkableHash, | ||
target_address: AnyLinkableHash, | ||
_tag: LinkTag, | ||
) -> ExternResult<ValidateCallbackResult> { | ||
// Check the entry type for the given action hash | ||
let action_hash = target_address | ||
.into_action_hash() | ||
.ok_or( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("No action hash associated with link")) | ||
), | ||
)?; | ||
let record = must_get_valid_record(action_hash)?; | ||
let _viewed: crate::Viewed = record | ||
.entry() | ||
.to_app_option() | ||
.map_err(|e| wasm_error!(e))? | ||
.ok_or( | ||
wasm_error!( | ||
WasmErrorInner::Guest(String::from("Linked action must reference an entry")) | ||
), | ||
)?; | ||
// TODO: add the appropriate validation rules | ||
Ok(ValidateCallbackResult::Valid) | ||
} | ||
pub fn validate_delete_link_all_viewed( | ||
_action: DeleteLink, | ||
_original_action: CreateLink, | ||
_base: AnyLinkableHash, | ||
_target: AnyLinkableHash, | ||
_tag: LinkTag, | ||
) -> ExternResult<ValidateCallbackResult> { | ||
// TODO: add the appropriate validation rules | ||
Ok(ValidateCallbackResult::Valid) | ||
} |
Oops, something went wrong.