+page.svelte (2034B)
1 <script lang="ts"> 2 import { app_init, db, route } from "$lib/utils/app"; 3 import { handle_err } from "@radroots/apps-lib"; 4 import { Farms } from "@radroots/apps-lib-pwa"; 5 import type { 6 FarmExtended, 7 IViewFarmsData, 8 } from "@radroots/apps-lib-pwa/types/views/farms"; 9 import { gcs_to_location_basis } from "@radroots/geo"; 10 import { onMount } from "svelte"; 11 12 type LoadData = IViewFarmsData | undefined; 13 let data: LoadData = $state(undefined); 14 15 onMount(async () => { 16 await app_init(); 17 data = await load_data(); 18 }); 19 20 const load_data = async (): Promise<LoadData> => { 21 try { 22 const farms = await db.farm_find_many(); 23 if ("err" in farms) return undefined; 24 25 const list: FarmExtended[] = []; 26 for (const farm of farms.results) { 27 const farm_locations = await db.gcs_location_find_many({ 28 rel: { 29 on_farm: { 30 id: farm.id, 31 }, 32 }, 33 }); 34 if ("err" in farm_locations) continue; 35 list.push({ 36 farm, 37 location: gcs_to_location_basis(farm_locations.results[0]), 38 }); 39 } 40 41 const data: LoadData = { 42 list, 43 }; 44 return data; 45 } catch (e) { 46 handle_err(e, `load`); 47 } 48 }; 49 </script> 50 51 <Farms 52 basis={{ 53 data, 54 callback_route: { route: `/` }, 55 on_handle_farm_add: async () => { 56 try { 57 await route("/farms/add"); 58 } catch (e) { 59 handle_err(e, `on_handle_farm_add`); 60 } 61 }, 62 on_handle_farm_view: async (farm_id) => { 63 try { 64 await route("/farms/info", [[`id`, farm_id]]); 65 } catch (e) { 66 handle_err(e, `on_handle_farm_view`); 67 } 68 }, 69 }} 70 />