feat: Add functionality to copy WP/Investment number to clipboard with user feedback

This commit is contained in:
2026-01-22 19:49:18 +01:00
parent 6dfb0224ab
commit 3a382a28c0

View File

@@ -33,6 +33,23 @@ export default function ProjectViewPage() {
const [editText, setEditText] = useState(''); const [editText, setEditText] = useState('');
const [projectContacts, setProjectContacts] = useState([]); const [projectContacts, setProjectContacts] = useState([]);
const [showDocumentModal, setShowDocumentModal] = useState(false); const [showDocumentModal, setShowDocumentModal] = useState(false);
const [copied, setCopied] = useState(false);
// Helper function to copy WP/Investment number to clipboard
const handleCopyReference = async () => {
const wp = project.wp || '';
const investmentNumber = project.investment_number ? project.investment_number.split('-').pop() : "";
const reference = `${wp}/${investmentNumber}`;
try {
await navigator.clipboard.writeText(reference);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
} catch (error) {
console.error('Failed to copy:', error);
alert('Nie udało się skopiować');
}
};
// Helper function to parse note text with links // Helper function to parse note text with links
const parseNoteText = (text) => { const parseNoteText = (text) => {
@@ -736,72 +753,6 @@ export default function ProjectViewPage() {
</h2> </h2>
</CardHeader> </CardHeader>
<CardContent className="space-y-3"> <CardContent className="space-y-3">
<Link href={`/projects/${params.id}/edit`} className="block">
<Button
variant="outline"
size="sm"
className="w-full justify-start"
>
<svg
className="w-4 h-4 mr-2"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"
/>
</svg>
Edytuj projekt
</Button>
</Link>{" "}
<Link href="/projects" className="block">
<Button
variant="outline"
size="sm"
className="w-full justify-start"
>
<svg
className="w-4 h-4 mr-2"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M15 19l-7-7 7-7"
/>
</svg>
Powrót do projektów
</Button>
</Link>
<Link href="/projects/map" className="block">
<Button
variant="outline"
size="sm"
className="w-full justify-start"
>
<svg
className="w-4 h-4 mr-2"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-1.447-.894L15 4m0 13V4m0 0L9 7"
/>
</svg>
Zobacz wszystkie na mapie
</Button>
</Link>
<Button <Button
variant="outline" variant="outline"
size="sm" size="sm"
@@ -823,6 +774,48 @@ export default function ProjectViewPage() {
</svg> </svg>
Generuj dokument Generuj dokument
</Button> </Button>
<Button
variant="outline"
size="sm"
className="w-full justify-start"
onClick={handleCopyReference}
>
{copied ? (
<>
<svg
className="w-4 h-4 mr-2 text-green-600"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M5 13l4 4L19 7"
/>
</svg>
<span className="text-green-600">Skopiowano!</span>
</>
) : (
<>
<svg
className="w-4 h-4 mr-2"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"
/>
</svg>
Kopiuj {project.wp || 'N/A'}/{project.investment_number ? project.investment_number.split('-').pop() : ""}
</>
)}
</Button>
</CardContent> </CardContent>
</Card> </Card>