app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit acb8881214fcf8503d1b2269df37f88a69255c26
parent b7fba4e5f56c0dad90a018f9298a8fd2a0bb94ce
Author: triesap <triesap@radroots.dev>
Date:   Thu, 20 Nov 2025 15:56:07 +0000

Update `/farms` with new view component integrated from `@radroots/apps-lib-pwa`.

Diffstat:
Mapp/src/lib/utils/app/routes.ts | 6++++++
Mapp/src/routes/(app)/+page.svelte | 3++-
Aapp/src/routes/(app)/farms/+page.svelte | 78++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aapp/src/routes/(app)/farms/add/+page.svelte | 8++++++++
Aapp/src/routes/(app)/farms/info/+page.svelte | 8++++++++
5 files changed, 102 insertions(+), 1 deletion(-)

diff --git a/app/src/lib/utils/app/routes.ts b/app/src/lib/utils/app/routes.ts @@ -1,11 +1,17 @@ export type NavigationRoute = | "/" + | "/farms" + | "/farms/add" + | "/farms/info" | "/import" | "/setup" export function parse_route(route: string): NavigationRoute { switch (route) { case "/": + case "/farms": + case "/farms/add": + case "/farms/info": case "/import": case "/setup": return route; diff --git a/app/src/routes/(app)/+page.svelte b/app/src/routes/(app)/+page.svelte @@ -1,5 +1,6 @@ <script lang="ts"> import { notif } from "$lib/utils/app"; + import { route } from "$lib/utils/app/app"; import { handle_err, sleep } from "@radroots/apps-lib"; import { Home } from "@radroots/apps-lib-pwa"; import { qp_ref } from "@radroots/apps-lib-pwa/stores/app"; @@ -23,7 +24,7 @@ data, on_handle_farms: async () => { try { - alert("route to /farms"); //await route("/farms"); + await route("/farms"); } catch (e) { await handle_err(e, `on_handle_farms`); } diff --git a/app/src/routes/(app)/farms/+page.svelte b/app/src/routes/(app)/farms/+page.svelte @@ -0,0 +1,78 @@ +<script lang="ts"> + import { db } from "$lib/utils/app"; + import { route } from "$lib/utils/app/app"; + import { handle_err } from "@radroots/apps-lib"; + import { Farms } from "@radroots/apps-lib-pwa"; + import type { + FarmExtended, + IViewFarmsData, + } from "@radroots/apps-lib-pwa/types/views/farm"; + import { onMount } from "svelte"; + + type LoadData = IViewFarmsData | undefined; + let data: LoadData = $state(undefined); + + onMount(async () => { + await db.init(); + data = await load_data(); + }); + + const load_data = async (): Promise<LoadData> => { + try { + const farms = await db.farm_find_many(); + console.log(JSON.stringify(farms, null, 4), `farms`); + if ("err" in farms) return undefined; + + const list: FarmExtended[] = []; + + for (const farm of farms.results) { + const farm_location = await db.location_gcs_find_many({ + rel: { + on_farm: { + id: farm.id, + }, + }, + }); + console.log( + JSON.stringify(farm_location, null, 4), + `farm_location`, + ); + if ("err" in farm_location) continue; + list.push({ + farm, + //location: location_gcs_to_location_basis( + // farm_location.results[0], + //), + }); + } + + const data: LoadData = { + list, + }; + return data; + } catch (e) { + handle_err(e, `load`); + } + }; +</script> + +<Farms + basis={{ + data, + callback_route: { route: `/` }, + on_handle_farm_add: async () => { + try { + await route("/farms/add"); + } catch (e) { + handle_err(e, `on_handle_farm_add`); + } + }, + on_handle_farm_view: async (farm_id) => { + try { + await route("/farms/info", [[`id`, farm_id]]); + } catch (e) { + handle_err(e, `on_handle_farm_view`); + } + }, + }} +/> diff --git a/app/src/routes/(app)/farms/add/+page.svelte b/app/src/routes/(app)/farms/add/+page.svelte @@ -0,0 +1,8 @@ +<script lang="ts"> +</script> + +<div class={`flex flex-col w-full justify-start items-start`}> + <p class={`font-sans font-[400] text-base text-ly0-gl`}> + {`farms add`} + </p> +</div> diff --git a/app/src/routes/(app)/farms/info/+page.svelte b/app/src/routes/(app)/farms/info/+page.svelte @@ -0,0 +1,8 @@ +<script lang="ts"> +</script> + +<div class={`flex flex-col w-full justify-start items-start`}> + <p class={`font-sans font-[400] text-base text-ly0-gl`}> + {`farms info`} + </p> +</div>