chore: refactor wip

This commit is contained in:
Jayden Pyles
2025-05-28 20:42:06 -05:00
parent b66963ed33
commit 39c0d17e1e
12 changed files with 156 additions and 105 deletions

View File

@@ -1,17 +1,17 @@
import React, { useState, Dispatch, useEffect } from "react"; import { Job } from "@/types";
import { Job } from "../../types";
import Box from "@mui/material/Box";
import InputLabel from "@mui/material/InputLabel";
import FormControl from "@mui/material/FormControl";
import Select from "@mui/material/Select";
import Popover from "@mui/material/Popover";
import { import {
Typography,
MenuItem,
useTheme,
ClickAwayListener, ClickAwayListener,
MenuItem,
SxProps,
Typography,
useTheme,
} from "@mui/material"; } from "@mui/material";
import { SxProps } from "@mui/material"; import Box from "@mui/material/Box";
import FormControl from "@mui/material/FormControl";
import InputLabel from "@mui/material/InputLabel";
import Popover from "@mui/material/Popover";
import Select from "@mui/material/Select";
import React, { Dispatch, useEffect, useState } from "react";
interface Props { interface Props {
sxProps?: SxProps; sxProps?: SxProps;
@@ -19,7 +19,6 @@ interface Props {
| Dispatch<React.SetStateAction<Job | null>> | Dispatch<React.SetStateAction<Job | null>>
| ((job: Job) => void); | ((job: Job) => void);
selectedJob: Job | null; selectedJob: Job | null;
setJobs: Dispatch<React.SetStateAction<Job[]>>;
jobs: Job[]; jobs: Job[];
} }
@@ -27,7 +26,6 @@ export const JobSelector = ({
sxProps, sxProps,
selectedJob, selectedJob,
setSelectedJob, setSelectedJob,
setJobs,
jobs, jobs,
}: Props) => { }: Props) => {
const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null); const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);

View File

@@ -1,43 +1,32 @@
import React, { SetStateAction, useState } from "react"; import { JobDownloadDialog } from "@/components/common/job-download-dialog";
import { import { ApiService } from "@/services";
IconButton, import { COLOR_MAP, Job } from "@/types";
Box,
Typography,
Tooltip,
TextField,
FormControl,
InputLabel,
Select,
MenuItem,
SelectChangeEvent,
} from "@mui/material";
import DeleteIcon from "@mui/icons-material/Delete"; import DeleteIcon from "@mui/icons-material/Delete";
import SelectAllIcon from "@mui/icons-material/SelectAll";
import DownloadIcon from "@mui/icons-material/Download"; import DownloadIcon from "@mui/icons-material/Download";
import SelectAllIcon from "@mui/icons-material/SelectAll";
import StarIcon from "@mui/icons-material/Star"; import StarIcon from "@mui/icons-material/Star";
import { useRouter } from "next/router"; import {
import { Favorites, JobQueue } from "."; Box,
import { Job } from "../../types"; FormControl,
import Cookies from "js-cookie"; IconButton,
InputLabel,
MenuItem,
Select,
SelectChangeEvent,
TextField,
Tooltip,
Typography,
} from "@mui/material";
import { useSearchParams } from "next/navigation"; import { useSearchParams } from "next/navigation";
import { JobDownloadDialog } from "../common/job-download-dialog"; import { useRouter } from "next/router";
import React, { SetStateAction, useState } from "react";
import { Favorites, JobQueue } from ".";
interface JobTableProps { interface JobTableProps {
jobs: Job[]; jobs: Job[];
setJobs: React.Dispatch<SetStateAction<Job[]>>; setJobs: React.Dispatch<SetStateAction<Job[]>>;
} }
interface ColorMap {
[key: string]: string;
}
const COLOR_MAP: ColorMap = {
Queued: "rgba(255,201,5,0.25)",
Scraping: "rgba(3,104,255,0.25)",
Completed: "rgba(5,255,51,0.25)",
Failed: "rgba(214,0,25,0.25)",
};
export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => { export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const search = searchParams.get("search"); const search = searchParams.get("search");
@@ -51,7 +40,6 @@ export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
const [jobDownloadDialogOpen, setJobDownloadDialogOpen] = const [jobDownloadDialogOpen, setJobDownloadDialogOpen] =
useState<boolean>(false); useState<boolean>(false);
const token = Cookies.get("token");
const router = useRouter(); const router = useRouter();
const handleDownload = (ids: string[]) => { const handleDownload = (ids: string[]) => {
@@ -78,6 +66,7 @@ export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
} else { } else {
newSelected.add(id); newSelected.add(id);
} }
return newSelected; return newSelected;
}); });
}; };
@@ -89,14 +78,13 @@ export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
const allJobIds = new Set(jobs.map((job) => job.id)); const allJobIds = new Set(jobs.map((job) => job.id));
setSelectedJobs(allJobIds); setSelectedJobs(allJobIds);
} }
setAllSelected(!allSelected); setAllSelected(!allSelected);
}; };
const handleDeleteSelected = async () => { const handleDeleteSelected = async () => {
const response = await fetch("/api/delete", { const response = await ApiService.deleteJob({
method: "POST", ids: Array.from(selectedJobs),
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ data: { ids: Array.from(selectedJobs) } }),
}); });
if (response.ok) { if (response.ok) {
@@ -115,6 +103,7 @@ export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
} else if (searchMode === "status") { } else if (searchMode === "status") {
return job.status.toLowerCase().includes(searchQuery.toLowerCase()); return job.status.toLowerCase().includes(searchQuery.toLowerCase());
} }
return true; return true;
}); });
@@ -125,19 +114,10 @@ export const JobTable: React.FC<JobTableProps> = ({ jobs, setJobs }) => {
) )
); );
const postBody = { await ApiService.updateJob({
ids: ids, ids: ids,
field: field, field: field,
value: value, value: value,
};
await fetch("/api/update", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ data: postBody }),
}); });
}; };

