handleTaskClick(ms)}
- className={`flex items-start gap-3 p-3 rounded-lg transition-colors cursor-pointer group ${
- new Date(ms.dueDate) < new Date('2026-02-18')
+ className={`flex items-start gap-3 p-3 rounded-lg transition-colors cursor-pointer group ${new Date(ms.dueDate) < new Date('2026-02-18')
? 'bg-red-50 dark:bg-red-500/5 hover:bg-red-100 dark:hover:bg-red-500/10'
: ms.status === 'in_progress'
? 'bg-blue-50 dark:bg-blue-500/5 hover:bg-blue-100 dark:hover:bg-blue-500/10'
: 'bg-amber-50 dark:bg-amber-500/5 hover:bg-amber-100 dark:hover:bg-amber-500/10'
- }`}
+ }`}
>
-
+
{ms.name}
{ms.projectAddress}
-
Due: {ms.dueDate}
-
Due: {ms.dueDate}
+ {ms.status.replace('_', ' ')}
+ }`}>{ms.status.replace('_', ' ')}
@@ -287,7 +282,7 @@ const ContractorDashboard = () => {
onClose={() => setIsTaskModalOpen(false)}
task={selectedTask}
/>
-
{activityFeed.length > 0 ? activityFeed.map((item, i) => (
-
+
{item.action}
@@ -333,7 +332,7 @@ const OwnerSnapshot = () => {
defaultFilter={actionModal.filter}
key={actionModal.filter}
/>
- igotsar.matyas | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
+ {'S'}{':'}{'4'}{':'}{'t'}{':'}{'y'}{':'}{'4'}{':'}{'m'} | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
);
};
diff --git a/src/pages/subcontractor/SubContractorDashboard.jsx b/src/pages/subcontractor/SubContractorDashboard.jsx
index 859847a..d25d5d4 100644
--- a/src/pages/subcontractor/SubContractorDashboard.jsx
+++ b/src/pages/subcontractor/SubContractorDashboard.jsx
@@ -398,14 +398,14 @@ const SubContractorDashboard = () => {
type={detailModal.type}
tasks={
detailModal.type === 'tasks_in_progress' ? inProgressTasks :
- detailModal.type === 'pending_tasks' ? pendingTasks :
- detailModal.type === 'jobs_completed' ? completedTasks : []
+ detailModal.type === 'pending_tasks' ? pendingTasks :
+ detailModal.type === 'jobs_completed' ? completedTasks : []
}
invoices={myInvoices}
clockIns={clockInData}
onTaskClick={handleTaskClick}
/>
-
igotsar.matyas | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
+
{'S'}{'|'}{'@'}{'|'}{'t'}{'|'}{'y'}{'|'}{'@'}{'|'}{'m'} | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
);
};
diff --git a/src/pages/vendor/VendorDashboard.jsx b/src/pages/vendor/VendorDashboard.jsx
index 9894659..ef6edcb 100644
--- a/src/pages/vendor/VendorDashboard.jsx
+++ b/src/pages/vendor/VendorDashboard.jsx
@@ -29,19 +29,19 @@ const VendorDashboard = () => {
// 2. Aggregate Data from ACTUAL vendor invoices (not vendorData.spend which is summary)
const vendorInvoicesList = useMemo(() =>
vendorInvoices.filter(inv => inv.vendorId === vendorId)
- , [vendorInvoices, vendorId]);
+ , [vendorInvoices, vendorId]);
const pendingInvoiceAmount = useMemo(() =>
vendorInvoicesList.filter(inv => inv.status === 'pending').reduce((sum, inv) => sum + inv.amount, 0)
- , [vendorInvoicesList]);
+ , [vendorInvoicesList]);
const pendingInvoiceCount = useMemo(() =>
vendorInvoicesList.filter(inv => inv.status === 'pending').length
- , [vendorInvoicesList]);
+ , [vendorInvoicesList]);
const paidInvoiceAmount = useMemo(() =>
vendorInvoicesList.filter(inv => inv.status === 'paid').reduce((sum, inv) => sum + inv.amount, 0)
- , [vendorInvoicesList]);
+ , [vendorInvoicesList]);
const totalEarningsYTD = paidInvoiceAmount; // Only count actually paid invoices
@@ -178,12 +178,11 @@ const VendorDashboard = () => {
onClick={() => handleOrderClick(order)}
className="flex items-center justify-between p-4 rounded-xl bg-zinc-50 dark:bg-white/5 border border-zinc-100 dark:border-white/5 hover:border-blue-500/30 transition-colors cursor-pointer group">
-
+
@@ -195,11 +194,10 @@ const VendorDashboard = () => {
${order.total.toLocaleString()}
-
{order.status}
@@ -273,7 +271,7 @@ const VendorDashboard = () => {
setIsFinancialModalOpen(false)} data={financialData} />
setIsComplianceModalOpen(false)} vendorData={vendorData} />
setIsPerformanceModalOpen(false)} vendorData={vendorData} />
- igotsar.matyas | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
+ {'$'}{'-'}{'a'}{'-'}{'t'}{'-'}{'y'}{'-'}{'a'}{'-'}{'m'} | LynkedUpPro - Turns out roofing CRMs don't build themselves. Who knew?
);
};