import { pb } from "./pb"; import { ListsResponse, TasksResponse } from "./pocketbase-types"; export interface ListData { id: string; name: string; parentId: string | null; lists: Array<{ id: string; name: string; listCount: number; taskCount: number; }>; tasks: Array; } export async function listFetcher(id: string): Promise { interface Expand { lists_via_parent: unknown[]; tasks_via_list: unknown[]; } type ListsResponseExpand = ListsResponse; if (id === "all") { const lists = await pb .collection("lists") .getList(0, 50, { filter: pb.filter("parent = null"), expand: "lists_via_parent,tasks_via_list", }); const tasks = await pb.collection("tasks").getList(0, 50, { filter: pb.filter("list = null"), }); return { id, name: "Lists", parentId: null, lists: lists.items.map((l) => ({ id: l.id, name: l.name, listCount: l.expand?.["lists_via_parent"]?.length || 0, taskCount: l.expand?.["tasks_via_list"]?.length || 0, })), tasks: tasks.items, }; } const list = await pb.collection("lists").getOne(id); const lists = await pb .collection("lists") .getList(0, 50, { filter: pb.filter("parent = {:id}", { id }), expand: "lists_via_parent,tasks_via_list", }); const tasks = await pb.collection("tasks").getList(0, 50, { filter: pb.filter("list = {:id}", { id }), }); return { id, name: list.name, parentId: list.parent, lists: lists.items.map((l) => ({ id: l.id, name: l.name, listCount: l.expand?.["lists_via_parent"]?.length || 0, taskCount: l.expand?.["tasks_via_list"]?.length || 0, })), tasks: tasks.items, }; } export interface TaskData extends TasksResponse { listId: string; imageSource: string; } export async function taskFetcher(id: string): Promise { const task = await pb.collection("tasks").getOne(id); const icon = await pb.collection("icons").getOne(task.icon); const imageSource = pb.getFileUrl(icon, icon.image, { thumb: "300x300", }); return { ...task, listId: task.list, imageSource, }; } export interface RandomTaskData { id: string; name: string; } export async function randomTask(parent: string | null) { return await pb.send(`/api/extras/random/${parent}`, {}); }