///|
pub(all) struct CatalogBackedViewIssue {
code : String
path : String
message : String
} derive(Debug, Eq, ToJson, FromJson)
///|
fn catalog_backed_view_issue(
code : String,
path : String,
message : String,
) -> CatalogBackedViewIssue {
{ code, path, message }
}
///|
pub fn from_site_dossier_with_selection(
dossier : @site.SiteDossier,
row : Int,
col : Int,
) -> TrustedSquareViewModel {
let grid = @terrain.first_trusted_square_grid()
let metrics = @terrain.analyze(grid)
let best = dossier.corridor_scan[0]
let selected_route_id = best.selected_route_id
let selected = selected_cell(grid, row, col)
let selected_cell_id = cell_id(grid, selected.row, selected.col)
{
view_id: "ui/first-trusted-square/operator-view-v2",
site_id: dossier.site.site_id,
title: dossier.site.name,
site_latitude_deg: dossier.site.center.latitude_deg,
site_longitude_deg: dossier.site.center.longitude_deg,
viewport: viewport_geometry(grid),
layers: view_layers(metrics, dossier.energy),
active_layer_id: "hazard",
selected_cell_id,
selected_route_id,
terrain_cells: terrain_cell_views(grid, metrics, dossier.energy, selected),
routes: route_views(
dossier.route_candidates,
selected_route_id,
dossier.window_search_evidence,
),
route_overlays: route_overlays(dossier.route_candidates, selected_route_id),
globe_overlay: globe_overlay(dossier, grid, selected_route_id),
corridor_windows: corridor_window_views(dossier.corridor_scan),
selected_tile: tile_inspector(
grid,
metrics,
dossier.energy,
selected,
selected_route_id,
),
source_panel: source_panel(dossier, grid),
scorecard: site_scorecard(dossier, selected_route_id),
lighting: lunar_lighting_view(dossier.power_window_evidence),
inspector_facts: inspector_facts(
dossier, selected_route_id, selected_cell_id,
),
blockers: dossier.blockers,
}
}
///|
pub fn from_site_dossier(dossier : @site.SiteDossier) -> TrustedSquareViewModel {
let grid = @terrain.first_trusted_square_grid()
let selected = default_selected_cell(grid)
from_site_dossier_with_selection(dossier, selected.row, selected.col)
}
///|
pub fn first_trusted_square_view_model() -> TrustedSquareViewModel {
from_site_dossier(@site.first_trusted_square_dossier())
}
///|
pub fn first_trusted_square_view_model_from_catalog_root(
root : String,
) -> Result[TrustedSquareViewModel, CatalogBackedViewIssue] {
let dossier = match
@site_catalog.first_trusted_square_dossier_from_catalog_root(root) {
Ok(value) => value
Err(error) =>
return Err(
catalog_backed_view_issue(error.code, error.path, error.message),
)
}
Ok(from_site_dossier(dossier))
}
///|
pub fn first_trusted_square_view_model_at(
row : Int,
col : Int,
) -> TrustedSquareViewModel {
from_site_dossier_with_selection(
@site.first_trusted_square_dossier(),
row,
col,
)
}
///|
pub fn first_trusted_square_view_model_from_catalog_root_at(
root : String,
row : Int,
col : Int,
) -> Result[TrustedSquareViewModel, CatalogBackedViewIssue] {
let dossier = match
@site_catalog.first_trusted_square_dossier_from_catalog_root(root) {
Ok(value) => value
Err(error) =>
return Err(
catalog_backed_view_issue(error.code, error.path, error.message),
)
}
Ok(from_site_dossier_with_selection(dossier, row, col))
}