diff --git a/app/(dashboard)/jobs/page.tsx b/app/(dashboard)/jobs/page.tsx index 97bd759..e80e1fe 100644 --- a/app/(dashboard)/jobs/page.tsx +++ b/app/(dashboard)/jobs/page.tsx @@ -242,79 +242,81 @@ export default function JobsPage() { ))} ) : filteredJobs.length > 0 ? ( - - - - Job ID - Spider - Status - Start Time - PID - Actions - - - - {filteredJobs.map((job) => ( - - - - {job.id.substring(0, 8)}... - - - -
- - {job.spider} -
-
- {getStatusBadge(job.status)} - - - {format(new Date(job.start_time), "PPp")} - - - - {job.pid ? ( - {job.pid} - ) : ( - - - )} - - -
- {job.log_url && ( - - )} - {(job.status === "pending" || job.status === "running") && ( - - )} -
-
+
+
+ + + Job ID + Spider + Status + Start Time + PID + Actions - ))} - -
+ + + {filteredJobs.map((job) => ( + + + + {job.id.substring(0, 8)}... + + + +
+ + {job.spider} +
+
+ {getStatusBadge(job.status)} + + + {format(new Date(job.start_time), "PPp")} + + + + {job.pid ? ( + {job.pid} + ) : ( + - + )} + + +
+ {job.log_url && ( + + )} + {(job.status === "pending" || job.status === "running") && ( + + )} +
+
+
+ ))} +
+ + ) : (
@@ -344,7 +346,7 @@ export default function JobsPage() { {/* Cancel Job Dialog */} - + Cancel Job @@ -354,17 +356,18 @@ export default function JobsPage() {

Spider: {selectedJob.spider}

-

+

Job ID: {selectedJob.id}

)} - + @@ -372,6 +375,7 @@ export default function JobsPage() { variant="destructive" onClick={handleCancelJob} disabled={cancelJobMutation.isPending} + className="w-full sm:w-auto" > {cancelJobMutation.isPending ? "Canceling..." : "Yes, cancel job"} diff --git a/app/(dashboard)/layout.tsx b/app/(dashboard)/layout.tsx index 003d7c0..5e36643 100644 --- a/app/(dashboard)/layout.tsx +++ b/app/(dashboard)/layout.tsx @@ -1,5 +1,6 @@ -import { Sidebar } from "@/components/sidebar"; +import { Sidebar, MobileSidebar } from "@/components/sidebar"; import { Providers } from "@/components/providers"; +import { ThemeToggle } from "@/components/theme-toggle"; export default function DashboardLayout({ children, @@ -8,10 +9,22 @@ export default function DashboardLayout({ }) { return ( -
+
+ {/* Mobile Header */} +
+
+ +

Scrapy UI

+
+ +
+ + {/* Desktop Sidebar */} + + {/* Main Content */}
-
{children}
+
{children}
diff --git a/app/(dashboard)/projects/page.tsx b/app/(dashboard)/projects/page.tsx index c1af170..2846bde 100644 --- a/app/(dashboard)/projects/page.tsx +++ b/app/(dashboard)/projects/page.tsx @@ -118,7 +118,7 @@ export default function ProjectsPage() { Upload Project - +
Upload Project Version @@ -126,7 +126,7 @@ export default function ProjectsPage() { Upload a Python egg file for your Scrapy project -
+
- +
) : projects?.projects && projects.projects.length > 0 ? ( - - - - Project Name - Versions - Actions - - - - {projects.projects.map((project) => ( - setSelectedProject(project)} - className="cursor-pointer" - > - -
- - {project} -
-
- - {selectedProject === project && versions ? ( - - {versions.versions.length} version(s) - - ) : ( - Click to load - )} - - - { - setDeleteDialogOpen(open); - if (open) setSelectedProject(project); - }} - > - - - - - - Delete Project - - Are you sure you want to delete "{project}"? This - action cannot be undone. - - - - - - - - - +
+
+ + + Project Name + Versions + Actions - ))} - -
+ + + {projects.projects.map((project) => ( + setSelectedProject(project)} + className="cursor-pointer" + > + +
+ + {project} +
+
+ + {selectedProject === project && versions ? ( + + {versions.versions.length} version(s) + + ) : ( + Click to load + )} + + + { + setDeleteDialogOpen(open); + if (open) setSelectedProject(project); + }} + > + + + + + + Delete Project + + Are you sure you want to delete "{project}"? This + action cannot be undone. + + + + + + + + + +
+ ))} +
+ +
) : (
diff --git a/app/(dashboard)/spiders/page.tsx b/app/(dashboard)/spiders/page.tsx index b65ede8..c50cb7c 100644 --- a/app/(dashboard)/spiders/page.tsx +++ b/app/(dashboard)/spiders/page.tsx @@ -158,101 +158,105 @@ export default function SpidersPage() { ))}
) : spiders?.spiders && spiders.spiders.length > 0 ? ( - - - - Spider Name - Status - Actions - - - - {spiders.spiders.map((spider) => ( - - -
- - {spider} -
-
- - Available - - - { - setScheduleDialogOpen(open); - if (open) setSelectedSpider(spider); - }} - > - - - - - - - Schedule Spider Job - - Schedule "{spider}" to run on "{selectedProject}" - - -
-
- - -
-
- - -
-
- -