banatie-service/apps/landing/src/app/(landings)/blog/_components/BlogShareButtons.tsx

68 lines
2.9 KiB
TypeScript

'use client';
import { Link as LinkIcon } from 'lucide-react';
interface BlogShareButtonsProps {
url?: string;
title?: string;
}
export const BlogShareButtons = ({ url, title }: BlogShareButtonsProps) => {
// Build full URL from relative path
const getFullUrl = () => {
if (typeof window === 'undefined') return url || '';
if (url?.startsWith('http')) return url;
return `${window.location.origin}${url || window.location.pathname}`;
};
const shareUrl = getFullUrl();
const shareTitle = title || '';
const handleCopyLink = async () => {
try {
await navigator.clipboard.writeText(shareUrl);
} catch (err) {
console.error('Failed to copy link:', err);
}
};
const twitterUrl = `https://twitter.com/intent/tweet?url=${encodeURIComponent(shareUrl)}&text=${encodeURIComponent(shareTitle)}`;
const linkedinUrl = `https://www.linkedin.com/sharing/share-offsite/?url=${encodeURIComponent(shareUrl)}`;
return (
<div className="sticky top-38 flex flex-col gap-4 items-center">
<a
href={twitterUrl}
target="_blank"
rel="noopener noreferrer"
aria-label="Share on Twitter"
className="p-3 rounded-full bg-white text-gray-500 hover:text-violet-500 transition-colors border border-gray-200 shadow-sm"
>
<svg className="w-5 h-5 fill-current" viewBox="0 0 24 24">
<path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z" />
</svg>
</a>
<a
href={linkedinUrl}
target="_blank"
rel="noopener noreferrer"
aria-label="Share on LinkedIn"
className="p-3 rounded-full bg-white text-gray-500 hover:text-blue-600 transition-colors border border-gray-200 shadow-sm"
>
<svg className="w-5 h-5 fill-current" viewBox="0 0 24 24">
<path d="M19 0h-14c-2.761 0-5 2.239-5 5v14c0 2.761 2.239 5 5 5h14c2.762 0 5-2.239 5-5v-14c0-2.761-2.238-5-5-5zm-11 19h-3v-11h3v11zm-1.5-12.268c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zm13.5 12.268h-3v-5.604c0-3.368-4-3.113-4 0v5.604h-3v-11h3v1.765c1.396-2.586 7-2.777 7 2.476v6.759z" />
</svg>
</a>
<button
onClick={handleCopyLink}
aria-label="Copy Link"
className="p-3 rounded-full bg-white text-gray-500 hover:text-gray-900 transition-colors border border-gray-200 shadow-sm"
>
<LinkIcon className="w-5 h-5" />
</button>
</div>
);
};