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:
pacnpal
2025-02-23 18:09:27 -05:00
parent 04acef4766
commit 41c747ab03
6 changed files with 255 additions and 279 deletions

View File

@@ -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>
);