diff --git a/website/src/components/TaskPage/TaskPage.tsx b/website/src/components/TaskPage/TaskPage.tsx index 41d89405..e1ecc79c 100644 --- a/website/src/components/TaskPage/TaskPage.tsx +++ b/website/src/components/TaskPage/TaskPage.tsx @@ -4,7 +4,7 @@ import { TaskEmptyState } from "src/components/EmptyState"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; import { TaskInfos } from "src/components/Tasks/TaskTypes"; -import { apiHooksByType, ERROR_CODES } from "src/lib/constants"; +import { ERROR_CODES, taskApiHooks } from "src/lib/constants"; import { getTypeSafei18nKey } from "src/lib/i18n"; import { TaskType } from "src/types/Task"; @@ -14,8 +14,8 @@ type TaskPageProps = { export const TaskPage = ({ type }: TaskPageProps) => { const { t } = useTranslation(["tasks", "common"]); - const apiHook = apiHooksByType[type]; - const { tasks, isLoading, reset, trigger, error } = apiHook(type); + const taskApiHook = taskApiHooks[type]; + const { tasks, isLoading, reset, trigger, error } = taskApiHook(type); const taskInfo = TaskInfos.find((taskType) => taskType.type === type); if (isLoading) { diff --git a/website/src/lib/constants.ts b/website/src/lib/constants.ts index 6269dbf9..a260fa28 100644 --- a/website/src/lib/constants.ts +++ b/website/src/lib/constants.ts @@ -14,6 +14,7 @@ import { useRankInitialPromptsTask, useRankPrompterRepliesTask, } from "src/hooks/tasks/useRankReplies"; +import { TaskApiHooks } from "src/types/Hooks"; import { TaskType } from "src/types/Task"; export const ERROR_CODES = { @@ -28,7 +29,7 @@ export const ERROR_CODES = { TASK_MESSAGE_TOO_LONG: 1008, }; -export const apiHooksByType = { +export const taskApiHooks: TaskApiHooks = { [TaskType.random]: useGenericTaskAPI, [TaskType.assistant_reply]: useCreateAssistantReply, [TaskType.initial_prompt]: useCreateInitialPrompt, diff --git a/website/src/types/Hooks.ts b/website/src/types/Hooks.ts new file mode 100644 index 00000000..8fd9aa4f --- /dev/null +++ b/website/src/types/Hooks.ts @@ -0,0 +1,26 @@ +import { MutatorCallback, MutatorOptions } from "swr"; + +import { BaseTask, TaskResponse, TaskType } from "./Task"; + +type ConcreteTaskResponse = TaskResponse; +type TaskError = { errorCode: number; message: string }; + +type Trigger = ( + extraArgument?: unknown, + options?: MutatorOptions +) => Promise; + +type Reset = ( + data?: ConcreteTaskResponse | Promise | MutatorCallback, + opts?: boolean | MutatorOptions +) => Promise; + +type TaskAPIHook = { + tasks: TaskResponse[]; + isLoading: boolean; + error: TaskError; + trigger: Trigger; + reset: Reset; +}; + +export type TaskApiHooks = Record TaskAPIHook>;