@@ -3,7 +3,7 @@ import Card from '../design-system/Card';
33import Typography from '../design-system/Typography' ;
44import Button from '../design-system/Button' ;
55import { colors , spacing , radii } from '../design-system/tokens' ;
6- import { Etablissement } from '../types/etablissement' ;
6+ import { Etablissement , getEtablissementName , getEtablissementTypes } from '../types/etablissement' ;
77import { Isochrone } from '../types/isochrone' ;
88import { useEffect , useState } from 'react' ;
99
@@ -30,7 +30,19 @@ const EtablissementDetails: React.FC<EtablissementDetailsProps> = ({
3030 onClose,
3131} ) => {
3232 const { t } = useTranslation ( ) ;
33- const { uai, uo_lib, type_d_etablissement, reg_nom, dep_nom, com_nom, coordonnees, color } = etablissement ;
33+ const { uai, siege_lib, implantation_lib, reg_nom, dep_nom, com_nom, coordonnees, color, services, date_ouverture } = etablissement ;
34+ const displayName = getEtablissementName ( etablissement ) ;
35+ const types = getEtablissementTypes ( etablissement ) ;
36+ const normalizedSiege = siege_lib ? siege_lib . replace ( / \s + / g, ' ' ) . trim ( ) : undefined ;
37+ const normalizedImplantation = implantation_lib ? implantation_lib . replace ( / \s + / g, ' ' ) . trim ( ) : undefined ;
38+ const servicesValue = services && services . length > 0 ? services . join ( ', ' ) : undefined ;
39+ const typeValue = types . length > 0 ? types . join ( ', ' ) : undefined ;
40+ const openingDateValue = ( ( ) => {
41+ if ( ! date_ouverture ) return undefined ;
42+ const parsed = new Date ( date_ouverture ) ;
43+ return Number . isNaN ( parsed . getTime ( ) ) ? date_ouverture : parsed . toLocaleDateString ( ) ;
44+ } ) ( ) ;
45+ const coordinatesValue = coordonnees ? `${ coordonnees . lat . toFixed ( 5 ) } , ${ coordonnees . lon . toFixed ( 5 ) } ` : undefined ;
3446
3547 const [ mounted , setMounted ] = useState ( false ) ;
3648 useEffect ( ( ) => {
@@ -60,18 +72,24 @@ const EtablissementDetails: React.FC<EtablissementDetailsProps> = ({
6072 < div style = { { display : 'flex' , alignItems : 'flex-start' , justifyContent : 'space-between' , gap : 8 } } >
6173 < div style = { { display : 'flex' , alignItems : 'center' , gap : 8 } } >
6274 < div style = { { width : 12 , height : 12 , borderRadius : 2 , background : color || '#000' } } />
63- < Typography variant = "h2" > { uo_lib } </ Typography >
75+ < Typography variant = "h2" > { displayName } </ Typography >
6476 </ div >
6577 < Button variant = "secondary" compact onClick = { onClose } > { t ( 'details.close' ) } </ Button >
6678 </ div >
6779
6880 < div style = { { marginTop : spacing . md } } >
6981 < Row label = { t ( 'details.uai' ) } value = { uai || '—' } />
70- < Row label = { t ( 'details.type' ) } value = { ( type_d_etablissement || [ ] ) . join ( ', ' ) || '—' } />
82+ { normalizedSiege && < Row label = { t ( 'details.headquarters' ) } value = { normalizedSiege } /> }
83+ { normalizedImplantation && normalizedImplantation !== displayName && (
84+ < Row label = { t ( 'details.implantation' ) } value = { normalizedImplantation } />
85+ ) }
86+ < Row label = { t ( 'details.type' ) } value = { typeValue || '—' } />
7187 < Row label = { t ( 'details.region' ) } value = { reg_nom || '—' } />
7288 < Row label = { t ( 'details.department' ) } value = { dep_nom || '—' } />
7389 < Row label = { t ( 'details.city' ) } value = { com_nom || '—' } />
74- < Row label = { t ( 'details.coordinates' ) } value = { `${ coordonnees . lat . toFixed ( 5 ) } , ${ coordonnees . lon . toFixed ( 5 ) } ` } />
90+ { servicesValue && < Row label = { t ( 'details.services' ) } value = { servicesValue } /> }
91+ { openingDateValue && < Row label = { t ( 'details.openingDate' ) } value = { openingDateValue } /> }
92+ < Row label = { t ( 'details.coordinates' ) } value = { coordinatesValue || '—' } />
7593 </ div >
7694
7795 < div style = { { marginTop : spacing . md } } >
0 commit comments