feat(frontend): Suche und Filter (Modul 14)

/search-Seite über Bienenstände, Völker, Königinnen, Aufgaben und
Honigchargen. Filterleisten (Status/Standort) in den Listen-Views
für Bienenstände, Völker, Königinnen und Honigchargen.
This commit is contained in:
Nick Szaunig committed 2026-08-22 05:39:59 +02:00
1 parent 146b56d683
commit 166979ff3c
21 files changed
+314 -28

No files matched your search

+12 -3
View File
@@ -1,8 +1,17 @@
import { apiFetch } from "@/lib/auth/api-client";
import { Apiary, ApiaryInput } from "./types";
import { Apiary, ApiaryInput, ApiaryStatus } from "./types";
export function fetchApiaries(): Promise<Apiary[]> {
return apiFetch<Apiary[]>("/apiaries");
export interface ApiaryFilter {
status?: ApiaryStatus;
location?: string;
}
export function fetchApiaries(filter: ApiaryFilter = {}): Promise<Apiary[]> {
const params = new URLSearchParams();
if (filter.status) params.set("status", filter.status);
if (filter.location) params.set("location", filter.location);
const query = params.toString();
return apiFetch<Apiary[]>(`/apiaries${query ? `?${query}` : ""}`);
}
export function fetchApiary(id: string): Promise<Apiary> {
+12 -2
View File
@@ -2,6 +2,7 @@ import { apiFetch } from "@/lib/auth/api-client";
import {
Colony,
ColonyHistory,
ColonyStatus,
CreateColonyInput,
MergeColonyInput,
MoveColonyInput,
@@ -9,8 +10,17 @@ import {
UpdateColonyInput,
} from "./types";
export function fetchColonies(): Promise<Colony[]> {
return apiFetch<Colony[]>("/colonies");
export interface ColonyFilter {
status?: ColonyStatus;
apiaryId?: string;
}
export function fetchColonies(filter: ColonyFilter = {}): Promise<Colony[]> {
const params = new URLSearchParams();
if (filter.status) params.set("status", filter.status);
if (filter.apiaryId) params.set("apiaryId", filter.apiaryId);
const query = params.toString();
return apiFetch<Colony[]>(`/colonies${query ? `?${query}` : ""}`);
}
export function fetchColony(id: string): Promise<Colony> {
+10 -2
View File
@@ -3,11 +3,19 @@ import {
CreateHoneyBatchInput,
CreateHoneyMeasurementInput,
HoneyBatch,
HoneyBatchStatus,
Traceability,
} from "./types";
export function fetchHoneyBatches(): Promise<HoneyBatch[]> {
return apiFetch<HoneyBatch[]>("/honey-batches");
export interface HoneyBatchFilter {
status?: HoneyBatchStatus;
}
export function fetchHoneyBatches(filter: HoneyBatchFilter = {}): Promise<HoneyBatch[]> {
const params = new URLSearchParams();
if (filter.status) params.set("status", filter.status);
const query = params.toString();
return apiFetch<HoneyBatch[]>(`/honey-batches${query ? `?${query}` : ""}`);
}
export function fetchHoneyBatch(id: string): Promise<HoneyBatch> {
+10 -2
View File
@@ -4,11 +4,19 @@ import {
CreateQueenInput,
Queen,
QueenColonyHistoryEntry,
QueenStatus,
UpdateQueenInput,
} from "./types";
export function fetchQueens(): Promise<Queen[]> {
return apiFetch<Queen[]>("/queens");
export interface QueenFilter {
status?: QueenStatus;
}
export function fetchQueens(filter: QueenFilter = {}): Promise<Queen[]> {
const params = new URLSearchParams();
if (filter.status) params.set("status", filter.status);
const query = params.toString();
return apiFetch<Queen[]>(`/queens${query ? `?${query}` : ""}`);
}
export function fetchQueen(id: string): Promise<Queen> {
+6
View File
@@ -0,0 +1,6 @@
import { apiFetch } from "@/lib/auth/api-client";
import { SearchResult } from "./types";
export function search(q: string): Promise<SearchResult[]> {
return apiFetch<SearchResult[]>(`/search?q=${encodeURIComponent(q)}`);
}
+7
View File
@@ -0,0 +1,7 @@
export type SearchResultType = "Apiary" | "Colony" | "Queen" | "Task" | "HoneyBatch";
export interface SearchResult {
type: SearchResultType;
id: string;
label: string;
}