Code format
This commit is contained in:
@@ -150,7 +150,7 @@ const BatchTransactionForm: React.FC<BatchTransactionFormProps> = ({ onClose, on
|
||||
isDuplicate
|
||||
};
|
||||
pasteTransactionMap.set(transactionKey, newTransaction);
|
||||
|
||||
|
||||
if (!isDuplicate) {
|
||||
seenTransactions.add(transactionKey);
|
||||
}
|
||||
|
||||
@@ -29,11 +29,11 @@ const JobCard: React.FC<JobCardProps> = ({
|
||||
const handleCardClick = (e: React.MouseEvent) => {
|
||||
const target = e.target as HTMLElement;
|
||||
const hasNoNavigate = target.closest('[data-no-navigate]');
|
||||
|
||||
|
||||
if (hasNoNavigate) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
navigate(`/${job.id}`);
|
||||
};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
import {
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
|
||||
@@ -48,9 +48,9 @@ const JobTransactionPopover: React.FC<JobTransactionPopoverProps> = ({
|
||||
const transactions = getTransactions()
|
||||
.map(transaction => ({
|
||||
...transaction,
|
||||
displayValue: type === 'costs' ? transaction.totalPrice :
|
||||
type === 'revenue' ? transaction.totalPrice :
|
||||
transaction.totalPrice // For profit, we'll show the actual value
|
||||
displayValue: type === 'costs' ? transaction.totalPrice :
|
||||
type === 'revenue' ? transaction.totalPrice :
|
||||
transaction.totalPrice
|
||||
}))
|
||||
.filter(transaction => transaction.displayValue !== 0)
|
||||
.sort((a, b) => {
|
||||
@@ -113,8 +113,8 @@ const JobTransactionPopover: React.FC<JobTransactionPopoverProps> = ({
|
||||
className="flex justify-between items-center p-2 rounded hover:bg-gray-700/50 transition-colors border-l-2 border-l-gray-600"
|
||||
>
|
||||
<div className="flex-1 min-w-0">
|
||||
<div className="text-sm font-medium text-white truncate" title={transaction.item}>
|
||||
{transaction.item}
|
||||
<div className="text-sm font-medium text-white truncate" title={transaction.itemName}>
|
||||
{transaction.itemName}
|
||||
</div>
|
||||
<div className="text-xs text-gray-400">
|
||||
Qty: {transaction.quantity.toLocaleString()} • {new Date(transaction.date).toLocaleDateString()}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { useState } from 'react';
|
||||
import { IndJob } from '@/lib/types';
|
||||
import { formatISK } from '@/utils/priceUtils';
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { CardContent, CardHeader, CardTitle } from '@/components/ui/card';
|
||||
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import { ChevronDown, ChevronUp } from 'lucide-react';
|
||||
@@ -45,7 +45,7 @@ const RecapPopover: React.FC<RecapPopoverProps> = ({
|
||||
// Check if the clicked element or its parent has data-no-navigate
|
||||
const target = e.target as HTMLElement;
|
||||
const hasNoNavigate = target.closest('[data-no-navigate]');
|
||||
|
||||
|
||||
if (!hasNoNavigate) {
|
||||
handleJobClick(jobId);
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ export function useJobs() {
|
||||
|
||||
useEffect(() => {
|
||||
let mounted = true;
|
||||
|
||||
|
||||
const loadJobs = async (visibleStatuses?: string[]) => {
|
||||
try {
|
||||
setLoading(true);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
import { IndJob } from '@/lib/types';
|
||||
|
||||
export const useJobMetrics = (jobs: IndJob[]) => {
|
||||
const calculateJobRevenue = (job: IndJob) =>
|
||||
const calculateJobRevenue = (job: IndJob) =>
|
||||
job.income.reduce((sum, tx) => sum + tx.totalPrice, 0);
|
||||
|
||||
const calculateJobProfit = (job: IndJob) => {
|
||||
@@ -12,7 +12,7 @@ export const useJobMetrics = (jobs: IndJob[]) => {
|
||||
};
|
||||
|
||||
const totalJobs = jobs.length;
|
||||
|
||||
|
||||
const totalProfit = jobs.reduce((sum, job) => {
|
||||
const expenditure = job.expenditures.reduce((sum, tx) => sum + tx.totalPrice, 0);
|
||||
const income = job.income.reduce((sum, tx) => sum + tx.totalPrice, 0);
|
||||
|
||||
@@ -41,7 +41,7 @@ const wrappedPb = new Proxy(pb, {
|
||||
return (collectionName: string) => {
|
||||
// Get the original collection
|
||||
const originalCollection = target.collection(collectionName);
|
||||
|
||||
|
||||
// Return a proxy for the collection that ensures auth
|
||||
return new Proxy(originalCollection, {
|
||||
get(collectionTarget, methodName) {
|
||||
@@ -61,7 +61,7 @@ const wrappedPb = new Proxy(pb, {
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
return target[prop as keyof typeof target];
|
||||
}
|
||||
});
|
||||
|
||||
@@ -5,7 +5,6 @@ import { Plus, Factory, TrendingUp, Briefcase, FileText } from 'lucide-react';
|
||||
import { IndTransactionRecordNoId, IndJobRecordNoId } from '@/lib/pbtypes';
|
||||
import { formatISK } from '@/utils/priceUtils';
|
||||
import { getStatusPriority } from '@/utils/jobStatusUtils';
|
||||
import JobCard from '@/components/JobCard';
|
||||
import JobForm from '@/components/JobForm';
|
||||
import JobGroup from '@/components/JobGroup';
|
||||
import { IndJob } from '@/lib/types';
|
||||
@@ -69,7 +68,7 @@ const Index = () => {
|
||||
const filterJobs = (jobs: IndJob[]) => {
|
||||
if (!searchQuery) return jobs;
|
||||
const query = searchQuery.toLowerCase();
|
||||
return jobs.filter(job =>
|
||||
return jobs.filter(job =>
|
||||
job.outputItem.toLowerCase().includes(query)
|
||||
);
|
||||
};
|
||||
@@ -158,7 +157,7 @@ const Index = () => {
|
||||
const newState = { ...collapsedGroups, [status]: !collapsedGroups[status] };
|
||||
setCollapsedGroups(newState);
|
||||
localStorage.setItem('jobGroupsCollapsed', JSON.stringify(newState));
|
||||
|
||||
|
||||
if (collapsedGroups[status]) {
|
||||
loadJobsForStatuses([status]);
|
||||
}
|
||||
|
||||
@@ -16,14 +16,14 @@ const expand = 'billOfMaterials,consumedMaterials,expenditures,income';
|
||||
|
||||
export async function getJobs(statuses?: string[]): Promise<IndJob[]> {
|
||||
console.log('Getting jobs', statuses ? `for statuses: ${statuses.join(', ')}` : '');
|
||||
|
||||
|
||||
let options: any = { expand };
|
||||
|
||||
|
||||
if (statuses && statuses.length > 0) {
|
||||
const statusFilters = statuses.map(status => `status = "${status}"`).join(' || ');
|
||||
options.filter = statusFilters;
|
||||
}
|
||||
|
||||
|
||||
const result = await pb.collection('ind_job').getFullList(10000, options);
|
||||
const jobs: IndJob[] = [];
|
||||
for (const job of result) {
|
||||
|
||||
Reference in New Issue
Block a user