satupeta-main/shared/services/metadata-url.ts
2026-01-27 09:31:12 +07:00

51 lines
1.3 KiB
TypeScript

import axios from "axios";
import mapSourceApi from "./map-source";
export interface LayerOption {
name: string;
url: string;
}
const fetchGeoNetworkLayersFromSourceId = async (
sourceId: string
): Promise<LayerOption[]> => {
try {
const source = await mapSourceApi.getMapSourceById(sourceId);
const baseUrl = source.url;
const searchUrl = `${baseUrl}/srv/api/search/records/_search`;
const payload = {
query: {
term: {
valid: "1",
},
},
size: 10000,
};
const res = await axios.post(searchUrl, payload);
const hits = res.data.hits?.hits ?? [];
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const layers: LayerOption[] = hits.map((hit: any) => {
const uuid = hit._source.uuid;
const resourceTitleObj = hit._source.resourceTitleObject ?? {};
const name =
resourceTitleObj["default"] ??
resourceTitleObj["langind"] ??
`Untitled - ${uuid.slice(0, 6)}`;
const url = `${baseUrl}/srv/api/records/${uuid}/formatters/xml`;
return { name, url };
});
return layers;
} catch (error) {
console.error("Failed to fetch GeoNetwork records", error);
return [];
}
};
export { fetchGeoNetworkLayersFromSourceId };