Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .firebase/hosting.ZGlzdA.cache
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
index.html,1762681628251,a970132447df9f40306fd9ab7c26121bae50f9d089d6e4ac5fe1037c982c80b2
favicon.png,1762681627948,21c10e7d774c2af5bdad60825fdb3315257a4172632b0ea8a0a9b1c1542af5ea
assets/index-CjMZ_o8-.css,1762681628251,0239ac4887bc92bd8e7160b8def7f504ef5281a1ec154d8aacda9c625faa299b
assets/GeistMono-Regular-CxeQQu7Q.ttf,1762681628251,f9e3bf233cc2d8aad298b2719f86a629e19d7a4522d6541d8070ddc3706ad3a1
assets/Geist-Regular-DL43NNto.ttf,1762681628251,0f8ba2660df01b39b4f578364399e2679805de1a889a76b1c1c9c8f8e0e146aa
assets/index-Brd4s4nx.js,1762681628251,b063dbfa1a850d5cd0a008a9059af3a422519047e3daeef8bbfe13344747d8d5
shapes.jpg,1762681627950,7c28b5d9022ea4b768345e855a78a2f087f66218ea9abe4d77c010e2ca2c6f3a
index.html,1762760967872,55003a935ffc76622bc029f649d1b9501006077e8a38df1d8cd77a72b4fef831
favicon.png,1762760967602,21c10e7d774c2af5bdad60825fdb3315257a4172632b0ea8a0a9b1c1542af5ea
assets/GeistMono-Regular-CxeQQu7Q.ttf,1762760967871,f9e3bf233cc2d8aad298b2719f86a629e19d7a4522d6541d8070ddc3706ad3a1
assets/index-C_klMgd4.css,1762760967871,c1dd671b0ec2319330e08bdbc2516a96cfff3410a94d556252515ccdc5c68785
assets/Geist-Regular-DL43NNto.ttf,1762760967872,0f8ba2660df01b39b4f578364399e2679805de1a889a76b1c1c9c8f8e0e146aa
assets/index-CMbW4cv1.js,1762760967872,c73eca80b815ad0faea14af3205ecd1857e8ef7944b9ae69191a219b6fb9e458
shapes.jpg,1762760967604,7c28b5d9022ea4b768345e855a78a2f087f66218ea9abe4d77c010e2ca2c6f3a
78 changes: 6 additions & 72 deletions src/components/SampleData.ts
Original file line number Diff line number Diff line change
@@ -1,75 +1,9 @@
export interface ProjectDeliverable {
id: string;
name: string;
status: "Not Started" | "In Progress" | "Completed";
description: string;
}

export interface ProjectAssessment {
sprintPlanning: {
rating: "Low" | "Medium" | "High";
description: string;
};
userStoryValidation: {
rating: "Low" | "Medium" | "High";
description: string;
};
testPracticeValidation: {
rating: "Low" | "Medium" | "High";
description: string;
};
}

export interface ProjectIssue {
id: string;
description: string;
impact: "High" | "Medium" | "Low";
likelihood: "High" | "Medium" | "Low";
riskRating: number;
dateRaised: string;
recommendation: string;
status: "Open" | "Closed";
}

export interface ProjectReport {
id: string;
projectId: string;
month: string;
date: string;
background: string;
assessment: ProjectAssessment;
issues: ProjectIssue[];
scheduleStatus: {
baselineEndDate: string;
currentEndDate: string;
};
financials: {
originalAmount: number;
paidToDate: number;
};
scopeStatus: {
completedDeliverables: number;
totalDeliverables: number;
deliverables: ProjectDeliverable[];
};
}

export interface ProjectData {
id: string;
name: string;
status: "On Track" | "At Risk" | "Critical";
statusColor: string;
metric1: string;
metric2: string;
description: string;
department: string;
startDate: string;
budget: number;
spent: number;
vendor: string;
vendorId?: string;
reports: ProjectReport[];
}
export {
ProjectData,
ProjectReport,
ProjectAssessment,
ProjectIssue,
} from "../types/projectTypes";

