added tasks page and functionality

This commit is contained in:
csawatzky 2025-04-07 15:46:59 -06:00
parent b573e10707
commit 2ef22a8bc2
19 changed files with 1992 additions and 15 deletions

View file

@ -29,7 +29,7 @@ export {
useTagAPI,
useTeamAPI,
useImagekitAPI,
// useTaskAPI,
useTaskAPI, //TODO: update api with resolve, reject
// useUsageAPI,
useUserAPI,
// useStripeAPI,

View file

@ -29,6 +29,7 @@ import SiteProvider, {useSiteAPI} from "./siteAPI";
import ObjectHeaterProvider, {useObjectHeaterAPI} from "./ObjectHeaterAPI";
import MutationProvider, {useMutationAPI} from "./mutationAPI"
import PreferenceProvider, {usePreferenceAPI} from "./preferenceAPI";
import TaskProvider, { useTaskAPI } from "./taskAPI";
// import NoteProvider from "providers/noteAPI";
export const pondURL = (partial: string, demo: boolean = false): string => {
@ -74,7 +75,9 @@ export default function PondProvider(props: PropsWithChildren<any>) {
<ObjectHeaterProvider>
<MutationProvider>
<PreferenceProvider>
{children}
<TaskProvider>
{children}
</TaskProvider>
</PreferenceProvider>
</MutationProvider>
</ObjectHeaterProvider>
@ -135,5 +138,6 @@ export {
useSiteAPI,
useObjectHeaterAPI,
useMutationAPI,
usePreferenceAPI
usePreferenceAPI,
useTaskAPI
};

View file

@ -0,0 +1,121 @@
import { AxiosResponse } from "axios";
import { useHTTP } from "hooks";
import { pond } from "protobuf-ts/pond";
import { useGlobalState } from "providers";
import { createContext, PropsWithChildren, useContext } from "react";
import { pondURL } from "./pond";
export interface ITaskAPIContext {
addTask: (task: pond.TaskSettings) => Promise<AxiosResponse<pond.AddTaskResponse>>;
getTask: (taskID: string) => Promise<AxiosResponse<pond.Task>>;
listTasks: (
limit: number,
offset: number,
order?: "asc" | "desc",
orderBy?: string,
search?: string,
asRoot?: boolean,
as?: string,
from?: string,
to?: string
) => Promise<AxiosResponse<pond.ListTasksResponse>>;
removeTask: (taskID: string) => Promise<AxiosResponse<pond.RemoveTaskResponse>>;
updateTask: (
key: string,
task: pond.TaskSettings,
asRoot?: true
) => Promise<AxiosResponse<pond.UpdateTaskResponse>>;
getMultiTasks: (objectKeys: string[]) => Promise<AxiosResponse<pond.GetMultiTasksResponse>>;
}
export const TaskAPIContext = createContext<ITaskAPIContext>({} as ITaskAPIContext);
interface Props {}
export default function TaskProvider(props: PropsWithChildren<Props>) {
const { children } = props;
const { get, del, post, put } = useHTTP();
const [{ as }] = useGlobalState();
const addTask = (task: pond.TaskSettings) => {
if (as) return post<pond.AddTaskResponse>(pondURL("/tasks?as=" + as), task);
return post<pond.AddTaskResponse>(pondURL("/tasks"), task);
};
const getTask = (taskID: string) => {
if (as) return get<pond.Task>(pondURL("/task/" + taskID + "?as=" + as));
return get<pond.Task>(pondURL("/task/" + taskID));
};
const removeTask = (key: string) => {
if (as) return del<pond.RemoveTaskResponse>(pondURL("/tasks/" + key + "?as=" + as));
return del<pond.RemoveTaskResponse>(pondURL("/tasks/" + key));
};
const listTasks = (
limit: number,
offset: number,
order?: "asc" | "desc",
orderBy?: string,
search?: string,
asRoot?: boolean,
as?: string,
from?: string,
to?: string
) => {
return get<pond.ListTasksResponse>(
pondURL(
"/tasks" +
"?limit=" +
limit +
"&offset=" +
offset +
("&order=" + (order ? order : "asc")) +
("&by=" + (orderBy ? orderBy : "key")) +
(search ? "&search=" + search : "") +
(asRoot ? "&asRoot=" + asRoot.toString() : "") +
(as ? "&as=" + as : "") +
(from ? "&from=" + from : "") +
(to ? "&to=" + to : "")
)
);
};
const updateTask = (key: string, task: pond.TaskSettings, asRoot?: boolean) => {
if (as)
return put<pond.UpdateTaskResponse>(
pondURL("/tasks/" + key + "?as=" + as + (asRoot ? "&asRoot=" + asRoot.toString() : "")),
task
);
return put<pond.UpdateTaskResponse>(
pondURL("/tasks/" + key + (asRoot ? "?asRoot=" + asRoot.toString() : "")),
task
);
};
const getMultiTasks = (objectKeys: string[]) => {
if (as)
return get<pond.GetMultiTasksResponse>(
pondURL("/multitasks?objectKeys=" + objectKeys.join(",") + "&as=" + as)
);
return get<pond.GetMultiTasksResponse>(
pondURL("/multitasks?objectKeys=" + objectKeys.join(","))
);
};
return (
<TaskAPIContext.Provider
value={{
addTask,
getTask,
listTasks,
removeTask,
updateTask,
getMultiTasks
}}>
{children}
</TaskAPIContext.Provider>
);
}
export const useTaskAPI = () => useContext(TaskAPIContext);