Dashboard
@@ -336,15 +368,16 @@ const Dashboard: React.FC = () => {
{/* 🔹 Sticky Header */}
Projects
+ {!selectedData?.isTracking &&
+ }
{/* 🔹 Table or Empty State or Skeleton */}
@@ -368,7 +401,7 @@ const Dashboard: React.FC = () => {
minHeight: "auto",
}}
>
-
+
| # |
diff --git a/src/ui/pages/HelpSupport/HelpSupport.tsx b/src/ui/pages/HelpSupport/HelpSupport.tsx
index 3d28484..6210087 100644
--- a/src/ui/pages/HelpSupport/HelpSupport.tsx
+++ b/src/ui/pages/HelpSupport/HelpSupport.tsx
@@ -23,7 +23,7 @@ const HelpSupport: React.FC = () => {
Email
-
support@vatechcorp.com
+
support@docva.com
@@ -31,7 +31,7 @@ const HelpSupport: React.FC = () => {
Phone
-
+91 98765 43210
+
+XXXX XXXXX
diff --git a/src/ui/pages/PaySlips/PaysSlips.tsx b/src/ui/pages/PaySlips/PaysSlips.tsx
index d3d9ca5..5c9b931 100644
--- a/src/ui/pages/PaySlips/PaysSlips.tsx
+++ b/src/ui/pages/PaySlips/PaysSlips.tsx
@@ -84,7 +84,7 @@ const PaysSlips = () => {
Date |
Total Hours |
Total Pay |
- Action |
+ {/* Action | */}
@@ -111,13 +111,13 @@ const PaysSlips = () => {
${row.totalPayAmount.toFixed(2)} |
-
+ {/* |
- |
+ */}
))}
diff --git a/src/ui/pages/Settings/ChangePasswordModal.tsx b/src/ui/pages/Settings/ChangePasswordModal.tsx
index 4d6c5bf..52cbd08 100644
--- a/src/ui/pages/Settings/ChangePasswordModal.tsx
+++ b/src/ui/pages/Settings/ChangePasswordModal.tsx
@@ -1,6 +1,7 @@
// src/ui/pages/Settings/ChangePasswordModal.tsx
import React, { useState } from "react";
import { Eye, EyeOff } from "lucide-react";
+import { useToast } from "../../helper/ToastContext";
interface ChangePasswordModalProps {
isOpen: boolean;
@@ -19,12 +20,13 @@ const ChangePasswordModal: React.FC = ({
const [showOld, setShowOld] = useState(false);
const [showNew, setShowNew] = useState(false);
const [showConfirm, setShowConfirm] = useState(false);
+ const { showToast } = useToast();
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (newPassword !== confirmPassword) {
- alert("New passwords do not match!");
+ showToast("New passwords do not match!" , "error");
return;
}
@@ -40,17 +42,17 @@ const ChangePasswordModal: React.FC = ({
const response = await window.electron.changePassword(payload);
if (response.success) {
- alert("Password changed successfully!");
+ showToast("Password changed successfully!" , "success");
setOldPassword("")
setNewPassword("")
setConfirmPassword("")
onClose();
} else {
- alert(response.message || "Failed to change password.");
+ showToast((response.message || "Failed to change password.") , "error");
}
} catch (error) {
console.error("Password change error:", error);
- alert("Error changing password.");
+ showToast("Error changing password." , "error");
} finally {
setLoading(false);
}
diff --git a/src/ui/pages/Timesheets/ProjectLogsModal.tsx b/src/ui/pages/Timesheets/ProjectLogsModal.tsx
index 7144932..99855b8 100644
--- a/src/ui/pages/Timesheets/ProjectLogsModal.tsx
+++ b/src/ui/pages/Timesheets/ProjectLogsModal.tsx
@@ -1,3 +1,4 @@
+import { DateTime } from "luxon";
import React from "react";
interface TabActivity {
@@ -27,6 +28,21 @@ interface Props {
const ProjectLogsModal: React.FC = ({ isOpen, onClose, projectName, logs, loading }) => {
if (!isOpen) return null;
+
+ const getTimeDifference = (from: string, to: string) => {
+ const start = DateTime.fromISO(from);
+ const end = DateTime.fromISO(to);
+
+ const diff = end.diff(start, ["hours", "minutes", "seconds"]);
+
+ return {
+ hours: diff.hours,
+ minutes: diff.minutes,
+ seconds: Math.floor(diff.seconds),
+ formatted: `${diff.hours}h ${diff.minutes}m ${Math.floor(diff.seconds)}s`
+ };
+ };
+
return (