diff --git a/job-tracker-ui/src/App.tsx b/job-tracker-ui/src/App.tsx
index 90962c4..d1c3692 100644
--- a/job-tracker-ui/src/App.tsx
+++ b/job-tracker-ui/src/App.tsx
@@ -1,6 +1,6 @@
import React, { Suspense, lazy, useEffect, useMemo, useState } from "react";
-import { Box, Button, CssBaseline, Typography } from "@mui/material";
+import { Box, Button, CssBaseline, IconButton, Typography } from "@mui/material";
import useMediaQuery from "@mui/material/useMediaQuery";
import { CssVarsProvider } from "@mui/material/styles";
@@ -99,6 +99,7 @@ function Shell({ jobPageSize, setJobPageSize, jobColumns, setJobColumns, themeMo
const location = useLocation();
const navigate = useNavigate();
const { t } = useI18n();
+ const compactHeaderActions = useMediaQuery("(max-width:767.95px)");
const [addOpen, setAddOpen] = useState(false);
const [quickOpen, setQuickOpen] = useState(false);
@@ -165,9 +166,35 @@ function Shell({ jobPageSize, setJobPageSize, jobColumns, setJobColumns, themeMo
];
const rightActions = (
-
- } onClick={() => setQuickOpen(true)}>{t("quickSearch")}
- {isJobs ? : null}
+
+ {compactHeaderActions ? (
+ setQuickOpen(true)}
+ sx={{ border: "1px solid", borderColor: "divider", borderRadius: 2.5, width: 42, height: 42, flex: "0 0 auto" }}
+ >
+
+
+ ) : (
+ } onClick={() => setQuickOpen(true)}>{t("quickSearch")}
+ )}
+ {isJobs ? (
+
+ ) : null}
);
diff --git a/job-tracker-ui/src/components/CompaniesTable.tsx b/job-tracker-ui/src/components/CompaniesTable.tsx
index b602334..618a70f 100644
--- a/job-tracker-ui/src/components/CompaniesTable.tsx
+++ b/job-tracker-ui/src/components/CompaniesTable.tsx
@@ -8,16 +8,19 @@ import {
DialogActions,
DialogContent,
DialogTitle,
+ IconButton,
Paper,
+ Stack,
Table,
TableBody,
TableCell,
+ TableContainer,
TableHead,
TableRow,
TextField,
Typography,
- IconButton,
} from "@mui/material";
+import useMediaQuery from "@mui/material/useMediaQuery";
import { api, getApiErrorMessage } from "../api";
import { Company } from "../types";
@@ -26,6 +29,7 @@ import { useToast } from "../toast";
import { useI18n } from "../i18n/I18nProvider";
export default function CompaniesTable() {
+ const isMobile = useMediaQuery("(max-width:767.95px)");
const { toast } = useToast();
const { t } = useI18n();
const location = useLocation();
@@ -93,60 +97,101 @@ export default function CompaniesTable() {
}
};
- return (
-
-
-
-
- {t("companiesName")}
- {t("companiesLocation")}
- {t("companiesSource")}
- {t("companiesPipeline")}
- {t("companiesRecruiter")}
- {t("companiesNextContact")}
-
-
-
-
- {companies.map((c) => (
-
- {c.name}
- {c.location ?? ""}
- {c.source ?? ""}
- {c.pipelineStage ?? ""}
-
- {c.recruiterName ?? ""}
- {c.recruiterEmail ? ` (${c.recruiterEmail})` : ""}
-
- {c.nextContactAt ? new Date(c.nextContactAt).toLocaleDateString() : ""}
-
- openEdit(c)}>
-
-
-
-
- ))}
- {companies.length === 0 && (
-
-
-
- {t("companiesEmpty")}
-
-
-
- )}
-
-
+ const renderCompanyMeta = (label: string, value?: string | null) => (
+
+ {label}
+ {value || "—"}
+
+ );
-
-
+
{([6, 12, 24] as const).map((m) => (
setMonths(m)}>
{t("dashboardMonthsShort", { count: m })}
@@ -300,7 +313,7 @@ export default function DashboardView() {
{card.icon}
-
+
@@ -322,7 +335,7 @@ export default function DashboardView() {
-
+