ERP-node/frontend/components/pop/PopEquipmentModal.tsx

81 lines
2.2 KiB
TypeScript

"use client";
import React from "react";
import { X } from "lucide-react";
import { Equipment } from "./types";
interface PopEquipmentModalProps {
isOpen: boolean;
equipments: Equipment[];
selectedEquipment: Equipment | null;
onSelect: (equipment: Equipment) => void;
onClose: () => void;
}
export function PopEquipmentModal({
isOpen,
equipments,
selectedEquipment,
onSelect,
onClose,
}: PopEquipmentModalProps) {
const [tempSelected, setTempSelected] = React.useState<Equipment | null>(selectedEquipment);
React.useEffect(() => {
setTempSelected(selectedEquipment);
}, [selectedEquipment, isOpen]);
const handleConfirm = () => {
if (tempSelected) {
onSelect(tempSelected);
onClose();
}
};
if (!isOpen) return null;
return (
<div className="pop-modal-overlay active" onClick={(e) => e.target === e.currentTarget && onClose()}>
<div className="pop-modal">
<div className="pop-modal-header">
<h2 className="pop-modal-title"> </h2>
<button className="pop-modal-close" onClick={onClose}>
<X size={16} />
</button>
</div>
<div className="pop-modal-body">
<div className="pop-selection-grid">
{equipments.map((equip) => (
<div
key={equip.id}
className={`pop-selection-card ${tempSelected?.id === equip.id ? "selected" : ""}`}
onClick={() => setTempSelected(equip)}
>
<div className="pop-selection-card-check"></div>
<div className="pop-selection-card-name">{equip.name}</div>
<div className="pop-selection-card-info">{equip.processNames.join(", ")}</div>
</div>
))}
</div>
</div>
<div className="pop-modal-footer">
<button className="pop-btn pop-btn-outline" style={{ flex: 1 }} onClick={onClose}>
</button>
<button
className="pop-btn pop-btn-primary"
style={{ flex: 1 }}
onClick={handleConfirm}
disabled={!tempSelected}
>
</button>
</div>
</div>
</div>
);
}