edc_web_components/components/
asset_card.rs1use crate::components::DatasetCard;
2use crate::contexts::use_edc_connector_context;
3use crate::models::{AssetItem, DataspaceDataset};
4use edc_connector_client::EdcConnectorApiVersion;
5use patternfly_yew::prelude::*;
6use yew::prelude::*;
7use yew::suspense::use_future_with;
8
9#[derive(Clone, PartialEq, Properties)]
10pub struct AssetCardProps {
11 pub asset_id: String,
12}
13
14#[component]
15pub fn AssetCard(props: &AssetCardProps) -> Html {
16 html!(
17 <Suspense fallback={html!(<Bullseye><Spinner /></Bullseye>)}>
18 <AssetCardInner asset_id={props.asset_id.clone()} />
19 </Suspense>
20 )
21}
22
23#[component]
24pub fn AssetCardInner(props: &AssetCardProps) -> HtmlResult {
25 let edc_connector_context = use_edc_connector_context();
26
27 let results = use_future_with(
28 (edc_connector_context, props.asset_id.clone()),
29 |parameters| async move {
30 let (edc_connector_context, asset_id) = (*parameters).clone();
31
32 if let Some(client) = edc_connector_context.get_client() {
33 client
34 .assets(EdcConnectorApiVersion::V4)
35 .get(&asset_id)
36 .await
37 .ok()
38 .map(AssetItem::from)
39 } else {
40 None
41 }
42 },
43 )?;
44
45 if let Some(asset) = (*results).clone() {
46 let dataset = DataspaceDataset::from(asset);
47
48 Ok(html!(<DatasetCard {dataset} />))
49 } else {
50 Ok(html!(<Alert title="Asset not found" r#type={AlertType::Danger} />))
51 }
52}