better logging and delay
This commit is contained in:
@@ -37,7 +37,12 @@ router.get('/search', authMiddleware, async (req, res) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
throw new Error('TMDB API error');
|
const errorText = await response.text();
|
||||||
|
console.error('TMDB API error:', response.status, errorText);
|
||||||
|
return res.status(500).json({
|
||||||
|
error: `TMDB API error: ${response.status}`,
|
||||||
|
details: errorText
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ export default function ChallengeDetail() {
|
|||||||
const [searchResults, setSearchResults] = useState([]);
|
const [searchResults, setSearchResults] = useState([]);
|
||||||
const [showInvite, setShowInvite] = useState(false);
|
const [showInvite, setShowInvite] = useState(false);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [searchTimeout, setSearchTimeout] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadChallenge();
|
loadChallenge();
|
||||||
@@ -76,19 +77,30 @@ export default function ChallengeDetail() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSearchUsers = async (query) => {
|
const handleSearchUsers = (query) => {
|
||||||
setInviteQuery(query);
|
setInviteQuery(query);
|
||||||
|
|
||||||
|
// Clear previous timeout
|
||||||
|
if (searchTimeout) {
|
||||||
|
clearTimeout(searchTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
if (query.trim().length < 2) {
|
if (query.trim().length < 2) {
|
||||||
setSearchResults([]);
|
setSearchResults([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
// Debounce search by 1 second
|
||||||
const data = await api.searchUsers(query);
|
const timeout = setTimeout(async () => {
|
||||||
setSearchResults(data.users);
|
try {
|
||||||
} catch (err) {
|
const data = await api.searchUsers(query);
|
||||||
console.error('Search failed:', err);
|
setSearchResults(data.users);
|
||||||
}
|
} catch (err) {
|
||||||
|
console.error('Search failed:', err);
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
setSearchTimeout(timeout);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleInvite = async (userId) => {
|
const handleInvite = async (userId) => {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export default function ChallengeList() {
|
|||||||
const [showResults, setShowResults] = useState([]);
|
const [showResults, setShowResults] = useState([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [creating, setCreating] = useState(false);
|
const [creating, setCreating] = useState(false);
|
||||||
|
const [searchTimeout, setSearchTimeout] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadChallenges();
|
loadChallenges();
|
||||||
@@ -24,19 +25,30 @@ export default function ChallengeList() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSearch = async (query) => {
|
const handleSearch = (query) => {
|
||||||
setSearchQuery(query);
|
setSearchQuery(query);
|
||||||
|
|
||||||
|
// Clear previous timeout
|
||||||
|
if (searchTimeout) {
|
||||||
|
clearTimeout(searchTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
if (query.trim().length < 2) {
|
if (query.trim().length < 2) {
|
||||||
setShowResults([]);
|
setShowResults([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
// Debounce search by 1.5 seconds
|
||||||
const data = await api.searchShows(query);
|
const timeout = setTimeout(async () => {
|
||||||
setShowResults(data.results || []);
|
try {
|
||||||
} catch (err) {
|
const data = await api.searchShows(query);
|
||||||
console.error('Search failed:', err);
|
setShowResults(data.results || []);
|
||||||
}
|
} catch (err) {
|
||||||
|
console.error('Search failed:', err);
|
||||||
|
}
|
||||||
|
}, 1500);
|
||||||
|
|
||||||
|
setSearchTimeout(timeout);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleCreateChallenge = async (show) => {
|
const handleCreateChallenge = async (show) => {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export default function Friends() {
|
|||||||
const [searchQuery, setSearchQuery] = useState('');
|
const [searchQuery, setSearchQuery] = useState('');
|
||||||
const [searchResults, setSearchResults] = useState([]);
|
const [searchResults, setSearchResults] = useState([]);
|
||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
|
const [searchTimeout, setSearchTimeout] = useState(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
loadData();
|
loadData();
|
||||||
@@ -29,19 +30,30 @@ export default function Friends() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSearch = async (query) => {
|
const handleSearch = (query) => {
|
||||||
setSearchQuery(query);
|
setSearchQuery(query);
|
||||||
|
|
||||||
|
// Clear previous timeout
|
||||||
|
if (searchTimeout) {
|
||||||
|
clearTimeout(searchTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
if (query.trim().length < 2) {
|
if (query.trim().length < 2) {
|
||||||
setSearchResults([]);
|
setSearchResults([]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
// Debounce search by 1 second
|
||||||
const data = await api.searchUsers(query);
|
const timeout = setTimeout(async () => {
|
||||||
setSearchResults(data.users);
|
try {
|
||||||
} catch (err) {
|
const data = await api.searchUsers(query);
|
||||||
console.error('Search failed:', err);
|
setSearchResults(data.users);
|
||||||
}
|
} catch (err) {
|
||||||
|
console.error('Search failed:', err);
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
|
||||||
|
setSearchTimeout(timeout);
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSendRequest = async (userId) => {
|
const handleSendRequest = async (userId) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user