Manage Nominations
diff --git a/app/dashboard/page.tsx b/app/dashboard/page.tsx
index 4fabd84..973fcab 100644
--- a/app/dashboard/page.tsx
+++ b/app/dashboard/page.tsx
@@ -1,18 +1,22 @@
-import { getApplicationByNuidWithNominations } from '@/lib/data/applications';
+import { getActiveApplicationByNuidWithNominations } from '@/lib/data/applications';
import { getSettings } from '@/lib/data/settings';
import UserDashboard from '@/components/UserDashboard';
export default async function DashboardPage() {
const settings = await getSettings();
-
+
return (
-
User Dashboard
-
View your application status and nomination count
+
+ User Dashboard
+
+
+ View your application status and nomination count
+
-
diff --git a/components/UserDashboard.tsx b/components/UserDashboard.tsx
index 7e81099..031c48d 100644
--- a/components/UserDashboard.tsx
+++ b/components/UserDashboard.tsx
@@ -6,9 +6,22 @@ import { Input } from '@/components/ui/input';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Alert, AlertDescription } from '@/components/ui/alert';
-import { Search, User, Vote, TrendingDown, AlertCircle, X, Upload, FileText, Download } from 'lucide-react';
+import {
+ Search,
+ User,
+ Vote,
+ TrendingDown,
+ AlertCircle,
+ X,
+ Upload,
+ FileText,
+ Download,
+} from 'lucide-react';
import { Application, Nomination, CommunityConstituency } from '@prisma/client';
-import { uploadNominationFormPDF, removeNominationFormPDF } from '@/lib/actions/applications';
+import {
+ uploadNominationFormPDF,
+ removeNominationFormPDF,
+} from '@/lib/actions/applications';
import { toast } from 'sonner';
import { Settings } from '@/lib/data/settings';
@@ -23,20 +36,29 @@ type ApplicationWithNominations = Application & {
};
interface UserDashboardProps {
- getApplicationByNuid: (nuid: string) => Promise
;
+ getApplicationByNuid: (
+ nuid: string,
+ ) => Promise;
settings: Settings;
}
-function getNominationBadgeColor(count: number, requiredNominations: number): "success" | "warning" | "info" | "default" {
- if (count >= requiredNominations) return "success"; // Green for meeting requirement
- if (count >= Math.floor(requiredNominations * 0.8)) return "warning"; // Yellow for 80%+
- if (count >= 2) return "info"; // Orange for 2+
- return "default"; // Gray for 0-1
+function getNominationBadgeColor(
+ count: number,
+ requiredNominations: number,
+): 'success' | 'warning' | 'info' | 'default' {
+ if (count >= requiredNominations) return 'success'; // Green for meeting requirement
+ if (count >= Math.floor(requiredNominations * 0.8)) return 'warning'; // Yellow for 80%+
+ if (count >= 2) return 'info'; // Orange for 2+
+ return 'default'; // Gray for 0-1
}
-export default function UserDashboard({ getApplicationByNuid, settings }: UserDashboardProps) {
+export default function UserDashboard({
+ getApplicationByNuid,
+ settings,
+}: UserDashboardProps) {
const [nuid, setNuid] = useState('');
- const [applicantDetails, setApplicantDetails] = useState(null);
+ const [applicantDetails, setApplicantDetails] =
+ useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const [pdfFile, setPdfFile] = useState(null);
@@ -57,7 +79,9 @@ export default function UserDashboard({ getApplicationByNuid, settings }: UserDa
try {
const data = await getApplicationByNuid(nuid);
if (!data) {
- setError('No application found for this NUID. Please make sure you have submitted an application.');
+ setError(
+ 'No application found for this NUID in the current application cycle. Please make sure you have submitted an application.',
+ );
} else {
setApplicantDetails(data);
}
@@ -69,12 +93,17 @@ export default function UserDashboard({ getApplicationByNuid, settings }: UserDa
}
};
- const missingNominations = applicantDetails
- ? Math.max(0, settings.requiredNominations - applicantDetails.nominationCount)
+ const missingNominations = applicantDetails
+ ? Math.max(
+ 0,
+ settings.requiredNominations - applicantDetails.nominationCount,
+ )
: 0;
const communityNominationCount = applicantDetails
- ? applicantDetails.nominations.filter(n => n.status === 'APPROVED' && n.constituencyType === 'community').length
+ ? applicantDetails.nominations.filter(
+ (n) => n.status === 'APPROVED' && n.constituencyType === 'community',
+ ).length
: 0;
const handleFileChange = (event: React.ChangeEvent) => {
@@ -164,7 +193,10 @@ export default function UserDashboard({ getApplicationByNuid, settings }: UserDa
Enter Your NUID
-