import React, { useState, useEffect } from 'react';
import { Card } from 'primereact/card';
import { Avatar } from 'primereact/avatar';
import { Tag } from 'primereact/tag';
import { Panel } from 'primereact/panel';
import GenericButton from '@/components/buttons/GenericButton';
import { highlightText } from '@/utils/text';
import { useSession } from 'next-auth/react';
import NostrIcon from '../../../../public/images/nostr.png';
import Image from 'next/image';
import { nip19 } from 'nostr-tools';
import ZapThreadsWrapper from '@/components/ZapThreadsWrapper';
const StackerNewsIconComponent = () => (
);
const headerTemplate = (options, windowWidth, platform, id) => {
return (
768 ? `View ${platform === 'nostr' ? 'on' : 'in'} ${platform}` : null}
icon="pi pi-external-link"
outlined
size="small"
onClick={() => window.open(getPlatformLink(platform, id), '_blank')}
tooltip={
windowWidth < 768 ? `View ${platform === 'nostr' ? 'on' : 'in'} ${platform}` : null
}
tooltipOptions={{ position: 'left' }}
/>
);
};
const CommunityMessage = ({ message, searchQuery, windowWidth, platform }) => {
const [npub, setNpub] = useState(null);
const [nsec, setNsec] = useState(null);
const [collapsed, setCollapsed] = useState(true);
const { data: session } = useSession();
useEffect(() => {
if (session?.user?.pubkey || session?.user?.privkey) {
let privkeyBuffer;
if (session.user.privkey) {
privkeyBuffer = Buffer.from(session.user.privkey, 'hex');
setNsec(nip19.nsecEncode(privkeyBuffer));
} else {
setNpub(nip19.npubEncode(session.user.pubkey));
}
}
}, [session]);
const header = (
{message?.pubkey ? message?.pubkey.slice(0, 12) + '...' : message.author}
);
const footer = (
{platform === 'nostr' ? (
{new Date(message.timestamp).toLocaleString()}
) : null}
{platform === 'nostr' ? (
headerTemplate(
{ onTogglerClick: () => setCollapsed(!collapsed) },
windowWidth,
platform,
message.id
)
}
toggleable
collapsed={collapsed}
onToggle={e => setCollapsed(e.value)}
className="w-full"
pt={{
content: {
className: 'p-4 py-0',
},
}}
>
{nsec || npub ? (
) : (
)}
) : (
768 ? `View in ${platform}` : null}
icon="pi pi-external-link"
outlined
size="small"
onClick={() => window.open(getPlatformLink(platform, message.id), '_blank')}
tooltip={windowWidth < 768 ? `View in ${platform}` : null}
tooltipOptions={{ position: 'left' }}
/>
{platform !== 'nostr' ? (
{new Date(message.timestamp).toLocaleString()}
) : (
)}
)}
);
return (
{searchQuery ? highlightText(message.content, searchQuery) : message.content}
);
};
const getPlatformLink = (platform, id) => {
switch (platform) {
case 'discord':
return 'https://discord.gg/t8DCMcq39d';
case 'stackernews':
return `https://stacker.news/items/${id}`;
case 'nostr':
return `https://nostr.band/${nip19.noteEncode(id)}`;
default:
return '#';
}
};
const getPlatformIcon = platform => {
switch (platform) {
case 'stackernews':
return ;
case 'nostr':
return ;
default:
return `pi pi-${platform}`;
}
};
export default CommunityMessage;