can regenerate pdfs, because sometimes the ai gets it wrong, and we need to help it out
This commit is contained in:
@@ -116,8 +116,10 @@ export const App: React.FC = () => {
|
||||
const handleProcess = async (jobId: string) => {
|
||||
try {
|
||||
setProcessingJobId(jobId);
|
||||
await api.processJob(jobId);
|
||||
toast.success("Resume generated successfully");
|
||||
const job = jobs.find((item) => item.id === jobId);
|
||||
const force = job?.status === "ready";
|
||||
await api.processJob(jobId, { force });
|
||||
toast.success(force ? "Resume regenerated successfully" : "Resume generated successfully");
|
||||
await loadJobs();
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : "Failed to process job";
|
||||
|
||||
@@ -56,8 +56,9 @@ export async function updateJob(
|
||||
});
|
||||
}
|
||||
|
||||
export async function processJob(id: string): Promise<Job> {
|
||||
return fetchApi<Job>(`/jobs/${id}/process`, {
|
||||
export async function processJob(id: string, options?: { force?: boolean }): Promise<Job> {
|
||||
const query = options?.force ? '?force=1' : '';
|
||||
return fetchApi<Job>(`/jobs/${id}/process${query}`, {
|
||||
method: 'POST',
|
||||
});
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ export const JobCard: React.FC<JobCardProps> = ({
|
||||
|
||||
const hasPdf = !!job.pdfPath;
|
||||
const canApply = job.status === "ready";
|
||||
const canProcess = job.status === "discovered";
|
||||
const canProcess = ["discovered", "ready"].includes(job.status);
|
||||
const canReject = ["discovered", "ready"].includes(job.status);
|
||||
|
||||
const jobLink = job.applicationLink || job.jobUrl;
|
||||
@@ -200,7 +200,7 @@ export const JobCard: React.FC<JobCardProps> = ({
|
||||
) : (
|
||||
<>
|
||||
<RefreshCcw className="mr-2 h-4 w-4" />
|
||||
Generate Resume
|
||||
{job.status === "ready" ? "Regenerate PDF" : "Generate Resume"}
|
||||
</>
|
||||
)}
|
||||
</Button>
|
||||
|
||||
@@ -215,7 +215,7 @@ export const JobTable: React.FC<JobTableProps> = ({
|
||||
const pdfHref = `/pdfs/resume_${job.id}.pdf`;
|
||||
|
||||
const canApply = job.status === "ready";
|
||||
const canProcess = job.status === "discovered";
|
||||
const canProcess = ["discovered", "ready"].includes(job.status);
|
||||
const canReject = ["discovered", "ready"].includes(job.status);
|
||||
const isProcessing = processingJobId === job.id;
|
||||
const isSelected = selectedJobIds.has(job.id);
|
||||
@@ -240,7 +240,7 @@ export const JobTable: React.FC<JobTableProps> = ({
|
||||
asChild
|
||||
variant="link"
|
||||
size="sm"
|
||||
className="h-auto justify-start p-0 text-left leading-snug whitespace-normal break-words"
|
||||
className="h-auto justify-start p-0 text-left leading-snug whitespace-normal wrap-break-word"
|
||||
>
|
||||
<a href={jobLink} target="_blank" rel="noopener noreferrer">
|
||||
{job.title}
|
||||
@@ -248,7 +248,7 @@ export const JobTable: React.FC<JobTableProps> = ({
|
||||
</Button>
|
||||
</TableCell>
|
||||
|
||||
<TableCell className="align-middle whitespace-normal break-words">
|
||||
<TableCell className="align-middle whitespace-normal wrap-break-word">
|
||||
{job.employer}
|
||||
</TableCell>
|
||||
|
||||
@@ -258,7 +258,7 @@ export const JobTable: React.FC<JobTableProps> = ({
|
||||
</Badge>
|
||||
</TableCell>
|
||||
|
||||
<TableCell className="align-middle whitespace-normal break-words text-muted-foreground">
|
||||
<TableCell className="align-middle whitespace-normal wrap-break-word text-muted-foreground">
|
||||
{job.location || "—"}
|
||||
</TableCell>
|
||||
|
||||
@@ -331,7 +331,11 @@ export const JobTable: React.FC<JobTableProps> = ({
|
||||
disabled={isProcessing}
|
||||
>
|
||||
<RefreshCcw className="mr-2 h-4 w-4" />
|
||||
{isProcessing ? "Processing..." : "Generate Resume"}
|
||||
{isProcessing
|
||||
? "Processing..."
|
||||
: job.status === "ready"
|
||||
? "Regenerate PDF"
|
||||
: "Generate Resume"}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user