Skip to content

Commit

Permalink
Added ENCM open status
Browse files Browse the repository at this point in the history
  • Loading branch information
joao-vasconcelos committed Jan 3, 2024
1 parent f59fb9f commit feb81c0
Show file tree
Hide file tree
Showing 10 changed files with 53 additions and 25 deletions.
10 changes: 6 additions & 4 deletions nextjs/components/FrontendEncm/FrontendEncm.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
'use client';

/* * */

import styles from './FrontendEncm.module.css';
import useSWR from 'swr';
import { useState, useMemo, useEffect } from 'react';
Expand Down Expand Up @@ -42,12 +44,12 @@ export default function FrontendEncm() {
});

//
// B. Fetch data
// C. Fetch data

const { data: allEncmData, error: allEncmError, isLoading: allEncmLoading } = useSWR('https://api.carrismetropolitana.pt/facilities/encm', { refreshInterval: 30000 });

//
// C. Transform data
// D. Transform data

const allEncmMapData = useMemo(() => {
const geoJSON = {
Expand Down Expand Up @@ -99,7 +101,7 @@ export default function FrontendEncm() {
}, [allEncmData, selectedEncmId]);

//
// D. Handle actions
// E. Handle actions

const handleMapReCenter = () => {
frontendEncmMap.flyTo({ ...OSMMapDefaults.viewport, duration: 2000 });
Expand Down Expand Up @@ -142,7 +144,7 @@ export default function FrontendEncm() {
};

//
// E. Render components
// F. Render components

return (
<Panel type="A" title={t('title')} loading={allEncmLoading} error={allEncmError}>
Expand Down
4 changes: 4 additions & 0 deletions nextjs/components/FrontendEncmGrid/FrontendEncmGrid.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
'use client';

/* * */

import styles from './FrontendEncmGrid.module.css';
import { useMemo } from 'react';
import FrontendEncmItem from '@/components/FrontendEncmItem/FrontendEncmItem';

/* * */

export default function FrontendEncmGrid({ allEncmData, selectedEncmId, onSelectEncmId }) {
//

Expand Down
4 changes: 4 additions & 0 deletions nextjs/components/FrontendEncmInfo/FrontendEncmInfo.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
'use client';

/* * */

import Image from 'next/image';
import { useTranslations } from 'next-intl';
import styles from './FrontendEncmInfo.module.css';

/* * */

export default function FrontendEncmInfo() {
//

Expand Down
6 changes: 5 additions & 1 deletion nextjs/components/FrontendEncmItem/FrontendEncmItem.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
'use client';

/* * */

import { useTranslations } from 'next-intl';
import styles from './FrontendEncmItem.module.css';
import Loader from '@/components/Loader/Loader';
import FrontendEncmItemTimetable from '@/components/FrontendEncmItemTimetable/FrontendEncmItemTimetable';
import FrontendEncmItemOccupation from '@/components/FrontendEncmItemOccupation/FrontendEncmItemOccupation';

/* * */

export default function FrontendEncmItem({ encmData, selectedEncmId, onSelectEncmId }) {
//

Expand Down Expand Up @@ -37,7 +41,7 @@ export default function FrontendEncmItem({ encmData, selectedEncmId, onSelectEnc

<FrontendEncmItemTimetable isOpen={encmData.is_open} mon={encmData.hours_monday} tue={encmData.hours_tuesday} wed={encmData.hours_wednesday} thu={encmData.hours_thursday} fri={encmData.hours_friday} sat={encmData.hours_saturday} sun={encmData.hours_sunday} />

<FrontendEncmItemOccupation currentlyWaiting={encmData.currently_waiting} expectedWaitTime={encmData.expected_wait_time} activeCounters={encmData.active_counters} />
{encmData.is_open && <FrontendEncmItemOccupation currentlyWaiting={encmData.currently_waiting} expectedWaitTime={encmData.expected_wait_time} activeCounters={encmData.active_counters} />}
</div>
) : (
<Loader visible />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
'use client';

/* * */

import { useTranslations } from 'next-intl';
import { useEffect, useState } from 'react';
import styles from './FrontendEncmItemOccupation.module.css';
import LiveIcon from '@/components/LiveIcon/LiveIcon';

/* * */

export default function FrontendEncmItemOccupation({ currentlyWaiting, expectedWaitTime, activeCounters, isOpen }) {
//

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
'use client';

/* * */

import { useTranslations } from 'next-intl';
import styles from './FrontendEncmItemTimetable.module.css';
import { useEffect, useState } from 'react';

/* * */

export default function FrontendEncmItemTimetable({ isOpen, mon, tue, wed, thu, fri, sat, sun }) {
//

Expand Down Expand Up @@ -66,7 +70,7 @@ export default function FrontendEncmItemTimetable({ isOpen, mon, tue, wed, thu,
<p className={styles.hours}>{item.hours}</p>
</div>
))}
{/* {isOpen ? <p className={styles.isOpen}>{t('is_open')}</p> : <p className={styles.isClosed}>{t('is_closed')}</p>} */}
{isOpen ? <p className={styles.isOpen}>{t('is_open')}</p> : <p className={styles.isClosed}>{t('is_closed')}</p>}
</div>
);

Expand Down
36 changes: 21 additions & 15 deletions nextjs/components/FrontendEncmMap/FrontendEncmMap.js
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
'use client';

/* * */

import OSMMap from '@/components/OSMMap/OSMMap';
import { useEffect } from 'react';
import { useMap, Source, Layer, Popup } from 'react-map-gl/maplibre';
import FrontendEncmMapPopup from '@/components/FrontendEncmMapPopup/FrontendEncmMapPopup';

/* * */

export default function FrontendEncmMap({ allEncmMapData, selectedEncmMapData, selectedMapStyle, selectedMapFeature, onSelectEncmId }) {
//

//
// A. Setup variables

const { FrontendEncmMap } = useMap();
const { frontendEncmMap } = useMap();

//
// C. Handle actions
// B. Transform data

useEffect(() => {
if (!FrontendEncmMap) return;
// Load stop idle symbol
FrontendEncmMap.loadImage('/icons/map-encm-idle.png', (error, image) => {
if (!frontendEncmMap) return;
// Load stop open symbol
frontendEncmMap.loadImage('/icons/map-encm-open.png', (error, image) => {
if (error) throw error;
FrontendEncmMap.addImage('encm-idle', image, { sdf: false });
frontendEncmMap.addImage('encm-open', image, { sdf: false });
});
}, [FrontendEncmMap]);
}, [frontendEncmMap]);

//
// C. Handle actions
Expand All @@ -40,33 +44,33 @@ export default function FrontendEncmMap({ allEncmMapData, selectedEncmMapData, s

const handleMapMouseEnter = (event) => {
if (event?.features[0]?.properties?.id) {
FrontendEncmMap.getCanvas().style.cursor = 'pointer';
frontendEncmMap.getCanvas().style.cursor = 'pointer';
}
};

const handleMapMouseLeave = (event) => {
if (event?.features[0]?.properties?.id) {
FrontendEncmMap.getCanvas().style.cursor = 'default';
frontendEncmMap.getCanvas().style.cursor = 'default';
}
};

const handleMapMove = () => {
if (selectedMapFeature) {
// Get all currently rendered features and mark all of them as unselected
const allRenderedFeatures = FrontendEncmMap.queryRenderedFeatures();
const allRenderedFeatures = frontendEncmMap.queryRenderedFeatures();
allRenderedFeatures.forEach(function (f) {
FrontendEncmMap.setFeatureState({ source: 'all-encm', id: f.id }, { selected: false });
frontendEncmMap.setFeatureState({ source: 'all-encm', id: f.id }, { selected: false });
});
// Then mark the selected one as selected
FrontendEncmMap.setFeatureState({ source: 'all-encm', id: selectedMapFeature.properties.mapid }, { selected: true });
frontendEncmMap.setFeatureState({ source: 'all-encm', id: selectedMapFeature.properties.mapid }, { selected: true });
}
};

//
// G. Render components
// D. Render components

return (
<OSMMap id="FrontendEncmMap" mapStyle={selectedMapStyle} onClick={handleMapClick} onMouseEnter={handleMapMouseEnter} onMouseLeave={handleMapMouseLeave} onMove={handleMapMove} interactiveLayerIds={['all-encm']}>
<OSMMap id="frontendEncmMap" mapStyle={selectedMapStyle} onClick={handleMapClick} onMouseEnter={handleMapMouseEnter} onMouseLeave={handleMapMouseLeave} onMove={handleMapMove} interactiveLayerIds={['all-encm']}>
{selectedEncmMapData && (
<Popup onClose={handlePopupClose} closeButton={false} closeOnClick={false} latitude={selectedEncmMapData.geometry.coordinates[1]} longitude={selectedEncmMapData.geometry.coordinates[0]} anchor="bottom">
<FrontendEncmMapPopup encmData={selectedEncmMapData.properties} onSelectEncmId={onSelectEncmId} />
Expand All @@ -84,7 +88,7 @@ export default function FrontendEncmMap({ allEncmMapData, selectedEncmMapData, s
'icon-anchor': 'center',
'symbol-placement': 'point',
'icon-rotation-alignment': 'map',
'icon-image': 'encm-idle',
'icon-image': 'encm-open',
'icon-size': ['interpolate', ['linear', 0.5], ['zoom'], 5, 0.1, 20, 0.25],
'icon-offset': [0, 0],
}}
Expand All @@ -93,4 +97,6 @@ export default function FrontendEncmMap({ allEncmMapData, selectedEncmMapData, s
)}
</OSMMap>
);

//
}
4 changes: 2 additions & 2 deletions nextjs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@carrismetropolitana/website",
"version": "2023.12.18-0928",
"version": "2024.01.03-1519",
"private": true,
"scripts": {
"dev": "next dev",
Expand Down Expand Up @@ -51,4 +51,4 @@
"postcss-simple-vars": "7.0.1",
"typescript": "5.3.3"
}
}
}
File renamed without changes
4 changes: 2 additions & 2 deletions nextjs/translations/pt.json
Original file line number Diff line number Diff line change
Expand Up @@ -711,8 +711,8 @@
"fri": "Sex",
"sat": "Sab",
"sun": "Dom",
"is_open": "Aberto",
"is_closed": "Fechado"
"is_open": "Aberto Agora",
"is_closed": "Fechado / Completo"
},
"FrontendEncmItemOccupation": {
"title": "Informação em Tempo Real",
Expand Down

0 comments on commit feb81c0

Please sign in to comment.