@seasketch/geoprocessing
Version:
Geoprocessing and reporting framework for SeaSketch 2.0
38 lines (31 loc) • 1.25 kB
text/typescript
import { Datasource, Geography, Metric } from "../../../src/types/index.js";
import ProjectClientBase from "../../../src/project/ProjectClientBase.js";
/**
* Precalc one or more datasources for a project, for one or more defined geographies, and return the freshly filtered metrics
*/
export function precalcCleanup<C extends ProjectClientBase>(
projectClient: C,
): Metric[] {
let metrics = projectClient.getPrecalcMetrics();
// Filter out any metrics where geography or datasource no longer present
metrics = metrics.filter((m) => {
if (!m.geographyId || !m.classId) return false;
let curGeog: Geography;
let curDatasource: Datasource;
try {
curGeog = projectClient.getGeographyById(m.geographyId);
if (!curGeog) return false;
// precalc metrics should have the format: "datasourceId-class"
if (!m.classId.includes("-")) return false;
const datasourceId = m.classId.slice(0, m.classId.lastIndexOf("-"));
curDatasource = projectClient.getDatasourceById(datasourceId);
if (!curDatasource) return false;
if (curGeog.precalc === false && curDatasource.precalc === false)
return false;
} catch {
return false;
}
return true;
});
return metrics;
}