From 87c7169b3c91d90a6f33c188d97f80117f3a414e Mon Sep 17 00:00:00 2001 From: gibbyb Date: Sun, 21 Jul 2024 18:39:15 -0500 Subject: [PATCH] I have no idea how but the date bug came back. Should be fixed --- public/images/tech_tracker_favicon.png | Bin 0 -> 5294 bytes src/app/layout.tsx | 17 ++++++++- src/components/ui/Table.tsx | 46 +++++++++++++++++++++---- src/components/ui/Techs.tsx | 2 +- src/server/functions.ts | 6 +++- 5 files changed, 62 insertions(+), 9 deletions(-) create mode 100644 public/images/tech_tracker_favicon.png diff --git a/public/images/tech_tracker_favicon.png b/public/images/tech_tracker_favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..d2f5176417cfa579e5e493d1fb177f2811b41355 GIT binary patch literal 5294 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 x&#m3pbF6GtEXNgLbv*6hq&b([]); const [selectAll, setSelectAll] = useState(false); - const [status, setStatus] = useState(''); + const [employeeStatus, setStatus] = useState(''); const [employeeData, setEmployeeData] = useState(employees); + useEffect(() => { + if (status !== "loading") { + setLoading(false); + } + }, [status]); + + useEffect(() => { // Refresh employee data if needed after state updates setEmployeeData(employees); @@ -85,20 +94,45 @@ export default function Table({ employees }: { employees: Employee[] }) { }; const handleSubmit = async () => { - if (selectedIds.length > 0 && status.trim() !== '') { + if (selectedIds.length > 0 && employeeStatus.trim() !== '') { await fetch('/api/v2/update_status', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${process.env.API_KEY}` }, - body: JSON.stringify({ employeeIds: selectedIds, newStatus: status }), + body: JSON.stringify({ employeeIds: selectedIds, newStatus: employeeStatus }), }); // Optionally refresh data on the client-side after update const updatedEmployees = await fetchEmployees(); setEmployeeData(updatedEmployees); setSelectedIds([]); setStatus(''); + } else { + if (!session) { + alert("You must be signed in to update status."); + } else { + const usersName = session?.user?.name; + const employee = employees.find(employee => employee.name === usersName); + if (employee) { + setSelectedIds([employee.id]); + if (selectedIds.length > 0 && employeeStatus.trim() !== '') { + await fetch('/api/v2/update_status', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${process.env.API_KEY}` + }, + body: JSON.stringify({ employeeIds: selectedIds, newStatus: employeeStatus }), + }); + // Optionally refresh data on the client-side after update + const updatedEmployees = await fetchEmployees(); + setEmployeeData(updatedEmployees); + setSelectedIds([]); + setStatus(''); + } + } + } } }; @@ -118,7 +152,7 @@ export default function Table({ employees }: { employees: Employee[] }) { const month = date.toLocaleString('default', { month: 'long' }); return `${time} - ${month} ${day}`; }; - + if (loading) return
Loading...
; return (
@@ -161,7 +195,7 @@ export default function Table({ employees }: { employees: Employee[] }) { type="text" placeholder="New Status" className="min-w-[120px] lg:min-w-[400px] bg-[#F9F6EE] py-2 px-3 border-none rounded-xl text-[#111111] lg:text-2xl" - value={status} + value={employeeStatus} onChange={handleStatusChange} onKeyDown={handleKeyPress} /> diff --git a/src/components/ui/Techs.tsx b/src/components/ui/Techs.tsx index 433e667..069a8a3 100644 --- a/src/components/ui/Techs.tsx +++ b/src/components/ui/Techs.tsx @@ -4,5 +4,5 @@ import Table from "~/components/ui/Table"; export default async function Techs() { const employees = await getEmployees(); - return
; + return
; }; diff --git a/src/server/functions.ts b/src/server/functions.ts index f3f3b8c..0f6d64f 100644 --- a/src/server/functions.ts +++ b/src/server/functions.ts @@ -9,12 +9,16 @@ export const getEmployees = async () => { }); }; +const convertToUTC = (date: Date) => { + return new Date(date.setHours(date.getUTCHours())+ 5); +}; + // Function to Update Employee Status using Raw SQL export const updateEmployeeStatus = async (employeeIds: string[], newStatus: string) => { try { // Convert array of ids to a format suitable for SQL query (comma-separated string) const idList = employeeIds.map(id => parseInt(id, 10)); - const updatedAt = new Date(); + const updatedAt = convertToUTC(new Date()); // Prepare the query using drizzle-orm's template-like syntax for escaping variables const query = sql`