11import { useEffect , useMemo , useState } from "react" ;
2- import { LuPause , LuPlay , LuSearch , LuStepForward , LuX } from "react-icons/lu" ;
2+ import {
3+ LuDownload ,
4+ LuPause ,
5+ LuPlay ,
6+ LuSearch ,
7+ LuStepForward ,
8+ LuX ,
9+ } from "react-icons/lu" ;
310import {
411 Alert ,
512 Button ,
613 ButtonGroup ,
714 createListCollection ,
15+ DownloadTrigger ,
816 Field ,
917 Group ,
1018 Heading ,
@@ -25,6 +33,7 @@ import type {
2533 StacLink ,
2634 TemporalExtent ,
2735} from "stac-ts" ;
36+ import * as stac_wasm from "stac-wasm" ;
2837import { SpatialExtent } from "./extent" ;
2938import useStacSearch from "../hooks/stac-search" ;
3039import type { BBox2D } from "../types/map" ;
@@ -175,6 +184,16 @@ function Search({
175184 setItems ( items ) ;
176185 } , [ items , setItems ] ) ;
177186
187+ const downloadJson = ( ) => {
188+ return JSON . stringify (
189+ items ? { type : "FeatureCollection" , features : items } : { }
190+ ) ;
191+ } ;
192+
193+ const downloadStacGeoparquet = ( ) => {
194+ return new Blob ( items ? [ stac_wasm . stacJsonToParquet ( items ) ] : [ ] ) ;
195+ } ;
196+
178197 return (
179198 < Stack gap = { 4 } >
180199 < Heading size = { "md" } > Search results</ Heading >
@@ -230,6 +249,33 @@ function Search({
230249 Clear < LuX />
231250 </ Button >
232251 </ ButtonGroup >
252+ { items && items . length > 0 && (
253+ < >
254+ < Heading size = { "sm" } > Download</ Heading >
255+ < ButtonGroup variant = { "surface" } size = { "xs" } >
256+ < DownloadTrigger
257+ data = { downloadJson }
258+ fileName = "search.json"
259+ mimeType = "application/json"
260+ asChild
261+ >
262+ < Button >
263+ JSON < LuDownload />
264+ </ Button >
265+ </ DownloadTrigger >
266+ < DownloadTrigger
267+ data = { downloadStacGeoparquet }
268+ fileName = "search.parquet"
269+ mimeType = "application/json"
270+ asChild
271+ >
272+ < Button >
273+ stac-geoparquet < LuDownload />
274+ </ Button >
275+ </ DownloadTrigger >
276+ </ ButtonGroup >
277+ </ >
278+ ) }
233279 </ Stack >
234280 ) ;
235281}
0 commit comments