commit 49e6a77e3661ca273b28841e4f097ac566f6739e
parent 052965d560c8e6c96c739585d55406a8646350c7
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:
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>