diff --git a/dashboard-server/gorgias-server/._package-lock.json b/dashboard-server/gorgias-server/._package-lock.json new file mode 100644 index 0000000..84512ab Binary files /dev/null and b/dashboard-server/gorgias-server/._package-lock.json differ diff --git a/dashboard-server/gorgias-server/._package.json b/dashboard-server/gorgias-server/._package.json new file mode 100644 index 0000000..84512ab Binary files /dev/null and b/dashboard-server/gorgias-server/._package.json differ diff --git a/dashboard-server/gorgias-server/._routes b/dashboard-server/gorgias-server/._routes new file mode 100644 index 0000000..84512ab Binary files /dev/null and b/dashboard-server/gorgias-server/._routes differ diff --git a/dashboard-server/gorgias-server/._services b/dashboard-server/gorgias-server/._services new file mode 100644 index 0000000..84512ab Binary files /dev/null and b/dashboard-server/gorgias-server/._services differ diff --git a/dashboard/src/components/dashboard/GorgiasOverview.jsx b/dashboard/src/components/dashboard/GorgiasOverview.jsx index 614eb75..63a39e6 100644 --- a/dashboard/src/components/dashboard/GorgiasOverview.jsx +++ b/dashboard/src/components/dashboard/GorgiasOverview.jsx @@ -24,14 +24,17 @@ import { Mail, Send, Loader2, + ArrowUp, + ArrowDown, } from "lucide-react"; import axios from "axios"; const TIME_RANGES = { - 7: "Last 7 Days", - 14: "Last 14 Days", - 30: "Last 30 Days", - 90: "Last 90 Days", + "today": "Today", + "7": "Last 7 Days", + "14": "Last 14 Days", + "30": "Last 30 Days", + "90": "Last 90 Days", }; const formatDuration = (seconds) => { @@ -41,12 +44,33 @@ const formatDuration = (seconds) => { }; const getDateRange = (days) => { - const end = new Date(); - end.setUTCHours(23, 59, 59, 999); + // Create date in Eastern Time + const now = new Date(); + const easternTime = new Date( + now.toLocaleString("en-US", { timeZone: "America/New_York" }) + ); - const start = new Date(); - start.setDate(start.getDate() - days); - start.setUTCHours(0, 0, 0, 0); + if (days === "today") { + // For today, set the range to be the current day in Eastern Time + const start = new Date(easternTime); + start.setHours(0, 0, 0, 0); + + const end = new Date(easternTime); + end.setHours(23, 59, 59, 999); + + return { + start_datetime: start.toISOString(), + end_datetime: end.toISOString() + }; + } + + // For other periods, calculate from end of previous day + const end = new Date(easternTime); + end.setHours(23, 59, 59, 999); + + const start = new Date(easternTime); + start.setDate(start.getDate() - Number(days)); + start.setHours(0, 0, 0, 0); return { start_datetime: start.toISOString(), @@ -75,48 +99,52 @@ const MetricCard = ({ const formatDelta = (d) => { if (d === undefined || d === null) return null; if (d === 0) return "0"; - return (d > 0 ? "+" : "") + d + suffix; + return Math.abs(d) + suffix; }; - const colorMapping = { - blue: "bg-blue-50 dark:bg-blue-900/20 border-blue-100 dark:border-blue-800/50 text-blue-600 dark:text-blue-400", - green: "bg-green-50 dark:bg-green-900/20 border-green-100 dark:border-green-800/50 text-green-600 dark:text-green-400", - purple: "bg-purple-50 dark:bg-purple-900/20 border-purple-100 dark:border-purple-800/50 text-purple-600 dark:text-purple-400", - indigo: "bg-indigo-50 dark:bg-indigo-900/20 border-indigo-100 dark:border-indigo-800/50 text-indigo-600 dark:text-indigo-400", - orange: "bg-orange-50 dark:bg-orange-900/20 border-orange-100 dark:border-orange-800/50 text-orange-600 dark:text-orange-400", - teal: "bg-teal-50 dark:bg-teal-900/20 border-teal-100 dark:border-teal-800/50 text-teal-600 dark:text-teal-400", - cyan: "bg-cyan-50 dark:bg-cyan-900/20 border-cyan-100 dark:border-cyan-800/50 text-cyan-600 dark:text-cyan-400", - }; - - const baseColors = colorMapping[colorClass]; - return ( -
-

- {title} -

-
- {loading ? ( - - ) : ( - <> -
- {Icon && } -

- {typeof value === "number" - ? value.toLocaleString() + suffix - : value} -

-
- {delta !== undefined && ( -

- {formatDelta(delta)} -

+ + +
+
+

{title}

+ {loading ? ( + + ) : ( +
+

+ {typeof value === "number" + ? value.toLocaleString() + suffix + : value} +

+ {delta !== undefined && delta !== 0 && ( +
+ {delta > 0 ? ( + + ) : ( + + )} + + {formatDelta(delta)} + +
+ )} +
)} - - )} -
-
+
+ {Icon && ( + + )} +
+ + ); }; @@ -130,7 +158,7 @@ const TableSkeleton = () => ( ); const GorgiasOverview = () => { - const [timeRange, setTimeRange] = useState(7); + const [timeRange, setTimeRange] = useState("7"); const [data, setData] = useState({}); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); @@ -263,8 +291,8 @@ const GorgiasOverview = () => {