View File

@@ -1,20 +1,20 @@
import React, { useEffect, useState } from "react"; import { JobSelector } from "@/components/common/job-selector";
import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs";
import { checkAI, fetchJob, updateJob } from "@/lib";
import { Job, Message } from "@/types";
import EditNoteIcon from "@mui/icons-material/EditNote";
import SendIcon from "@mui/icons-material/Send";
import { import {
Box, Box,
TextField,
Typography,
Paper,
useTheme,
IconButton, IconButton,
Paper,
TextField,
Tooltip, Tooltip,
Typography,
useTheme,
} from "@mui/material"; } from "@mui/material";
import { Job, Message } from "@/types";
import { useSearchParams } from "next/navigation"; import { useSearchParams } from "next/navigation";
import { fetchJob, updateJob, checkAI } from "@/lib"; import React, { useEffect, useState } from "react";
import SendIcon from "@mui/icons-material/Send";
import EditNoteIcon from "@mui/icons-material/EditNote";
import { JobSelector } from "@/components/ai";
import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs";
export const AI: React.FC = () => { export const AI: React.FC = () => {
const theme = useTheme(); const theme = useTheme();
@@ -184,7 +184,6 @@ export const AI: React.FC = () => {
<JobSelector <JobSelector
selectedJob={selectedJob} selectedJob={selectedJob}
setSelectedJob={setSelectedJob} setSelectedJob={setSelectedJob}
setJobs={setJobs}
jobs={jobs} jobs={jobs}
sxProps={{ sxProps={{
position: "absolute", position: "absolute",

View File

@@ -1,18 +1,18 @@
import { Job, CronJob } from "@/types/job"; import { CronJob, Job } from "@/types/job";
import { useState, useEffect } from "react";
import { CreateCronJobs } from "./create-cron-jobs";
import { import {
Box,
Button,
Table, Table,
TableBody,
TableCell,
TableHead, TableHead,
TableRow, TableRow,
TableCell,
TableBody,
Button,
Box,
useTheme, useTheme,
} from "@mui/material"; } from "@mui/material";
import Cookies from "js-cookie"; import { useEffect, useState } from "react";
import { CreateCronJobs } from "./create-cron-jobs";
import { ApiService } from "@/services/api-service";
export type CronJobsProps = { export type CronJobsProps = {
initialJobs: Job[]; initialJobs: Job[];
initialCronJobs: CronJob[]; initialCronJobs: CronJob[];
@@ -36,14 +36,9 @@ export const CronJobs = ({
}, [initialJobs, initialCronJobs, initialUser]); }, [initialJobs, initialCronJobs, initialUser]);
const handleDeleteCronJob = async (id: string) => { const handleDeleteCronJob = async (id: string) => {
const token = Cookies.get("token"); const response = await ApiService.deleteCronJobs({
const response = await fetch("/api/delete-cron-job", { id,
method: "POST", user_email: user.email,
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ data: { id, user_email: user.email } }),
}); });
if (response.ok) { if (response.ok) {

View File

@@ -1,20 +1,20 @@
import { JobSelector } from "@/components/ai"; import { JobSelector } from "@/components/common/job-selector";
import { MediaViewer } from "@/components/common/media-viewer";
import { TileGridView } from "@/components/common/media-viewer/tile-grid-view";
import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs";
import { Job } from "@/types"; import { Job } from "@/types";
import { import {
Box,
useTheme,
Typography,
CircularProgress,
Alert, Alert,
Box,
CircularProgress,
Paper, Paper,
Tabs,
Tab, Tab,
Tabs,
Typography,
useTheme,
} from "@mui/material"; } from "@mui/material";
import { useRouter, useSearchParams } from "next/navigation"; import { useRouter, useSearchParams } from "next/navigation";
import { useState, useEffect } from "react"; import { useEffect, useState } from "react";
import { TileGridView } from "@/components/common/media-viewer/tile-grid-view";
import { MediaViewer } from "@/components/common/media-viewer";
import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs";
export interface MediaFiles { export interface MediaFiles {
audio: string[]; audio: string[];
@@ -196,7 +196,6 @@ export const MediaId = () => {
<JobSelector <JobSelector
setSelectedJob={handleSelectJob} setSelectedJob={handleSelectJob}
selectedJob={selectedJob} selectedJob={selectedJob}
setJobs={setJobs}
jobs={jobs} jobs={jobs}
/> />
</Box> </Box>

View File

@@ -1,17 +1,17 @@
import { JobSelector } from "@/components/ai"; import { JobSelector } from "@/components/common/job-selector";
import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs"; import { useGetCurrentJobs } from "@/hooks/use-get-current-jobs";
import { useUserSettings } from "@/store/hooks"; import { useUserSettings } from "@/store/hooks";
import { Job } from "@/types"; import { Job } from "@/types";
import { import {
Box,
useTheme,
Typography,
CircularProgress,
Alert, Alert,
Box,
CircularProgress,
Paper, Paper,
Typography,
useTheme,
} from "@mui/material"; } from "@mui/material";
import { useRouter, useSearchParams } from "next/navigation"; import { useRouter, useSearchParams } from "next/navigation";
import { useState, useEffect } from "react"; import { useEffect, useState } from "react";
export const RecordingId = () => { export const RecordingId = () => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
@@ -106,7 +106,6 @@ export const RecordingId = () => {
<JobSelector <JobSelector
setSelectedJob={handleSelectJob} setSelectedJob={handleSelectJob}
selectedJob={selectedJob} selectedJob={selectedJob}
setJobs={setJobs}
jobs={jobs} jobs={jobs}
sxProps={{}} sxProps={{}}
/> />

View File

@@ -0,0 +1,21 @@
import Cookies from "js-cookie";
export type DeleteCronJobsParams = {
id: string;
user_email: string;
};
export const deleteCronJobs = async (params: DeleteCronJobsParams) => {
const token = Cookies.get("token");
const response = await fetch("/api/delete-cron-jobs", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ data: params }),
});
return response;
};

View File

@@ -0,0 +1,24 @@
import Cookies from "js-cookie";
export type DeleteJobParams = {
ids: string[];
};
export const deleteJob = async (params: DeleteJobParams) => {
const token = Cookies.get("token");
const response = await fetch("/api/delete", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ data: params }),
});
if (!response.ok) {
throw new Error("Failed to delete job");
}
return response;
};

View File

@@ -1,3 +1,6 @@
export * from "./submit-job"; export * from "./delete-cron-jobs";
export * from "./delete-job";
export * from "./login"; export * from "./login";
export * from "./register"; export * from "./register";
export * from "./submit-job";
export * from "./update-job";

View File

@@ -0,0 +1,26 @@
import Cookies from "js-cookie";
export type UpdateJobParams = {
ids: string[];
field: string;
value: any;
};
export const updateJob = async (params: UpdateJobParams) => {
const token = Cookies.get("token");
const response = await fetch("/api/update", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
body: JSON.stringify({ data: params }),
});
if (!response.ok) {
throw new Error("Failed to update job");
}
return response.json();
};

View File

@@ -59,3 +59,10 @@ export const initialJobOptions: RawJobOptions = {
collect_media: false, collect_media: false,
custom_cookies: null, custom_cookies: null,
}; };
export const COLOR_MAP: Record<string, string> = {
Queued: "rgba(255,201,5,0.25)",
Scraping: "rgba(3,104,255,0.25)",
Completed: "rgba(5,255,51,0.25)",
Failed: "rgba(214,0,25,0.25)",
};