mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-28 06:27:02 -05:00
Add database reset script and update package.json for db commands; refactor middleware for CORS support and error handling in parks page
This commit is contained in:
@@ -16,28 +16,36 @@ export default function ParksPage() {
|
||||
const [searchQuery, setSearchQuery] = useState('');
|
||||
const [filters, setFilters] = useState<ParkFilterValues>({});
|
||||
|
||||
// Fetch companies for filter dropdown
|
||||
useEffect(() => {
|
||||
async function fetchCompanies() {
|
||||
try {
|
||||
const response = await fetch('/api/companies');
|
||||
const data = await response.json();
|
||||
if (data.success) {
|
||||
setCompanies(data.data || []);
|
||||
if (!data.success) {
|
||||
throw new Error(data.error || 'Failed to fetch companies');
|
||||
}
|
||||
setCompanies(data.data || []);
|
||||
} catch (err) {
|
||||
console.error('Failed to fetch companies:', err);
|
||||
// Don't set error state for companies - just show empty list
|
||||
setCompanies([]);
|
||||
}
|
||||
}
|
||||
fetchCompanies();
|
||||
}, []);
|
||||
|
||||
// Fetch parks with filters
|
||||
useEffect(() => {
|
||||
async function fetchParks() {
|
||||
try {
|
||||
setLoading(true);
|
||||
setError(null);
|
||||
|
||||
const queryParams = new URLSearchParams();
|
||||
|
||||
if (searchQuery) queryParams.set('search', searchQuery);
|
||||
// Only add defined parameters
|
||||
if (searchQuery?.trim()) queryParams.set('search', searchQuery.trim());
|
||||
if (filters.status) queryParams.set('status', filters.status);
|
||||
if (filters.ownerId) queryParams.set('ownerId', filters.ownerId);
|
||||
if (filters.hasOwner !== undefined) queryParams.set('hasOwner', filters.hasOwner.toString());
|
||||
@@ -55,8 +63,11 @@ export default function ParksPage() {
|
||||
}
|
||||
|
||||
setParks(data.data || []);
|
||||
setError(null);
|
||||
} catch (err) {
|
||||
setError(err instanceof Error ? err.message : 'An error occurred');
|
||||
console.error('Error fetching parks:', err);
|
||||
setError(err instanceof Error ? err.message : 'An error occurred while fetching parks');
|
||||
setParks([]);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
@@ -84,7 +95,7 @@ export default function ParksPage() {
|
||||
);
|
||||
}
|
||||
|
||||
if (error) {
|
||||
if (error && !parks.length) {
|
||||
return (
|
||||
<div className="p-4" data-testid="park-list-error">
|
||||
<div className="inline-flex items-center px-4 py-2 rounded-md bg-red-50 text-red-700">
|
||||
@@ -125,6 +136,14 @@ export default function ParksPage() {
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{error && parks.length > 0 && (
|
||||
<div className="mt-4 p-4 bg-yellow-50 border border-yellow-200 rounded-lg text-yellow-800">
|
||||
<p className="text-sm">
|
||||
Some data might be incomplete or outdated: {error}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user