diff --git a/src/components/Layout.jsx b/src/components/Layout.jsx
index deaf16a..928189e 100755
--- a/src/components/Layout.jsx
+++ b/src/components/Layout.jsx
@@ -8,9 +8,9 @@ function TeamNav({ onNav }) {
Main
{[
{ to: '/dashboard', label: 'Dashboard' },
- { to: '/companies', label: 'Companies' },
{ to: '/requests', label: 'Requests' },
{ to: '/invoices', label: 'Invoices' },
+ { to: '/companies', label: 'Companies' },
].map(({ to, label }) => (
`sidebar-link${isActive ? ' active' : ''}`}>
{label}
diff --git a/src/pages/team/Requests.jsx b/src/pages/team/Requests.jsx
index d354a84..a6ceacc 100755
--- a/src/pages/team/Requests.jsx
+++ b/src/pages/team/Requests.jsx
@@ -10,6 +10,8 @@ export default function Requests() {
const [projects, setProjects] = useState([]);
const [companies, setCompanies] = useState([]);
const [loading, setLoading] = useState(true);
+ const [filterCompany, setFilterCompany] = useState('');
+ const [filterUser, setFilterUser] = useState('');
useEffect(() => {
async function load() {
@@ -39,6 +41,34 @@ export default function Requests() {
+
+
+
+ {(filterCompany || filterUser) && (
+
+ )}
+
+
{submissions.length === 0 ? (
No requests yet
@@ -53,8 +83,15 @@ export default function Requests() {
groupMap[key].push(sub);
});
- // Sort groups by latest submitted_at descending
- const groups = Object.values(groupMap).sort((a, b) => {
+ // Sort groups by latest submitted_at descending, then apply filters
+ const groups = Object.values(groupMap).filter(group => {
+ const primary = group.find(s => s.type !== 'amendment') || group[0];
+ const task = tasks.find(t => t.id === primary.task_id);
+ const project = projects.find(p => p.id === task?.project_id);
+ if (filterCompany && project?.company_id !== filterCompany) return false;
+ if (filterUser && !group.some(s => s.submitted_by_name === filterUser)) return false;
+ return true;
+ }).sort((a, b) => {
const aMax = Math.max(...a.map(s => new Date(s.submitted_at)));
const bMax = Math.max(...b.map(s => new Date(s.submitted_at)));
return bMax - aMax;