mirror of
https://github.com/AustinKelsay/plebdevs.git
synced 2025-06-06 18:31:00 +00:00
49 lines
2.0 KiB
JavaScript
49 lines
2.0 KiB
JavaScript
![]() |
import { useState, useEffect } from 'react';
|
||
|
import { useDiscordQuery } from '@/hooks/communityQueries/useDiscordQuery';
|
||
|
import { useCommunityNotes } from '@/hooks/nostr/useCommunityNotes';
|
||
|
import { useQuery } from '@tanstack/react-query';
|
||
|
import axios from 'axios';
|
||
|
|
||
|
const fetchStackerNews = async () => {
|
||
|
const response = await axios.get('/api/stackernews');
|
||
|
return response.data.data.items.items;
|
||
|
};
|
||
|
|
||
|
export const useCommunitySearch = () => {
|
||
|
const [searchResults, setSearchResults] = useState([]);
|
||
|
const { data: discordData } = useDiscordQuery({ page: 1 });
|
||
|
const { communityNotes: nostrData } = useCommunityNotes();
|
||
|
const { data: stackerNewsData } = useQuery({ queryKey: ['stackerNews'], queryFn: fetchStackerNews });
|
||
|
|
||
|
const searchCommunity = (term) => {
|
||
|
if (term.length < 3) {
|
||
|
setSearchResults([]);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
const lowercaseTerm = term.toLowerCase();
|
||
|
|
||
|
const filteredDiscord = (discordData || [])
|
||
|
.filter(message => message.content.toLowerCase().includes(lowercaseTerm))
|
||
|
.map(message => ({ ...message, type: 'discord' }));
|
||
|
|
||
|
const filteredNostr = (nostrData || [])
|
||
|
.filter(message => message.content.toLowerCase().includes(lowercaseTerm))
|
||
|
.map(message => ({ ...message, type: 'nostr' }));
|
||
|
|
||
|
const filteredStackerNews = (stackerNewsData || [])
|
||
|
.filter(item => item.title.toLowerCase().includes(lowercaseTerm))
|
||
|
.map(item => ({ ...item, type: 'stackernews' }));
|
||
|
|
||
|
const combinedResults = [...filteredDiscord, ...filteredNostr, ...filteredStackerNews]
|
||
|
.sort((a, b) => {
|
||
|
const dateA = a.type === 'nostr' ? a.created_at * 1000 : new Date(a.timestamp || a.createdAt);
|
||
|
const dateB = b.type === 'nostr' ? b.created_at * 1000 : new Date(b.timestamp || b.createdAt);
|
||
|
return dateB - dateA;
|
||
|
});
|
||
|
|
||
|
setSearchResults(combinedResults);
|
||
|
};
|
||
|
|
||
|
return { searchCommunity, searchResults };
|
||
|
};
|