export const sampleProjects: ProjectData[] = [
{
Expand Down
2 changes: 1 addition & 1 deletion src/pages/AllProjects.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useEffect, useState } from "react";
import ProjectCard from "../components/ProjectCard";
import { ProjectData } from "../components/SampleData";
import { ProjectData } from "../types/projectTypes";
import { fetchAllProjects } from "../services/firebaseDataService";

const AllProjects = () => {
Expand Down
11 changes: 8 additions & 3 deletions src/pages/ReportDetailPage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import React, { useEffect, useState } from "react";
import { useParams, Link } from "react-router-dom";
import { ProjectData, ProjectReport } from "../components/SampleData";
import {
ProjectData,
ProjectReport,
ProjectIssue,
} from "../components/SampleData";
import { sampleProjects } from "../components/SampleData";
import { Deliverable } from "../types/projectTypes";

const ReportDetailPage: React.FC = () => {
const { projectId, reportId } = useParams<{
Expand Down Expand Up @@ -214,7 +219,7 @@ const ReportDetailPage: React.FC = () => {
</div>
<div className="card-body">
{report.issues && report.issues.length > 0 ? (
report.issues.map((issue) => (
report.issues.map((issue: ProjectIssue) => (
<div key={issue.id} className="card mb-3">
<div className="card-header">
<div className="d-flex justify-content-between align-items-center">
Expand Down Expand Up @@ -476,7 +481,7 @@ const ReportDetailPage: React.FC = () => {
</div>
</div>

{report.scopeStatus.deliverables.map((deliverable) => (
{report.scopeStatus.deliverables.map((deliverable: Deliverable) => (
<div key={deliverable.id} className="card mb-3">
<div className="card-header d-flex justify-content-between align-items-center">
<h5 className="mb-0">{deliverable.name}</h5>
Expand Down
2 changes: 1 addition & 1 deletion src/pages/vendor/VendorDashboard.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { useEffect, useState } from "react";
import { useAuth } from "../../contexts/AuthContext";
import ProjectCard from "../../components/VendorProjectCard";
import { ProjectData } from "../../components/SampleData";
import { ProjectData } from "../../types/projectTypes";
import { fetchProjectsByVendor } from "../../services/firebaseDataService";

const VendorDashboard = () => {
Expand Down
8 changes: 1 addition & 7 deletions src/services/firebaseDataService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,7 @@ import {
Timestamp,
} from "firebase/firestore";
import { db } from "./firebase-config";
import type {
ProjectData,
ProjectReport,
ProjectIssue,
ProjectDeliverable,
ProjectAssessment,
} from "../components/sampleData"; // Adjust path as needed
import type { ProjectData, ProjectReport } from "../types/projectTypes";

// ============================================
// HELPER FUNCTIONS
Expand Down
97 changes: 97 additions & 0 deletions src/types/projectTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
// ---------------------------------------------
// Project Status Type
// ---------------------------------------------
export type ProjectStatus = "On Track" | "At Risk" | "Critical";

// ---------------------------------------------
// Project Issue
// ---------------------------------------------
export interface ProjectIssue {
id: string;
description: string;
impact: "High" | "Medium" | "Low";
likelihood: "High" | "Medium" | "Low";
riskRating: number;
dateRaised: string;
recommendation: string;
status: "Open" | "Closed";
}

// ---------------------------------------------
// Project Assessment Section
// ---------------------------------------------
export interface AssessmentItem {
rating: "Low" | "Medium" | "High";
description: string;
}

export interface ProjectAssessment {
sprintPlanning: AssessmentItem;
userStoryValidation: AssessmentItem;
testPracticeValidation: AssessmentItem;
}

// ---------------------------------------------
// Schedule & Financials
// ---------------------------------------------
export interface ScheduleStatus {
baselineEndDate: string;
currentEndDate: string;
}

export interface Financials {
originalAmount: number;
paidToDate: number;
}

// ---------------------------------------------
// Project Deliverables
// ---------------------------------------------
export interface Deliverable {
id: string;
name: string;
status: "Not Started" | "In Progress" | "Completed";
description: string;
}

export interface ScopeStatus {
completedDeliverables: number;
totalDeliverables: number;
deliverables: Deliverable[];
}

// ---------------------------------------------
// Project Report
// ---------------------------------------------
export interface ProjectReport {
id: string;
projectId: string;
month: string;
date: string;
background: string;
assessment: ProjectAssessment;
issues: ProjectIssue[];
scheduleStatus: ScheduleStatus;
financials: Financials;
scopeStatus: ScopeStatus;
}

// ---------------------------------------------
// Project Summary (main list + detail view)
// ---------------------------------------------
export interface ProjectData {
id: string;
name: string;
status: ProjectStatus;
statusColor: string;
metric1: string;
metric2: string;
description: string;
department: string;
startDate: string;
budget: number;
spent: number;
vendor: string;
vendorId?: string;
reports: ProjectReport[];
}
Loading