diff --git a/app/hooks/useActiveJobs/utilities.ts b/app/hooks/useActiveJobs/utilities.ts index 4719709658..4da3db7378 100644 --- a/app/hooks/useActiveJobs/utilities.ts +++ b/app/hooks/useActiveJobs/utilities.ts @@ -6,9 +6,7 @@ export async function PollRecentJobs() { const response = await jobsApi.ListRecentJobs(); if (response.success && response.data) { - if (response.data.length > 0) { - setJobs(response.data); - } + setJobs(response.data); // else, just no jobs, not an error, do nothing return; } diff --git a/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/audioInferenceElement.tsx b/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/audioInferenceElement.tsx new file mode 100644 index 0000000000..370b94508a --- /dev/null +++ b/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/audioInferenceElement.tsx @@ -0,0 +1,74 @@ +import { useCallback } from "react"; +import { twMerge } from "tailwind-merge"; +import { + faSpinnerThird, + faCircleExclamation, + faXmark, +} from "@fortawesome/pro-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { JobsApi } from "~/Classes/ApiManager"; +import { JobStatus, ToastTypes } from "~/enums"; +import { Job } from "~/models"; +import { ButtonIcon, H5 } from "~/components"; +import { addToast } from "~/signals"; +import { isJobStatusError } from "~/utilities"; +import { PollRecentJobs } from "~/hooks/useActiveJobs/utilities"; + +export const InferenceElement = ({ job }: { job: Job }) => { + const jobStatus = job.status.status; + + const className = twMerge( + "rounded-md w-full flex justify-between items-center p-2 gap-2", + jobStatus === JobStatus.PENDING || jobStatus === JobStatus.ATTEMPT_FAILED + ? "bg-inference-pending" + : "", + jobStatus === JobStatus.STARTED ? "bg-inference-generating" : "", + isJobStatusError(jobStatus) ? "bg-inference-error" : "", + ); + + const getStatusText = () => { + switch (jobStatus) { + case JobStatus.PENDING: + return "Pending..."; + case JobStatus.ATTEMPT_FAILED: + return "Attempt Failed, server will retry soon!"; + case JobStatus.STARTED: + return "Started, generating..."; + case JobStatus.DEAD: + case JobStatus.COMPLETE_FAILURE: + default: + return "Error!"; + } + }; + + const handleDeleteJob = useCallback(async (job: Job) => { + const jobsApi = new JobsApi(); + const response = await jobsApi.DeleteJobByToken(job.job_token); + if (response.success) { + addToast( + ToastTypes.SUCCESS, + "Successfully delete the audio generation job.", + ); + PollRecentJobs(); + return; + } + addToast( + ToastTypes.ERROR, + response.errorMessage ?? + "Unknown Error in deleting audio generation job.", + ); + }, []); + + return ( +
+ {isJobStatusError(jobStatus) ? ( + + ) : ( + + )} +
{getStatusText()}
+ handleDeleteJob(job)} /> +
+ ); +}; diff --git a/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/inferenceElement.tsx b/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/inferenceElement.tsx deleted file mode 100644 index b4aa3599d7..0000000000 --- a/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/inferenceElement.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { twMerge } from "tailwind-merge"; -import { - faSpinnerThird, - faCircleXmark, - faXmark, -} from "@fortawesome/pro-solid-svg-icons"; -import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; - -import { JobStatus } from "~/enums"; -import { Job } from "~/models"; -import { ButtonIcon, H5 } from "~/components"; - -export const InferenceElement = ({ job }: { job: Job }) => { - const className = twMerge( - "rounded-md w-full flex justify-between items-center p-2 gap-2", - job.status.status === JobStatus.PENDING ? "bg-inference-pending" : "", - job.status.status === JobStatus.STARTED ? "bg-inference-generating" : "", - job.status.status === JobStatus.DEAD ? "bg-inference-error" : "", - ); - - const statusText = "".concat( - job.status.status === JobStatus.PENDING ? "Pending..." : "", - job.status.status === JobStatus.STARTED ? "Generating..." : "", - job.status.status === JobStatus.DEAD ? "Error" : "", - ); - return ( -
- {job.status.status === JobStatus.DEAD && ( - - )} - {job.status.status !== JobStatus.DEAD && ( - - )} -
{statusText}
- {job.status.status === JobStatus.DEAD && ( - { - console.log(job); - }} - /> - )} -
- ); -}; diff --git a/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/pageAudioLibrary.tsx b/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/pageAudioLibrary.tsx index a5b1f69ad1..8360bfb928 100644 --- a/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/pageAudioLibrary.tsx +++ b/app/pages/PageEnigma/comps/SidePanelTabs/itemTabs/AudioTab/pageAudioLibrary.tsx @@ -12,7 +12,7 @@ import { import { AudioItemElements } from "./audioItemElements"; import { TabTitle } from "~/pages/PageEnigma/comps/SidePanelTabs/comps/TabTitle"; -import { InferenceElement } from "./inferenceElement"; +import { InferenceElement } from "./audioInferenceElement"; import { AssetFilterOption } from "~/enums"; import { AudioTabPages } from "~/pages/PageEnigma/enums"; @@ -31,7 +31,7 @@ export const PageAudioLibrary = ({ AssetFilterOption.FEATURED, ); const filteredAudioItems = - selectedFilter === AssetFilterOption.FEATURED + selectedFilter === AssetFilterOption.MINE ? audioItems.value ?? [] : userAudioItems.value ?? []; const [currentPage, setCurrentPage] = useState(0); diff --git a/app/utilities.ts b/app/utilities.ts index b7831584f7..770b33192b 100644 --- a/app/utilities.ts +++ b/app/utilities.ts @@ -34,6 +34,17 @@ export const isNumberString = (value: string) => { return !isNaN(Number(value)); }; +export const isJobStatusError = (curr: JobStatus) => { + if ( + curr === JobStatus.ATTEMPT_FAILED || + curr === JobStatus.COMPLETE_FAILURE || + curr === JobStatus.DEAD + ) { + return true; + } + return false; +}; + export const getFileName = (file: File) => { return file.name.substring(0, file.name.lastIndexOf(".")); };