diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9781522..dcbd13b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ name: Deployment (Staging) on: # Runs on pushes targeting the default branch push: - branches: ['main'] + branches: ["main"] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -20,8 +20,8 @@ jobs: - name: Set up Node uses: actions/setup-node@v6 with: - node-version: 'lts/*' - cache: 'npm' + node-version: "lts/*" + cache: "npm" - name: Set environment variables run: | @@ -44,6 +44,9 @@ jobs: if [[ -n "${{ secrets.VITE_BC_EMAIL }}" ]]; then echo "VITE_BC_EMAIL=${{ secrets.VITE_BC_EMAIL }}" >> .env fi + if [[ -n "${{ secrets.VITE_EV_CARTO_KEY }}" ]]; then + echo "VITE_EV_CARTO_KEY=${{ secrets.VITE_EV_CARTO_KEY }}" >> .env + fi - name: Install dependencies run: npm ci --omit=dev diff --git a/src/components/pages/EventsPage/EventDialog.tsx b/src/components/pages/EventsPage/EventDialog.tsx index acd399e..c56af0a 100644 --- a/src/components/pages/EventsPage/EventDialog.tsx +++ b/src/components/pages/EventsPage/EventDialog.tsx @@ -63,8 +63,8 @@ const EventDialog: React.FC = ({ event, onClose }) => { )} - - + + {event.link && ( ({ + id, + title, + date: new Date(date), + location: { name: 'Piazza', city, lat: 44, lng: 11 }, +}) + +describe('Events list', () => { + beforeEach(() => { + vi.useFakeTimers() + vi.setSystemTime(new Date('2026-10-19T12:00:00')) + }) + + afterEach(() => vi.useRealTimers()) + + it('separates events and sorts upcoming ascending and past descending', () => { + render( + + ) + + const upcoming = within(screen.getByRole('region', { name: 'prossimi eventi' })) + const past = within(screen.getByRole('region', { name: 'eventi passati' })) + expect(upcoming.getAllByRole('heading', { level: 2 }).map(node => node.textContent)).toEqual(['Future soon', 'Future late']) + expect(past.getAllByRole('heading', { level: 2 }).map(node => node.textContent)).toEqual(['Past new', 'Past old']) + }) + + it('renders date ranges and invokes onSelect for the clicked card', () => { + const onSelect = vi.fn() + const event = { ...makeEvent('range', 'Long medieval event', '2026-11-01', 'San Martino'), endDate: new Date('2026-11-03') } + render() + + expect(screen.getByText(/1-3 novembre 2026/)).toBeInTheDocument() + expect(screen.getByText('San Martino')).toBeInTheDocument() + fireEvent.click(screen.getByRole('heading', { name: 'Long medieval event' })) + expect(onSelect).toHaveBeenCalledWith(event) + }) + + it('uses a single fluid column on small screens', () => { + render() + + const card = screen.getByRole('heading', { name: /very long event/ }).closest('.MuiCard-root') + expect(card).toHaveStyle({ width: '100%', minWidth: '0', boxSizing: 'border-box' }) + expect(screen.getByRole('region', { name: 'prossimi eventi' })).toHaveStyle({ width: '100%', minWidth: '0' }) + }) +}) diff --git a/src/components/pages/EventsPage/ListView.tsx b/src/components/pages/EventsPage/ListView.tsx index fef8780..2de69b4 100644 --- a/src/components/pages/EventsPage/ListView.tsx +++ b/src/components/pages/EventsPage/ListView.tsx @@ -31,7 +31,11 @@ const EventCard: React.FC<{ event: Event; onSelect: (event: Event) => void }> = display: 'flex', flexDirection: 'column', opacity: isUpcoming(event.date) ? 1 : 0.6, - width: theme => theme.breakpoints.values.lg * 0.3, + // Cards must be allowed to shrink on phones. The previous fixed + // width (30% of the `lg` breakpoint) was wider than small screens. + width: '100%', + minWidth: 0, + boxSizing: 'border-box', }}> onSelect(event)} @@ -39,27 +43,27 @@ const EventCard: React.FC<{ event: Event; onSelect: (event: Event) => void }> = {event.image && } - + {event.title} {!isUpcoming(event.date) && } - -
+ + - + {formatDateRange(event.date, event.endDate)} - + {event.location.city} -
- + +
@@ -85,13 +89,22 @@ const ListView: React.FC = ({ events, onSelect }) => { return groups }, [events]) return ( - + {eventGroups.upcoming.length > 0 && ( <> Prossimi eventi - + {eventGroups.upcoming.map(event => ( ))} @@ -103,7 +116,16 @@ const ListView: React.FC = ({ events, onSelect }) => { Eventi passati - + {eventGroups.past.map(event => ( ))} diff --git a/src/components/pages/EventsPage/MapView.tsx b/src/components/pages/EventsPage/MapView.tsx index c162433..68a359e 100644 --- a/src/components/pages/EventsPage/MapView.tsx +++ b/src/components/pages/EventsPage/MapView.tsx @@ -68,7 +68,7 @@ const MapView: React.FC = ({ events, onSelect }) => { {sorted.map((event, idx) => ( { theme.breakpoints.values.lg, - px: 'auto', + width: '100%', + maxWidth: theme => theme.breakpoints.values.lg, + boxSizing: 'border-box', + px: { xs: 2, sm: 3, md: 4 }, mx: 'auto', }}>