Open sampov2 opened 3 years ago
getAllDatasets
, getBandsForDataset
ja getItemsForDatasetAndTime
funktiot, jotka toteutetaanimport { store } from '../App'
import { loadRootCatalog } from '../Store/Actions/data'
interface RootCatalog {
type?: string,
stack_version?: string,
description?: string,
links?: Array<any>
}
interface AllDatasetsType {
datasets: [{
id: string,
title: string
}]
}
// Helper function
function getCatalog(store, url) {
const ReduxState = store.getState()
const ret = ReduxState.dataReducer.cache[url];
if (!ret) {
store.dispatch(loadCatalog(url))
}
return ret || {};
}
export const getAllDatasets : AllDatasetsType = () => {
// 1. get root catalog
// 2. get all dataset catalogs
// 3. read id and title from each dataset catalog and return them as an array of objects { datasets: [{id: 'foo', title: 'bar'}, {...} ]}
const ReduxState = store.getState()
const rootCatalog: RootCatalog = ReduxState.dataReducer.cache.catalog
// Check if object is empty
if (rootCatalog && Object.keys(rootCatalog).length === 0) {
store.dispatch(loadCatalog('/Testdata/root.json'))
return { datasets: [] }
}
else {
console.log('Rootcatalog in api function: ', rootCatalog)
if (rootCatalog.links) {
const dataSets = rootCatalog.links.filter((link: any) => link.rel === 'child').map(link => {
var catalog = getCatalog(store, link.href);
/*
var catalog = ReduxState.dataReducer.cache[link.href];
if (!catalog) {
store.dispatch(loadCatalog(link.href))
}
*/
return catalog || {};
})
return { dataSets: dataSets }
}
}
}
export const getBandsForDataset = (id : string) => {
// 1. get root catalog
// 2. get all dataset catalogs
// 3. find the dataset catalog with given id
// 4. return bands from selecte dataset catalog contents
return { bands: [{ id: 'foo'}] };
}
export const getItemsForDatasetAndTime = (datasetId : string, inspectionTime : string) => {
// 1. get root catalog
// 2. get all dataset catalogs
// 3. find the dataset catalog with given id
// 4. identify dataset-time catalog that overlap with "inspectionTime" and the next dataset-time catalog (in time order)
// 5. get dataset-time catalogs that were identified in step 4
// 6. get all items in the two dataset-time catalogs identified in step 4
// 7. place items from step 6 in order (per time) and select the first item where startdate (or time) is after inspectionTime
// 8. return data
return { items: [ /* items */ ] };
// If a catalog or item is not loaded yet, start loading it and do not proceed further, return an empty result: { items: [] }
}
Hahmotellaan API, jota käyttöliittymä käyttää hakeakseen katalogilta tiedot