"use client"; import { useEffect, useState } from "react"; import { DataTableLayout, ColumnDef } from "ikoncomponents"; import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "ikoncomponents"; import { Plus, SquarePenIcon, Trash } from "lucide-react"; import { RiskData } from "@/app/utils/interface/risk"; import RiskForm from "./components/riskModal"; import { IconTextButtonWithTooltip } from "ikoncomponents"; import EditRiskModal from "./components/editRisk"; import { createRiskApi, risksApi, updateRiskApi, } from "@/app/utils/api/riskApi"; import { useAppCache } from "@/app/utils/context/AppCacheContext"; interface RiskComponentProps { projectIdentifier: string; } export default function RiskComponent({ projectIdentifier, }: RiskComponentProps) { const { userNameMap } = useAppCache(); // ── State ───────────────────────────────────────────────────── const [createOpen, setCreateOpen] = useState(false); const [editOpen, setEditOpen] = useState(false); const [selectedRisk, setSelectedRisk] = useState(null); const [data, setData] = useState([]); const [loading, setLoading] = useState(true); // ── Fetch Risks from API ────────────────────────────────────── const fetchRisks = async () => { try { setLoading(true); const response = await risksApi(); console.log("Risk list response -----> ", response); // Adjust this depending on your API structure setData(response?.data || response || []); } catch (error) { console.error("Error fetching risks:", error); } finally { setLoading(false); } }; useEffect(() => { fetchRisks(); }, []); // ── Handlers ─────────────────────────────────────────────────── const openForCreate = () => setCreateOpen(true); const openForEdit = (risk: RiskData) => { setSelectedRisk(risk); setEditOpen(true); }; const handleCreateSubmit = async (formData: RiskData) => { try { const response = await createRiskApi(formData); console.log("Risk created -----> ", response); setCreateOpen(false); fetchRisks(); } catch (error) { console.error("Error creating risk:", error); } }; // const handleEditSave = async (updated: RiskData) => { // console.log("Updated Risk:", updated); // const response = await updateRiskApi(updated); // console.log(response); // setEditOpen(false); // setSelectedRisk(null); // fetchRisks(); // // }; const handleEditSave = async (updatedValues: RiskData) => { if (!selectedRisk?.riskIdentifier) { console.error("No risk selected for update"); return; } console.log("Updated Risk:", updatedValues); const response = await updateRiskApi( selectedRisk.riskIdentifier, updatedValues, ); console.log(response); setEditOpen(false); setSelectedRisk(null); fetchRisks(); }; // ── Table Columns ───────────────────────────────────────────── const columns: ColumnDef[] = [ { accessorKey: "riskDescription", header: () =>
Description
, }, { accessorKey: "riskProbability", header: () =>
Probability (%)
, cell: (row) => {row.riskProbability}%, }, { accessorKey: "riskImpact", header: () =>
Impact
, }, { accessorKey: "probableRiskValue", header: () =>
Score
, }, { accessorKey: "riskOwner", header: () =>
Owner
, cell: (row) => ( {row.riskOwner ? userMap[row.riskOwner] : "N/A"} ), }, { accessorKey: "riskStatus", header: () =>
Status
, }, { header: () =>
Actions
, cell: (row) => (
openForEdit(row)} > console.log("Delete", row.riskIdentifier)} >
), }, ]; // ── Render ──────────────────────────────────────────────────── return ( <> row.riskIdentifier ?? row.riskDescription, totalPages: 0, currentPage: 0, isLoading: loading, actionNode: ( ), }} /> {selectedRisk && ( { setEditOpen(false); setSelectedRisk(null); }} riskData={selectedRisk} onSave={handleEditSave} /> )} Add New Risk ); }