diff --git a/components/jobs/jobs-board.tsx b/components/jobs/jobs-board.tsx new file mode 100644 index 0000000..11c84ff --- /dev/null +++ b/components/jobs/jobs-board.tsx @@ -0,0 +1,96 @@ +'use client' + +import { useEffect } from 'react' +import { SplitPane } from '@/components/split-pane/split-pane' +import JobCard from './job-card' +import JobDetailPane from './job-detail-pane' +import SprintSubTasksPane from './sprint-sub-tasks-pane' +import { useJobsStore } from '@/stores/jobs-store' +import useJobsRealtime from '@/hooks/use-jobs-realtime' +import type { JobWithRelations } from '@/actions/jobs-page' + +interface JobsBoardProps { + initialActiveJobs: JobWithRelations[] + initialDoneJobs: JobWithRelations[] +} + +function jobToCardProps(j: JobWithRelations) { + return { + id: j.id, + kind: j.kind, + status: j.status, + taskCode: j.taskCode, + taskTitle: j.taskTitle, + ideaCode: j.ideaCode, + ideaTitle: j.ideaTitle, + sprintGoal: j.sprintGoal, + sprintCode: j.sprintCode, + productName: j.productName, + branch: j.branch, + error: j.error, + summary: j.summary, + } +} + +export default function JobsBoard({ initialActiveJobs, initialDoneJobs }: JobsBoardProps) { + const { activeJobs, doneJobs, selectedJobId, initJobs, setSelectedJobId } = useJobsStore() + useJobsRealtime() + + // eslint-disable-next-line react-hooks/exhaustive-deps + useEffect(() => { initJobs(initialActiveJobs, initialDoneJobs) }, []) + + const selectedJob = [...activeJobs, ...doneJobs].find(j => j.id === selectedJobId) ?? null + + const leftPane = ( +
+ {activeJobs.map(j => ( + setSelectedJobId(j.id)} + /> + ))} + {activeJobs.length === 0 && ( +

Geen actieve jobs

+ )} +
+ ) + + const middlePane = ( +
+ +
+ +
+
+ ) + + const rightPane = ( +
+ {doneJobs.map(j => ( + setSelectedJobId(j.id)} + /> + ))} + {doneJobs.length === 0 && ( +

Nog geen afgeronde jobs

+ )} +
+ ) + + return ( + + ) +}