Session 2026-05-30: tasks/projects unification, code consolidation, file renames

- Unified Tasks page: 3 role render blocks → 1, normalized row shape, single renderRow/sort/tabs
- Fixed role scoping: external = all tasks in member projects, client = all tasks in company projects
- Fixed client bug: was scoped by submitted_by, now company→project→tasks
- Aligned dashboard client scope to match tasks page
- Hot tasks dashboard: now filters to active statuses only (not completed/invoiced/paid)
- Removed Projects.jsx (dead), fixed /project/ → /projects/ links
- Renamed all page files to match folder path (Team*, External*, Client* prefixes)
- Renamed: RequestsPage→Tasks, Settings→Profile, CompaniesPage→Companies, ProjectDetailPage→ProjectDetail
- Dropped dead fetches from Tasks page (invoices, invoice_items, subcontractor_invoice_items)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Krao Hasanee
2026-05-30 10:19:23 -04:00
parent 6fe7ab1059
commit 13ef1f4ded
30 changed files with 1177 additions and 1258 deletions
+75
View File
@@ -37,6 +37,8 @@
--avatar-inner-ring: #111111;
--danger: #ef4444;
--success: #22c55e;
--table-scroll-thumb: rgba(0,0,0,0.1);
--table-scroll-thumb-hover: rgba(0,0,0,0.2);
}
@keyframes ui-fade-up {
@@ -66,6 +68,8 @@
--overlay-scrim: rgba(255,255,255,0.72);
--popup-shadow: 0 16px 42px rgba(0,0,0,0.18);
--avatar-inner-ring: #ffffff;
--table-scroll-thumb: rgba(0,0,0,0.1);
--table-scroll-thumb-hover: rgba(0,0,0,0.2);
}
[data-theme="light"] input[type="text"],
[data-theme="light"] input[type="email"],
@@ -1100,6 +1104,24 @@ textarea {
/* Table */
.table-wrapper { overflow-x: auto; border-radius: 4px; border: 1px solid var(--border); background: var(--card-bg); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }
.table-wrapper {
scrollbar-width: thin;
scrollbar-color: var(--table-scroll-thumb) transparent;
}
.table-wrapper::-webkit-scrollbar {
width: 3px;
height: 3px;
}
.table-wrapper::-webkit-scrollbar-track {
background: transparent;
}
.table-wrapper::-webkit-scrollbar-thumb {
background: var(--table-scroll-thumb);
border-radius: 999px;
}
.table-wrapper::-webkit-scrollbar-thumb:hover {
background: var(--table-scroll-thumb-hover);
}
table { width: 100%; border-collapse: collapse; }
th { text-align: left; padding: 12px 16px; font-size: 10px; font-weight: 400; text-transform: uppercase; letter-spacing: 0.8px; color: var(--text-muted); background: rgba(255,255,255,0.07); border-bottom: 1px solid var(--border); }
td { padding: 14px 16px; border-bottom: 1px solid var(--border); font-size: 13px; color: var(--text-primary); }
@@ -1127,6 +1149,48 @@ tr:hover td { background: rgba(255,255,255,0.02); }
.table-scroll-fade {
position: static;
}
.table-scroll-hidden {
scrollbar-width: thin;
scrollbar-color: var(--table-scroll-thumb) transparent;
}
.table-scroll-hidden::-webkit-scrollbar {
width: 3px;
height: 3px;
}
.table-scroll-hidden::-webkit-scrollbar-track {
background: transparent;
}
.table-scroll-hidden::-webkit-scrollbar-thumb {
background: var(--table-scroll-thumb);
border-radius: 999px;
}
.table-scroll-hidden::-webkit-scrollbar-thumb:hover {
background: var(--table-scroll-thumb-hover);
}
.scrollbar-thin-theme.table-scroll-hidden {
scrollbar-color: var(--table-scroll-thumb) transparent !important;
}
.scrollbar-thin-theme.table-scroll-hidden:hover,
.scrollbar-thin-theme.table-scroll-hidden:focus-within {
scrollbar-color: var(--table-scroll-thumb-hover) transparent !important;
}
.scrollbar-thin-theme.table-scroll-hidden::-webkit-scrollbar {
width: 3px !important;
height: 3px !important;
}
.scrollbar-thin-theme.table-scroll-hidden::-webkit-scrollbar-thumb,
.scrollbar-thin-theme.table-scroll-hidden:hover::-webkit-scrollbar-thumb,
.scrollbar-thin-theme.table-scroll-hidden:focus-within::-webkit-scrollbar-thumb,
.scrollbar-thin-theme.table-scroll-hidden::-webkit-scrollbar-thumb:active,
.scrollbar-thin-theme.table-scroll-hidden::-webkit-scrollbar-thumb:hover {
background: var(--table-scroll-thumb) !important;
border-radius: 999px;
border: 0 !important;
}
.project-table-scroll {
padding-right: 8px;
scrollbar-gutter: stable;
}
.dashboard-inline-link {
background: transparent;
border: 0;
@@ -1203,6 +1267,17 @@ select option { background: #222; color: #fff; }
.empty-state { text-align: center; padding: 56px 20px; color: var(--text-secondary); }
.empty-state-icon { display: none; }
.empty-state h3 { font-size: 15px; font-weight: 400; color: var(--text-primary); margin-bottom: 6px; }
.card-empty-center {
flex: 1;
min-height: 120px;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
font-size: 13px;
color: var(--text-muted);
}
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.version-timeline { display: flex; flex-direction: column; gap: 12px; }
.version-item { border: 1px solid var(--border); border-radius: 4px; padding: 16px; background: var(--card-bg); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); }