Complex Plotting
Learn how to create more complex plots
use zephyr_sdk::{
charting::{Dashboard, DashboardEntry, Table}
use charming_fork_zephyr::{component::{Axis, Grid, Legend, Title}, element::{AreaStyle, AxisType, Color, ColorStop, Tooltip, Trigger}, series::{Bar, Line}, Chart};
pub fn build_dashboard<'a>(env: &EnvClient, aggregated_data: HashMap<&'a str, HashMap<&'a str, AggregatedData>>, collaterals: &Vec<Collateral>, borroweds: &Vec<Borrowed>) -> Dashboard {
let mut dashboard = Dashboard::new().title(&"Blend Porotocol Dashboard").description(&"Explore the Blend protocol's mainnet activity.");
let categories: Vec<String> = vec!["Supply".into(), "Collateral".into(), "Borrowed".into()];
for (pool, assets) in aggregated_data {
let auctions_table = {
let positions_count = get_from_ledger(env, &pool);
let table = Table::new().columns(vec!["count".into()]).row(vec![positions_count.to_string()]);
DashboardEntry::new().title("Current Unique Users With Positions").table(table)
};
dashboard = dashboard.entry(auctions_table);
let val = get_from_instance(env, pool, "Name");
let ScVal::String(string) = val else {panic!()};
let pool = string.to_utf8_string().unwrap();
env.log().debug("Iterating over data", None);
for (asset, data) in assets {
let meta: StellarAssetContractMetadata = env.from_scval(&get_from_instance(env, asset, "METADATA"));
// let asset = soroban_string_to_string(env, meta.name);
let denom = soroban_string_to_string(env, meta.symbol);
let asset = denom.clone();
let bar = {
let chart = Chart::new().legend(Legend::new().show(true).left("150px").top("3%")).tooltip(Tooltip::new().trigger(Trigger::Axis))
.x_axis(Axis::new().type_(AxisType::Category).data(categories.clone()))
.y_axis(Axis::new().type_(AxisType::Value)).series(Bar::new()
.name(format!("Pool: {}, Asset {}", pool, asset))
.data(vec![data.total_supply as i64 / STROOP as i64, data.total_collateral as i64 / STROOP as i64, data.total_borrowed as i64 / STROOP as i64]));
DashboardEntry::new().title("Distribution all time").chart(chart)
};
dashboard = dashboard.entry(bar);
}
dashboard
}Building a Table
Building a Chart
Last updated