plebdevs/src/pages/feed.js

98 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-09-02 13:50:07 -05:00
import React, { useState, useEffect } from 'react';
2024-09-02 17:15:43 -05:00
import Image from 'next/image';
import CommunityMenuTab from '@/components/menutab/CommunityMenuTab';
import NostrFeed from '@/components/feeds/NostrFeed';
import DiscordFeed from '@/components/feeds/DiscordFeed';
import StackerNewsFeed from '@/components/feeds/StackerNewsFeed';
import GlobalFeed from '@/components/feeds/GlobalFeed';
import { useRouter } from 'next/router';
2024-09-03 12:09:31 -05:00
import MessageInput from '@/components/feeds/MessageInput';
import StackerNewsIcon from '../../public/images/sn.svg';
import NostrIcon from '../../public/images/nostr.png';
2024-09-10 15:44:08 -05:00
import GenericButton from '@/components/buttons/GenericButton';
import { Divider } from 'primereact/divider';
2024-09-03 12:09:31 -05:00
const Feed = () => {
2025-04-02 17:47:30 -05:00
const [selectedTopic, setSelectedTopic] = useState('global');
const [title, setTitle] = useState('Community');
const allTopics = ['global', 'nostr', 'discord', 'stackernews'];
2025-04-02 17:47:30 -05:00
const router = useRouter();
2025-04-02 17:47:30 -05:00
const handleTopicChange = topic => {
setSelectedTopic(topic);
router.push(`/feed?channel=${topic}`);
};
2025-04-02 17:47:30 -05:00
useEffect(() => {
setTitle(router.query.channel);
}, [router.query.channel]);
2024-09-02 17:15:43 -05:00
2025-04-02 17:47:30 -05:00
useEffect(() => {
setSelectedTopic(router.query.channel);
}, [router.query.channel]);
2024-09-02 13:50:07 -05:00
2025-04-02 17:47:30 -05:00
const getTagIcon = topic => {
switch (topic) {
case 'global':
return 'pi pi-globe';
case 'nostr':
return <Image src={NostrIcon} alt="Nostr" width={18} height={18} className="mr-1" />;
case 'discord':
return 'pi pi-discord';
case 'stackernews':
return (
<Image src={StackerNewsIcon} alt="StackerNews" width={20} height={20} className="mr-1" />
);
default:
return 'pi pi-globe';
}
};
2024-09-02 17:15:43 -05:00
2025-04-02 17:47:30 -05:00
return (
<div className="w-full mx-auto px-10 max-mob:px-2">
<div className="mb-2">
<div className="flex flex-col">
<div className="my-4 flex flex-row items-end">
<h1 className="font-bold mb-0">Feeds</h1>
<GenericButton
icon={getTagIcon(title)}
className="ml-2 text-sm p-2 py-1 flex items-center cursor-default hover:bg-transparent"
outlined
severity={
{
global: 'success',
discord: 'primary',
stackernews: 'warning',
nostr: 'help',
}[title] || 'info'
}
label={`${title}`}
2024-11-06 15:54:11 -06:00
/>
2025-04-02 17:47:30 -05:00
</div>
{selectedTopic === 'nostr' && (
<div className="w-full mt-2">
<MessageInput />
</div>
2025-04-02 17:47:30 -05:00
)}
</div>
2025-04-02 17:47:30 -05:00
<Divider />
</div>
<CommunityMenuTab
items={allTopics}
selectedTopic={selectedTopic}
onTabChange={handleTopicChange}
className="mb-4"
/>
<div className="feed-content">
{selectedTopic === 'global' && <GlobalFeed />}
{selectedTopic === 'nostr' && <NostrFeed />}
{selectedTopic === 'discord' && <DiscordFeed />}
{selectedTopic === 'stackernews' && <StackerNewsFeed />}
</div>
</div>
);
};
2025-04-02 17:47:30 -05:00
export default Feed;