2024-09-17 13:28:58 -05:00
|
|
|
import React, { useMemo } from 'react';
|
2024-09-01 20:29:33 -05:00
|
|
|
import { ProgressSpinner } from 'primereact/progressspinner';
|
2024-09-02 12:09:27 -05:00
|
|
|
import { useDiscordQuery } from '@/hooks/communityQueries/useDiscordQuery';
|
|
|
|
import { useRouter } from 'next/router';
|
2024-09-10 15:44:08 -05:00
|
|
|
import CommunityMessage from '@/components/feeds/messages/CommunityMessage';
|
|
|
|
import useWindowWidth from '@/hooks/useWindowWidth';
|
2024-09-01 22:16:44 -05:00
|
|
|
|
2024-09-09 15:56:51 -05:00
|
|
|
const DiscordFeed = ({ searchQuery }) => {
|
2024-09-02 12:09:27 -05:00
|
|
|
const router = useRouter();
|
|
|
|
const { data, error, isLoading } = useDiscordQuery({page: router.query.page});
|
2024-09-10 15:44:08 -05:00
|
|
|
const windowWidth = useWindowWidth();
|
2024-09-02 12:09:27 -05:00
|
|
|
|
2024-09-17 13:28:58 -05:00
|
|
|
// Memoize the filtered data
|
|
|
|
const filteredData = useMemo(() => {
|
|
|
|
if (!data) return [];
|
2024-09-25 17:19:02 -05:00
|
|
|
return data
|
|
|
|
.filter(message =>
|
|
|
|
message.content.toLowerCase().includes(searchQuery.toLowerCase())
|
|
|
|
)
|
|
|
|
.sort((a, b) => new Date(b.timestamp) - new Date(a.timestamp));
|
2024-09-17 13:28:58 -05:00
|
|
|
}, [data, searchQuery]);
|
|
|
|
|
2024-09-01 20:29:33 -05:00
|
|
|
if (isLoading) {
|
2024-09-02 12:09:27 -05:00
|
|
|
return (
|
2024-09-06 16:57:27 -05:00
|
|
|
<div className="h-[100vh] min-bottom-bar:w-[86vw] max-sidebar:w-[100vw]">
|
2024-09-02 12:09:27 -05:00
|
|
|
<ProgressSpinner className='w-full mt-24 mx-auto' />
|
|
|
|
</div>
|
|
|
|
);
|
2024-09-01 20:29:33 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if (error) {
|
|
|
|
return <div className="text-red-500 text-center p-4">Failed to load messages. Please try again later.</div>;
|
|
|
|
}
|
|
|
|
|
|
|
|
return (
|
2024-10-23 14:48:11 -05:00
|
|
|
<div className="h-full w-full min-bottom-bar:w-[86vw]">
|
2024-09-10 15:44:08 -05:00
|
|
|
<div className="mx-4">
|
2024-09-17 13:28:58 -05:00
|
|
|
{filteredData.length > 0 ? (
|
2024-09-09 15:56:51 -05:00
|
|
|
filteredData.map(message => (
|
2024-09-10 15:44:08 -05:00
|
|
|
<CommunityMessage
|
|
|
|
key={message.id}
|
|
|
|
message={message}
|
|
|
|
searchQuery={searchQuery}
|
|
|
|
windowWidth={windowWidth}
|
|
|
|
platform="discord"
|
|
|
|
/>
|
2024-09-02 10:51:46 -05:00
|
|
|
))
|
|
|
|
) : (
|
|
|
|
<div className="text-gray-400 text-center p-4">No messages available.</div>
|
|
|
|
)}
|
2024-09-02 09:49:17 -05:00
|
|
|
</div>
|
2024-09-01 20:29:33 -05:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2024-09-02 12:09:27 -05:00
|
|
|
export default DiscordFeed;
|