From 7ac114eb85065905a36035aa152db1fde4a2cda7 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sat, 3 Dec 2022 01:18:55 +0100 Subject: [PATCH 01/27] front: importGraou: first try --- front/public/locales/fr/graou.json | 6 ++ front/src/applications/graou/GraouImport.js | 66 +++++++++++++ front/src/applications/graou/Home.js | 30 ++++++ .../graou/components/StationSelector.js | 93 ++++++++++++++++++ front/src/applications/graou/consts.js | 2 + front/src/applications/graou/graou-logo.png | Bin 0 -> 15505 bytes front/src/applications/graou/graou.scss | 60 +++++++++++ front/src/main/App/index.js | 4 + front/src/main/Home/index.js | 4 + 9 files changed, 265 insertions(+) create mode 100644 front/public/locales/fr/graou.json create mode 100644 front/src/applications/graou/GraouImport.js create mode 100644 front/src/applications/graou/Home.js create mode 100644 front/src/applications/graou/components/StationSelector.js create mode 100644 front/src/applications/graou/consts.js create mode 100644 front/src/applications/graou/graou-logo.png create mode 100644 front/src/applications/graou/graou.scss diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/graou.json new file mode 100644 index 00000000000..c3ec5a6ba37 --- /dev/null +++ b/front/public/locales/fr/graou.json @@ -0,0 +1,6 @@ +{ + "from": "Origine", + "to": "Destination", + "import": "Importation", + "inputPlaceholder": "Nom, trigramme" +} \ No newline at end of file diff --git a/front/src/applications/graou/GraouImport.js b/front/src/applications/graou/GraouImport.js new file mode 100644 index 00000000000..7cf59cdaf95 --- /dev/null +++ b/front/src/applications/graou/GraouImport.js @@ -0,0 +1,66 @@ +import React, { useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import StationSelector, { formatStation } from './components/StationSelector'; + +export default function GraouImport() { + const { t } = useTranslation(['graou']); + const [from, setFrom] = useState(); + const [fromSearchString, setFromSearchString] = useState(''); + const [to, setTo] = useState(); + const [toSearchString, setToSearchString] = useState(''); + + return ( +
+
+
+
+
+
+

{t('from')}

+ {from ? ( +
setFrom(undefined)} + role="button" + tabIndex={0} + > + {formatStation(from)} +
+ ) : ( + + )} +
+
+
+
+
+
+

{t('to')}

+ {to ? ( +
setTo(undefined)} + role="button" + tabIndex={0} + > + {formatStation(to)} +
+ ) : ( + + )} +
+
+
+
+
+
+ ); +} diff --git a/front/src/applications/graou/Home.js b/front/src/applications/graou/Home.js new file mode 100644 index 00000000000..2f0903d2a53 --- /dev/null +++ b/front/src/applications/graou/Home.js @@ -0,0 +1,30 @@ +import React from 'react'; +import { Navigate, Route, Routes } from 'react-router-dom'; +import MastNavItemSNCF from 'common/BootstrapSNCF/MastNavItemSNCF'; +import MastNavSNCF from 'common/BootstrapSNCF/MastNavSNCF'; +import NavBarSNCF from 'common/BootstrapSNCF/NavBarSNCF'; +import { NotificationsState } from 'common/Notifications'; +import { useTranslation } from 'react-i18next'; +import { MdMoreTime } from 'react-icons/md'; +import logo from './graou-logo.png'; +import './graou.scss'; +import GraouImport from './GraouImport'; + +export default function HomeGraou() { + const { t } = useTranslation(['graou']); + return ( + <> + } /> + } + /> + + + } /> + } /> + + + + ); +} diff --git a/front/src/applications/graou/components/StationSelector.js b/front/src/applications/graou/components/StationSelector.js new file mode 100644 index 00000000000..23c03421dae --- /dev/null +++ b/front/src/applications/graou/components/StationSelector.js @@ -0,0 +1,93 @@ +import React, { useEffect, useState } from 'react'; +import PropTypes from 'prop-types'; +import { get } from 'axios'; +import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; +import { useDebounce } from 'utils/helpers'; +import { useTranslation } from 'react-i18next'; +import Loader from 'common/Loader'; +import { GRAOU_URL } from '../consts'; + +export function formatStation(stationData) { + return ( +
+
+ {stationData.code} + {stationData.localite} + {stationData.chantier} + {stationData.uic} +
+ {stationData.ligne ? ( +
+ {stationData.libelle} + {stationData.ligne} +
+ ) : null} +
+ ); +} + +export default function StationSelector(props) { + const { onSelect, term, setTerm } = props; + const { t } = useTranslation(['graou']); + const [stationsList, setStationsList] = useState(); + const [isSearching, setIsSearching] = useState(false); + const debouncedTerm = useDebounce(term, 500); + + async function getStation() { + setIsSearching(true); + try { + const params = { + q: 'stations', + term, + }; + const result = await get(`${GRAOU_URL}/api/stations.php`, { params }); + setStationsList(result.data); + setIsSearching(false); + } catch (error) { + console.log(error); + setIsSearching(false); + } + } + useEffect(() => { + if (debouncedTerm) { + getStation(); + } else { + setStationsList(undefined); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [debouncedTerm]); + + return ( + <> + setTerm(e.target.value)} + placeholder={t('inputPlaceholder')} + sm + noMargin + isInvalid={stationsList && stationsList.length === 0} + unit={stationsList && stationsList.length > 0 ? stationsList.length : false} + /> + {stationsList && stationsList.length > 0 ? ( +
+ {stationsList.map((station) => ( +
onSelect(station)}> + {formatStation(station)} +
+ ))} +
+ ) : null} + {isSearching ? : null} + + ); +} + +StationSelector.defaultProps = { + term: '', +}; + +StationSelector.propTypes = { + onSelect: PropTypes.func.isRequired, + term: PropTypes.string, + setTerm: PropTypes.func.isRequired, +}; diff --git a/front/src/applications/graou/consts.js b/front/src/applications/graou/consts.js new file mode 100644 index 00000000000..bfec2a012db --- /dev/null +++ b/front/src/applications/graou/consts.js @@ -0,0 +1,2 @@ +export const GRAOU_URL = 'http://localhost/graou'; +export const GRAOU_TOKEN = 'pouet'; diff --git a/front/src/applications/graou/graou-logo.png b/front/src/applications/graou/graou-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb5badc76be4dca18e931053bee6538c3a8f4f5 GIT binary patch literal 15505 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

j+opsQ zoo|c2<9vp;FvIi;eBh1S(0g-5ZkFWYNWX~fzg|n6god@`r?i)B&wqjTyTuw067cK{qO94Tq4)x(E{rX@ zjsa@kz(FLdBMefNm6su}j%dsz5Va{BJ5Dc`r4DDbk}f)(B+XoaByt{bIWNwkhI3lu zTk6I>j!T&;jT!xb&PZIGJurZ5v&#DMn{8LRk>thI)SRhgJ!^gnLHxsy?*k3$U2$KB zZUTRf5{AC=hYrttqtwkVsICv?O@gPwpE$Q_lCnTB8N5=%68g$|hpMsbF2yhmZaSU3 za{E?NI(KP7{b_TIyqY%popLS*po{a+wer}ig(X8=#{hkZd_BD1+jo_Z!_28THO-T><6w1eEDIgJLezL7A@&Dd2yns7(?o@1pQm7tdS_-{|Fq34YAVy>b3gIR9^~zN}{t!Rcu5LIQlOW`W z3n(Zr*+jvw>bdhfX5Eb6Q)x^zvil5+=tgLTm{BoNPkruTi0xaoQb4v_0_yVe(b6st z3u>T;_LDcm1%E=u{)z6r-?_mM)+}-(M__j6Jss$MbcfNs`;$$dPpqIj-8W%HqSc)l z0>mQ-8@V>K1)>dbdCBj-k|UvSZX7fA)pHmosy@1KOaINzy}|gVi^%_c|C0yz z;wPl)(U}aFJo@1`vW~^J=E7ggBSLX@;DG~^KzbJo#=LMEt6o zs}wV#`pad*vUIJbg3eq~G_MVWC>AZ)sZG2nQg^liZ>t5uLll(+6uXaLqhO;V>=Wi0;B&l;mLEdvC`QB9~~~FKMC5`td+VS%n7&4iHy>mx2KQwES?4%J%Bw_O-LH) zP+zH)!S3M8=Q@0&MOWv!tjcPWL{KqRz4bqk55uQ^(XE3^IPbIKb6J{h4LLe)~R0?56-?(IdU)}KJxwiB?ve_Z=C;OvZ7f2k1L|9663-AWw&!BONkt0*S zH31^W8^-veuPt_$okRm=>oLuo;%9R7jH?~k@+To!$JSm}?I>c%(WfZds#d}jnG?FFARXU z({j@9Y?19bO2~>Q7E9x#R;^SIEVqhMD2yqOl#;%C0op+}&zJJiCj~#Ro@7efa=)Nx z1fJ8XANfp*j)~a zbG&mrU#o2=8GZ&0ZLTNe3_hpTHI~bOvIt3=-WIQE%GwiN4HB3e0CEC9k#|EW$#M#m zFPq@RWj>u}o#bx8l5B`suF?kQa8G_pn2+JT^7lhE=Bmml%MasC>Nl>dHh%DGX)np| zu`C)*Gd)nJ^NG%LI z3x!{hR1`o0E*_cnpEwgSHHzl4yxq*o*ZTPQT2DfV{V`&pI)_Ab^T(YjM_x`4Sic?9 z^Zu=pMQKmw$O8#Kn1V7s?FgpjI>*+@{0N%$$N8ZLThHXAHdXwfCoae0GY#u0o>Rh` znvn}5wyIozVOKZe(Cjs5J#Mn)=nGs_jQ7OltRp&dU<)uttG4%B5$jFXy7K>)oxN(e z@f~?qp{zh-7f<2iES5p+>}JvI+5)3m14fvG-w8q^R+ElM1&(?3HBX^yQOM>FZ~Glx z=T`sJpg{OraF|=sW<8sVQ1jxql?$t8>p0@&+$D7?mpiW}|EL2-tcY@$cERgC6dHC& z&G(^$7tNMEOflb&gvh+5G28JHV#vxJ41h#tCOy01lz#q!dc8jZA{1b=dbKOE3YjhxO+ck@V zc3%EeWnMJ{-}Z2wap(f)0;3jOsq<${jYvsBv&V%IWlrau?N?$5IAXH(W4W2nA=LOm za7(WIh1!37UgB>>%+tK{3fbZQUAF8P3f0?F+!?MjX`Y6WESwn2U+nF_Y;c*Emvhg| zNYJv*!G3K$43PE+vGPaU@JCm~6)-c9I;u(fP4DA#1j`bZ3pkc`B)SOpmIx?dN&R_3 zE`EV6U!K9R*95-(?YQ_BsVgq)@{j_LNRV~KC#~Y9X&fhZ(VC{~HIZJ;-H^D!$Dn*| z`m8eo?*KghA*I|+T2-R4v>vKX5syTJY`SK*^E(F-j zF*8RTjt!rmQgoL5v94EjB)7=XGFTXc0qr) { dispatch(bootstrapOSRDConf(infraID)); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return ( @@ -54,6 +57,7 @@ export default function App() { } /> } /> } /> + } /> } /> } /> diff --git a/front/src/main/Home/index.js b/front/src/main/Home/index.js index 5cf8c515b7d..6ad7de10f81 100644 --- a/front/src/main/Home/index.js +++ b/front/src/main/Home/index.js @@ -9,6 +9,7 @@ import logo from 'assets/logo_osrd_seul_blanc.svg'; import osrdLogo from 'assets/pictures/osrd.png'; import timetablePic from 'assets/pictures/timetable.png'; import customget from 'assets/pictures/customget.png'; +import graou from 'applications/graou/graou-logo.png'; import { useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; @@ -38,6 +39,9 @@ export default function Home() {
+
+ +
From 0ee0a48c95248c674b858f7ac72182021c3a7935 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sat, 3 Dec 2022 02:26:59 +0100 Subject: [PATCH 02/27] front: importGraou: date & time added --- front/public/locales/fr/graou.json | 11 +- front/src/applications/graou/GraouImport.js | 79 +++------ .../graou/components/StationSelector.js | 10 +- front/src/applications/graou/graou.scss | 110 ++++++------ .../graou/views/GraouImportConfig.js | 167 ++++++++++++++++++ 5 files changed, 265 insertions(+), 112 deletions(-) create mode 100644 front/src/applications/graou/views/GraouImportConfig.js diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/graou.json index c3ec5a6ba37..3fbd58e1474 100644 --- a/front/public/locales/fr/graou.json +++ b/front/public/locales/fr/graou.json @@ -1,6 +1,15 @@ { + "date": "DATE", "from": "Origine", "to": "Destination", "import": "Importation", - "inputPlaceholder": "Nom, trigramme" + "inputPlaceholder": "Nom, trigramme", + "startTime": "DÉBUT", + "endTime": "FIN", + "errorMessages": { + "error": "Une erreur est survenue", + "errorNoFrom": "Vous devez renseigner une origine", + "errorNoTo": "Vous devez renseigner une destination", + "errorNoDate": "Vous devez renseigner une date" + } } \ No newline at end of file diff --git a/front/src/applications/graou/GraouImport.js b/front/src/applications/graou/GraouImport.js index 7cf59cdaf95..38676263e01 100644 --- a/front/src/applications/graou/GraouImport.js +++ b/front/src/applications/graou/GraouImport.js @@ -1,65 +1,34 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import StationSelector, { formatStation } from './components/StationSelector'; +import { get } from 'axios'; +import GraouImportConfig from 'applications/graou/views/GraouImportConfig'; export default function GraouImport() { const { t } = useTranslation(['graou']); - const [from, setFrom] = useState(); - const [fromSearchString, setFromSearchString] = useState(''); - const [to, setTo] = useState(); - const [toSearchString, setToSearchString] = useState(''); + const [config, setConfig] = useState(); + const [trainsList, setTrainList] = useState(); + + async function getTrains() { + try { + console.log(config); + } catch (error) { + console.log(error); + } + } + + useEffect(() => { + if (config) { + getTrains(); + } else { + setTrainList(undefined); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [config]); return ( -
+
-
-
-
-
-

{t('from')}

- {from ? ( -
setFrom(undefined)} - role="button" - tabIndex={0} - > - {formatStation(from)} -
- ) : ( - - )} -
-
-
-
-
-
-

{t('to')}

- {to ? ( -
setTo(undefined)} - role="button" - tabIndex={0} - > - {formatStation(to)} -
- ) : ( - - )} -
-
-
-
+
); diff --git a/front/src/applications/graou/components/StationSelector.js b/front/src/applications/graou/components/StationSelector.js index 23c03421dae..ac9d9234f3a 100644 --- a/front/src/applications/graou/components/StationSelector.js +++ b/front/src/applications/graou/components/StationSelector.js @@ -5,6 +5,7 @@ import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; import { useDebounce } from 'utils/helpers'; import { useTranslation } from 'react-i18next'; import Loader from 'common/Loader'; +import nextId from 'react-id-generator'; import { GRAOU_URL } from '../consts'; export function formatStation(stationData) { @@ -27,7 +28,7 @@ export function formatStation(stationData) { } export default function StationSelector(props) { - const { onSelect, term, setTerm } = props; + const { id, onSelect, term, setTerm } = props; const { t } = useTranslation(['graou']); const [stationsList, setStationsList] = useState(); const [isSearching, setIsSearching] = useState(false); @@ -60,18 +61,20 @@ export default function StationSelector(props) { return ( <> setTerm(e.target.value)} placeholder={t('inputPlaceholder')} sm noMargin isInvalid={stationsList && stationsList.length === 0} - unit={stationsList && stationsList.length > 0 ? stationsList.length : false} + unit={stationsList && stationsList.length > 0 ? stationsList.length.toString() : ''} /> {stationsList && stationsList.length > 0 ? (
{stationsList.map((station) => ( -
onSelect(station)}> +
onSelect(station)} key={nextId()}> {formatStation(station)}
))} @@ -90,4 +93,5 @@ StationSelector.propTypes = { onSelect: PropTypes.func.isRequired, term: PropTypes.string, setTerm: PropTypes.func.isRequired, + id: PropTypes.string.isRequired, }; diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/graou/graou.scss index 336641f00bb..065ce3dddbc 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/graou/graou.scss @@ -1,59 +1,63 @@ -.results-stations { - height: 15rem; - overflow: auto; -} -.results-stations, .result-station-selected { - position: relative; - margin-top: .5rem; - .results-station-data { - flex-grow: 1; - cursor: pointer; - border: 2px solid var(--coolgray1); - padding-top: .15rem; - margin-bottom: .25rem; - border-radius: 4px; - transition: .2s; - &:hover { - border-color: var(--coolgray7); - } - .station-data-body { - display: flex; - align-items: baseline; - padding: 0 .25rem; - height: 1.5rem; - .station-data-code { - font-size: .8rem; - width: 2rem; - } - .station-data-name { - +.graou-import { + --graougreen: #329623; + + .results-stations { + height: 15rem; + overflow: auto; + } + .results-stations, .result-station-selected { + position: relative; + margin-top: .5rem; + .results-station-data { + flex-grow: 1; + cursor: pointer; + border: 2px solid var(--coolgray1); + padding-top: .15rem; + margin-bottom: .25rem; + border-radius: 4px; + transition: .2s; + &:hover { + border-color: var(--coolgray7); } - .station-data-ch { - margin-left: .5rem; - font-weight: 500; - font-size: .8rem; + .station-data-body { + display: flex; + align-items: baseline; + padding: 0 .25rem; + height: 1.5rem; + .station-data-code { + font-size: .8rem; + width: 2rem; + } + .station-data-name { + + } + .station-data-ch { + margin-left: .5rem; + font-weight: 500; + font-size: .8rem; + } + .station-data-uic { + margin-left: auto; + font-size: .7rem; + color: var(--primary); + } } - .station-data-uic { - margin-left: auto; + .station-data-footer { + display: flex; + align-items: center; + padding: 0 .25rem; font-size: .7rem; - color: var(--primary); - } - } - .station-data-footer { - display: flex; - align-items: center; - padding: 0 .25rem; - font-size: .7rem; - background-color: var(--coolgray1); - border-radius: 0 0 4px 4px; - height: 1rem; - .station-data-line { - color: var(--coolgray9); - } - .station-data-line-number { - margin-left: auto; - font-size: .6rem; - color: var(--purple); + background-color: var(--coolgray1); + border-radius: 0 0 4px 4px; + height: 1rem; + .station-data-line { + color: var(--coolgray9); + } + .station-data-line-number { + margin-left: auto; + font-size: .6rem; + color: var(--purple); + } } } } diff --git a/front/src/applications/graou/views/GraouImportConfig.js b/front/src/applications/graou/views/GraouImportConfig.js new file mode 100644 index 00000000000..c420266234d --- /dev/null +++ b/front/src/applications/graou/views/GraouImportConfig.js @@ -0,0 +1,167 @@ +import React, { useEffect, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import PropTypes from 'prop-types'; +import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; +import StationSelector, { formatStation } from 'applications/graou/components/StationSelector'; +import { setFailure } from 'reducers/main'; +import { useDispatch } from 'react-redux'; + +function dateOfToday() { + const date = new Date(); + return date.toJSON().substring(0, 10); +} + +export default function GraouImportConfig(props) { + const { setConfig } = props; + const { t } = useTranslation(['graou']); + const [from, setFrom] = useState(); + const [fromSearchString, setFromSearchString] = useState(''); + const [to, setTo] = useState(); + const [toSearchString, setToSearchString] = useState(''); + const [date, setDate] = useState(dateOfToday()); + const [startTime, setStartTime] = useState('00:00'); + const [endTime, setEndTime] = useState('23:59'); + const dispatch = useDispatch(); + + function defineConfig() { + if (!from) { + dispatch( + setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoFrom') }) + ); + } + if (!to) { + dispatch( + setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoTo') }) + ); + } + if (!date) { + dispatch( + setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoDate') }) + ); + } + if (from && to && date) { + setConfig({ + from, + to, + date, + startTime, + endTime, + }); + } + } + + return ( +
+
+
+
+

{t('from')}

+ {from ? ( +
setFrom(undefined)} + role="button" + tabIndex={0} + > + {formatStation(from)} +
+ ) : ( + + )} +
+
+
+
+
+
+

{t('to')}

+ {to ? ( +
setTo(undefined)} + role="button" + tabIndex={0} + > + {formatStation(to)} +
+ ) : ( + + )} +
+
+
+
+
+
+

{t('datetime')}

+
+
+
+ setDate(e.target.value)} + sm + noMargin + step={0} + unit={t('date')} + /> +
+
+ + setStartTime(e.target.value)} + sm + noMargin + step={0} + unit={t('startTime')} + /> + + + setEndTime(e.target.value)} + sm + noMargin + step={0} + unit={t('endTime')} + /> + +
+
+
+ +
+
+
+
+
+
+ ); +} + +GraouImportConfig.propTypes = { + setConfig: PropTypes.func.isRequired, +}; From f750b3bbcd7f9c7f6e92f3e25f70dda0fd16195e Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sun, 4 Dec 2022 04:08:34 +0100 Subject: [PATCH 03/27] front: GraouImport: working config, working getTrainsList --- front/public/locales/fr/graou.json | 11 +- front/src/applications/graou/GraouImport.js | 25 +--- .../graou/components/GraouHelpers.js | 4 + .../graou/components/StationSelector.js | 16 ++- .../graou/components/TrainDetail.js | 27 +++++ front/src/applications/graou/graou.scss | 114 +++++++++++++++++- .../graou/views/GraouImportConfig.js | 33 +++-- .../graou/views/GraouTrainsList.js | 89 ++++++++++++++ 8 files changed, 274 insertions(+), 45 deletions(-) create mode 100644 front/src/applications/graou/components/GraouHelpers.js create mode 100644 front/src/applications/graou/components/TrainDetail.js create mode 100644 front/src/applications/graou/views/GraouTrainsList.js diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/graou.json index 3fbd58e1474..e20158019f7 100644 --- a/front/public/locales/fr/graou.json +++ b/front/public/locales/fr/graou.json @@ -8,8 +8,11 @@ "endTime": "FIN", "errorMessages": { "error": "Une erreur est survenue", - "errorNoFrom": "Vous devez renseigner une origine", - "errorNoTo": "Vous devez renseigner une destination", - "errorNoDate": "Vous devez renseigner une date" - } + "errorNoFrom": "Vous devez renseigner une origine.", + "errorNoTo": "Vous devez renseigner une destination.", + "errorNoDate": "Vous devez renseigner une date.", + "errorSameFromTo": "L'origine et la destination doivent être différentes." + }, + "noResults": "Aucun résultat", + "datetime": "Date & horaires" } \ No newline at end of file diff --git a/front/src/applications/graou/GraouImport.js b/front/src/applications/graou/GraouImport.js index 38676263e01..e49dc2882f8 100644 --- a/front/src/applications/graou/GraouImport.js +++ b/front/src/applications/graou/GraouImport.js @@ -1,34 +1,15 @@ -import React, { useEffect, useState } from 'react'; -import { useTranslation } from 'react-i18next'; -import { get } from 'axios'; +import React, { useState } from 'react'; import GraouImportConfig from 'applications/graou/views/GraouImportConfig'; +import GraouTrainsList from 'applications/graou/views/GraouTrainsList'; export default function GraouImport() { - const { t } = useTranslation(['graou']); const [config, setConfig] = useState(); - const [trainsList, setTrainList] = useState(); - - async function getTrains() { - try { - console.log(config); - } catch (error) { - console.log(error); - } - } - - useEffect(() => { - if (config) { - getTrains(); - } else { - setTrainList(undefined); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [config]); return (
+
); diff --git a/front/src/applications/graou/components/GraouHelpers.js b/front/src/applications/graou/components/GraouHelpers.js new file mode 100644 index 00000000000..c410e8521a7 --- /dev/null +++ b/front/src/applications/graou/components/GraouHelpers.js @@ -0,0 +1,4 @@ +export function seconds2hhmmss(seconds) { + const dateTime = new Date(seconds * 1000); + return dateTime.toJSON().substring(11, 19); +} diff --git a/front/src/applications/graou/components/StationSelector.js b/front/src/applications/graou/components/StationSelector.js index ac9d9234f3a..8f52cb975ed 100644 --- a/front/src/applications/graou/components/StationSelector.js +++ b/front/src/applications/graou/components/StationSelector.js @@ -1,4 +1,4 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useState, memo } from 'react'; import PropTypes from 'prop-types'; import { get } from 'axios'; import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; @@ -11,15 +11,21 @@ import { GRAOU_URL } from '../consts'; export function formatStation(stationData) { return (
-
+
{stationData.code} {stationData.localite} {stationData.chantier} {stationData.uic}
+
+ {stationData.commune} + {stationData.departement} / + {stationData.region} +
{stationData.ligne ? (
{stationData.libelle} + {stationData.pk ? PK {stationData.pk} : null} {stationData.ligne}
) : null} @@ -27,7 +33,7 @@ export function formatStation(stationData) { ); } -export default function StationSelector(props) { +function StationSelector(props) { const { id, onSelect, term, setTerm } = props; const { t } = useTranslation(['graou']); const [stationsList, setStationsList] = useState(); @@ -70,6 +76,8 @@ export default function StationSelector(props) { noMargin isInvalid={stationsList && stationsList.length === 0} unit={stationsList && stationsList.length > 0 ? stationsList.length.toString() : ''} + focus + selectAllOnFocus /> {stationsList && stationsList.length > 0 ? (
@@ -95,3 +103,5 @@ StationSelector.propTypes = { setTerm: PropTypes.func.isRequired, id: PropTypes.string.isRequired, }; + +export const MemoStationSelector = memo(StationSelector); diff --git a/front/src/applications/graou/components/TrainDetail.js b/front/src/applications/graou/components/TrainDetail.js new file mode 100644 index 00000000000..64a415452c9 --- /dev/null +++ b/front/src/applications/graou/components/TrainDetail.js @@ -0,0 +1,27 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { seconds2hhmmss } from 'applications/graou/components/GraouHelpers'; + +export default function TrainDetail(props) { + const { trainData, idx } = props; + return ( +
+ {idx} + + {trainData.num} + {trainData.origine} + + + {trainData.debut} - {trainData.fin} + + {seconds2hhmmss(trainData.duree)} + {trainData.num_transilien} + {trainData.etapes.length} +
+ ); +} + +TrainDetail.propTypes = { + trainData: PropTypes.object.isRequired, + idx: PropTypes.number.isRequired, +}; diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/graou/graou.scss index 065ce3dddbc..354abc589cd 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/graou/graou.scss @@ -1,14 +1,28 @@ .graou-import { --graougreen: #329623; + .osrd-config-item-from { + background-color: var(--green); + } + .osrd-config-item-to { + background-color: var(--yellow); + } + .osrd-config-item-datetime { + h2 { + color: var(--light); + } + background-color: var(--secondary); + } .results-stations { height: 15rem; overflow: auto; } .results-stations, .result-station-selected { + border-radius: 4px; position: relative; margin-top: .5rem; .results-station-data { + background-color: var(--white); flex-grow: 1; cursor: pointer; border: 2px solid var(--coolgray1); @@ -17,19 +31,19 @@ border-radius: 4px; transition: .2s; &:hover { - border-color: var(--coolgray7); + border-color: var(--coolgray9); } - .station-data-body { + .station-data-head { display: flex; align-items: baseline; padding: 0 .25rem; height: 1.5rem; .station-data-code { font-size: .8rem; - width: 2rem; + width: 2.25rem; } .station-data-name { - + font-size: 1.1rem; } .station-data-ch { margin-left: .5rem; @@ -42,9 +56,31 @@ color: var(--primary); } } + .station-data-localization { + display: flex; + align-items: baseline; + position: relative; + padding: 0 .25rem 0 2.5rem; + height: 1rem; + line-height: .8rem; + color: var(--coolgray9); + gap: .25rem; + .station-data-city { + font-size: .7rem; + } + .station-data-department { + text-transform: uppercase; + font-size: .6rem; + } + .station-data-region { + text-transform: uppercase; + font-size: .6rem; + } + } .station-data-footer { display: flex; align-items: center; + justify-content: space-between; padding: 0 .25rem; font-size: .7rem; background-color: var(--coolgray1); @@ -53,12 +89,80 @@ .station-data-line { color: var(--coolgray9); } - .station-data-line-number { + .station-data-pk { margin-left: auto; + margin-right: .25rem; + font-size: .6rem; + } + .station-data-line-number { font-size: .6rem; color: var(--purple); } } } } + + .graou-trainlist { + .graou-traindetail { + display: flex; + align-items: baseline; + // justify-content: space-between; + cursor: pointer; + background-color: var(--coolgray1); + border-radius: 4px; + padding: .5rem; + margin-bottom: .5rem; + transition: .2s; + &:hover { + background-color: var(--coolgray3); + } + .graou-traindetail-idx { + width: 1.5rem; + font-size: .7rem; + } + .graou-traindetail-num { + width: 4.5rem; + font-size: 1.2rem; + font-weight: bold; + color: var(--coolgray9); + height: 2rem; + .graou-traindetail-activity { + display: block; + font-weight: normal; + text-transform: uppercase; + font-size: .6rem; + line-height: .5rem; + } + } + .graou-traindetail-startend { + width: 9rem; + font-size: .9rem; + text-align: center; + } + .graou-traindetail-duration { + width: 3.5rem; + font-size: .8rem; + } + .graou-traindetail-transilien { + color: var(--blue); + font-weight: 500; + margin-left: auto; + text-transform: uppercase; + margin-right: .5rem; + font-size: .8rem; + } + .graou-traindetail-stepnb { + background-color: var(--blue); + color: var(--light); + font-weight: bold; + font-size: .8rem; + border-radius: 1rem; + padding: .5rem; + line-height: 1rem; + width: 2rem; + height: 2rem; + text-align: center; + } + } + } } \ No newline at end of file diff --git a/front/src/applications/graou/views/GraouImportConfig.js b/front/src/applications/graou/views/GraouImportConfig.js index c420266234d..0357d17de77 100644 --- a/front/src/applications/graou/views/GraouImportConfig.js +++ b/front/src/applications/graou/views/GraouImportConfig.js @@ -1,8 +1,8 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; -import StationSelector, { formatStation } from 'applications/graou/components/StationSelector'; +import { MemoStationSelector, formatStation } from 'applications/graou/components/StationSelector'; import { setFailure } from 'reducers/main'; import { useDispatch } from 'react-redux'; @@ -24,22 +24,33 @@ export default function GraouImportConfig(props) { const dispatch = useDispatch(); function defineConfig() { + let error = false; if (!from) { dispatch( setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoFrom') }) ); + error = true; } if (!to) { dispatch( setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoTo') }) ); + error = true; } if (!date) { dispatch( setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorNoDate') }) ); + error = true; } - if (from && to && date) { + if (JSON.stringify(from) === JSON.stringify(to)) { + dispatch( + setFailure({ name: t('errorMessages.error'), message: t('errorMessages.errorSameFromTo') }) + ); + error = true; + } + + if (!error) { setConfig({ from, to, @@ -54,7 +65,7 @@ export default function GraouImportConfig(props) {
-
+

{t('from')}

{from ? (
) : ( -
-
+

{t('to')}

{to ? (
) : ( -
-
+

{t('datetime')}

@@ -118,8 +129,8 @@ export default function GraouImportConfig(props) { unit={t('date')} />
-
- +
+ - + + {isSearching ? : t('noResults')} +
+ ); +} + +export default function GraouTrainsList(props) { + const { t } = useTranslation(['graou']); + const { config } = props; + const [trainsList, setTrainList] = useState(); + const [isSearching, setIsSearching] = useState(false); + + async function getTrains() { + setIsSearching(true); + try { + const params = { + q: 'trains', + config, + }; + const result = await get(`${GRAOU_URL}/api/trainschedules.php`, { params }); + console.log(result.data); + setTrainList(result.data); + setIsSearching(false); + } catch (error) { + console.log(error); + setIsSearching(false); + } + } + + useEffect(() => { + if (config) { + getTrains(); + } else { + setTrainList(undefined); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [config]); + + return trainsList && trainsList.length > 0 ? ( +
+
+
+ + {trainsList.length} {t('trainsFound')} + + +
+ {trainsList.map((train, idx) => ( + + ))} +
+
+ ) : ( +
+
+ +
+
+ ); +} + +GraouTrainsList.defaultProps = { + config: undefined, +}; + +LoadingIfSearching.propTypes = { + isSearching: PropTypes.bool.isRequired, +}; + +GraouTrainsList.propTypes = { + config: PropTypes.object, +}; From 999ed710b6340f553df8c838fb7d3e147c38fc7d Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sun, 4 Dec 2022 12:10:58 +0100 Subject: [PATCH 04/27] front: GraouImport: trainslist ok, beginning modal import --- .../graou/components/StationSelector.js | 2 +- .../graou/components/TrainDetail.js | 55 ++++-- front/src/applications/graou/graou.scss | 184 +++++++++++------- .../graou/views/GraouImportModal.js | 19 ++ .../graou/views/GraouTrainsList.js | 17 +- 5 files changed, 193 insertions(+), 84 deletions(-) create mode 100644 front/src/applications/graou/views/GraouImportModal.js diff --git a/front/src/applications/graou/components/StationSelector.js b/front/src/applications/graou/components/StationSelector.js index 8f52cb975ed..732edb7bf04 100644 --- a/front/src/applications/graou/components/StationSelector.js +++ b/front/src/applications/graou/components/StationSelector.js @@ -15,12 +15,12 @@ export function formatStation(stationData) { {stationData.code} {stationData.localite} {stationData.chantier} - {stationData.uic}
{stationData.commune} {stationData.departement} / {stationData.region} + {stationData.uic}
{stationData.ligne ? (
diff --git a/front/src/applications/graou/components/TrainDetail.js b/front/src/applications/graou/components/TrainDetail.js index 64a415452c9..8aad37df080 100644 --- a/front/src/applications/graou/components/TrainDetail.js +++ b/front/src/applications/graou/components/TrainDetail.js @@ -1,22 +1,51 @@ -import React from 'react'; +import React, { useState } from 'react'; import PropTypes from 'prop-types'; import { seconds2hhmmss } from 'applications/graou/components/GraouHelpers'; export default function TrainDetail(props) { const { trainData, idx } = props; + const [isOpened, setIsOpened] = useState(false); return ( -
- {idx} - - {trainData.num} - {trainData.origine} - - - {trainData.debut} - {trainData.fin} - - {seconds2hhmmss(trainData.duree)} - {trainData.num_transilien} - {trainData.etapes.length} +
setIsOpened(!isOpened)} + > +
+ {idx + 1} + + {trainData.num} + {trainData.origine} + + + {trainData.debut} - {trainData.fin} + + {seconds2hhmmss(trainData.duree)} + {trainData.num_transilien} + + {trainData.etapes.length - 2} + +
+
+ {trainData.etapes.map((step, stepIdx) => + // Remove origin & destination + stepIdx !== 0 && stepIdx !== trainData.etapes.length - 1 ? ( +
+ {stepIdx} + + {`${step.debut} - ${step.fin}`} + + {step.duree}s + {step.gare} +
+ ) : null + )} +
); } diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/graou/graou.scss index 354abc589cd..4920a58a5c5 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/graou/graou.scss @@ -7,10 +7,6 @@ background-color: var(--yellow); } .osrd-config-item-datetime { - h2 { - color: var(--light); - } - background-color: var(--secondary); } .results-stations { @@ -43,18 +39,15 @@ width: 2.25rem; } .station-data-name { + overflow: hidden; + white-space: nowrap; font-size: 1.1rem; } .station-data-ch { - margin-left: .5rem; + margin-left: auto; font-weight: 500; font-size: .8rem; } - .station-data-uic { - margin-left: auto; - font-size: .7rem; - color: var(--primary); - } } .station-data-localization { display: flex; @@ -76,6 +69,11 @@ text-transform: uppercase; font-size: .6rem; } + .station-data-uic { + margin-left: auto; + font-size: .6rem; + color: var(--primary); + } } .station-data-footer { display: flex; @@ -87,9 +85,13 @@ border-radius: 0 0 4px 4px; height: 1rem; .station-data-line { + overflow: hidden; + white-space: nowrap; color: var(--coolgray9); } .station-data-pk { + overflow: hidden; + white-space: nowrap; margin-left: auto; margin-right: .25rem; font-size: .6rem; @@ -103,65 +105,115 @@ } .graou-trainlist { - .graou-traindetail { + .graou-trainlist-launchbar { display: flex; - align-items: baseline; - // justify-content: space-between; - cursor: pointer; - background-color: var(--coolgray1); - border-radius: 4px; + align-items: center; padding: .5rem; - margin-bottom: .5rem; - transition: .2s; - &:hover { - background-color: var(--coolgray3); - } - .graou-traindetail-idx { - width: 1.5rem; - font-size: .7rem; - } - .graou-traindetail-num { - width: 4.5rem; - font-size: 1.2rem; - font-weight: bold; - color: var(--coolgray9); - height: 2rem; - .graou-traindetail-activity { - display: block; - font-weight: normal; - text-transform: uppercase; - font-size: .6rem; - line-height: .5rem; + border-radius: 4px 4px 0 0; + height: 2.5rem; + color: var(--light); + background-color: var(--secondary); + } + .graou-trainlist-results { + overflow: auto; + max-height: calc(100vh - 17.5rem); + .graou-traindetail { + margin-bottom: .5rem; + border: 2px solid var(--coolgray3); + border-radius: 4px; + .graou-traindetail-main { + display: flex; + align-items: baseline; + // justify-content: space-between; + cursor: pointer; + background-color: var(--coolgray1); + padding: .5rem; + transition: .2s; + &:hover { + background-color: var(--coolgray3); + } + .graou-traindetail-idx { + width: 1.5rem; + font-size: .7rem; + } + .graou-traindetail-num { + width: 4.5rem; + font-size: 1.2rem; + font-weight: bold; + color: var(--coolgray9); + height: 2rem; + .graou-traindetail-activity { + display: block; + font-weight: normal; + text-transform: uppercase; + font-size: .6rem; + line-height: .5rem; + } + } + .graou-traindetail-startend { + width: 9rem; + font-size: .9rem; + text-align: center; + } + .graou-traindetail-duration { + width: 3.5rem; + font-size: .8rem; + } + .graou-traindetail-transilien { + color: var(--blue); + font-weight: 500; + margin-left: auto; + text-transform: uppercase; + margin-right: .5rem; + font-size: .8rem; + } + .graou-traindetail-stepnb { + color: var(--light); + font-weight: bold; + font-size: .8rem; + border-radius: 1rem; + padding: .5rem; + line-height: 1rem; + width: 2rem; + height: 2rem; + text-align: center; + } + } + .graou-traindetail-steps { + overflow: auto; + max-height: 0rem; + transition: .2s; + &.opened { + max-height: 10rem; + } + .graou-traindetail-step { + display: flex; + align-items: center; + margin-left: 5rem; + &:hover { + background-color: var(--coolgray1); + } + .graou-traindetail-step-nb { + width: 2rem; + text-align: right; + padding: 0 .5rem; + font-size: .6rem; + } + .graou-traindetail-step-startend { + width: 8.5rem; + font-size: .9rem; + } + .graou-traindetail-step-duration { + width: 2rem; + margin-right: .5rem; + text-align: right; + font-size: .8rem; + } + .graou-traindetail-step-name { + font-size: .9rem; + } + } } - } - .graou-traindetail-startend { - width: 9rem; - font-size: .9rem; - text-align: center; - } - .graou-traindetail-duration { - width: 3.5rem; - font-size: .8rem; - } - .graou-traindetail-transilien { - color: var(--blue); - font-weight: 500; - margin-left: auto; - text-transform: uppercase; - margin-right: .5rem; - font-size: .8rem; - } - .graou-traindetail-stepnb { - background-color: var(--blue); - color: var(--light); - font-weight: bold; - font-size: .8rem; - border-radius: 1rem; - padding: .5rem; - line-height: 1rem; - width: 2rem; - height: 2rem; - text-align: center; } } } diff --git a/front/src/applications/graou/views/GraouImportModal.js b/front/src/applications/graou/views/GraouImportModal.js new file mode 100644 index 00000000000..19324b9f304 --- /dev/null +++ b/front/src/applications/graou/views/GraouImportModal.js @@ -0,0 +1,19 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; +import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; + +export default function GraouImportModal(props) { + const { trains } = props; + return ( + + + Coucou + + + ) +} + +GraouImportModal.propTypes = { + trains: PropTypes.array.isRequired, +}; diff --git a/front/src/applications/graou/views/GraouTrainsList.js b/front/src/applications/graou/views/GraouTrainsList.js index 99a493899c8..fe1d18e4f58 100644 --- a/front/src/applications/graou/views/GraouTrainsList.js +++ b/front/src/applications/graou/views/GraouTrainsList.js @@ -7,6 +7,7 @@ import Loader from 'common/Loader'; import { get } from 'axios'; import nextId from 'react-id-generator'; import TrainDetail from 'applications/graou/components/TrainDetail'; +import GraouImportModal from 'applications/graou/views/GraouImportModal'; import { GRAOU_URL } from '../consts'; function LoadingIfSearching(props) { @@ -58,14 +59,22 @@ export default function GraouTrainsList(props) { {trainsList.length} {t('trainsFound')} -
- {trainsList.map((train, idx) => ( - - ))} +
+ {trainsList.map((train, idx) => ( + + ))} +
+ ) : (
From 521f6aa73b4c87444e6a995809f0d737db6c5fa9 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sun, 4 Dec 2022 23:01:32 +0100 Subject: [PATCH 05/27] front: GraouImport: path complete done --- front/public/locales/fr/graou.json | 12 +- front/src/applications/graou/GraouImport.js | 29 ++- .../src/applications/graou/components/Map.js | 142 ++++++++++++ .../graou/components/TrainDetail.js | 10 +- .../graou/components/generatePathfinding.js | 33 +++ .../components/rollingstock_graou2osrd.json | 128 +++++++++++ front/src/applications/graou/graou.scss | 22 +- .../graou/views/GraouImportModal.js | 205 +++++++++++++++++- .../graou/views/GraouTrainsList.js | 11 +- 9 files changed, 576 insertions(+), 16 deletions(-) create mode 100644 front/src/applications/graou/components/Map.js create mode 100644 front/src/applications/graou/components/generatePathfinding.js create mode 100644 front/src/applications/graou/components/rollingstock_graou2osrd.json diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/graou.json index e20158019f7..189200a6a3d 100644 --- a/front/public/locales/fr/graou.json +++ b/front/public/locales/fr/graou.json @@ -14,5 +14,15 @@ "errorSameFromTo": "L'origine et la destination doivent être différentes." }, "noResults": "Aucun résultat", - "datetime": "Date & horaires" + "datetime": "Date & horaires", + "trainsFound": "trains trouvé(s)", + "launchImport": "Démarrer l'importation", + "completeTrackSectionID": "Compléter les coordonnées GPS", + "generatePaths": "Générer les pathfinding", + "generateTrainSchedules": "Générer les calculs de marche", + "status": { + "nothing": "Prêt à travailler.", + "complete": "positionnez", + "uicComplete": "Tous les lieux ont été renseignés." + } } \ No newline at end of file diff --git a/front/src/applications/graou/GraouImport.js b/front/src/applications/graou/GraouImport.js index e49dc2882f8..600c90f6ba9 100644 --- a/front/src/applications/graou/GraouImport.js +++ b/front/src/applications/graou/GraouImport.js @@ -1,16 +1,39 @@ -import React, { useState } from 'react'; +import React, { useEffect, useState } from 'react'; import GraouImportConfig from 'applications/graou/views/GraouImportConfig'; import GraouTrainsList from 'applications/graou/views/GraouTrainsList'; +import { get } from 'common/requests'; +import Loader from 'common/Loader'; + +const ROLLING_STOCK_URL = '/light_rolling_stock/'; export default function GraouImport() { const [config, setConfig] = useState(); + const [rollingStockDB, setRollingStockDB] = useState(); + + async function getRollingStockDB() { + try { + const data = await get(ROLLING_STOCK_URL, { page_size: 1000 }); + setRollingStockDB(data.results); + } catch (error) { + console.log(error); + } + } + + useEffect(() => { + if (!rollingStockDB) { + getRollingStockDB(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); - return ( + return rollingStockDB ? (
- +
+ ) : ( + ); } diff --git a/front/src/applications/graou/components/Map.js b/front/src/applications/graou/components/Map.js new file mode 100644 index 00000000000..39b5b63da4c --- /dev/null +++ b/front/src/applications/graou/components/Map.js @@ -0,0 +1,142 @@ +import React, { useEffect, useRef, useState } from 'react'; +import PropTypes from 'prop-types'; +import ReactMapGL, { AttributionControl, ScaleControl } from 'react-map-gl'; +import { point as turfPoint, featureCollection } from '@turf/helpers'; +import { useSelector } from 'react-redux'; +import turfNearestPointOnLine, { NearestPointOnLine } from '@turf/nearest-point-on-line'; +import combine from '@turf/combine'; + +/* Main data & layers */ +import Background from 'common/Map/Layers/Background'; +import VirtualLayers from 'applications/osrd/views/OSRDSimulation/VirtualLayers'; +/* Settings & Buttons */ +import RenderItinerary from 'applications/osrd/components/OSRDConfMap/RenderItinerary'; +import RenderItineraryMarkers from 'applications/osrd/components/OSRDConfMap/RenderItineraryMarkers'; +/* Interactions */ +import RenderPopup from 'applications/osrd/components/OSRDConfMap/RenderPopup'; +import SearchMarker from 'common/Map/Layers/SearchMarker'; +import SnappedMarker from 'common/Map/Layers/SnappedMarker'; +/* Objects & various */ +import TracksGeographic from 'common/Map/Layers/TracksGeographic'; +import colors from 'common/Map/Consts/colors'; +import osmBlankStyle from 'common/Map/Layers/osmBlankStyle'; +import { LAYER_GROUPS_ORDER, LAYERS } from 'config/layerOrder'; + +import 'common/Map/Map.scss'; +import OperationalPoints from 'common/Map/Layers/OperationalPoints'; +import Platforms from 'common/Map/Layers/Platforms'; + +export default function Map(props) { + const { lngLat, viewport, setViewport, setClickedFeature } = props; + const { mapSearchMarker, mapStyle } = useSelector((state) => state.map); + const [idHover, setIdHover] = useState(); + const [lngLatHover, setLngLatHover] = useState(); + const [trackSectionGeoJSON, setTrackSectionGeoJSON] = useState(); + const [snappedPoint, setSnappedPoint] = useState(); + const mapRef = useRef(null); + const scaleControlStyle = { + left: 20, + bottom: 20, + }; + + const onFeatureClick = (e) => { + if (e.features && e.features.length > 0 && e.features[0].properties.id !== undefined) { + setClickedFeature(e.features[0]); + } + }; + + const getGeoJSONFeature = (e) => { + if (e.features && e.features[0] !== undefined) { + const mergedFeatures = combine(featureCollection(e.features)); + setTrackSectionGeoJSON(mergedFeatures.features[0].geometry); + } + }; + + const onFeatureHover = (e) => { + if (e.features !== null && e?.features?.[0] !== undefined) { + getGeoJSONFeature(e); + setIdHover(e.features[0].properties.id); + setLngLatHover(e?.lngLat); + } else { + setIdHover(undefined); + setSnappedPoint(undefined); + } + }; + + useEffect(() => { + if (trackSectionGeoJSON !== undefined && lngLatHover !== undefined) { + const point = turfPoint(lngLatHover); + try { + setSnappedPoint(turfNearestPointOnLine(trackSectionGeoJSON, point)); + } catch (error) { + console.warn(`Ìmpossible to snapPoint - error ${error}`); + } + } + }, [trackSectionGeoJSON, lngLatHover]); + + return ( + + + + + + + + + + + + + + + + + {mapSearchMarker !== undefined ? ( + + ) : null} + {snappedPoint !== undefined ? : null} + + ); +} + +Map.defaultProps = { + lngLat: undefined, +}; + +Map.propTypes = { + lngLat: PropTypes.array, + viewport: PropTypes.object.isRequired, + setViewport: PropTypes.func.isRequired, + setClickedFeature: PropTypes.func.isRequired, +}; diff --git a/front/src/applications/graou/components/TrainDetail.js b/front/src/applications/graou/components/TrainDetail.js index 8aad37df080..29ca7101177 100644 --- a/front/src/applications/graou/components/TrainDetail.js +++ b/front/src/applications/graou/components/TrainDetail.js @@ -1,6 +1,9 @@ import React, { useState } from 'react'; import PropTypes from 'prop-types'; +import nextId from 'react-id-generator'; import { seconds2hhmmss } from 'applications/graou/components/GraouHelpers'; +import RollingStock2Img from 'applications/osrd/components/RollingStock/RollingStock2Img'; +import rollingstockGraou2OSRD from './rollingstock_graou2osrd.json'; export default function TrainDetail(props) { const { trainData, idx } = props; @@ -22,6 +25,11 @@ export default function TrainDetail(props) { {trainData.debut} - {trainData.fin} {seconds2hhmmss(trainData.duree)} + + + + + {trainData.num_transilien} // Remove origin & destination stepIdx !== 0 && stepIdx !== trainData.etapes.length - 1 ? ( -
+
{stepIdx} {`${step.debut} - ${step.fin}`} diff --git a/front/src/applications/graou/components/generatePathfinding.js b/front/src/applications/graou/components/generatePathfinding.js new file mode 100644 index 00000000000..7fb3b639d06 --- /dev/null +++ b/front/src/applications/graou/components/generatePathfinding.js @@ -0,0 +1,33 @@ +import rollingstockGraou2OSRD from 'applications/graou/components/rollingstock_graou2osrd.json'; + +export default function generatePathfindingPayload( + infraID, + rollingStockID, + trainsWithPathRef, + pathsDictionnary, + pointsDictionnary, + rollingStockDB +) { + const pathsToGenerate = pathsDictionnary.map((pathRef) => { + const trainFromPathRef = trainsWithPathRef.find((train) => train.num === pathRef.num); + const rollingStockFound = rollingStockDB.find( + (rollingstock) => rollingstock.name === rollingstockGraou2OSRD[trainFromPathRef.type_em] + ); + return { + [pathRef.num]: { + infra: infraID, + rolling_stocks: [rollingStockFound ? rollingStockFound.id : rollingStockID], + steps: trainFromPathRef.etapes.map((step, idx) => ({ + duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, + waypoints: [ + { + track_section: pointsDictionnary[step.uic].trackSectionId, + geo_coordinates: [step.lon, step.lat], + }, + ], + })), + }, + }; + }); + return pathsToGenerate; +} diff --git a/front/src/applications/graou/components/rollingstock_graou2osrd.json b/front/src/applications/graou/components/rollingstock_graou2osrd.json new file mode 100644 index 00000000000..60d29df8ecc --- /dev/null +++ b/front/src/applications/graou/components/rollingstock_graou2osrd.json @@ -0,0 +1,128 @@ +{ + "AGC3C": "1X76503", + "AGC4C": "1X76504", + "AGC4CLOR": "1X76504", + "AGCUM3C": "2X76503", + "AGCUM3C/4C": "2X76503", + "AGCUM4C": "2X76504", + "AM96": "SNCB1Z96", + "B5": "26000US", + "BB15000": "15000", + "BB15000B6": "15000", + "BB15000V2N": "15000", + "BB17000": "17000G", + "BB17000~RIB": "17000G", + "BB22000B5": "22200G", + "BB22200": "22200BM", + "BB22200~RRR": "22200G", + "BB22200~VR2N": "22200G", + "BB25500": "25500G", + "BB25500RRR3C": "25500G", + "BB25500RRR6C": "25500G", + "BB26000": "26000US", + "BB26000B5": "26000US", + "BB27000": "27000UM", + "BB27300": "CIM192L", + "BB27300~VB2N": "CIM192L", + "BB36000": "36000US", + "BB37000": "37000US", + "BB60000": "60000US", + "BB63000": "63001A", + "BB63500": "63500A", + "BB64600": "BB64600", + "BB66000": "66000A", + "BB66400": "66400A", + "BB66700": "66700", + "BB67200": "67200US", + "BB67300": "67300AG", + "BB67300RRR3C": "67300AG", + "BB67400": "67400A", + "BB67400CORAIL": "67400A", + "BB67400RRR3C": "67400A", + "BB67400RRR6C": "67400A", + "BB69200": "69400US", + "BB69400_Infra": "69400US", + "BB7200": "7200GH", + "BB7200B5": "7200GH", + "BB75000": "75000US", + "BB7600": "7600REV", + "BB8500": "8500G", + "BB8500~VO2N": "8500G", + "BB9300": "BB9300", + "BGC4C": "1Z81504", + "BGCUM4C": "2Z81504", + "CC72000": "72001BG", + "CC72100": "72001BG", + "CORAIL": "CORAIL", + "EUROSTAR": "TMSTEURO", + "ICE": "1ICE3", + "PPG": "1X83506", + "PPM": "1X83504", + "PPMUM": "2X83504", + "REGIO2N": "1Z56500", + "RIB": "RIB", + "RIO": "RIO", + "RRR": "RRR", + "S100": "S100", + "TGVA": "1TGVA", + "TGVD": "1TGVDUPL", + "TGVPOS": "1TGVPOS", + "TGVR": "1TGVR", + "TGVSE": "1TGVOSE", + "THALYS": "1TGVPBKA", + "TYPE13": "TYPE13", + "U25500": "1U52504", + "U52500": "1U52504", + "U53500": "1U53504", + "UM3ZGCALSLO": "3Z81504", + "UMBGC/ZGC": "2Z81504", + "V2N": "1TGV2N2", + "X2100": "X2100M10", + "X2100UM": "X2100M20", + "X2100UM3": "X2100M31", + "X2200": "X2200", + "X4750": "11X4547", + "X4900": "X4900S21", + "X72500": "1X725002", + "X73500": "1X73500", + "X73500/900UM": "2X73500", + "X73500/900UM3": "3X73500", + "X73500UM": "2X73500", + "X73500UM3": "3X73500", + "X73900": "1X73500", + "X73900UM": "2X73500", + "X73900UM3": "3X73500", + "Y8000": "Y8000AG", + "Z100": "Z100TJ", + "Z11500": "Z1150011", + "Z11500UM": "Z1150022", + "Z11500UM3": "Z1150033", + "Z150": "Z150", + "Z20500": "Z2050022", + "Z20900": "1Z20900", + "Z21500": "Z215001", + "Z21500UM": "Z215002", + "Z21500UM3": "Z215003", + "Z22500": "Z22500", + "Z23500": "TER2N", + "Z24500": "1Z24502", + "Z26500": "1Z26504", + "Z275LOR4C": "1Z27504", + "Z50000": "1Z50007", + "Z5300": "Z5300B12", + "Z5600": "1Z56500", + "Z6300": "Z630012", + "Z6400": "Z6400JUS", + "Z7300": "Z7300PP1", + "Z7500": "Z7500", + "Z800": "Z800MM", + "Z8100": "MI79US", + "Z850": "Z800MM", + "Z9500": "Z950011", + "Z9600": "Z950011", + "Z9600UM": "Z950022", + "ZGC3C": "1Z27503", + "ZGC4C": "1Z27504", + "ZGC4CALSUM": "2Z27504", + "ZGC4CUM": "2Z27504" +} \ No newline at end of file diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/graou/graou.scss index 4920a58a5c5..5f718e192f8 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/graou/graou.scss @@ -105,6 +105,7 @@ } .graou-trainlist { + position: relative; .graou-trainlist-launchbar { display: flex; align-items: center; @@ -115,9 +116,11 @@ background-color: var(--secondary); } .graou-trainlist-results { + position: relative; overflow: auto; max-height: calc(100vh - 17.5rem); .graou-traindetail { + position: relative; margin-bottom: .5rem; border: 2px solid var(--coolgray3); border-radius: 4px; @@ -159,6 +162,18 @@ width: 3.5rem; font-size: .8rem; } + .graou-traindetail-rollingstock { + align-self: flex-start; + overflow: hidden; + height: 2rem; + width: 50%; + .graou-traindetail-rollingstock-img { + display: flex; + align-items: baseline; + transform: scale(.4); + transform-origin: top; + } + } .graou-traindetail-transilien { color: var(--blue); font-weight: 500; @@ -188,7 +203,7 @@ } .graou-traindetail-step { display: flex; - align-items: center; + align-items: baseline; margin-left: 5rem; &:hover { background-color: var(--coolgray1); @@ -217,4 +232,9 @@ } } } + .automated-map { + position: relative; + width: 100%; + height: 20rem; + } } \ No newline at end of file diff --git a/front/src/applications/graou/views/GraouImportModal.js b/front/src/applications/graou/views/GraouImportModal.js index 19324b9f304..2d5d5e560eb 100644 --- a/front/src/applications/graou/views/GraouImportModal.js +++ b/front/src/applications/graou/views/GraouImportModal.js @@ -1,19 +1,212 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; +import Map from 'applications/graou/components/Map'; +import rollingstockGraou2OSRD from 'applications/graou/components/rollingstock_graou2osrd.json'; +import { useTranslation } from 'react-i18next'; +import { useSelector } from 'react-redux'; +import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; +import generatePathfindingPayload from 'applications/graou/components/generatePathfinding'; + +// Look for unique pathways by concatenation of duration & coordinates +// Compare them & create dictionnary, associate reference of unique path to each train +function refactorUniquePaths( + trains, + setTrainsWithPathRef, + setPathsDictionnary, + setPointsDictionnary +) { + const pathsDictionnary = []; + const trainsWithPathRef = []; + const pointsList = {}; + trains.forEach((train) => { + const pathString = + train.etapes + .map((step, idx) => + idx === 0 || idx === step.length - 1 + ? `${step.duree}${step.lat}${step.lon}` + : `0${step.lat}${step.lon}` + ) + .join() + rollingstockGraou2OSRD[train.type_em]; + const pathRef = pathsDictionnary.find((entry) => entry.pathString === pathString); + if (pathRef === undefined) { + pathsDictionnary.push({ + num: train.num, + pathString, + }); + trainsWithPathRef.push({ ...train, pathRef: train.num }); + } else { + trainsWithPathRef.push({ ...train, pathRef: pathRef.num }); + } + train.etapes.forEach((step) => { + pointsList[step.uic] = { lng: step.lon, lat: step.lat, name: step.gare }; + }); + }); + setTrainsWithPathRef(trainsWithPathRef); + setPathsDictionnary(pathsDictionnary); + setPointsDictionnary(pointsList); +} export default function GraouImportModal(props) { - const { trains } = props; + const { rollingStockDB, trains } = props; + const { t } = useTranslation('graou'); + const infraID = useSelector(getInfraID); + const rollingStockID = useSelector(getRollingStockID); + const timetableID = useSelector(getTimetableID); + + const [trainsWithPathRef, setTrainsWithPathRef] = useState(); + const [pathsDictionnary, setPathsDictionnary] = useState(); + const [pointsDictionnary, setPointsDictionnary] = useState(); + const [clickedFeature, setClickedFeature] = useState(); + const [uicNumberToComplete, setUicNumberToComplete] = useState(); + + const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('status.nothing')); + + const [viewport, setViewport] = useState({ + latitude: 48.86521728735368, + longitude: 2.341549498045856, + zoom: 10.257506947953921, + bearing: 0, + pitch: 0, + width: 420, + height: 320, + altitude: 1.5, + maxZoom: 24, + minZoom: 0, + maxPitch: 60, + minPitch: 0, + transitionDuration: 100, + }); + const [status, setStatus] = useState({ + uicComplete: false, + pathFindingDone: false, + trainSchedulesDone: false, + }); + + function getTrackSectionID(lat, lng) { + setViewport({ + ...viewport, + latitude: Number(lat), + longitude: Number(lng), + pitch: 0, + bearing: 0, + zoom: 18, + }); + } + + function completePaths(init = false) { + const uic2complete = Object.keys(pointsDictionnary); + const uicNumberToCompleteLocal = + uicNumberToComplete === undefined || init ? 0 : uicNumberToComplete + 1; + if (uicNumberToCompleteLocal < uic2complete.length) { + setUicNumberToComplete(uicNumberToCompleteLocal); + getTrackSectionID( + pointsDictionnary[uic2complete[uicNumberToCompleteLocal]].lat, + pointsDictionnary[uic2complete[uicNumberToCompleteLocal]].lng + ); + setWhatIAmDoingNow( + `${uicNumberToCompleteLocal}/${uic2complete.length} ${t('status.complete')} ${ + pointsDictionnary[uic2complete[uicNumberToCompleteLocal]].name + }` + ); + } else { + setWhatIAmDoingNow(t('status.uicComplete')); + setUicNumberToComplete(undefined); + setStatus({ ...status, uicComplete: true }); + } + } + + function generatePaths() { + const paths = generatePathfindingPayload( + infraID, + rollingStockID, + trainsWithPathRef, + pathsDictionnary, + pointsDictionnary, + rollingStockDB + ); + console.log('coucou', paths); + } + + useEffect(() => { + if (clickedFeature) { + const actualUic = Object.keys(pointsDictionnary)[uicNumberToComplete]; + setPointsDictionnary({ + ...pointsDictionnary, + [actualUic]: { + ...pointsDictionnary[actualUic], + trackSectionId: clickedFeature.properties.id, + }, + }); + + completePaths(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [clickedFeature]); + + useEffect(() => { + if (rollingStockDB && trains && trains.length > 0) { + refactorUniquePaths(trains, setTrainsWithPathRef, setPathsDictionnary, setPointsDictionnary); + } + }, [trains, rollingStockDB]); + return ( - - Coucou - + {pathsDictionnary && trainsWithPathRef ? ( + + + + + +
+ +
{whatIAmDoingNow}
+ {uicNumberToComplete !== undefined ? ( +
+ +
+ ) : null} +
+ ) : ( + '' + )}
- ) + ); } GraouImportModal.propTypes = { trains: PropTypes.array.isRequired, + rollingStockDB: PropTypes.array.isRequired, }; diff --git a/front/src/applications/graou/views/GraouTrainsList.js b/front/src/applications/graou/views/GraouTrainsList.js index fe1d18e4f58..e43197a3b39 100644 --- a/front/src/applications/graou/views/GraouTrainsList.js +++ b/front/src/applications/graou/views/GraouTrainsList.js @@ -9,6 +9,7 @@ import nextId from 'react-id-generator'; import TrainDetail from 'applications/graou/components/TrainDetail'; import GraouImportModal from 'applications/graou/views/GraouImportModal'; import { GRAOU_URL } from '../consts'; +import { GoRocket } from 'react-icons/go'; function LoadingIfSearching(props) { const { t } = useTranslation(['graou']); @@ -22,11 +23,12 @@ function LoadingIfSearching(props) { export default function GraouTrainsList(props) { const { t } = useTranslation(['graou']); - const { config } = props; + const { config, rollingStockDB } = props; const [trainsList, setTrainList] = useState(); const [isSearching, setIsSearching] = useState(false); async function getTrains() { + setTrainList(undefined); setIsSearching(true); try { const params = { @@ -34,7 +36,6 @@ export default function GraouTrainsList(props) { config, }; const result = await get(`${GRAOU_URL}/api/trainschedules.php`, { params }); - console.log(result.data); setTrainList(result.data); setIsSearching(false); } catch (error) { @@ -65,7 +66,8 @@ export default function GraouTrainsList(props) { data-toggle="modal" data-target="#GraouImportModal" > - {t('launchImport')} + + {t('launchImport')}
@@ -74,7 +76,7 @@ export default function GraouTrainsList(props) { ))}
- +
) : (
@@ -95,4 +97,5 @@ LoadingIfSearching.propTypes = { GraouTrainsList.propTypes = { config: PropTypes.object, + rollingStockDB: PropTypes.array.isRequired, }; From 0a0f0fec1afa4be94913526ec4a1c8f64affbcd9 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 5 Dec 2022 16:00:28 +0100 Subject: [PATCH 06/27] front: GraouImport: pathfinding ok --- front/public/locales/fr/graou.json | 11 ++- .../src/applications/graou/components/Map.js | 25 +----- .../graou/components/generatePathfinding.js | 29 +++--- .../graou/views/GraouImportModal.js | 88 +++++++++++++++---- 4 files changed, 96 insertions(+), 57 deletions(-) diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/graou.json index 189200a6a3d..c67c61e3374 100644 --- a/front/public/locales/fr/graou.json +++ b/front/public/locales/fr/graou.json @@ -11,18 +11,21 @@ "errorNoFrom": "Vous devez renseigner une origine.", "errorNoTo": "Vous devez renseigner une destination.", "errorNoDate": "Vous devez renseigner une date.", - "errorSameFromTo": "L'origine et la destination doivent être différentes." + "errorSameFromTo": "L'origine et la destination doivent être différentes.", + "unableToRetrievePathfinding": "Impossible de créer un chemin" }, "noResults": "Aucun résultat", "datetime": "Date & horaires", "trainsFound": "trains trouvé(s)", "launchImport": "Démarrer l'importation", - "completeTrackSectionID": "Compléter les coordonnées GPS", + "completeTrackSectionID": "Compléter les coordonnées", "generatePaths": "Générer les pathfinding", "generateTrainSchedules": "Générer les calculs de marche", "status": { - "nothing": "Prêt à travailler.", + "ready": "Prêt.", "complete": "positionnez", - "uicComplete": "Tous les lieux ont été renseignés." + "uicComplete": "Tous les lieux ont été renseignés.", + "pathComplete": "Tous les pathfinding ont été effectués", + "searchingPath": "Génération pathfinding" } } \ No newline at end of file diff --git a/front/src/applications/graou/components/Map.js b/front/src/applications/graou/components/Map.js index 39b5b63da4c..093a9c50cbc 100644 --- a/front/src/applications/graou/components/Map.js +++ b/front/src/applications/graou/components/Map.js @@ -3,18 +3,12 @@ import PropTypes from 'prop-types'; import ReactMapGL, { AttributionControl, ScaleControl } from 'react-map-gl'; import { point as turfPoint, featureCollection } from '@turf/helpers'; import { useSelector } from 'react-redux'; -import turfNearestPointOnLine, { NearestPointOnLine } from '@turf/nearest-point-on-line'; +import turfNearestPointOnLine from '@turf/nearest-point-on-line'; import combine from '@turf/combine'; /* Main data & layers */ import Background from 'common/Map/Layers/Background'; import VirtualLayers from 'applications/osrd/views/OSRDSimulation/VirtualLayers'; -/* Settings & Buttons */ -import RenderItinerary from 'applications/osrd/components/OSRDConfMap/RenderItinerary'; -import RenderItineraryMarkers from 'applications/osrd/components/OSRDConfMap/RenderItineraryMarkers'; -/* Interactions */ -import RenderPopup from 'applications/osrd/components/OSRDConfMap/RenderPopup'; -import SearchMarker from 'common/Map/Layers/SearchMarker'; import SnappedMarker from 'common/Map/Layers/SnappedMarker'; /* Objects & various */ import TracksGeographic from 'common/Map/Layers/TracksGeographic'; @@ -27,8 +21,8 @@ import OperationalPoints from 'common/Map/Layers/OperationalPoints'; import Platforms from 'common/Map/Layers/Platforms'; export default function Map(props) { - const { lngLat, viewport, setViewport, setClickedFeature } = props; - const { mapSearchMarker, mapStyle } = useSelector((state) => state.map); + const { viewport, setViewport, setClickedFeature } = props; + const { mapStyle } = useSelector((state) => state.map); const [idHover, setIdHover] = useState(); const [lngLatHover, setLngLatHover] = useState(); const [trackSectionGeoJSON, setTrackSectionGeoJSON] = useState(); @@ -117,25 +111,12 @@ export default function Map(props) { colors={colors[mapStyle]} layerOrder={LAYER_GROUPS_ORDER[LAYERS.OPERATIONAL_POINTS.GROUP]} /> - - - - - - {mapSearchMarker !== undefined ? ( - - ) : null} {snappedPoint !== undefined ? : null} ); } -Map.defaultProps = { - lngLat: undefined, -}; - Map.propTypes = { - lngLat: PropTypes.array, viewport: PropTypes.object.isRequired, setViewport: PropTypes.func.isRequired, setClickedFeature: PropTypes.func.isRequired, diff --git a/front/src/applications/graou/components/generatePathfinding.js b/front/src/applications/graou/components/generatePathfinding.js index 7fb3b639d06..3ad5bc0c25b 100644 --- a/front/src/applications/graou/components/generatePathfinding.js +++ b/front/src/applications/graou/components/generatePathfinding.js @@ -8,25 +8,24 @@ export default function generatePathfindingPayload( pointsDictionnary, rollingStockDB ) { - const pathsToGenerate = pathsDictionnary.map((pathRef) => { + const pathsToGenerate = {}; + pathsDictionnary.forEach((pathRef) => { const trainFromPathRef = trainsWithPathRef.find((train) => train.num === pathRef.num); const rollingStockFound = rollingStockDB.find( (rollingstock) => rollingstock.name === rollingstockGraou2OSRD[trainFromPathRef.type_em] ); - return { - [pathRef.num]: { - infra: infraID, - rolling_stocks: [rollingStockFound ? rollingStockFound.id : rollingStockID], - steps: trainFromPathRef.etapes.map((step, idx) => ({ - duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, - waypoints: [ - { - track_section: pointsDictionnary[step.uic].trackSectionId, - geo_coordinates: [step.lon, step.lat], - }, - ], - })), - }, + pathsToGenerate[pathRef.num] = { + infra: infraID, + rolling_stocks: [rollingStockFound ? rollingStockFound.id : rollingStockID], + steps: trainFromPathRef.etapes.map((step, idx) => ({ + duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, + waypoints: [ + { + track_section: pointsDictionnary[step.uic].trackSectionId, + geo_coordinate: [Number(step.lon), Number(step.lat)], + }, + ], + })), }; }); return pathsToGenerate; diff --git a/front/src/applications/graou/views/GraouImportModal.js b/front/src/applications/graou/views/GraouImportModal.js index 2d5d5e560eb..69cf4f9c0ae 100644 --- a/front/src/applications/graou/views/GraouImportModal.js +++ b/front/src/applications/graou/views/GraouImportModal.js @@ -8,6 +8,15 @@ import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; import generatePathfindingPayload from 'applications/graou/components/generatePathfinding'; +import { post } from 'common/requests'; + +const itineraryURI = '/pathfinding/'; + +const initialStatus = { + uicComplete: false, + pathFindingDone: false, + trainSchedulesDone: false, +}; // Look for unique pathways by concatenation of duration & coordinates // Compare them & create dictionnary, associate reference of unique path to each train @@ -56,12 +65,16 @@ export default function GraouImportModal(props) { const timetableID = useSelector(getTimetableID); const [trainsWithPathRef, setTrainsWithPathRef] = useState(); - const [pathsDictionnary, setPathsDictionnary] = useState(); + + // Places, points, OPs to add track section id const [pointsDictionnary, setPointsDictionnary] = useState(); const [clickedFeature, setClickedFeature] = useState(); const [uicNumberToComplete, setUicNumberToComplete] = useState(); - const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('status.nothing')); + // Path to compute + const [pathsDictionnary, setPathsDictionnary] = useState(); + + const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('status.ready')); const [viewport, setViewport] = useState({ latitude: 48.86521728735368, @@ -78,11 +91,7 @@ export default function GraouImportModal(props) { minPitch: 0, transitionDuration: 100, }); - const [status, setStatus] = useState({ - uicComplete: false, - pathFindingDone: false, - trainSchedulesDone: false, - }); + const [status, setStatus] = useState(initialStatus); function getTrackSectionID(lat, lng) { setViewport({ @@ -96,6 +105,10 @@ export default function GraouImportModal(props) { } function completePaths(init = false) { + if (init) { + setStatus({ ...status, uicComplete: false }); + setUicNumberToComplete(undefined); + } const uic2complete = Object.keys(pointsDictionnary); const uicNumberToCompleteLocal = uicNumberToComplete === undefined || init ? 0 : uicNumberToComplete + 1; @@ -117,8 +130,27 @@ export default function GraouImportModal(props) { } } - function generatePaths() { - const paths = generatePathfindingPayload( + async function launchPathfinding( + params, + pathRefNum, + pathNumberToComplete, + pathsIDs, + continuePath + ) { + try { + const itineraryCreated = await post(itineraryURI, params, {}, true); + continuePath(pathNumberToComplete + 1, { ...pathsIDs, [pathRefNum]: itineraryCreated.id }); + } catch (e) { + setWhatIAmDoingNow( + {t('errorMessages.unableToRetrievePathfinding')} + ); + setStatus(initialStatus); + console.log('ERROR', e); + } + } + + function generatePaths(pathNumberToComplete = 0, pathsIDs = {}) { + const pathfindingPayloads = generatePathfindingPayload( infraID, rollingStockID, trainsWithPathRef, @@ -126,7 +158,31 @@ export default function GraouImportModal(props) { pointsDictionnary, rollingStockDB ); - console.log('coucou', paths); + const path2complete = Object.keys(pathfindingPayloads); + if (pathNumberToComplete < path2complete.length) { + setWhatIAmDoingNow( + `${pathNumberToComplete}/${path2complete.length} ${t('status.searchingPath')} ${ + path2complete[pathNumberToComplete] + }` + ); + launchPathfinding( + pathfindingPayloads[path2complete[pathNumberToComplete]], + path2complete[pathNumberToComplete], + pathNumberToComplete, + pathsIDs, + generatePaths + ); + } else { + setWhatIAmDoingNow(t('status.pathComplete')); + setTrainsWithPathRef( + trainsWithPathRef.map((train) => ({ ...train, pathId: pathsIDs[train.pathRef] })) + ); + setStatus({ ...status, pathFindingDone: true }); + } + } + + function generateTrainSchedules() { + console.log('coucou', trainsWithPathRef); } useEffect(() => { @@ -157,7 +213,7 @@ export default function GraouImportModal(props) {
) : null} - {isSearching ? : null} + {isSearching ? : null} ); } diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/graou/graou.scss index 5f718e192f8..1dc97123025 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/graou/graou.scss @@ -1,5 +1,31 @@ .graou-import { --graougreen: #329623; + + .graou-import-global-settings { + background-color: var(--coolgray9); + border-radius: 4px; + padding: .25rem .5rem 0; + margin-bottom: .5rem; + transition: .2s; + &:hover { + background-color: var(--coolgray7); + } + .graou-import-global-settings-bar { + display: flex; + align-items: center; + justify-content: end; + cursor: pointer; + color: var(--light); + padding: 0 0 .25rem; + } + .graou-import-global-settings-items { + display: none; + &.active { + display: block; + } + } + } + .osrd-config-item-from { background-color: var(--green); } diff --git a/front/src/applications/graou/views/GraouGlobalSettings.js b/front/src/applications/graou/views/GraouGlobalSettings.js new file mode 100644 index 00000000000..2673e2d46f1 --- /dev/null +++ b/front/src/applications/graou/views/GraouGlobalSettings.js @@ -0,0 +1,49 @@ +import React, { useState } from 'react'; +import InfraSelector from 'applications/osrd/views/OSRDConfig/InfraSelector'; +import RollingStockSelector from 'applications/osrd/views/OSRDConfig/RollingStockSelector'; +import TimetableSelector from 'applications/osrd/views/OSRDConfig/TimetableSelector'; +import { useTranslation } from 'react-i18next'; + +function GraouGlobalSettings() { + const [mustUpdateTimetable, setMustUpdateTimetable] = useState(true); + const [showGlobalSettings, setShowGlobalSettings] = useState(false); + const { t } = useTranslation(['graou']); + + return ( +
+
setShowGlobalSettings(!showGlobalSettings)} + > + {showGlobalSettings ? ( + <> + {t('closeOSRDConfig')} + + + ) : ( + <> + {t('openOSRDConfig')} + + + )} +
+
+
+
+ + +
+
+ +
+
+
+
+ ); +} +export default React.memo(GraouGlobalSettings); From d8cd778f5d621953e8a4d5238010bc66a40f6c97 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 5 Dec 2022 20:13:16 +0100 Subject: [PATCH 08/27] front: OpenDataImport: switching from Graou to OpenData --- .../locales/fr/{graou.json => opendata.json} | 0 .../graou/components/TrainDetail.js | 64 ------------------ front/src/applications/graou/graou-logo.png | Bin 15505 -> 0 bytes .../applications/{graou => opendata}/Home.js | 18 ++--- .../OpenDataImport.js} | 16 ++--- .../{graou => opendata}/components/Map.js | 0 .../components/OpenDataHelpers.js} | 0 .../components/StationSelector.js | 2 +- .../opendata/components/TrainDetail.js | 64 ++++++++++++++++++ .../components/generatePathfinding.js | 4 +- .../rollingstock_opendata2osrd.json} | 0 .../{graou => opendata}/consts.js | 0 .../graou.scss => opendata/opendata.scss} | 50 +++++++------- .../views/OpenDataGlobalSettings.js} | 12 ++-- .../views/OpenDataImportConfig.js} | 8 +-- .../views/OpenDataImportModal.js} | 20 +++--- .../views/OpenDataTrainsList.js} | 26 +++---- front/src/main/App/index.js | 4 +- front/src/main/Home/index.js | 4 +- 19 files changed, 146 insertions(+), 146 deletions(-) rename front/public/locales/fr/{graou.json => opendata.json} (100%) delete mode 100644 front/src/applications/graou/components/TrainDetail.js delete mode 100644 front/src/applications/graou/graou-logo.png rename front/src/applications/{graou => opendata}/Home.js (52%) rename front/src/applications/{graou/GraouImport.js => opendata/OpenDataImport.js} (58%) rename front/src/applications/{graou => opendata}/components/Map.js (100%) rename front/src/applications/{graou/components/GraouHelpers.js => opendata/components/OpenDataHelpers.js} (100%) rename front/src/applications/{graou => opendata}/components/StationSelector.js (98%) create mode 100644 front/src/applications/opendata/components/TrainDetail.js rename front/src/applications/{graou => opendata}/components/generatePathfinding.js (81%) rename front/src/applications/{graou/components/rollingstock_graou2osrd.json => opendata/components/rollingstock_opendata2osrd.json} (100%) rename front/src/applications/{graou => opendata}/consts.js (100%) rename front/src/applications/{graou/graou.scss => opendata/opendata.scss} (85%) rename front/src/applications/{graou/views/GraouGlobalSettings.js => opendata/views/OpenDataGlobalSettings.js} (79%) rename front/src/applications/{graou/views/GraouImportConfig.js => opendata/views/OpenDataImportConfig.js} (96%) rename front/src/applications/{graou/views/GraouImportModal.js => opendata/views/OpenDataImportModal.js} (93%) rename front/src/applications/{graou/views/GraouTrainsList.js => opendata/views/OpenDataTrainsList.js} (75%) diff --git a/front/public/locales/fr/graou.json b/front/public/locales/fr/opendata.json similarity index 100% rename from front/public/locales/fr/graou.json rename to front/public/locales/fr/opendata.json diff --git a/front/src/applications/graou/components/TrainDetail.js b/front/src/applications/graou/components/TrainDetail.js deleted file mode 100644 index 29ca7101177..00000000000 --- a/front/src/applications/graou/components/TrainDetail.js +++ /dev/null @@ -1,64 +0,0 @@ -import React, { useState } from 'react'; -import PropTypes from 'prop-types'; -import nextId from 'react-id-generator'; -import { seconds2hhmmss } from 'applications/graou/components/GraouHelpers'; -import RollingStock2Img from 'applications/osrd/components/RollingStock/RollingStock2Img'; -import rollingstockGraou2OSRD from './rollingstock_graou2osrd.json'; - -export default function TrainDetail(props) { - const { trainData, idx } = props; - const [isOpened, setIsOpened] = useState(false); - return ( -
setIsOpened(!isOpened)} - > -
- {idx + 1} - - {trainData.num} - {trainData.origine} - - - {trainData.debut} - {trainData.fin} - - {seconds2hhmmss(trainData.duree)} - - - - - - {trainData.num_transilien} - - {trainData.etapes.length - 2} - -
-
- {trainData.etapes.map((step, stepIdx) => - // Remove origin & destination - stepIdx !== 0 && stepIdx !== trainData.etapes.length - 1 ? ( -
- {stepIdx} - - {`${step.debut} - ${step.fin}`} - - {step.duree}s - {step.gare} -
- ) : null - )} -
-
- ); -} - -TrainDetail.propTypes = { - trainData: PropTypes.object.isRequired, - idx: PropTypes.number.isRequired, -}; diff --git a/front/src/applications/graou/graou-logo.png b/front/src/applications/graou/graou-logo.png deleted file mode 100644 index bdb5badc76be4dca18e931053bee6538c3a8f4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15505 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

j+opsQ zoo|c2<9vp;FvIi;eBh1S(0g-5ZkFWYNWX~fzg|n6god@`r?i)B&wqjTyTuw067cK{qO94Tq4)x(E{rX@ zjsa@kz(FLdBMefNm6su}j%dsz5Va{BJ5Dc`r4DDbk}f)(B+XoaByt{bIWNwkhI3lu zTk6I>j!T&;jT!xb&PZIGJurZ5v&#DMn{8LRk>thI)SRhgJ!^gnLHxsy?*k3$U2$KB zZUTRf5{AC=hYrttqtwkVsICv?O@gPwpE$Q_lCnTB8N5=%68g$|hpMsbF2yhmZaSU3 za{E?NI(KP7{b_TIyqY%popLS*po{a+wer}ig(X8=#{hkZd_BD1+jo_Z!_28THO-T><6w1eEDIgJLezL7A@&Dd2yns7(?o@1pQm7tdS_-{|Fq34YAVy>b3gIR9^~zN}{t!Rcu5LIQlOW`W z3n(Zr*+jvw>bdhfX5Eb6Q)x^zvil5+=tgLTm{BoNPkruTi0xaoQb4v_0_yVe(b6st z3u>T;_LDcm1%E=u{)z6r-?_mM)+}-(M__j6Jss$MbcfNs`;$$dPpqIj-8W%HqSc)l z0>mQ-8@V>K1)>dbdCBj-k|UvSZX7fA)pHmosy@1KOaINzy}|gVi^%_c|C0yz z;wPl)(U}aFJo@1`vW~^J=E7ggBSLX@;DG~^KzbJo#=LMEt6o zs}wV#`pad*vUIJbg3eq~G_MVWC>AZ)sZG2nQg^liZ>t5uLll(+6uXaLqhO;V>=Wi0;B&l;mLEdvC`QB9~~~FKMC5`td+VS%n7&4iHy>mx2KQwES?4%J%Bw_O-LH) zP+zH)!S3M8=Q@0&MOWv!tjcPWL{KqRz4bqk55uQ^(XE3^IPbIKb6J{h4LLe)~R0?56-?(IdU)}KJxwiB?ve_Z=C;OvZ7f2k1L|9663-AWw&!BONkt0*S zH31^W8^-veuPt_$okRm=>oLuo;%9R7jH?~k@+To!$JSm}?I>c%(WfZds#d}jnG?FFARXU z({j@9Y?19bO2~>Q7E9x#R;^SIEVqhMD2yqOl#;%C0op+}&zJJiCj~#Ro@7efa=)Nx z1fJ8XANfp*j)~a zbG&mrU#o2=8GZ&0ZLTNe3_hpTHI~bOvIt3=-WIQE%GwiN4HB3e0CEC9k#|EW$#M#m zFPq@RWj>u}o#bx8l5B`suF?kQa8G_pn2+JT^7lhE=Bmml%MasC>Nl>dHh%DGX)np| zu`C)*Gd)nJ^NG%LI z3x!{hR1`o0E*_cnpEwgSHHzl4yxq*o*ZTPQT2DfV{V`&pI)_Ab^T(YjM_x`4Sic?9 z^Zu=pMQKmw$O8#Kn1V7s?FgpjI>*+@{0N%$$N8ZLThHXAHdXwfCoae0GY#u0o>Rh` znvn}5wyIozVOKZe(Cjs5J#Mn)=nGs_jQ7OltRp&dU<)uttG4%B5$jFXy7K>)oxN(e z@f~?qp{zh-7f<2iES5p+>}JvI+5)3m14fvG-w8q^R+ElM1&(?3HBX^yQOM>FZ~Glx z=T`sJpg{OraF|=sW<8sVQ1jxql?$t8>p0@&+$D7?mpiW}|EL2-tcY@$cERgC6dHC& z&G(^$7tNMEOflb&gvh+5G28JHV#vxJ41h#tCOy01lz#q!dc8jZA{1b=dbKOE3YjhxO+ck@V zc3%EeWnMJ{-}Z2wap(f)0;3jOsq<${jYvsBv&V%IWlrau?N?$5IAXH(W4W2nA=LOm za7(WIh1!37UgB>>%+tK{3fbZQUAF8P3f0?F+!?MjX`Y6WESwn2U+nF_Y;c*Emvhg| zNYJv*!G3K$43PE+vGPaU@JCm~6)-c9I;u(fP4DA#1j`bZ3pkc`B)SOpmIx?dN&R_3 zE`EV6U!K9R*95-(?YQ_BsVgq)@{j_LNRV~KC#~Y9X&fhZ(VC{~HIZJ;-H^D!$Dn*| z`m8eo?*KghA*I|+T2-R4v>vKX5syTJY`SK*^E(F-j zF*8RTjt!rmQgoL5v94EjB)7=XGFTXc0qr) } /> + } /> } /> - + - } /> - } /> + } /> + } /> diff --git a/front/src/applications/graou/GraouImport.js b/front/src/applications/opendata/OpenDataImport.js similarity index 58% rename from front/src/applications/graou/GraouImport.js rename to front/src/applications/opendata/OpenDataImport.js index c95be37925e..089a9b33ce4 100644 --- a/front/src/applications/graou/GraouImport.js +++ b/front/src/applications/opendata/OpenDataImport.js @@ -1,13 +1,13 @@ import React, { useEffect, useState } from 'react'; -import GraouImportConfig from 'applications/graou/views/GraouImportConfig'; -import GraouTrainsList from 'applications/graou/views/GraouTrainsList'; -import GraouGlobalSettings from 'applications/graou/views/GraouGlobalSettings'; +import OpenDataImportConfig from 'applications/opendata/views/OpenDataImportConfig'; +import OpenDataTrainsList from 'applications/opendata/views/OpenDataTrainsList'; +import OpenDataGlobalSettings from 'applications/opendata/views/OpenDataGlobalSettings'; import { get } from 'common/requests'; import Loader from 'common/Loader'; const ROLLING_STOCK_URL = '/light_rolling_stock/'; -export default function GraouImport() { +export default function OpenDataImport() { const [config, setConfig] = useState(); const [rollingStockDB, setRollingStockDB] = useState(); @@ -28,11 +28,11 @@ export default function GraouImport() { }, []); return rollingStockDB ? ( -
+
- - - + + +
) : ( diff --git a/front/src/applications/graou/components/Map.js b/front/src/applications/opendata/components/Map.js similarity index 100% rename from front/src/applications/graou/components/Map.js rename to front/src/applications/opendata/components/Map.js diff --git a/front/src/applications/graou/components/GraouHelpers.js b/front/src/applications/opendata/components/OpenDataHelpers.js similarity index 100% rename from front/src/applications/graou/components/GraouHelpers.js rename to front/src/applications/opendata/components/OpenDataHelpers.js diff --git a/front/src/applications/graou/components/StationSelector.js b/front/src/applications/opendata/components/StationSelector.js similarity index 98% rename from front/src/applications/graou/components/StationSelector.js rename to front/src/applications/opendata/components/StationSelector.js index 18bcbc265ae..7ff1974dd28 100644 --- a/front/src/applications/graou/components/StationSelector.js +++ b/front/src/applications/opendata/components/StationSelector.js @@ -35,7 +35,7 @@ export function formatStation(stationData) { function StationSelector(props) { const { id, onSelect, term, setTerm } = props; - const { t } = useTranslation(['graou']); + const { t } = useTranslation(['opendata']); const [stationsList, setStationsList] = useState(); const [isSearching, setIsSearching] = useState(false); const debouncedTerm = useDebounce(term, 500); diff --git a/front/src/applications/opendata/components/TrainDetail.js b/front/src/applications/opendata/components/TrainDetail.js new file mode 100644 index 00000000000..10dc1e4bc96 --- /dev/null +++ b/front/src/applications/opendata/components/TrainDetail.js @@ -0,0 +1,64 @@ +import React, { useState } from 'react'; +import PropTypes from 'prop-types'; +import nextId from 'react-id-generator'; +import { seconds2hhmmss } from 'applications/opendata/components/OpenDataHelpers'; +import RollingStock2Img from 'applications/osrd/components/RollingStock/RollingStock2Img'; +import rollingstockOpenData2OSRD from './rollingstock_opendata2osrd.json'; + +export default function TrainDetail(props) { + const { trainData, idx } = props; + const [isOpened, setIsOpened] = useState(false); + return ( +
setIsOpened(!isOpened)} + > +
+ {idx + 1} + + {trainData.num} + {trainData.origine} + + + {trainData.debut} - {trainData.fin} + + {seconds2hhmmss(trainData.duree)} + + + + + + {trainData.num_transilien} + + {trainData.etapes.length - 2} + +
+
+ {trainData.etapes.map((step, stepIdx) => + // Remove origin & destination + stepIdx !== 0 && stepIdx !== trainData.etapes.length - 1 ? ( +
+ {stepIdx} + + {`${step.debut} - ${step.fin}`} + + {step.duree}s + {step.gare} +
+ ) : null + )} +
+
+ ); +} + +TrainDetail.propTypes = { + trainData: PropTypes.object.isRequired, + idx: PropTypes.number.isRequired, +}; diff --git a/front/src/applications/graou/components/generatePathfinding.js b/front/src/applications/opendata/components/generatePathfinding.js similarity index 81% rename from front/src/applications/graou/components/generatePathfinding.js rename to front/src/applications/opendata/components/generatePathfinding.js index 3ad5bc0c25b..6478e7f4b89 100644 --- a/front/src/applications/graou/components/generatePathfinding.js +++ b/front/src/applications/opendata/components/generatePathfinding.js @@ -1,4 +1,4 @@ -import rollingstockGraou2OSRD from 'applications/graou/components/rollingstock_graou2osrd.json'; +import rollingstockOpenData2OSRD from 'applications/opendata/components/rollingstock_opendata2osrd.json'; export default function generatePathfindingPayload( infraID, @@ -12,7 +12,7 @@ export default function generatePathfindingPayload( pathsDictionnary.forEach((pathRef) => { const trainFromPathRef = trainsWithPathRef.find((train) => train.num === pathRef.num); const rollingStockFound = rollingStockDB.find( - (rollingstock) => rollingstock.name === rollingstockGraou2OSRD[trainFromPathRef.type_em] + (rollingstock) => rollingstock.name === rollingstockOpenData2OSRD[trainFromPathRef.type_em] ); pathsToGenerate[pathRef.num] = { infra: infraID, diff --git a/front/src/applications/graou/components/rollingstock_graou2osrd.json b/front/src/applications/opendata/components/rollingstock_opendata2osrd.json similarity index 100% rename from front/src/applications/graou/components/rollingstock_graou2osrd.json rename to front/src/applications/opendata/components/rollingstock_opendata2osrd.json diff --git a/front/src/applications/graou/consts.js b/front/src/applications/opendata/consts.js similarity index 100% rename from front/src/applications/graou/consts.js rename to front/src/applications/opendata/consts.js diff --git a/front/src/applications/graou/graou.scss b/front/src/applications/opendata/opendata.scss similarity index 85% rename from front/src/applications/graou/graou.scss rename to front/src/applications/opendata/opendata.scss index 1dc97123025..96bd689a876 100644 --- a/front/src/applications/graou/graou.scss +++ b/front/src/applications/opendata/opendata.scss @@ -1,7 +1,7 @@ -.graou-import { - --graougreen: #329623; +.opendata-import { + --opendatagreen: #329623; - .graou-import-global-settings { + .opendata-import-global-settings { background-color: var(--coolgray9); border-radius: 4px; padding: .25rem .5rem 0; @@ -10,7 +10,7 @@ &:hover { background-color: var(--coolgray7); } - .graou-import-global-settings-bar { + .opendata-import-global-settings-bar { display: flex; align-items: center; justify-content: end; @@ -18,7 +18,7 @@ color: var(--light); padding: 0 0 .25rem; } - .graou-import-global-settings-items { + .opendata-import-global-settings-items { display: none; &.active { display: block; @@ -130,9 +130,9 @@ } } - .graou-trainlist { + .opendata-trainlist { position: relative; - .graou-trainlist-launchbar { + .opendata-trainlist-launchbar { display: flex; align-items: center; padding: .5rem; @@ -141,16 +141,16 @@ color: var(--light); background-color: var(--secondary); } - .graou-trainlist-results { + .opendata-trainlist-results { position: relative; overflow: auto; max-height: calc(100vh - 17.5rem); - .graou-traindetail { + .opendata-traindetail { position: relative; margin-bottom: .5rem; border: 2px solid var(--coolgray3); border-radius: 4px; - .graou-traindetail-main { + .opendata-traindetail-main { display: flex; align-items: baseline; // justify-content: space-between; @@ -161,17 +161,17 @@ &:hover { background-color: var(--coolgray3); } - .graou-traindetail-idx { + .opendata-traindetail-idx { width: 1.5rem; font-size: .7rem; } - .graou-traindetail-num { + .opendata-traindetail-num { width: 4.5rem; font-size: 1.2rem; font-weight: bold; color: var(--coolgray9); height: 2rem; - .graou-traindetail-activity { + .opendata-traindetail-activity { display: block; font-weight: normal; text-transform: uppercase; @@ -179,28 +179,28 @@ line-height: .5rem; } } - .graou-traindetail-startend { + .opendata-traindetail-startend { width: 9rem; font-size: .9rem; text-align: center; } - .graou-traindetail-duration { + .opendata-traindetail-duration { width: 3.5rem; font-size: .8rem; } - .graou-traindetail-rollingstock { + .opendata-traindetail-rollingstock { align-self: flex-start; overflow: hidden; height: 2rem; width: 50%; - .graou-traindetail-rollingstock-img { + .opendata-traindetail-rollingstock-img { display: flex; align-items: baseline; transform: scale(.4); transform-origin: top; } } - .graou-traindetail-transilien { + .opendata-traindetail-transilien { color: var(--blue); font-weight: 500; margin-left: auto; @@ -208,7 +208,7 @@ margin-right: .5rem; font-size: .8rem; } - .graou-traindetail-stepnb { + .opendata-traindetail-stepnb { color: var(--light); font-weight: bold; font-size: .8rem; @@ -220,37 +220,37 @@ text-align: center; } } - .graou-traindetail-steps { + .opendata-traindetail-steps { overflow: auto; max-height: 0rem; transition: .2s; &.opened { max-height: 10rem; } - .graou-traindetail-step { + .opendata-traindetail-step { display: flex; align-items: baseline; margin-left: 5rem; &:hover { background-color: var(--coolgray1); } - .graou-traindetail-step-nb { + .opendata-traindetail-step-nb { width: 2rem; text-align: right; padding: 0 .5rem; font-size: .6rem; } - .graou-traindetail-step-startend { + .opendata-traindetail-step-startend { width: 8.5rem; font-size: .9rem; } - .graou-traindetail-step-duration { + .opendata-traindetail-step-duration { width: 2rem; margin-right: .5rem; text-align: right; font-size: .8rem; } - .graou-traindetail-step-name { + .opendata-traindetail-step-name { font-size: .9rem; } } diff --git a/front/src/applications/graou/views/GraouGlobalSettings.js b/front/src/applications/opendata/views/OpenDataGlobalSettings.js similarity index 79% rename from front/src/applications/graou/views/GraouGlobalSettings.js rename to front/src/applications/opendata/views/OpenDataGlobalSettings.js index 2673e2d46f1..761fe319116 100644 --- a/front/src/applications/graou/views/GraouGlobalSettings.js +++ b/front/src/applications/opendata/views/OpenDataGlobalSettings.js @@ -4,15 +4,15 @@ import RollingStockSelector from 'applications/osrd/views/OSRDConfig/RollingStoc import TimetableSelector from 'applications/osrd/views/OSRDConfig/TimetableSelector'; import { useTranslation } from 'react-i18next'; -function GraouGlobalSettings() { +function OpenDataGlobalSettings() { const [mustUpdateTimetable, setMustUpdateTimetable] = useState(true); const [showGlobalSettings, setShowGlobalSettings] = useState(false); - const { t } = useTranslation(['graou']); + const { t } = useTranslation(['opendata']); return ( -
+
setShowGlobalSettings(!showGlobalSettings)} @@ -29,7 +29,7 @@ function GraouGlobalSettings() { )}
-
+
@@ -46,4 +46,4 @@ function GraouGlobalSettings() {
); } -export default React.memo(GraouGlobalSettings); +export default React.memo(OpenDataGlobalSettings); diff --git a/front/src/applications/graou/views/GraouImportConfig.js b/front/src/applications/opendata/views/OpenDataImportConfig.js similarity index 96% rename from front/src/applications/graou/views/GraouImportConfig.js rename to front/src/applications/opendata/views/OpenDataImportConfig.js index 0357d17de77..176250014aa 100644 --- a/front/src/applications/graou/views/GraouImportConfig.js +++ b/front/src/applications/opendata/views/OpenDataImportConfig.js @@ -2,7 +2,7 @@ import React, { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; -import { MemoStationSelector, formatStation } from 'applications/graou/components/StationSelector'; +import { MemoStationSelector, formatStation } from 'applications/opendata/components/StationSelector'; import { setFailure } from 'reducers/main'; import { useDispatch } from 'react-redux'; @@ -11,9 +11,9 @@ function dateOfToday() { return date.toJSON().substring(0, 10); } -export default function GraouImportConfig(props) { +export default function OpenDataImportConfig(props) { const { setConfig } = props; - const { t } = useTranslation(['graou']); + const { t } = useTranslation(['opendata']); const [from, setFrom] = useState(); const [fromSearchString, setFromSearchString] = useState(''); const [to, setTo] = useState(); @@ -173,6 +173,6 @@ export default function GraouImportConfig(props) { ); } -GraouImportConfig.propTypes = { +OpenDataImportConfig.propTypes = { setConfig: PropTypes.func.isRequired, }; diff --git a/front/src/applications/graou/views/GraouImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js similarity index 93% rename from front/src/applications/graou/views/GraouImportModal.js rename to front/src/applications/opendata/views/OpenDataImportModal.js index 69cf4f9c0ae..51a49562d6b 100644 --- a/front/src/applications/graou/views/GraouImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -2,12 +2,12 @@ import React, { useEffect, useState } from 'react'; import PropTypes from 'prop-types'; import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; -import Map from 'applications/graou/components/Map'; -import rollingstockGraou2OSRD from 'applications/graou/components/rollingstock_graou2osrd.json'; +import Map from 'applications/opendata/components/Map'; +import rollingstockOpenData2OSRD from 'applications/opendata/components/rollingstock_opendata2osrd.json'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; -import generatePathfindingPayload from 'applications/graou/components/generatePathfinding'; +import generatePathfindingPayload from 'applications/opendata/components/generatePathfinding'; import { post } from 'common/requests'; const itineraryURI = '/pathfinding/'; @@ -37,7 +37,7 @@ function refactorUniquePaths( ? `${step.duree}${step.lat}${step.lon}` : `0${step.lat}${step.lon}` ) - .join() + rollingstockGraou2OSRD[train.type_em]; + .join() + rollingstockOpenData2OSRD[train.type_em]; const pathRef = pathsDictionnary.find((entry) => entry.pathString === pathString); if (pathRef === undefined) { pathsDictionnary.push({ @@ -57,9 +57,9 @@ function refactorUniquePaths( setPointsDictionnary(pointsList); } -export default function GraouImportModal(props) { +export default function OpenDataImportModal(props) { const { rollingStockDB, trains } = props; - const { t } = useTranslation('graou'); + const { t } = useTranslation('opendata'); const infraID = useSelector(getInfraID); const rollingStockID = useSelector(getRollingStockID); const timetableID = useSelector(getTimetableID); @@ -106,7 +106,7 @@ export default function GraouImportModal(props) { function completePaths(init = false) { if (init) { - setStatus({ ...status, uicComplete: false }); + setStatus(initialStatus); setUicNumberToComplete(undefined); } const uic2complete = Object.keys(pointsDictionnary); @@ -208,7 +208,7 @@ export default function GraouImportModal(props) { }, [trains, rollingStockDB]); return ( - + {pathsDictionnary && trainsWithPathRef ? (
-
+
{trainsList.map((train, idx) => ( ))}
- +
) : (
@@ -87,7 +87,7 @@ export default function GraouTrainsList(props) { ); } -GraouTrainsList.defaultProps = { +OpenDataTrainsList.defaultProps = { config: undefined, }; @@ -95,7 +95,7 @@ LoadingIfSearching.propTypes = { isSearching: PropTypes.bool.isRequired, }; -GraouTrainsList.propTypes = { +OpenDataTrainsList.propTypes = { config: PropTypes.object, rollingStockDB: PropTypes.array.isRequired, }; diff --git a/front/src/main/App/index.js b/front/src/main/App/index.js index d51ce08b05b..323f27a78b9 100644 --- a/front/src/main/App/index.js +++ b/front/src/main/App/index.js @@ -9,7 +9,7 @@ import HomeCarto from 'applications/carto/Home'; import HomeEditor from 'applications/editor/Home'; import HomeOSRD from 'applications/osrd/Home'; import HomeStdcm from 'applications/stdcm/Home'; -import HomeGraou from 'applications/graou/Home'; +import HomeOpenData from 'applications/opendata/Home'; import HomeCustomGET from 'applications/customget/Home'; import Loader from 'common/Loader'; import { attemptLoginOnLaunch } from 'reducers/user'; @@ -57,7 +57,7 @@ export default function App() { } /> } /> } /> - } /> + } /> } /> } /> diff --git a/front/src/main/Home/index.js b/front/src/main/Home/index.js index 6ad7de10f81..4c3b71179c9 100644 --- a/front/src/main/Home/index.js +++ b/front/src/main/Home/index.js @@ -9,7 +9,7 @@ import logo from 'assets/logo_osrd_seul_blanc.svg'; import osrdLogo from 'assets/pictures/osrd.png'; import timetablePic from 'assets/pictures/timetable.png'; import customget from 'assets/pictures/customget.png'; -import graou from 'applications/graou/graou-logo.png'; +import opendata from 'assets/pictures/customget.png'; import { useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; @@ -40,7 +40,7 @@ export default function Home() {
- +
From ff8db1899f167b098635e3e06f947bd172c9440d Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 5 Dec 2022 20:29:48 +0100 Subject: [PATCH 09/27] front: OpenDataImport: added rollingstockid to result --- .../components/generateTrainSchedules.js | 3 +++ .../opendata/views/OpenDataImportModal.js | 18 +++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 front/src/applications/opendata/components/generateTrainSchedules.js diff --git a/front/src/applications/opendata/components/generateTrainSchedules.js b/front/src/applications/opendata/components/generateTrainSchedules.js new file mode 100644 index 00000000000..073dca82e46 --- /dev/null +++ b/front/src/applications/opendata/components/generateTrainSchedules.js @@ -0,0 +1,3 @@ +export default function generateTrainSchedules(trainsWithPathRef) { + console.log('coucou', trainsWithPathRef); +} diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index 51a49562d6b..32231c22f8b 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -8,6 +8,7 @@ import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; import generatePathfindingPayload from 'applications/opendata/components/generatePathfinding'; +import generateTrainSchedules from 'applications/opendata/components/generateTrainSchedules'; import { post } from 'common/requests'; const itineraryURI = '/pathfinding/'; @@ -139,7 +140,10 @@ export default function OpenDataImportModal(props) { ) { try { const itineraryCreated = await post(itineraryURI, params, {}, true); - continuePath(pathNumberToComplete + 1, { ...pathsIDs, [pathRefNum]: itineraryCreated.id }); + continuePath(pathNumberToComplete + 1, { + ...pathsIDs, + [pathRefNum]: { pathId: itineraryCreated.id, rollingStockId: params.rolling_stocks[0] }, + }); } catch (e) { setWhatIAmDoingNow( {t('errorMessages.unableToRetrievePathfinding')} @@ -175,16 +179,16 @@ export default function OpenDataImportModal(props) { } else { setWhatIAmDoingNow(t('status.pathComplete')); setTrainsWithPathRef( - trainsWithPathRef.map((train) => ({ ...train, pathId: pathsIDs[train.pathRef] })) + trainsWithPathRef.map((train) => ({ + ...train, + pathId: pathsIDs[train.pathRef].pathId, + rollingStockId: pathsIDs[train.pathRef].rollingStockId, + })) ); setStatus({ ...status, pathFindingDone: true }); } } - function generateTrainSchedules() { - console.log('coucou', trainsWithPathRef); - } - useEffect(() => { if (clickedFeature) { const actualUic = Object.keys(pointsDictionnary)[uicNumberToComplete]; @@ -236,7 +240,7 @@ export default function OpenDataImportModal(props) { status.pathFindingDone ? '' : 'disabled' }`} type="button" - onClick={generateTrainSchedules} + onClick={() => generateTrainSchedules(trainsWithPathRef)} > 3 — {t('generateTrainSchedules')} {trains.length} From 15f6267fbf728aa56d1255b6cb668012798ad719 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 5 Dec 2022 22:35:20 +0100 Subject: [PATCH 10/27] front: OpenDataImport: it's working ! --- ...nding.js => generatePathfindingPayload.js} | 0 .../components/generateTrainSchedules.js | 3 --- .../generateTrainSchedulesPayload.js | 21 +++++++++++++++++ .../opendata/views/OpenDataImportModal.js | 23 ++++++++++++++++--- 4 files changed, 41 insertions(+), 6 deletions(-) rename front/src/applications/opendata/components/{generatePathfinding.js => generatePathfindingPayload.js} (100%) delete mode 100644 front/src/applications/opendata/components/generateTrainSchedules.js create mode 100644 front/src/applications/opendata/components/generateTrainSchedulesPayload.js diff --git a/front/src/applications/opendata/components/generatePathfinding.js b/front/src/applications/opendata/components/generatePathfindingPayload.js similarity index 100% rename from front/src/applications/opendata/components/generatePathfinding.js rename to front/src/applications/opendata/components/generatePathfindingPayload.js diff --git a/front/src/applications/opendata/components/generateTrainSchedules.js b/front/src/applications/opendata/components/generateTrainSchedules.js deleted file mode 100644 index 073dca82e46..00000000000 --- a/front/src/applications/opendata/components/generateTrainSchedules.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function generateTrainSchedules(trainsWithPathRef) { - console.log('coucou', trainsWithPathRef); -} diff --git a/front/src/applications/opendata/components/generateTrainSchedulesPayload.js b/front/src/applications/opendata/components/generateTrainSchedulesPayload.js new file mode 100644 index 00000000000..869b27971ed --- /dev/null +++ b/front/src/applications/opendata/components/generateTrainSchedulesPayload.js @@ -0,0 +1,21 @@ +import { time2sec } from 'utils/timeManipulation'; + +export default function generateTrainSchedulesPayload(trainsWithPathRef, infraID, timetableID) { + const trainSchedulesByPathID = {}; + trainsWithPathRef.forEach((train) => { + if (!trainSchedulesByPathID[train.pathId]) { + trainSchedulesByPathID[train.pathId] = { + timetable: timetableID, + path: train.pathId, + schedules: [], + }; + } + trainSchedulesByPathID[train.pathId].schedules.push({ + train_name: train.num, + rolling_stock: train.rollingStockId, + departure_time: time2sec(train.debut), + initial_speed: 0, + }); + }); + return trainSchedulesByPathID; +} diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index 32231c22f8b..02094d5ead3 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -7,9 +7,10 @@ import rollingstockOpenData2OSRD from 'applications/opendata/components/rollings import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; -import generatePathfindingPayload from 'applications/opendata/components/generatePathfinding'; -import generateTrainSchedules from 'applications/opendata/components/generateTrainSchedules'; +import generatePathfindingPayload from 'applications/opendata/components/generatePathfindingPayload'; +import generateTrainSchedulesPayload from 'applications/opendata/components/generateTrainSchedulesPayload'; import { post } from 'common/requests'; +import { scheduleURL } from 'applications/osrd/components/Simulation/consts'; const itineraryURI = '/pathfinding/'; @@ -189,6 +190,22 @@ export default function OpenDataImportModal(props) { } } + async function launchTrainSchedules(params) { + setWhatIAmDoingNow(`${t('status.calculatingTrainSchedule')}${params.path}`); + try { + await post(scheduleURL, params, {}); + setWhatIAmDoingNow(`${t('status.calculatingTrainScheduleComplete')}${params.path}`); + } catch (error) { + console.log(error); + } + } + function generateTrainSchedules() { + const payload = generateTrainSchedulesPayload(trainsWithPathRef, infraID, timetableID); + Object.values(payload).forEach((params) => { + launchTrainSchedules(params); + }); + } + useEffect(() => { if (clickedFeature) { const actualUic = Object.keys(pointsDictionnary)[uicNumberToComplete]; @@ -240,7 +257,7 @@ export default function OpenDataImportModal(props) { status.pathFindingDone ? '' : 'disabled' }`} type="button" - onClick={() => generateTrainSchedules(trainsWithPathRef)} + onClick={generateTrainSchedules} > 3 — {t('generateTrainSchedules')} {trains.length} From 9f4a0b86e692dba6226953c81776d7dd9fd093ee Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Tue, 6 Dec 2022 11:41:50 +0100 Subject: [PATCH 11/27] front: OpenDataImport: using real external serveur from Graou --- front/src/applications/opendata/consts.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/applications/opendata/consts.js b/front/src/applications/opendata/consts.js index bfec2a012db..a84ba8c65e7 100644 --- a/front/src/applications/opendata/consts.js +++ b/front/src/applications/opendata/consts.js @@ -1,2 +1,2 @@ -export const GRAOU_URL = 'http://localhost/graou'; +export const GRAOU_URL = 'https://graou.info'; export const GRAOU_TOKEN = 'pouet'; From cc3387a3a08582c0e55e45a258b964231e38ea55 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Wed, 7 Dec 2022 09:25:20 +0100 Subject: [PATCH 12/27] front: OpenDataImport: some corrections --- front/src/applications/opendata/consts.js | 1 + front/src/applications/opendata/views/OpenDataTrainsList.js | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/front/src/applications/opendata/consts.js b/front/src/applications/opendata/consts.js index a84ba8c65e7..798d019ffb1 100644 --- a/front/src/applications/opendata/consts.js +++ b/front/src/applications/opendata/consts.js @@ -1,2 +1,3 @@ export const GRAOU_URL = 'https://graou.info'; +// export const GRAOU_URL = 'http://localhost/graou'; export const GRAOU_TOKEN = 'pouet'; diff --git a/front/src/applications/opendata/views/OpenDataTrainsList.js b/front/src/applications/opendata/views/OpenDataTrainsList.js index 16ba93803ff..629cb799713 100644 --- a/front/src/applications/opendata/views/OpenDataTrainsList.js +++ b/front/src/applications/opendata/views/OpenDataTrainsList.js @@ -1,15 +1,13 @@ import React, { useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import PropTypes from 'prop-types'; -import { setFailure } from 'reducers/main'; -import { useDispatch } from 'react-redux'; import Loader from 'common/Loader'; import { get } from 'axios'; import nextId from 'react-id-generator'; import TrainDetail from 'applications/opendata/components/TrainDetail'; import OpenDataImportModal from 'applications/opendata/views/OpenDataImportModal'; -import { GRAOU_URL } from '../consts'; import { GoRocket } from 'react-icons/go'; +import { GRAOU_URL } from '../consts'; function LoadingIfSearching(props) { const { t } = useTranslation(['opendata']); From 96d17e47f9544c435dc47b99ee7462ac71b49998 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sat, 10 Dec 2022 22:46:51 +0100 Subject: [PATCH 13/27] front: OpenDataImport: adapt map to maplibre migration --- .../applications/opendata/components/Map.js | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/front/src/applications/opendata/components/Map.js b/front/src/applications/opendata/components/Map.js index 093a9c50cbc..5f289b9e7d0 100644 --- a/front/src/applications/opendata/components/Map.js +++ b/front/src/applications/opendata/components/Map.js @@ -1,10 +1,10 @@ import React, { useEffect, useRef, useState } from 'react'; import PropTypes from 'prop-types'; +import maplibregl from 'maplibre-gl'; import ReactMapGL, { AttributionControl, ScaleControl } from 'react-map-gl'; -import { point as turfPoint, featureCollection } from '@turf/helpers'; +import { point as turfPoint } from '@turf/helpers'; import { useSelector } from 'react-redux'; import turfNearestPointOnLine from '@turf/nearest-point-on-line'; -import combine from '@turf/combine'; /* Main data & layers */ import Background from 'common/Map/Layers/Background'; @@ -19,11 +19,11 @@ import { LAYER_GROUPS_ORDER, LAYERS } from 'config/layerOrder'; import 'common/Map/Map.scss'; import OperationalPoints from 'common/Map/Layers/OperationalPoints'; import Platforms from 'common/Map/Layers/Platforms'; +import { getMapMouseEventNearestFeature } from 'utils/mapboxHelper'; export default function Map(props) { const { viewport, setViewport, setClickedFeature } = props; const { mapStyle } = useSelector((state) => state.map); - const [idHover, setIdHover] = useState(); const [lngLatHover, setLngLatHover] = useState(); const [trackSectionGeoJSON, setTrackSectionGeoJSON] = useState(); const [snappedPoint, setSnappedPoint] = useState(); @@ -34,25 +34,28 @@ export default function Map(props) { }; const onFeatureClick = (e) => { - if (e.features && e.features.length > 0 && e.features[0].properties.id !== undefined) { - setClickedFeature(e.features[0]); + const result = getMapMouseEventNearestFeature(e); + if ( + result && + result.feature.properties && + result.feature.properties.id && + result.feature.geometry.type === 'LineString' + ) { + setClickedFeature(result.feature); } }; - const getGeoJSONFeature = (e) => { - if (e.features && e.features[0] !== undefined) { - const mergedFeatures = combine(featureCollection(e.features)); - setTrackSectionGeoJSON(mergedFeatures.features[0].geometry); - } - }; - - const onFeatureHover = (e) => { - if (e.features !== null && e?.features?.[0] !== undefined) { - getGeoJSONFeature(e); - setIdHover(e.features[0].properties.id); - setLngLatHover(e?.lngLat); + const onMoveGetFeature = (e) => { + const result = getMapMouseEventNearestFeature(e); + if ( + result && + result.feature.properties && + result.feature.properties.id && + result.feature.geometry.type === 'LineString' + ) { + setTrackSectionGeoJSON(result.feature.geometry); + setLngLatHover(result.nearest); } else { - setIdHover(undefined); setSnappedPoint(undefined); } }; @@ -75,15 +78,14 @@ export default function Map(props) { style={{ cursor: 'pointer' }} width="100%" height="100%" + mapLib={maplibregl} mapStyle={osmBlankStyle} - onViewportChange={setViewport} - clickRadius={10} + onMove={(e) => setViewport(e.viewState)} + onMouseMove={(e) => onMoveGetFeature(e)} attributionControl={false} // Defined below onClick={onFeatureClick} - onHover={onFeatureHover} interactiveLayerIds={['chartis/tracks-geo/main']} - touchRotate - asyncRender + touchZoomRotate > Date: Sun, 11 Dec 2022 12:55:39 +0100 Subject: [PATCH 14/27] front: OpenDataImport: cleaning timetableselector a little --- front/public/locales/fr/opendata.json | 7 + .../applications/opendata/OpenDataImport.js | 12 +- front/src/applications/opendata/opendata.scss | 4 +- .../opendata/views/OpenDataGlobalSettings.js | 23 ++- .../opendata/views/OpenDataImportModal.js | 131 ++++++++++++------ .../opendata/views/OpenDataTrainsList.js | 9 +- .../TimetableSelectorModal.js | 3 +- .../osrd/views/OSRDConfig/AddTrainSchedule.js | 6 +- .../views/OSRDConfig/TimetableSelector.js | 62 ++++++--- 9 files changed, 176 insertions(+), 81 deletions(-) diff --git a/front/public/locales/fr/opendata.json b/front/public/locales/fr/opendata.json index 63b0c92d26e..5f30a43d4e2 100644 --- a/front/public/locales/fr/opendata.json +++ b/front/public/locales/fr/opendata.json @@ -22,7 +22,14 @@ "openOSRDConfig": "Infra / Table horaire / Matériel", "startTime": "DÉBUT", "status": { + "calculatingTrainSchedule": "Calcul de marche en cours...", + "calculatingTrainScheduleComplete": "Calcul de marche terminé", + "calculatingTrainScheduleError": "Le calcul de marche a échoué", "complete": "positionnez", + "missingInfra": "Vous devez renseigner une infrastructure", + "missingRollingStock": "Vous devez choisir un matériel roulant par défaut", + "missingTimetable": "Vous devez choisir une grille horaire", + "noImportationPossible": "L'importation n'est pas possible pour l'instant :", "pathComplete": "Tous les pathfinding ont été effectués", "ready": "Prêt.", "searchingPath": "Génération pathfinding", diff --git a/front/src/applications/opendata/OpenDataImport.js b/front/src/applications/opendata/OpenDataImport.js index 089a9b33ce4..09355d5a77f 100644 --- a/front/src/applications/opendata/OpenDataImport.js +++ b/front/src/applications/opendata/OpenDataImport.js @@ -10,6 +10,7 @@ const ROLLING_STOCK_URL = '/light_rolling_stock/'; export default function OpenDataImport() { const [config, setConfig] = useState(); const [rollingStockDB, setRollingStockDB] = useState(); + const [mustUpdateTimetable, setMustUpdateTimetable] = useState(true); async function getRollingStockDB() { try { @@ -31,8 +32,15 @@ export default function OpenDataImport() {
- - + +
) : ( diff --git a/front/src/applications/opendata/opendata.scss b/front/src/applications/opendata/opendata.scss index 96bd689a876..85dcd88f327 100644 --- a/front/src/applications/opendata/opendata.scss +++ b/front/src/applications/opendata/opendata.scss @@ -13,7 +13,7 @@ .opendata-import-global-settings-bar { display: flex; align-items: center; - justify-content: end; + justify-content: flex-end; cursor: pointer; color: var(--light); padding: 0 0 .25rem; @@ -32,8 +32,6 @@ .osrd-config-item-to { background-color: var(--yellow); } - .osrd-config-item-datetime { - } .results-stations { height: 15rem; diff --git a/front/src/applications/opendata/views/OpenDataGlobalSettings.js b/front/src/applications/opendata/views/OpenDataGlobalSettings.js index 761fe319116..9e98a33978e 100644 --- a/front/src/applications/opendata/views/OpenDataGlobalSettings.js +++ b/front/src/applications/opendata/views/OpenDataGlobalSettings.js @@ -1,12 +1,20 @@ import React, { useState } from 'react'; +import PropTypes from 'prop-types'; import InfraSelector from 'applications/osrd/views/OSRDConfig/InfraSelector'; import RollingStockSelector from 'applications/osrd/views/OSRDConfig/RollingStockSelector'; import TimetableSelector from 'applications/osrd/views/OSRDConfig/TimetableSelector'; import { useTranslation } from 'react-i18next'; +import { useSelector } from 'react-redux'; +import { getInfraID, getRollingStockID, getTimetableID } from 'reducers/osrdconf/selectors'; -function OpenDataGlobalSettings() { - const [mustUpdateTimetable, setMustUpdateTimetable] = useState(true); - const [showGlobalSettings, setShowGlobalSettings] = useState(false); +function OpenDataGlobalSettings(props) { + const { mustUpdateTimetable, setMustUpdateTimetable } = props; + const infraID = useSelector(getInfraID); + const rollingStockID = useSelector(getRollingStockID); + const timetableID = useSelector(getTimetableID); + const [showGlobalSettings, setShowGlobalSettings] = useState( + !infraID || !timetableID || !rollingStockID + ); const { t } = useTranslation(['opendata']); return ( @@ -29,7 +37,9 @@ function OpenDataGlobalSettings() { )}
-
+
@@ -47,3 +57,8 @@ function OpenDataGlobalSettings() { ); } export default React.memo(OpenDataGlobalSettings); + +OpenDataGlobalSettings.propTypes = { + mustUpdateTimetable: PropTypes.bool.isRequired, + setMustUpdateTimetable: PropTypes.func.isRequired, +}; diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index 02094d5ead3..f3cf52c9d15 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -11,6 +11,7 @@ import generatePathfindingPayload from 'applications/opendata/components/generat import generateTrainSchedulesPayload from 'applications/opendata/components/generateTrainSchedulesPayload'; import { post } from 'common/requests'; import { scheduleURL } from 'applications/osrd/components/Simulation/consts'; +import ModalFooterSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalFooterSNCF'; const itineraryURI = '/pathfinding/'; @@ -60,8 +61,8 @@ function refactorUniquePaths( } export default function OpenDataImportModal(props) { - const { rollingStockDB, trains } = props; - const { t } = useTranslation('opendata'); + const { rollingStockDB, setMustUpdateTimetable, trains } = props; + const { t } = useTranslation('translation', 'opendata'); const infraID = useSelector(getInfraID); const rollingStockID = useSelector(getRollingStockID); const timetableID = useSelector(getTimetableID); @@ -76,7 +77,7 @@ export default function OpenDataImportModal(props) { // Path to compute const [pathsDictionnary, setPathsDictionnary] = useState(); - const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('status.ready')); + const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('opendata:status.ready')); const [viewport, setViewport] = useState({ latitude: 48.86521728735368, @@ -95,6 +96,22 @@ export default function OpenDataImportModal(props) { }); const [status, setStatus] = useState(initialStatus); + function testMissingInfos() { + const messages = []; + if (!infraID) messages.push(t('opendata:status.missingInfra')); + if (!rollingStockID) messages.push(t('opendata:status.missingRollingStock')); + if (!timetableID) messages.push(t('opendata:status.missingTimetable')); + if (messages.length > 0) { + setWhatIAmDoingNow( + + {[t('opendata:status.noImportationPossible'), ''].concat(messages).join('\n')} + + ); + } else { + setWhatIAmDoingNow(t('opendata:status.ready')); + } + } + function getTrackSectionID(lat, lng) { setViewport({ ...viewport, @@ -121,12 +138,12 @@ export default function OpenDataImportModal(props) { pointsDictionnary[uic2complete[uicNumberToCompleteLocal]].lng ); setWhatIAmDoingNow( - `${uicNumberToCompleteLocal}/${uic2complete.length} ${t('status.complete')} ${ + `${uicNumberToCompleteLocal}/${uic2complete.length} ${t('opendata:status.complete')} ${ pointsDictionnary[uic2complete[uicNumberToCompleteLocal]].name }` ); } else { - setWhatIAmDoingNow(t('status.uicComplete')); + setWhatIAmDoingNow(t('opendata:status.uicComplete')); setUicNumberToComplete(undefined); setStatus({ ...status, uicComplete: true }); } @@ -147,7 +164,9 @@ export default function OpenDataImportModal(props) { }); } catch (e) { setWhatIAmDoingNow( - {t('errorMessages.unableToRetrievePathfinding')} + + {t('opendata:errorMessages.unableToRetrievePathfinding')} + ); setStatus(initialStatus); console.log('ERROR', e); @@ -166,7 +185,7 @@ export default function OpenDataImportModal(props) { const path2complete = Object.keys(pathfindingPayloads); if (pathNumberToComplete < path2complete.length) { setWhatIAmDoingNow( - `${pathNumberToComplete}/${path2complete.length} ${t('status.searchingPath')} ${ + `${pathNumberToComplete}/${path2complete.length} ${t('opendata:status.searchingPath')} ${ path2complete[pathNumberToComplete] }` ); @@ -178,7 +197,7 @@ export default function OpenDataImportModal(props) { generatePaths ); } else { - setWhatIAmDoingNow(t('status.pathComplete')); + setWhatIAmDoingNow(t('opendata:status.pathComplete')); setTrainsWithPathRef( trainsWithPathRef.map((train) => ({ ...train, @@ -191,19 +210,25 @@ export default function OpenDataImportModal(props) { } async function launchTrainSchedules(params) { - setWhatIAmDoingNow(`${t('status.calculatingTrainSchedule')}${params.path}`); try { await post(scheduleURL, params, {}); - setWhatIAmDoingNow(`${t('status.calculatingTrainScheduleComplete')}${params.path}`); + return `${t('opendata:status.calculatingTrainScheduleComplete')} (${params.path})`; } catch (error) { console.log(error); } + return `${t('opendata:status.calculatingTrainScheduleError')} (${params.path})`; } - function generateTrainSchedules() { + async function generateTrainSchedules() { const payload = generateTrainSchedulesPayload(trainsWithPathRef, infraID, timetableID); - Object.values(payload).forEach((params) => { - launchTrainSchedules(params); - }); + setWhatIAmDoingNow(`${t('opendata:status.calculatingTrainSchedule')}`); + const messages = []; + // eslint-disable-next-line no-restricted-syntax + for (const [idx, params] of Object.values(payload).entries()) { + // eslint-disable-next-line no-await-in-loop + messages.push(`${await launchTrainSchedules(params)} ${idx + 1}/${payload.length}`); + setWhatIAmDoingNow(messages.join('\n')); + } + setMustUpdateTimetable(true); } useEffect(() => { @@ -228,44 +253,54 @@ export default function OpenDataImportModal(props) { } }, [trains, rollingStockDB]); + useEffect(() => { + testMissingInfos(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [infraID, rollingStockID, timetableID]); + return ( {pathsDictionnary && trainsWithPathRef ? ( - - - + {!infraID || !timetableID || !rollingStockID ? null : ( + <> + + + -
+
+ + )}
{whatIAmDoingNow}
+ {uicNumberToComplete !== undefined ? (
+ + ); } @@ -286,4 +326,5 @@ export default function OpenDataImportModal(props) { OpenDataImportModal.propTypes = { trains: PropTypes.array.isRequired, rollingStockDB: PropTypes.array.isRequired, + setMustUpdateTimetable: PropTypes.func.isRequired, }; diff --git a/front/src/applications/opendata/views/OpenDataTrainsList.js b/front/src/applications/opendata/views/OpenDataTrainsList.js index 629cb799713..7682b5b9599 100644 --- a/front/src/applications/opendata/views/OpenDataTrainsList.js +++ b/front/src/applications/opendata/views/OpenDataTrainsList.js @@ -21,7 +21,7 @@ function LoadingIfSearching(props) { export default function OpenDataTrainsList(props) { const { t } = useTranslation(['opendata']); - const { config, rollingStockDB } = props; + const { config, rollingStockDB, setMustUpdateTimetable } = props; const [trainsList, setTrainList] = useState(); const [isSearching, setIsSearching] = useState(false); @@ -74,7 +74,11 @@ export default function OpenDataTrainsList(props) { ))}
- +
) : (
@@ -96,4 +100,5 @@ LoadingIfSearching.propTypes = { OpenDataTrainsList.propTypes = { config: PropTypes.object, rollingStockDB: PropTypes.array.isRequired, + setMustUpdateTimetable: PropTypes.func.isRequired, }; diff --git a/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js b/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js index 256ec2dc70a..a0773a79bd6 100644 --- a/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js +++ b/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js @@ -65,7 +65,8 @@ export default function TimetableSelectorModal() { }; try { - await post(timetableURL, params, {}); + const result = await post(timetableURL, params, {}); + dispatch(updateTimetableID(result.id)); } catch (e) { console.log('ERROR', e); } diff --git a/front/src/applications/osrd/views/OSRDConfig/AddTrainSchedule.js b/front/src/applications/osrd/views/OSRDConfig/AddTrainSchedule.js index b40410c7106..de25c1b0721 100644 --- a/front/src/applications/osrd/views/OSRDConfig/AddTrainSchedule.js +++ b/front/src/applications/osrd/views/OSRDConfig/AddTrainSchedule.js @@ -15,7 +15,7 @@ import trainNameWithNum from 'applications/osrd/components/AddTrainSchedule/trai import { scheduleURL } from 'applications/osrd/components/Simulation/consts'; export default function AddTrainSchedule(props) { - const { mustUpdateTimetable, setMustUpdateTimetable } = props; + const { setMustUpdateTimetable } = props; const [name, setName] = useState(undefined); const [isWorking, setIsWorking] = useState(false); const [trainCount, setTrainCount] = useState(1); @@ -68,7 +68,7 @@ export default function AddTrainSchedule(props) { }) ); } - setMustUpdateTimetable(!mustUpdateTimetable); + setMustUpdateTimetable(true); } }; @@ -79,6 +79,7 @@ export default function AddTrainSchedule(props) { const handleNameChange = useCallback((newName) => { setName(newName); debouncedUpdateName(newName); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { @@ -148,6 +149,5 @@ export default function AddTrainSchedule(props) { } AddTrainSchedule.propTypes = { - mustUpdateTimetable: PropTypes.bool.isRequired, setMustUpdateTimetable: PropTypes.func.isRequired, }; diff --git a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js index d716cc69971..3036f9137c7 100644 --- a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js +++ b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js @@ -15,19 +15,22 @@ import { updateTimetableID } from 'reducers/osrdconf'; const timetableURL = '/timetable/'; export default function TimetableSelector(props) { - const { mustUpdateTimetable } = props; - const [selectedTimetable, setselectedTimetable] = useState(undefined); + const { mustUpdateTimetable, setMustUpdateTimetable } = props; + const [selectedTimetable, setSelectedTimetable] = useState(undefined); + const [isWorking, setIsWorking] = useState(false); const [trainList, setTrainList] = useState(undefined); const { timetableID } = useSelector((state) => state.osrdconf); const dispatch = useDispatch(); const { t } = useTranslation(); const getTimetable = async (id) => { + setIsWorking(true); try { const timetableQuery = await get(`${timetableURL}${id}/`, {}); timetableQuery.train_schedules.sort((a, b) => a.departure_time > b.departure_time); - setselectedTimetable(timetableQuery); + setSelectedTimetable(timetableQuery); setTrainList(timetableQuery.train_schedules); + setIsWorking(false); } catch (e) { dispatch(updateTimetableID(undefined)); dispatch( @@ -37,6 +40,7 @@ export default function TimetableSelector(props) { }) ); console.log('ERROR', e); + setIsWorking(false); } }; @@ -65,33 +69,48 @@ export default function TimetableSelector(props) {
)); + useEffect(() => { + if (timetableID !== undefined && mustUpdateTimetable) { + getTimetable(timetableID); + setMustUpdateTimetable(false); + } else { + setSelectedTimetable(undefined); + setMustUpdateTimetable(false); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [mustUpdateTimetable]); + useEffect(() => { if (timetableID !== undefined) { getTimetable(timetableID); } else { - setselectedTimetable(undefined); + setSelectedTimetable(undefined); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [timetableID, mustUpdateTimetable]); - let timeTable = {t('osrdconf:noTimetable')}; - if (timetableID !== undefined && selectedTimetable === undefined) { - timeTable = ( - - - - ); - } else if (selectedTimetable !== undefined) { - timeTable = ( - <> - {selectedTimetable.name} - {selectedTimetable.id} - - {`${selectedTimetable.train_schedules.length} ${t('translation:common.train(s)')}`} + const timeTable = () => { + if (isWorking) { + return ( + + - - ); - } + ); + } + if (selectedTimetable !== undefined) { + return ( + <> + {selectedTimetable.name} + {selectedTimetable.id} + + {`${selectedTimetable.train_schedules.length} ${t('translation:common.train(s)')}`} + + + ); + } + return {t('osrdconf:noTimetable')}; + }; + return ( <>
@@ -120,4 +139,5 @@ export default function TimetableSelector(props) { TimetableSelector.propTypes = { mustUpdateTimetable: PropTypes.bool.isRequired, + setMustUpdateTimetable: PropTypes.func.isRequired, }; From 4dddb93568ed8e51c01942cfa198a14b4bb9076c Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sun, 11 Dec 2022 14:35:29 +0100 Subject: [PATCH 15/27] front: OpenDataImport: direct links to simulation & stdcm after import --- front/public/locales/fr/opendata.json | 3 + .../customget/views/SpaceTimeChart.js | 6 ++ .../applications/customget/views/TrainList.js | 3 + .../opendata/components/OpenDataHelpers.js | 41 +++++++++ front/src/applications/opendata/consts.js | 25 +++++- .../opendata/views/OpenDataImportModal.js | 85 +++---------------- .../views/OpenDataImportModalFooter.js | 44 ++++++++++ .../RollingStock/RollingStock2Img.js | 8 +- 8 files changed, 141 insertions(+), 74 deletions(-) create mode 100644 front/src/applications/opendata/views/OpenDataImportModalFooter.js diff --git a/front/public/locales/fr/opendata.json b/front/public/locales/fr/opendata.json index 5f30a43d4e2..19fa5a976e2 100644 --- a/front/public/locales/fr/opendata.json +++ b/front/public/locales/fr/opendata.json @@ -15,6 +15,8 @@ "from": "Origine", "generatePaths": "Générer les pathfinding", "generateTrainSchedules": "Générer les calculs de marche", + "goToSimulation": "Résultats de simulation", + "goToSTDCM": "Sillon de dernière minute", "import": "Importation", "inputPlaceholder": "Nom, trigramme", "launchImport": "Démarrer l'importation", @@ -24,6 +26,7 @@ "status": { "calculatingTrainSchedule": "Calcul de marche en cours...", "calculatingTrainScheduleComplete": "Calcul de marche terminé", + "calculatingTrainScheduleCompleteAll": "Tous les calculs de marche sont terminé.", "calculatingTrainScheduleError": "Le calcul de marche a échoué", "complete": "positionnez", "missingInfra": "Vous devez renseigner une infrastructure", diff --git a/front/src/applications/customget/views/SpaceTimeChart.js b/front/src/applications/customget/views/SpaceTimeChart.js index ed56a37c529..4ceec2930d2 100644 --- a/front/src/applications/customget/views/SpaceTimeChart.js +++ b/front/src/applications/customget/views/SpaceTimeChart.js @@ -179,11 +179,13 @@ export default function SpaceTimeChart(props) { setTimeout(() => { dispatch(updateMustRedraw(true)); }, 0); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { // ADN, entire fonction operation is subject to one condition, so aopply this condition before OR write clear and first condition to return (do nothing) offsetTimeByDragging(dragOffset); + // eslint-disable-next-line react-hooks/exhaustive-deps }, [dragOffset]); useEffect(() => { @@ -196,6 +198,7 @@ export default function SpaceTimeChart(props) { drawAllTrains(resetChart); handleWindowResize(CHART_ID, dispatch, drawAllTrains, isResizeActive, setResizeActive); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [mustRedraw, rotate, selectedTrain, consolidatedSimulation]); // ADN: trigger a redraw on every simulation change. This is the right pattern. @@ -208,6 +211,7 @@ export default function SpaceTimeChart(props) { drawAllTrains(resetChart, true, newDataSimulation); handleWindowResize(CHART_ID, dispatch, drawAllTrains, isResizeActive, setResizeActive); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [simulation.trains]); useEffect(() => { @@ -221,6 +225,7 @@ export default function SpaceTimeChart(props) { ); dispatch(updatePositionValues(newPositionValues)); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [chart, mustRedraw]); useEffect(() => { @@ -236,6 +241,7 @@ export default function SpaceTimeChart(props) { timePosition ); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [positionValues]); useEffect(() => { diff --git a/front/src/applications/customget/views/TrainList.js b/front/src/applications/customget/views/TrainList.js index 4f4b97fc6bf..9ec3f8bfa3b 100644 --- a/front/src/applications/customget/views/TrainList.js +++ b/front/src/applications/customget/views/TrainList.js @@ -163,6 +163,7 @@ export default function TrainsList() { setOnInput(false); dispatch(updateMustRedraw(true)); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [debouncedInputName]); useEffect(() => { @@ -170,12 +171,14 @@ export default function TrainsList() { setOnInput(false); dispatch(updateMustRedraw(true)); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [debouncedInputTime]); useEffect(() => { if (!onInput) { setFormattedList(formatTrainsList()); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedTrain, departureArrivalTimes, trainNameClickedIDX, typeOfInputFocused]); return ( diff --git a/front/src/applications/opendata/components/OpenDataHelpers.js b/front/src/applications/opendata/components/OpenDataHelpers.js index c410e8521a7..e5255fed4a1 100644 --- a/front/src/applications/opendata/components/OpenDataHelpers.js +++ b/front/src/applications/opendata/components/OpenDataHelpers.js @@ -1,4 +1,45 @@ +import rollingstockOpenData2OSRD from 'applications/opendata/components/rollingstock_opendata2osrd.json'; + export function seconds2hhmmss(seconds) { const dateTime = new Date(seconds * 1000); return dateTime.toJSON().substring(11, 19); } + +// Look for unique pathways by concatenation of duration & coordinates +// Compare them & create dictionnary, associate reference of unique path to each train +export function refactorUniquePaths( + trains, + setTrainsWithPathRef, + setPathsDictionnary, + setPointsDictionnary +) { + const pathsDictionnary = []; + const trainsWithPathRef = []; + const pointsList = {}; + trains.forEach((train) => { + const pathString = + train.etapes + .map((step, idx) => + idx === 0 || idx === step.length - 1 + ? `${step.duree}${step.lat}${step.lon}` + : `0${step.lat}${step.lon}` + ) + .join() + rollingstockOpenData2OSRD[train.type_em]; + const pathRef = pathsDictionnary.find((entry) => entry.pathString === pathString); + if (pathRef === undefined) { + pathsDictionnary.push({ + num: train.num, + pathString, + }); + trainsWithPathRef.push({ ...train, pathRef: train.num }); + } else { + trainsWithPathRef.push({ ...train, pathRef: pathRef.num }); + } + train.etapes.forEach((step) => { + pointsList[step.uic] = { lng: step.lon, lat: step.lat, name: step.gare }; + }); + }); + setTrainsWithPathRef(trainsWithPathRef); + setPathsDictionnary(pathsDictionnary); + setPointsDictionnary(pointsList); +} diff --git a/front/src/applications/opendata/consts.js b/front/src/applications/opendata/consts.js index 798d019ffb1..b5cd2094072 100644 --- a/front/src/applications/opendata/consts.js +++ b/front/src/applications/opendata/consts.js @@ -1,3 +1,26 @@ export const GRAOU_URL = 'https://graou.info'; // export const GRAOU_URL = 'http://localhost/graou'; -export const GRAOU_TOKEN = 'pouet'; + +export const initialViewport = { + latitude: 48.86521728735368, + longitude: 2.341549498045856, + zoom: 10.257506947953921, + bearing: 0, + pitch: 0, + width: 420, + height: 320, + altitude: 1.5, + maxZoom: 24, + minZoom: 0, + maxPitch: 60, + minPitch: 0, + transitionDuration: 100, +}; + +export const initialStatus = { + uicComplete: false, + pathFindingDone: false, + trainSchedulesDone: false, +}; + +export const itineraryURI = '/pathfinding/'; diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index f3cf52c9d15..8dfc7e05178 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -3,7 +3,6 @@ import PropTypes from 'prop-types'; import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; import Map from 'applications/opendata/components/Map'; -import rollingstockOpenData2OSRD from 'applications/opendata/components/rollingstock_opendata2osrd.json'; import { useTranslation } from 'react-i18next'; import { useSelector } from 'react-redux'; import { getRollingStockID, getInfraID, getTimetableID } from 'reducers/osrdconf/selectors'; @@ -11,54 +10,9 @@ import generatePathfindingPayload from 'applications/opendata/components/generat import generateTrainSchedulesPayload from 'applications/opendata/components/generateTrainSchedulesPayload'; import { post } from 'common/requests'; import { scheduleURL } from 'applications/osrd/components/Simulation/consts'; -import ModalFooterSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalFooterSNCF'; - -const itineraryURI = '/pathfinding/'; - -const initialStatus = { - uicComplete: false, - pathFindingDone: false, - trainSchedulesDone: false, -}; - -// Look for unique pathways by concatenation of duration & coordinates -// Compare them & create dictionnary, associate reference of unique path to each train -function refactorUniquePaths( - trains, - setTrainsWithPathRef, - setPathsDictionnary, - setPointsDictionnary -) { - const pathsDictionnary = []; - const trainsWithPathRef = []; - const pointsList = {}; - trains.forEach((train) => { - const pathString = - train.etapes - .map((step, idx) => - idx === 0 || idx === step.length - 1 - ? `${step.duree}${step.lat}${step.lon}` - : `0${step.lat}${step.lon}` - ) - .join() + rollingstockOpenData2OSRD[train.type_em]; - const pathRef = pathsDictionnary.find((entry) => entry.pathString === pathString); - if (pathRef === undefined) { - pathsDictionnary.push({ - num: train.num, - pathString, - }); - trainsWithPathRef.push({ ...train, pathRef: train.num }); - } else { - trainsWithPathRef.push({ ...train, pathRef: pathRef.num }); - } - train.etapes.forEach((step) => { - pointsList[step.uic] = { lng: step.lon, lat: step.lat, name: step.gare }; - }); - }); - setTrainsWithPathRef(trainsWithPathRef); - setPathsDictionnary(pathsDictionnary); - setPointsDictionnary(pointsList); -} +import { initialViewport, initialStatus, itineraryURI } from 'applications/opendata/consts'; +import OpenDataImportModalFooter from './OpenDataImportModalFooter'; +import { refactorUniquePaths } from '../components/OpenDataHelpers'; export default function OpenDataImportModal(props) { const { rollingStockDB, setMustUpdateTimetable, trains } = props; @@ -79,21 +33,7 @@ export default function OpenDataImportModal(props) { const [whatIAmDoingNow, setWhatIAmDoingNow] = useState(t('opendata:status.ready')); - const [viewport, setViewport] = useState({ - latitude: 48.86521728735368, - longitude: 2.341549498045856, - zoom: 10.257506947953921, - bearing: 0, - pitch: 0, - width: 420, - height: 320, - altitude: 1.5, - maxZoom: 24, - minZoom: 0, - maxPitch: 60, - minPitch: 0, - transitionDuration: 100, - }); + const [viewport, setViewport] = useState(initialViewport); const [status, setStatus] = useState(initialStatus); function testMissingInfos() { @@ -222,13 +162,20 @@ export default function OpenDataImportModal(props) { const payload = generateTrainSchedulesPayload(trainsWithPathRef, infraID, timetableID); setWhatIAmDoingNow(`${t('opendata:status.calculatingTrainSchedule')}`); const messages = []; + const promisesList = []; // eslint-disable-next-line no-restricted-syntax for (const [idx, params] of Object.values(payload).entries()) { // eslint-disable-next-line no-await-in-loop - messages.push(`${await launchTrainSchedules(params)} ${idx + 1}/${payload.length}`); + const message = await launchTrainSchedules(params); + promisesList.push(message); + messages.push(`${message} ${idx + 1}/${Object.values(payload).length}`); setWhatIAmDoingNow(messages.join('\n')); } - setMustUpdateTimetable(true); + Promise.all(promisesList).then(() => { + setStatus({ ...status, trainSchedulesDone: true }); + setMustUpdateTimetable(true); + setWhatIAmDoingNow(t('opandata:status.calculatingTrainScheduleCompleteAll')); + }); } useEffect(() => { @@ -314,11 +261,7 @@ export default function OpenDataImportModal(props) { ) : ( '' )} - - - + ); } diff --git a/front/src/applications/opendata/views/OpenDataImportModalFooter.js b/front/src/applications/opendata/views/OpenDataImportModalFooter.js new file mode 100644 index 00000000000..5d4977b2cad --- /dev/null +++ b/front/src/applications/opendata/views/OpenDataImportModalFooter.js @@ -0,0 +1,44 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { useTranslation } from 'react-i18next'; +import ModalFooterSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalFooterSNCF'; +import { useNavigate } from 'react-router-dom'; + +export default function OpenDataImportModalFooter(props) { + const { status } = props; + const { t } = useTranslation('translation', 'opendata'); + const navigate = useNavigate(); + return ( + +
+ {Object.values(status).every((el) => el) ? ( +
+ + +
+ ) : null} + +
+
+ ); +} + +OpenDataImportModalFooter.propTypes = { + status: PropTypes.object.isRequired, +}; diff --git a/front/src/applications/osrd/components/RollingStock/RollingStock2Img.js b/front/src/applications/osrd/components/RollingStock/RollingStock2Img.js index 3c433cbb0ae..ecc749b45ef 100644 --- a/front/src/applications/osrd/components/RollingStock/RollingStock2Img.js +++ b/front/src/applications/osrd/components/RollingStock/RollingStock2Img.js @@ -12,13 +12,17 @@ function cleanGifName(gifName) { export default function RollingStock2Img(props) { const { name } = props; - return mlgTraffic[name] + return name && mlgTraffic[name] ? mlgTraffic[name].map((gif) => ( )) : null; } +RollingStock2Img.defaultProps = { + name: undefined, +}; + RollingStock2Img.propTypes = { - name: PropTypes.string.isRequired, + name: PropTypes.string, }; From 5f174b19f7701a86b1937a25867cd04f9d84e629 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Sun, 11 Dec 2022 16:52:02 +0100 Subject: [PATCH 16/27] front: OpenDataImport: first pass to make pathfinding by OPs trigram working (and it's working !) --- front/public/locales/fr/opendata.json | 1 + .../components/generatePathfindingPayload.js | 31 ++++++--- .../opendata/views/OpenDataImportModal.js | 66 ++++++++++++++++--- 3 files changed, 78 insertions(+), 20 deletions(-) diff --git a/front/public/locales/fr/opendata.json b/front/public/locales/fr/opendata.json index 19fa5a976e2..d6436cd0c79 100644 --- a/front/public/locales/fr/opendata.json +++ b/front/public/locales/fr/opendata.json @@ -14,6 +14,7 @@ }, "from": "Origine", "generatePaths": "Générer les pathfinding", + "generatePathsAuto": "Compléter et générer les pathfinding automatiquement", "generateTrainSchedules": "Générer les calculs de marche", "goToSimulation": "Résultats de simulation", "goToSTDCM": "Sillon de dernière minute", diff --git a/front/src/applications/opendata/components/generatePathfindingPayload.js b/front/src/applications/opendata/components/generatePathfindingPayload.js index 6478e7f4b89..fba0b7952bb 100644 --- a/front/src/applications/opendata/components/generatePathfindingPayload.js +++ b/front/src/applications/opendata/components/generatePathfindingPayload.js @@ -1,12 +1,31 @@ import rollingstockOpenData2OSRD from 'applications/opendata/components/rollingstock_opendata2osrd.json'; +function formatSteps(pointsDictionnary, trainFromPathRef, autoComplete) { + if (autoComplete) { + return trainFromPathRef.etapes.map((step, idx) => ({ + duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, + op_trigram: step.code, + })); + } + return trainFromPathRef.etapes.map((step, idx) => ({ + duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, + waypoints: [ + { + track_section: pointsDictionnary[step.uic].trackSectionId, + geo_coordinate: [Number(step.lon), Number(step.lat)], + }, + ], + })); +} + export default function generatePathfindingPayload( infraID, rollingStockID, trainsWithPathRef, pathsDictionnary, pointsDictionnary, - rollingStockDB + rollingStockDB, + autoComplete ) { const pathsToGenerate = {}; pathsDictionnary.forEach((pathRef) => { @@ -17,15 +36,7 @@ export default function generatePathfindingPayload( pathsToGenerate[pathRef.num] = { infra: infraID, rolling_stocks: [rollingStockFound ? rollingStockFound.id : rollingStockID], - steps: trainFromPathRef.etapes.map((step, idx) => ({ - duration: idx === 0 || idx === trainFromPathRef.etapes.length - 1 ? 0 : step.duree, - waypoints: [ - { - track_section: pointsDictionnary[step.uic].trackSectionId, - geo_coordinate: [Number(step.lon), Number(step.lat)], - }, - ], - })), + steps: formatSteps(pointsDictionnary, trainFromPathRef, autoComplete), }; }); return pathsToGenerate; diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index 8dfc7e05178..d2fd6e4af2c 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -14,6 +14,16 @@ import { initialViewport, initialStatus, itineraryURI } from 'applications/opend import OpenDataImportModalFooter from './OpenDataImportModalFooter'; import { refactorUniquePaths } from '../components/OpenDataHelpers'; +/* METHOD + * + * 1: complete data in interactive way, proposing user to select position of each point/OP + * OR automatically use pathfindin/op endpoint to choose a path + * 2: generate missing paths with new datas (or skipped part if automatically generated in phase 1) + * 3: calculate trainSchedules and add them to the selected timetable + * 4: two links come visible: stdcm or simulation + * + */ + export default function OpenDataImportModal(props) { const { rollingStockDB, setMustUpdateTimetable, trains } = props; const { t } = useTranslation('translation', 'opendata'); @@ -63,6 +73,10 @@ export default function OpenDataImportModal(props) { }); } + // + // 1 COMPLETE DATA INTERACTIVE WAY + // + function completePaths(init = false) { if (init) { setStatus(initialStatus); @@ -89,19 +103,30 @@ export default function OpenDataImportModal(props) { } } + // + // 2 GENERATE PATHS (autocomplete to automatically look for OPs) + // + async function launchPathfinding( params, pathRefNum, pathNumberToComplete, pathsIDs, - continuePath + continuePath, + autoComplete ) { try { - const itineraryCreated = await post(itineraryURI, params, {}, true); - continuePath(pathNumberToComplete + 1, { - ...pathsIDs, - [pathRefNum]: { pathId: itineraryCreated.id, rollingStockId: params.rolling_stocks[0] }, - }); + const itineraryCreated = autoComplete + ? await post(`${itineraryURI}op/`, params, {}, true) + : await post(itineraryURI, params, {}, true); + continuePath( + pathNumberToComplete + 1, + { + ...pathsIDs, + [pathRefNum]: { pathId: itineraryCreated.id, rollingStockId: params.rolling_stocks[0] }, + }, + autoComplete + ); } catch (e) { setWhatIAmDoingNow( @@ -113,15 +138,20 @@ export default function OpenDataImportModal(props) { } } - function generatePaths(pathNumberToComplete = 0, pathsIDs = {}) { + function generatePaths(pathNumberToComplete = 0, pathsIDs = {}, autoComplete = false) { + if (autoComplete && pathNumberToComplete === 0) + setStatus({ ...initialStatus, uicComplete: true }); + const pathfindingPayloads = generatePathfindingPayload( infraID, rollingStockID, trainsWithPathRef, pathsDictionnary, pointsDictionnary, - rollingStockDB + rollingStockDB, + autoComplete ); + const path2complete = Object.keys(pathfindingPayloads); if (pathNumberToComplete < path2complete.length) { setWhatIAmDoingNow( @@ -134,7 +164,8 @@ export default function OpenDataImportModal(props) { path2complete[pathNumberToComplete], pathNumberToComplete, pathsIDs, - generatePaths + generatePaths, + autoComplete ); } else { setWhatIAmDoingNow(t('opendata:status.pathComplete')); @@ -149,6 +180,10 @@ export default function OpenDataImportModal(props) { } } + // + // 3 CALCULATE TRAINS SCHEDULES + // + async function launchTrainSchedules(params) { try { await post(scheduleURL, params, {}); @@ -174,7 +209,7 @@ export default function OpenDataImportModal(props) { Promise.all(promisesList).then(() => { setStatus({ ...status, trainSchedulesDone: true }); setMustUpdateTimetable(true); - setWhatIAmDoingNow(t('opandata:status.calculatingTrainScheduleCompleteAll')); + setWhatIAmDoingNow(t('opendata:status.calculatingTrainScheduleCompleteAll')); }); } @@ -221,6 +256,17 @@ export default function OpenDataImportModal(props) { 1 — {t('opendata:completeTrackSectionID')} {Object.keys(pointsDictionnary).length} +
{t('opendata:or')}
+
{timetableID !== undefined && trainList !== undefined && trainList.length > 0 ? ( diff --git a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.scss b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.scss index 022dce5d586..e26c25c4551 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.scss +++ b/front/src/applications/osrd/views/OSRDSimulation/OSRDSimulation.scss @@ -45,6 +45,7 @@ select.sm { } .osrd-simulation-map { + position: relative; width: 100%; height: 50vh; .btn-map-container { @@ -53,7 +54,7 @@ select.sm { } .map-modal { top: .5rem; - min-width: calc(100% - 7rem); + max-height: 40vh; } .map-resizer { min-width: calc(100% - 2rem); @@ -116,9 +117,6 @@ select.sm { background-color: var(--primary); color: white; padding: .5rem 1rem; - &:hover { - } - } .simulation-trainlist { max-height: 17rem; diff --git a/front/src/common/Map/Map.scss b/front/src/common/Map/Map.scss index ec44504c2ba..2b03aee8da9 100644 --- a/front/src/common/Map/Map.scss +++ b/front/src/common/Map/Map.scss @@ -24,7 +24,7 @@ position: absolute; z-index: 0; min-height: 5rem; - max-height: 75vh; + max-height: calc(100% - 25vh); overflow: auto; top: 4rem; right: 3.5rem; From 0f6bdf690cc146f3354b7e00475149de96afd5d6 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 12 Dec 2022 07:52:42 +0100 Subject: [PATCH 19/27] front: some bugfixes --- .../osrd/components/Itinerary/ModalSuggeredVias.js | 3 ++- front/src/applications/osrd/views/OSRDConfig/Itinerary.js | 3 +++ front/src/applications/osrd/views/OSRDSimulation/TrainList.js | 3 +++ front/src/common/BootstrapSNCF/InputSNCF.js | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/front/src/applications/osrd/components/Itinerary/ModalSuggeredVias.js b/front/src/applications/osrd/components/Itinerary/ModalSuggeredVias.js index 8030f43e381..9e372621213 100644 --- a/front/src/applications/osrd/components/Itinerary/ModalSuggeredVias.js +++ b/front/src/applications/osrd/components/Itinerary/ModalSuggeredVias.js @@ -1,5 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; +import nextId from 'react-id-generator'; import { useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; @@ -33,7 +34,7 @@ export default function ModalSugerredVias(props) { const formatVia = (via, idx, idxTrueVia) => (
{!via.suggestion && {idxTrueVia}} diff --git a/front/src/applications/osrd/views/OSRDConfig/Itinerary.js b/front/src/applications/osrd/views/OSRDConfig/Itinerary.js index 6455403f779..28aa4cc4b1a 100644 --- a/front/src/applications/osrd/views/OSRDConfig/Itinerary.js +++ b/front/src/applications/osrd/views/OSRDConfig/Itinerary.js @@ -226,18 +226,21 @@ function Itinerary(props) { zoomToFeature(bbox(osrdconf.geojson[map.mapTrackSources])); } setLaunchPathfinding(true); + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); useEffect(() => { if (launchPathfinding) { mapItinerary(); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [osrdconf.origin, osrdconf.destination, map.mapTrackSources, osrdconf.rollingStockID]); useEffect(() => { if (launchPathfinding) { mapItinerary(false); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [osrdconf.vias]); return ( diff --git a/front/src/applications/osrd/views/OSRDSimulation/TrainList.js b/front/src/applications/osrd/views/OSRDSimulation/TrainList.js index 8984a3e7703..0f639a81848 100644 --- a/front/src/applications/osrd/views/OSRDSimulation/TrainList.js +++ b/front/src/applications/osrd/views/OSRDSimulation/TrainList.js @@ -215,6 +215,7 @@ export default function TrainsList(props) { changeTrain({ train_name: debouncedInputName }, simulation.trains[trainNameClickedIDX].id); dispatch(updateMustRedraw(true)); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [debouncedInputName]); useEffect(() => { @@ -226,12 +227,14 @@ export default function TrainsList(props) { ); dispatch(updateMustRedraw(true)); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [debouncedInputTime]); useEffect(() => { if (!onInput) { setFormattedList(formatTrainsList()); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [selectedTrain, departureArrivalTimes, filter, trainNameClickedIDX, typeOfInputFocused]); return ( diff --git a/front/src/common/BootstrapSNCF/InputSNCF.js b/front/src/common/BootstrapSNCF/InputSNCF.js index 71768a34d6b..e8479689a5c 100644 --- a/front/src/common/BootstrapSNCF/InputSNCF.js +++ b/front/src/common/BootstrapSNCF/InputSNCF.js @@ -51,7 +51,7 @@ class InputSNCF extends React.Component { name: PropTypes.string.isRequired, }), // Styling props - unit: PropTypes.string, + unit: PropTypes.oneOfType([PropTypes.string, PropTypes.object]), sm: PropTypes.bool, whiteBG: PropTypes.bool, noMargin: PropTypes.bool, From bcd7543a64e111dce3872096d17f0080d3a14145 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 12 Dec 2022 07:56:17 +0100 Subject: [PATCH 20/27] front: Remove DGEX Solutions mentions --- front/public/index.html | 2 +- front/src/applications/carto/Map.tsx | 2 +- front/src/applications/editor/Map.tsx | 2 +- front/src/applications/opendata/components/Map.js | 5 +---- front/src/applications/osrd/views/OSRDConfig/Map.tsx | 2 +- front/src/applications/osrd/views/OSRDSimulation/Map.tsx | 2 +- 6 files changed, 6 insertions(+), 9 deletions(-) diff --git a/front/public/index.html b/front/public/index.html index 587ca1a8ee4..d1efbe8339d 100644 --- a/front/public/index.html +++ b/front/public/index.html @@ -23,7 +23,7 @@ work correctly both with client-side routing and a non-root public URL. Learn how to configure a non-root public URL by running `npm run build`. --> - OSRD - DGEX Solutions + OSRD diff --git a/front/src/applications/carto/Map.tsx b/front/src/applications/carto/Map.tsx index 66ab6a31b10..a51f755bcd1 100644 --- a/front/src/applications/carto/Map.tsx +++ b/front/src/applications/carto/Map.tsx @@ -125,7 +125,7 @@ function Map() { touchZoomRotate > - + > = ({ }} > - + - + - + = ({ setExtViewport }) => { onLoad={handleLoadFinished} > - + Date: Mon, 12 Dec 2022 11:23:11 +0100 Subject: [PATCH 21/27] front: fast relooking homepage --- front/public/locales/fr/home.json | 8 +++ front/public/locales/fr/translation.json | 7 --- front/src/main/Home/Home.css | 17 ----- front/src/main/Home/Home.scss | 33 ++++++++++ front/src/main/Home/index.js | 80 ++++++++++++++---------- 5 files changed, 89 insertions(+), 56 deletions(-) create mode 100644 front/public/locales/fr/home.json delete mode 100644 front/src/main/Home/Home.css create mode 100644 front/src/main/Home/Home.scss diff --git a/front/public/locales/fr/home.json b/front/public/locales/fr/home.json new file mode 100644 index 00000000000..5a963588a78 --- /dev/null +++ b/front/public/locales/fr/home.json @@ -0,0 +1,8 @@ +{ + "customget": "Visualisation JSON GET", + "editor": "Éditeur d'infrastructure", + "map": "Cartographie", + "opendataimport": "Importation horaires", + "stdcm": "Sillons de dernière minute", + "timetable": "Grilles horaires" +} \ No newline at end of file diff --git a/front/public/locales/fr/translation.json b/front/public/locales/fr/translation.json index 88c65febc67..ea2ce351ddc 100644 --- a/front/public/locales/fr/translation.json +++ b/front/public/locales/fr/translation.json @@ -194,13 +194,6 @@ "track_section-length": "Taille" } }, - "Home": { - "customget": "Visualisation JSON GET", - "map": "Cartographie", - "editor": "Éditeur d'infrastructure", - "timetable": "Grilles horaires", - "stdcm": "Sillons de dernière minute (en travaux)" - }, "Login": { "connect": "Se connecter", "englishFlag": "drapeau anglais", diff --git a/front/src/main/Home/Home.css b/front/src/main/Home/Home.css deleted file mode 100644 index 48409848b80..00000000000 --- a/front/src/main/Home/Home.css +++ /dev/null @@ -1,17 +0,0 @@ -.mastcontainer-no-mastnav { - padding-left: 0 !important; -} -.cardscontainer { - margin: 2rem; -} -.card { - cursor: pointer; - transition: .2s ease-in-out; -} -.card:hover { - opacity: .5; -} - -.disabled-link { - pointer-events: none; -} diff --git a/front/src/main/Home/Home.scss b/front/src/main/Home/Home.scss new file mode 100644 index 00000000000..cf5f3e0ac47 --- /dev/null +++ b/front/src/main/Home/Home.scss @@ -0,0 +1,33 @@ +.mastcontainer-no-mastnav { + padding-left: 0 !important; +} +.cardscontainer { + margin: 2rem; +} +.card { + cursor: pointer; + transition: .2s ease-in-out; +} +.card:hover { + opacity: .5; +} + +.disabled-link { + pointer-events: none; +} + +.title-page-link { + display: flex; + align-items: center; + text-align: left; + font-size: 1.5rem; + font-weight: 400; + transition: .4s; + color: var(--coolgray11); + border-radius: 4px; + padding: .5rem; + margin-bottom: .5rem; + &:hover { + color: var(--primary); + } +} \ No newline at end of file diff --git a/front/src/main/Home/index.js b/front/src/main/Home/index.js index 4c3b71179c9..3a70033ea88 100644 --- a/front/src/main/Home/index.js +++ b/front/src/main/Home/index.js @@ -1,49 +1,65 @@ -import './Home.css'; - -import Card from 'common/BootstrapSNCF/CardSNCF/CardSNCF'; +import './Home.scss'; import NavBarSNCF from 'common/BootstrapSNCF/NavBarSNCF'; import React from 'react'; -import cartoPic from 'assets/pictures/carto.png'; -import editorPic from 'assets/pictures/editor.png'; import logo from 'assets/logo_osrd_seul_blanc.svg'; import osrdLogo from 'assets/pictures/osrd.png'; -import timetablePic from 'assets/pictures/timetable.png'; -import customget from 'assets/pictures/customget.png'; -import opendata from 'assets/pictures/customget.png'; import { useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; +import { Link } from 'react-router-dom'; +import { MdMoreTime, MdOutlineRailwayAlert, MdOutlineTimeline, MdShowChart } from 'react-icons/md'; +import { FaMap, FaMapMarked } from 'react-icons/fa'; export default function Home() { const user = useSelector((state) => state.user); - const { t } = useTranslation(); + const { t } = useTranslation('home'); return ( <>
-
- OSRD logo -

Open-Source Railway Designer

-
-
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
- +
+
+ OSRD logo +

Open Source Railway Designer

+
+
+
+ +
+ + {t('timetable')} +
+ + +
+ + {t('map')} +
+ + +
+ + {t('editor')} +
+ + +
+ + {t('stdcm')} +
+ + +
+ + {t('opendataimport')} +
+ + +
+ + {t('customget')} +
+
From 9d0ea810d2921588f11b00708e8fe1a71bfed68b Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Mon, 12 Dec 2022 17:39:36 +0100 Subject: [PATCH 22/27] front: rework home page --- front/src/assets/pictures/carto.png | Bin 68622 -> 0 bytes front/src/assets/pictures/customget.png | Bin 23696 -> 0 bytes front/src/assets/pictures/dgexsollogo.png | Bin 9135 -> 0 bytes .../src/assets/pictures/dgexsollogo_only.png | Bin 6127 -> 0 bytes front/src/assets/pictures/editor.png | Bin 78624 -> 0 bytes front/src/assets/pictures/home/customget.png | Bin 0 -> 17772 bytes front/src/assets/pictures/home/editor.png | Bin 0 -> 13145 bytes front/src/assets/pictures/home/map.png | Bin 0 -> 27727 bytes front/src/assets/pictures/home/opendata.png | Bin 0 -> 29459 bytes front/src/assets/pictures/home/stdcm.png | Bin 0 -> 27122 bytes front/src/assets/pictures/home/timetable.png | Bin 0 -> 25250 bytes front/src/assets/pictures/map.svg | 1 - front/src/assets/pictures/timetable.png | Bin 25836 -> 0 bytes .../common/BootstrapSNCF/CardSNCF/CardSNCF.js | 1 + .../BootstrapSNCF/CardSNCF/CardSNCF.scss | 10 +++ front/src/main/Home/Home.scss | 29 ++++--- front/src/main/Home/index.js | 77 +++++++----------- 17 files changed, 60 insertions(+), 58 deletions(-) delete mode 100644 front/src/assets/pictures/carto.png delete mode 100644 front/src/assets/pictures/customget.png delete mode 100644 front/src/assets/pictures/dgexsollogo.png delete mode 100644 front/src/assets/pictures/dgexsollogo_only.png delete mode 100644 front/src/assets/pictures/editor.png create mode 100644 front/src/assets/pictures/home/customget.png create mode 100644 front/src/assets/pictures/home/editor.png create mode 100644 front/src/assets/pictures/home/map.png create mode 100644 front/src/assets/pictures/home/opendata.png create mode 100644 front/src/assets/pictures/home/stdcm.png create mode 100644 front/src/assets/pictures/home/timetable.png delete mode 100644 front/src/assets/pictures/map.svg delete mode 100644 front/src/assets/pictures/timetable.png create mode 100644 front/src/common/BootstrapSNCF/CardSNCF/CardSNCF.scss diff --git a/front/src/assets/pictures/carto.png b/front/src/assets/pictures/carto.png deleted file mode 100644 index 9eea247498ef91a3d8e49925dc18e3ed6a8606fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68622 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 M07*qoM6N<$g5F@3DF6Tf diff --git a/front/src/assets/pictures/customget.png b/front/src/assets/pictures/customget.png deleted file mode 100644 index c82af1f92d5b35913f2cc309d915170babc842e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23696 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%0DbuXxR<*3;jlXH>6mdw) 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 &J{M!>d`QrIaynlazO(nr{ zsBjR(2}FrP>KH7EPBbdZ0N$Lh%Gaa}R{Y*9ZE6Yy%@~>R)x5GwTLJYT;i)STzka{N ze7AumEzp8QCroeK!d<%$@TNCCMq$LmmNrQ)^=&ML|8cV zgyJSh!IKrFwsEaes$3gDB4tU=j19ACrO9NogGQio#bYEfT3R@}9-_E;KS|J~*=nU> z&uv(deEIEKRidj+*lMJxnXEj?x!UG3e=nEIIF6IWq>V;{ZnsOj-R{e3SeAw7dHBAc zg+u1&n$2crS&X}B!lc#0l(jtzfzq0GxJ)H~{32uH zTiMv8cA~AZ(3|z!4R~I3P}<+x9lr z3Tx7@No?Vg=q`@50YN9S(Hgc_>+Bgm$_sNdeE8{|ymQ+GKfK){MAD8lNurS|MmrY7 z@nD(LEnT-;i?R@oqwpiX-{*#Wn)L!O<2M8xf936~@I%fxF(cn_UP0C+wo6 zGFnLMTdpfHv!}89G9C>6K&qVxRfmF=W=KS@T-E%DXO&aeHka)%Zy|IV}6pKZMhldeDWWdpCwdiy@6pO`7ik|0Z)=IldX`y6{r7UKf7pOR+6zrkY zqtK~(FrUBAdoe-?j=%UKAN|B9_^+S)9Frp>{K=pGDL?g7KgDN1`&oYAk%tKsthBrQ z(1Sg0vd}!oHu&fD*5wWJ+6x)i z+7YYiE%M&3A!1z{K6AFsgOd)Hm_=!U?g=Zk(u__HQ=5pfq=i=38(>|>gC1Ylj}0d4 z(fe}^cfb!oL)H%)_@&o>#9L4tL#Y}mYC5Cn8Ooy?6al}glV zwM_ooZntT-+Zhn~zJCKNo*!jPNJ7;{^g@s=rGpt^?R!283kwVl4fR!3n)`e4*fD

rFGmKJ6mT|ioxZBd95iPP9TtTBbwe&pa>Mt_v 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ⅅ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 b$1@m$L`SyUw+O_ou>{KU>W|Cho(KIO)hhgR literal 0 HcmV?d00001 diff --git a/front/src/assets/pictures/home/map.png b/front/src/assets/pictures/home/map.png new file mode 100644 index 0000000000000000000000000000000000000000..00b4dc5a746a37bd2a397cd62f133b1544eb96d2 GIT binary patch literal 27727 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 RJg6U}D61k<_R#dre*w+Vz={9> literal 0 HcmV?d00001 diff --git a/front/src/assets/pictures/home/stdcm.png b/front/src/assets/pictures/home/stdcm.png new file mode 100644 index 0000000000000000000000000000000000000000..82e8e2cce6d6d1fb284dc5272143054e4293de50 GIT binary patch literal 27122 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 literal 0 HcmV?d00001 diff --git a/front/src/assets/pictures/home/timetable.png b/front/src/assets/pictures/home/timetable.png new file mode 100644 index 0000000000000000000000000000000000000000..c46afda3011118eef31ad06a26edeed637605a82 GIT binary patch literal 25250 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 A%m4rY literal 0 HcmV?d00001 diff --git a/front/src/assets/pictures/map.svg b/front/src/assets/pictures/map.svg deleted file mode 100644 index 89b26fd4aa1..00000000000 --- a/front/src/assets/pictures/map.svg +++ /dev/null @@ -1 +0,0 @@ -map \ No newline at end of file diff --git a/front/src/assets/pictures/timetable.png b/front/src/assets/pictures/timetable.png deleted file mode 100644 index 916d0a5aba14030c62b497bf7f7913d4445a4187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25836 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 e;ncADXa7Ifl state.user); @@ -17,49 +22,29 @@ export default function Home() { <>
-
-
- OSRD logo -

Open Source Railway Designer

-
-
-
- -
- - {t('timetable')} -
- - -
- - {t('map')} -
- - -
- - {t('editor')} -
- - -
- - {t('stdcm')} -
- - -
- - {t('opendataimport')} -
- - -
- - {t('customget')} -
- +
+ OSRD logo +

Open-Source Railway Designer

+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
From 585cb4debb77ceef10e7de31ccc0f7b4ac279376 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Wed, 14 Dec 2022 08:45:27 +0100 Subject: [PATCH 23/27] front: opendataimport: bugfix --- front/src/applications/opendata/views/OpenDataImportModal.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index bc7f4bd88b0..0f0b78134a5 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -139,8 +139,10 @@ export default function OpenDataImportModal(props) { } function generatePaths(pathNumberToComplete = 0, pathsIDs = {}, autoComplete = false) { - if (autoComplete && pathNumberToComplete === 0) + if (autoComplete && pathNumberToComplete === 0) { setStatus({ ...initialStatus, uicComplete: true }); + setUicNumberToComplete(undefined); + } const pathfindingPayloads = generatePathfindingPayload( infraID, From 9ba4a042e211715851cada77ffb645363a953446 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Wed, 14 Dec 2022 16:50:04 +0100 Subject: [PATCH 24/27] front: replace png by svg when possible & svgo --- .../RollingStock/RollingStockEmpty.js | 2 +- .../TimetableSelectorModal.js | 2 +- .../views/OSRDConfig/RollingStockSelector.js | 2 +- .../OSRDConfig/SpeedLimitByTagSelector.js | 2 +- .../views/OSRDConfig/TimetableSelector.js | 2 +- .../pictures/components/speedometer.svg | 1 + .../src/assets/pictures/components/tracks.svg | 1 + .../pictures/components/tracks_edit.svg | 1 + .../src/assets/pictures/components/train.svg | 1 + .../pictures/components/trains_timetable.svg | 1 + front/src/assets/pictures/home/customget.png | Bin 17772 -> 0 bytes front/src/assets/pictures/home/customget.svg | 1 + front/src/assets/pictures/home/editor.png | Bin 13145 -> 0 bytes front/src/assets/pictures/home/editor.svg | 1 + front/src/assets/pictures/home/map.png | Bin 27727 -> 0 bytes front/src/assets/pictures/home/map.svg | 1 + front/src/assets/pictures/home/opendata.png | Bin 29459 -> 0 bytes front/src/assets/pictures/home/opendata.svg | 1 + front/src/assets/pictures/home/stdcm.png | Bin 27122 -> 0 bytes front/src/assets/pictures/home/stdcm.svg | 1 + front/src/assets/pictures/home/timetable.png | Bin 25250 -> 0 bytes front/src/assets/pictures/home/timetable.svg | 1 + .../pictures/layersicons/bufferstop.svg | 79 +----- .../assets/pictures/layersicons/detectors.svg | 2 +- .../assets/pictures/layersicons/layer_adv.svg | 83 +----- .../pictures/layersicons/layer_itineraire.svg | 104 +------- .../assets/pictures/layersicons/layer_jdz.svg | 81 +----- .../assets/pictures/layersicons/layer_pn.svg | 117 +------- .../assets/pictures/layersicons/layer_sel.svg | 250 ------------------ .../pictures/layersicons/layer_signal.svg | 107 +------- .../layersicons/layer_signal_open.svg | 2 +- .../pictures/layersicons/layer_stops.svg | 63 +---- .../assets/pictures/layersicons/layer_tiv.svg | 87 ------ .../pictures/layersicons/layer_tivs.svg | 67 +---- .../assets/pictures/layersicons/layer_zep.svg | 174 +----------- front/src/assets/pictures/layersicons/ops.svg | 2 +- .../assets/pictures/layersicons/switches.svg | 2 +- .../assets/pictures/layersicons/timetable.svg | 1 - .../{ => mapbuttons}/mapstyle-blueprint.jpg | Bin .../{ => mapbuttons}/mapstyle-cadastre.jpg | Bin .../{ => mapbuttons}/mapstyle-dark.jpg | Bin .../{ => mapbuttons}/mapstyle-normal.jpg | Bin .../{ => mapbuttons}/mapstyle-ortho.jpg | Bin .../{ => mapbuttons}/mapstyle-osm-tracks.jpg | Bin .../{ => mapbuttons}/mapstyle-scan25.jpg | Bin .../assets/pictures/{ => mapbuttons}/osm.png | Bin .../pictures/{ => mapbuttons}/osmLight.png | Bin .../assets/pictures/searchicons/signalbox.svg | 1 - .../assets/pictures/searchicons/station.svg | 1 - .../src/assets/pictures/searchicons/track.svg | 1 - front/src/assets/pictures/speedometer.svg | 1 - front/src/assets/pictures/tracks.png | Bin 5378 -> 0 bytes front/src/assets/pictures/tracks_edit.png | Bin 9102 -> 0 bytes front/src/assets/pictures/train.svg | 1 - .../src/assets/pictures/trains_timetable.png | Bin 6395 -> 0 bytes .../src/common/InfraSelector/InfraSelector.js | 2 +- .../InfraSelector/InfraSelectorModal.js | 4 +- .../Settings/MapSettingsBackgroundSwitches.js | 10 +- .../Map/Settings/MapSettingsMapStyle.js | 6 +- front/src/main/Home/index.js | 12 +- 60 files changed, 46 insertions(+), 1235 deletions(-) create mode 100644 front/src/assets/pictures/components/speedometer.svg create mode 100644 front/src/assets/pictures/components/tracks.svg create mode 100644 front/src/assets/pictures/components/tracks_edit.svg create mode 100644 front/src/assets/pictures/components/train.svg create mode 100644 front/src/assets/pictures/components/trains_timetable.svg delete mode 100644 front/src/assets/pictures/home/customget.png create mode 100644 front/src/assets/pictures/home/customget.svg delete mode 100644 front/src/assets/pictures/home/editor.png create mode 100644 front/src/assets/pictures/home/editor.svg delete mode 100644 front/src/assets/pictures/home/map.png create mode 100644 front/src/assets/pictures/home/map.svg delete mode 100644 front/src/assets/pictures/home/opendata.png create mode 100644 front/src/assets/pictures/home/opendata.svg delete mode 100644 front/src/assets/pictures/home/stdcm.png create mode 100644 front/src/assets/pictures/home/stdcm.svg delete mode 100644 front/src/assets/pictures/home/timetable.png create mode 100644 front/src/assets/pictures/home/timetable.svg delete mode 100644 front/src/assets/pictures/layersicons/layer_sel.svg delete mode 100644 front/src/assets/pictures/layersicons/layer_tiv.svg delete mode 100644 front/src/assets/pictures/layersicons/timetable.svg rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-blueprint.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-cadastre.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-dark.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-normal.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-ortho.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-osm-tracks.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/mapstyle-scan25.jpg (100%) rename front/src/assets/pictures/{ => mapbuttons}/osm.png (100%) rename front/src/assets/pictures/{ => mapbuttons}/osmLight.png (100%) delete mode 100644 front/src/assets/pictures/searchicons/signalbox.svg delete mode 100644 front/src/assets/pictures/searchicons/station.svg delete mode 100644 front/src/assets/pictures/searchicons/track.svg delete mode 100644 front/src/assets/pictures/speedometer.svg delete mode 100644 front/src/assets/pictures/tracks.png delete mode 100644 front/src/assets/pictures/tracks_edit.png delete mode 100644 front/src/assets/pictures/train.svg delete mode 100644 front/src/assets/pictures/trains_timetable.png diff --git a/front/src/applications/osrd/components/RollingStock/RollingStockEmpty.js b/front/src/applications/osrd/components/RollingStock/RollingStockEmpty.js index 45b50e6d848..4e99c468812 100644 --- a/front/src/applications/osrd/components/RollingStock/RollingStockEmpty.js +++ b/front/src/applications/osrd/components/RollingStock/RollingStockEmpty.js @@ -1,6 +1,6 @@ import React from 'react'; import { FaQuestion } from 'react-icons/fa'; -import icon from 'assets/pictures/train.svg'; +import icon from 'assets/pictures/components/train.svg'; export default function RollingStockEmpty() { return ( diff --git a/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js b/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js index a0773a79bd6..135107ad255 100644 --- a/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js +++ b/front/src/applications/osrd/components/TimetableSelector/TimetableSelectorModal.js @@ -9,7 +9,7 @@ import ModalHeaderSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalHeaderSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; import InputSNCF from 'common/BootstrapSNCF/InputSNCF'; import { setSuccess, setFailure } from 'reducers/main'; -import icon from 'assets/pictures/trains_timetable.png'; +import icon from 'assets/pictures/components/trains_timetable.svg'; const timetableURL = '/timetable/'; diff --git a/front/src/applications/osrd/views/OSRDConfig/RollingStockSelector.js b/front/src/applications/osrd/views/OSRDConfig/RollingStockSelector.js index 6584fcf6742..7ffea6c4174 100644 --- a/front/src/applications/osrd/views/OSRDConfig/RollingStockSelector.js +++ b/front/src/applications/osrd/views/OSRDConfig/RollingStockSelector.js @@ -6,7 +6,7 @@ import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; import ModalFooterSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalFooterSNCF'; import RollingStock from 'applications/osrd/components/RollingStock/RollingStock'; -import icon from 'assets/pictures/train.svg'; +import icon from 'assets/pictures/components/train.svg'; import RollingStock2Img from 'applications/osrd/components/RollingStock/RollingStock2Img'; import { comfort2pictogram, diff --git a/front/src/applications/osrd/views/OSRDConfig/SpeedLimitByTagSelector.js b/front/src/applications/osrd/views/OSRDConfig/SpeedLimitByTagSelector.js index 36c2ca7603d..3ff153b899e 100644 --- a/front/src/applications/osrd/views/OSRDConfig/SpeedLimitByTagSelector.js +++ b/front/src/applications/osrd/views/OSRDConfig/SpeedLimitByTagSelector.js @@ -4,7 +4,7 @@ import { useTranslation } from 'react-i18next'; import { updateSpeedLimitByTag } from 'reducers/osrdconf'; import { setFailure } from 'reducers/main'; import { get } from 'common/requests'; -import icon from 'assets/pictures/speedometer.svg'; +import icon from 'assets/pictures/components/speedometer.svg'; import SelectImprovedSNCF from 'common/BootstrapSNCF/SelectImprovedSNCF'; import { getInfraID, getSpeedLimitByTag } from 'reducers/osrdconf/selectors'; diff --git a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js index 23f53ae61eb..d2d6970e42c 100644 --- a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js +++ b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js @@ -6,7 +6,7 @@ import { setFailure } from 'reducers/main'; import { useTranslation } from 'react-i18next'; import { get, deleteRequest } from 'common/requests'; import TimetableSelectorModal from 'applications/osrd/components/TimetableSelector/TimetableSelectorModal'; -import icon from 'assets/pictures/trains_timetable.png'; +import icon from 'assets/pictures/components/trains_timetable.svg'; import { sec2time } from 'utils/timeManipulation'; import DotsLoader from 'common/DotsLoader/DotsLoader'; import { trainscheduleURI } from 'applications/osrd/components/Simulation/consts'; diff --git a/front/src/assets/pictures/components/speedometer.svg b/front/src/assets/pictures/components/speedometer.svg new file mode 100644 index 00000000000..dd36e6d1581 --- /dev/null +++ b/front/src/assets/pictures/components/speedometer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/components/tracks.svg b/front/src/assets/pictures/components/tracks.svg new file mode 100644 index 00000000000..e5147f8a78f --- /dev/null +++ b/front/src/assets/pictures/components/tracks.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/components/tracks_edit.svg b/front/src/assets/pictures/components/tracks_edit.svg new file mode 100644 index 00000000000..34c312c77ff --- /dev/null +++ b/front/src/assets/pictures/components/tracks_edit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/components/train.svg b/front/src/assets/pictures/components/train.svg new file mode 100644 index 00000000000..75b03eb55ae --- /dev/null +++ b/front/src/assets/pictures/components/train.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/components/trains_timetable.svg b/front/src/assets/pictures/components/trains_timetable.svg new file mode 100644 index 00000000000..fb73afe75c6 --- /dev/null +++ b/front/src/assets/pictures/components/trains_timetable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/home/customget.png b/front/src/assets/pictures/home/customget.png deleted file mode 100644 index b17514d2f8a14eb6cbed5b7d5ffc17b927ab3470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17772 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 \ No newline at end of file diff --git a/front/src/assets/pictures/home/editor.png b/front/src/assets/pictures/home/editor.png deleted file mode 100644 index 508cf337bff7d6c902d835f4832c647a838298fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13145 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 b$1@m$L`SyUw+O_ou>{KU>W|Cho(KIO)hhgR diff --git a/front/src/assets/pictures/home/editor.svg b/front/src/assets/pictures/home/editor.svg new file mode 100644 index 00000000000..dd24a7f1793 --- /dev/null +++ b/front/src/assets/pictures/home/editor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/home/map.png b/front/src/assets/pictures/home/map.png deleted file mode 100644 index 00b4dc5a746a37bd2a397cd62f133b1544eb96d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27727 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 q?xs)Y(uQpe9{| \ No newline at end of file diff --git a/front/src/assets/pictures/home/opendata.png b/front/src/assets/pictures/home/opendata.png deleted file mode 100644 index ba1a1afb015fc460411dd340eb9248befaae1b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29459 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 RJg6U}D61k<_R#dre*w+Vz={9> diff --git a/front/src/assets/pictures/home/opendata.svg b/front/src/assets/pictures/home/opendata.svg new file mode 100644 index 00000000000..d9b4344fcc9 --- /dev/null +++ b/front/src/assets/pictures/home/opendata.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/home/stdcm.png b/front/src/assets/pictures/home/stdcm.png deleted file mode 100644 index 82e8e2cce6d6d1fb284dc5272143054e4293de50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27122 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 diff --git a/front/src/assets/pictures/home/stdcm.svg b/front/src/assets/pictures/home/stdcm.svg new file mode 100644 index 00000000000..691f62fa186 --- /dev/null +++ b/front/src/assets/pictures/home/stdcm.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/home/timetable.png b/front/src/assets/pictures/home/timetable.png deleted file mode 100644 index c46afda3011118eef31ad06a26edeed637605a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25250 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 A%m4rY diff --git a/front/src/assets/pictures/home/timetable.svg b/front/src/assets/pictures/home/timetable.svg new file mode 100644 index 00000000000..b5512ae88eb --- /dev/null +++ b/front/src/assets/pictures/home/timetable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/bufferstop.svg b/front/src/assets/pictures/layersicons/bufferstop.svg index ec9af2854ff..c187df7a298 100644 --- a/front/src/assets/pictures/layersicons/bufferstop.svg +++ b/front/src/assets/pictures/layersicons/bufferstop.svg @@ -1,78 +1 @@ - - - - - - - - - image/svg+xml - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/detectors.svg b/front/src/assets/pictures/layersicons/detectors.svg index 96c97822ff3..50481d00e35 100644 --- a/front/src/assets/pictures/layersicons/detectors.svg +++ b/front/src/assets/pictures/layersicons/detectors.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_adv.svg b/front/src/assets/pictures/layersicons/layer_adv.svg index c57e78cd410..47e2b70022e 100644 --- a/front/src/assets/pictures/layersicons/layer_adv.svg +++ b/front/src/assets/pictures/layersicons/layer_adv.svg @@ -1,82 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_itineraire.svg b/front/src/assets/pictures/layersicons/layer_itineraire.svg index 5730434fbca..5b79ff3de95 100644 --- a/front/src/assets/pictures/layersicons/layer_itineraire.svg +++ b/front/src/assets/pictures/layersicons/layer_itineraire.svg @@ -1,103 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - A - B - - - - - - +AB \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_jdz.svg b/front/src/assets/pictures/layersicons/layer_jdz.svg index fe952bd5f37..5768c26f5c1 100644 --- a/front/src/assets/pictures/layersicons/layer_jdz.svg +++ b/front/src/assets/pictures/layersicons/layer_jdz.svg @@ -1,80 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_pn.svg b/front/src/assets/pictures/layersicons/layer_pn.svg index 9363459b331..71440111a88 100644 --- a/front/src/assets/pictures/layersicons/layer_pn.svg +++ b/front/src/assets/pictures/layersicons/layer_pn.svg @@ -1,116 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_sel.svg b/front/src/assets/pictures/layersicons/layer_sel.svg deleted file mode 100644 index 2c3be2ebb70..00000000000 --- a/front/src/assets/pictures/layersicons/layer_sel.svg +++ /dev/null @@ -1,250 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/front/src/assets/pictures/layersicons/layer_signal.svg b/front/src/assets/pictures/layersicons/layer_signal.svg index cff0050a39d..6204124e930 100644 --- a/front/src/assets/pictures/layersicons/layer_signal.svg +++ b/front/src/assets/pictures/layersicons/layer_signal.svg @@ -1,106 +1 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_signal_open.svg b/front/src/assets/pictures/layersicons/layer_signal_open.svg index 782e9b5fc5d..4fca56d5d74 100644 --- a/front/src/assets/pictures/layersicons/layer_signal_open.svg +++ b/front/src/assets/pictures/layersicons/layer_signal_open.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_stops.svg b/front/src/assets/pictures/layersicons/layer_stops.svg index 53876553eff..0f741de9960 100644 --- a/front/src/assets/pictures/layersicons/layer_stops.svg +++ b/front/src/assets/pictures/layersicons/layer_stops.svg @@ -1,62 +1 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_tiv.svg b/front/src/assets/pictures/layersicons/layer_tiv.svg deleted file mode 100644 index f967e4829d9..00000000000 --- a/front/src/assets/pictures/layersicons/layer_tiv.svg +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - V2 - - - diff --git a/front/src/assets/pictures/layersicons/layer_tivs.svg b/front/src/assets/pictures/layersicons/layer_tivs.svg index f789cd2a313..1c05aeb2ff9 100644 --- a/front/src/assets/pictures/layersicons/layer_tivs.svg +++ b/front/src/assets/pictures/layersicons/layer_tivs.svg @@ -1,66 +1 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/layer_zep.svg b/front/src/assets/pictures/layersicons/layer_zep.svg index 719bd2c2284..0db8a3abd45 100644 --- a/front/src/assets/pictures/layersicons/layer_zep.svg +++ b/front/src/assets/pictures/layersicons/layer_zep.svg @@ -1,173 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/ops.svg b/front/src/assets/pictures/layersicons/ops.svg index c4e2e1ad5e4..aad62ce94b9 100644 --- a/front/src/assets/pictures/layersicons/ops.svg +++ b/front/src/assets/pictures/layersicons/ops.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/switches.svg b/front/src/assets/pictures/layersicons/switches.svg index 23f7d10de4b..35da0134971 100644 --- a/front/src/assets/pictures/layersicons/switches.svg +++ b/front/src/assets/pictures/layersicons/switches.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/front/src/assets/pictures/layersicons/timetable.svg b/front/src/assets/pictures/layersicons/timetable.svg deleted file mode 100644 index 64a4b47ad02..00000000000 --- a/front/src/assets/pictures/layersicons/timetable.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/mapstyle-blueprint.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-blueprint.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-blueprint.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-blueprint.jpg diff --git a/front/src/assets/pictures/mapstyle-cadastre.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-cadastre.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-cadastre.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-cadastre.jpg diff --git a/front/src/assets/pictures/mapstyle-dark.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-dark.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-dark.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-dark.jpg diff --git a/front/src/assets/pictures/mapstyle-normal.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-normal.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-normal.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-normal.jpg diff --git a/front/src/assets/pictures/mapstyle-ortho.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-ortho.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-ortho.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-ortho.jpg diff --git a/front/src/assets/pictures/mapstyle-osm-tracks.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-osm-tracks.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-osm-tracks.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-osm-tracks.jpg diff --git a/front/src/assets/pictures/mapstyle-scan25.jpg b/front/src/assets/pictures/mapbuttons/mapstyle-scan25.jpg similarity index 100% rename from front/src/assets/pictures/mapstyle-scan25.jpg rename to front/src/assets/pictures/mapbuttons/mapstyle-scan25.jpg diff --git a/front/src/assets/pictures/osm.png b/front/src/assets/pictures/mapbuttons/osm.png similarity index 100% rename from front/src/assets/pictures/osm.png rename to front/src/assets/pictures/mapbuttons/osm.png diff --git a/front/src/assets/pictures/osmLight.png b/front/src/assets/pictures/mapbuttons/osmLight.png similarity index 100% rename from front/src/assets/pictures/osmLight.png rename to front/src/assets/pictures/mapbuttons/osmLight.png diff --git a/front/src/assets/pictures/searchicons/signalbox.svg b/front/src/assets/pictures/searchicons/signalbox.svg deleted file mode 100644 index c62676f79ae..00000000000 --- a/front/src/assets/pictures/searchicons/signalbox.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/searchicons/station.svg b/front/src/assets/pictures/searchicons/station.svg deleted file mode 100644 index dfaf412c5fc..00000000000 --- a/front/src/assets/pictures/searchicons/station.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/searchicons/track.svg b/front/src/assets/pictures/searchicons/track.svg deleted file mode 100644 index 0adc8c6fa0e..00000000000 --- a/front/src/assets/pictures/searchicons/track.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/speedometer.svg b/front/src/assets/pictures/speedometer.svg deleted file mode 100644 index 6f4d8900bd6..00000000000 --- a/front/src/assets/pictures/speedometer.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/tracks.png b/front/src/assets/pictures/tracks.png deleted file mode 100644 index 5fadc25f3fe67695646e277101b6bf7af868d43e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5378 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 diff --git a/front/src/assets/pictures/tracks_edit.png b/front/src/assets/pictures/tracks_edit.png deleted file mode 100644 index f1cdc5cd55f8457e4a7f39dc43387716db8faf88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9102 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

2Np-z zJTFGsQr#I&!4?EV5$gE^Rg>Vg$!`Tg3zaYf!feO-!z?7){A1d>H-FQlG1cQVWgprcQulJ2$bu+ zdxuesEt=CFEJND3tVyazg|?2z%i0toZSrMp3Xw7SvNriBxl6IJr@{oZWmj8UjAAns zk!dL(aSP0GX!5}95GaA|y9aPQA7fQ}fR1Hpl(ehETZ;H3$LKi8?ej+9JNr{8TY@JN z`{!vK;*>l>0EO7$J?CVxsx83Lu?l{*XAmh*z&WSEo&O#%f!PME#YukB9sj4 zCO}VBEtUVVKg6*}Adoy`_IP3_tr*7qjKT-k=HM%dpS?1G-wu=zdJ+!Iq&y-P4}fSA zkY81E)zAvKxzG9#k`Y%TN`8V7lZOk-yO6WvutqMNbkKUz5X;H<*XYT$0%z9DGb04zLGG)L%SKk`tl3t z&2}K;itv=cP$9-g9(Wl-D$JWd4-5&97z2^SH{VF(^0pZBLx;Q}JU!%NUr{2X7)D& z>%i~CsB95W?Ky%}wxNy+uUj?`6%pX_;uCl=T#JItLa~98lr$}zLw;lkxt2Bvk*N2W zCOmW`tXG4wn%vAq@=_3D;}BWKZ5x|$(>t2rdlKLN^+7ze>lm6+9;|atc!9K~@xzrA z-HEO)(X$0k)F(x~5QSZj;@E?Cpxpl=$P4CV3f3`VYY`iV*tlfIpBV-UO?C{|6dr+w z2SN?!XD|_r))*figfRvcn~bVBYY_-W&f`-OPgPr&)vz&IwrB_>wr-k-n=foa=qr5h zxudxAv3}$Nl?-o!tnhpSyHD@C{i?AoYt|5mSk)@fdVe4)f`por%GE|?uQ+cZWS9jz zi%j4p{(v1yB8~Os7qHJ?hNsdOqrnwmt3H*8V712JzyNN)=3HF7B#Q@M9>tFS5{AnT zz9jgPAVe)@Pk4Xpk|al4hsIFghE+LyaBU9DTLNeYeEZjL;?BqVk@5tPyxgU|Y?G%8 z!{2(f`??=(*~YS`lj@xzV#Y*YUsR_tK(kJYG6R7pT~pe3^-)=7xT@#~j0$|bZ|vt7 zkZpJ)Sb?l72(FHylMrBSv8q*J?cyv}ws`o!>KJ|fMLd7Bj6-7v1?^y}r*#;#E55nbP=U^AUb_?Y3>Qr*i_3 zQba&5KqU&N3;g1c{Wdgz!~jN;G|U__pW=_&=$euvaaDsN`+ZfMiHP_|HFj z9Ur@-gzML|W8K0u)-6n7v}|!?T;piLV6@sD_GMDoEND@nQj8*WnR|atJ zlZSA4EOB_wF&rnvySVgprG!7}`|2i(uB`-g@ z?YMkJGgh{xabA0f)eBCX4`5is7%FN!zOR6tdq?ogJ%e~-poo+&(O7kO%)~0w3Kb}lKAeuexySzB|Ag*t zGt-#N83je>G$Ztl|5yR=iSxT2=_Mts_HuJ#UP` zv_n$ELw8=)arx(ZdwbR9&70>iv6)PXp{LWHfBO$xMY{2?0Q!Uo)2(bYoQ?o?jzCO; zh>~FjntU)OVs^|7CXf)q3qi_*i%J7b_;$&ReeFQ^4Wrc-xWg&m8=N)V5h>-7)|zW2 zOM=EEU04FV)0~E7^uS`B4^^~$;J;x);zec`s4B zbSg!aD5?l4p8$Y?fq~N-mGA7dV5W|(J7nJ%Hy;D=bpT&K?@JG_C0*%Y;1YmW!|@^z zH!z@xNi*AVusaNAUU4j*A`*Rj?zr-m+G9JqdR5=nO%_CRdX@kG0alInKbwz~V*mgE M07*qoM6N<$g3*I1?EnA( diff --git a/front/src/assets/pictures/train.svg b/front/src/assets/pictures/train.svg deleted file mode 100644 index 965bffcb058..00000000000 --- a/front/src/assets/pictures/train.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/front/src/assets/pictures/trains_timetable.png b/front/src/assets/pictures/trains_timetable.png deleted file mode 100644 index 2ac1489e0d25f372af57663ba748c4cf1f83d752..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6395 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 JPDHLkV1ix_c&7jW diff --git a/front/src/common/InfraSelector/InfraSelector.js b/front/src/common/InfraSelector/InfraSelector.js index a20f5d83c69..72a20423fd0 100644 --- a/front/src/common/InfraSelector/InfraSelector.js +++ b/front/src/common/InfraSelector/InfraSelector.js @@ -4,7 +4,7 @@ import { useDispatch, useSelector } from 'react-redux'; import { useTranslation } from 'react-i18next'; import { setFailure } from 'reducers/main'; import { get } from 'common/requests'; -import icon from 'assets/pictures/tracks.png'; +import icon from 'assets/pictures/components/tracks.svg'; import InfraSelectorModal from 'common/InfraSelector/InfraSelectorModal'; import nextId from 'react-id-generator'; import { getInfraID } from 'reducers/osrdconf/selectors'; diff --git a/front/src/common/InfraSelector/InfraSelectorModal.js b/front/src/common/InfraSelector/InfraSelectorModal.js index 0a5698a9eaa..f0aaaa73531 100644 --- a/front/src/common/InfraSelector/InfraSelectorModal.js +++ b/front/src/common/InfraSelector/InfraSelectorModal.js @@ -4,8 +4,8 @@ import { useTranslation } from 'react-i18next'; import ModalSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalSNCF'; import ModalHeaderSNCF from 'common/BootstrapSNCF/ModalSNCF/ModalHeaderSNCF'; import ModalBodySNCF from 'common/BootstrapSNCF/ModalSNCF/ModalBodySNCF'; -import icon from 'assets/pictures/tracks.png'; -import iconEdition from 'assets/pictures/tracks_edit.png'; +import icon from 'assets/pictures/components/tracks.svg'; +import iconEdition from 'assets/pictures/components/tracks_edit.svg'; import { get } from 'common/requests'; import { useDebounce } from 'utils/helpers'; import Loader from 'common/Loader'; diff --git a/front/src/common/Map/Settings/MapSettingsBackgroundSwitches.js b/front/src/common/Map/Settings/MapSettingsBackgroundSwitches.js index 8817e3e5416..bcb01137aa7 100644 --- a/front/src/common/Map/Settings/MapSettingsBackgroundSwitches.js +++ b/front/src/common/Map/Settings/MapSettingsBackgroundSwitches.js @@ -9,11 +9,11 @@ import { updateShowOSMtracksections, } from 'reducers/map'; import SwitchSNCF, { SWITCH_TYPES } from 'common/BootstrapSNCF/SwitchSNCF/SwitchSNCF'; -import iconIGNBDORTHO from 'assets/pictures/mapstyle-ortho.jpg'; -import iconIGNSCAN25 from 'assets/pictures/mapstyle-scan25.jpg'; -import iconIGNCadastre from 'assets/pictures/mapstyle-cadastre.jpg'; -import iconOSM from 'assets/pictures/mapstyle-normal.jpg'; -import iconOSMTracks from 'assets/pictures/mapstyle-osm-tracks.jpg'; +import iconIGNBDORTHO from 'assets/pictures/mapbuttons/mapstyle-ortho.jpg'; +import iconIGNSCAN25 from 'assets/pictures/mapbuttons/mapstyle-scan25.jpg'; +import iconIGNCadastre from 'assets/pictures/mapbuttons/mapstyle-cadastre.jpg'; +import iconOSM from 'assets/pictures/mapbuttons/mapstyle-normal.jpg'; +import iconOSMTracks from 'assets/pictures/mapbuttons/mapstyle-osm-tracks.jpg'; export default function MapSettingsBackgroundSwitches() { const { t } = useTranslation(['map-settings']); diff --git a/front/src/common/Map/Settings/MapSettingsMapStyle.js b/front/src/common/Map/Settings/MapSettingsMapStyle.js index 68f96209eb8..4ed79b064bd 100644 --- a/front/src/common/Map/Settings/MapSettingsMapStyle.js +++ b/front/src/common/Map/Settings/MapSettingsMapStyle.js @@ -2,9 +2,9 @@ import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { useTranslation } from 'react-i18next'; import { updateMapStyle } from 'reducers/map'; -import picNormalMode from 'assets/pictures/mapstyle-normal.jpg'; -import picDarkMode from 'assets/pictures/mapstyle-dark.jpg'; -import picBlueprint from 'assets/pictures/mapstyle-blueprint.jpg'; +import picNormalMode from 'assets/pictures/mapbuttons/mapstyle-normal.jpg'; +import picDarkMode from 'assets/pictures/mapbuttons/mapstyle-dark.jpg'; +import picBlueprint from 'assets/pictures/mapbuttons/mapstyle-blueprint.jpg'; export default function MapSettingsMapStyle() { const { t } = useTranslation(['map-settings']); diff --git a/front/src/main/Home/index.js b/front/src/main/Home/index.js index 18f70be6423..01cd2d910cb 100644 --- a/front/src/main/Home/index.js +++ b/front/src/main/Home/index.js @@ -3,12 +3,12 @@ import './Home.scss'; import Card from 'common/BootstrapSNCF/CardSNCF/CardSNCF'; import NavBarSNCF from 'common/BootstrapSNCF/NavBarSNCF'; import React from 'react'; -import mapImg from 'assets/pictures/home/map.png'; -import editorImg from 'assets/pictures/home/editor.png'; -import stdcmImg from 'assets/pictures/home/stdcm.png'; -import timetableImg from 'assets/pictures/home/timetable.png'; -import customgetImg from 'assets/pictures/home/customget.png'; -import opendataImg from 'assets/pictures/home/opendata.png'; +import mapImg from 'assets/pictures/home/map.svg'; +import editorImg from 'assets/pictures/home/editor.svg'; +import stdcmImg from 'assets/pictures/home/stdcm.svg'; +import timetableImg from 'assets/pictures/home/timetable.svg'; +import customgetImg from 'assets/pictures/home/customget.svg'; +import opendataImg from 'assets/pictures/home/opendata.svg'; import logo from 'assets/logo_osrd_seul_blanc.svg'; import osrdLogo from 'assets/pictures/osrd.png'; import { useSelector } from 'react-redux'; From c46544af512cccf7c1e5ac67aad206a54dbae694 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Thu, 15 Dec 2022 12:43:14 +0100 Subject: [PATCH 25/27] front: OpenDataImport: add defaultProps values --- .../applications/opendata/views/OpenDataImportModal.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/front/src/applications/opendata/views/OpenDataImportModal.js b/front/src/applications/opendata/views/OpenDataImportModal.js index 0f0b78134a5..b7825efe465 100644 --- a/front/src/applications/opendata/views/OpenDataImportModal.js +++ b/front/src/applications/opendata/views/OpenDataImportModal.js @@ -31,7 +31,7 @@ export default function OpenDataImportModal(props) { const rollingStockID = useSelector(getRollingStockID); const timetableID = useSelector(getTimetableID); - const [trainsWithPathRef, setTrainsWithPathRef] = useState(); + const [trainsWithPathRef, setTrainsWithPathRef] = useState([]); // Places, points, OPs to add track section id const [pointsDictionnary, setPointsDictionnary] = useState(); @@ -244,7 +244,7 @@ export default function OpenDataImportModal(props) { return ( - {pathsDictionnary && trainsWithPathRef ? ( + {pathsDictionnary && trainsWithPathRef.length > 0 ? ( {!infraID || !timetableID || !rollingStockID ? null : ( <> @@ -316,8 +316,12 @@ export default function OpenDataImportModal(props) { ); } +OpenDataImportModal.defaultProps = { + rollingStockDB: [], +}; + OpenDataImportModal.propTypes = { trains: PropTypes.array.isRequired, - rollingStockDB: PropTypes.array.isRequired, + rollingStockDB: PropTypes.array, setMustUpdateTimetable: PropTypes.func.isRequired, }; From 3df5fac0359358a6c909b0de0830f79114aae25f Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Thu, 15 Dec 2022 20:41:32 +0100 Subject: [PATCH 26/27] front: OpenDataImport: bugfix on state selection for mapStyle --- front/src/applications/opendata/components/Map.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/applications/opendata/components/Map.js b/front/src/applications/opendata/components/Map.js index 11e014ca628..d23cd4ca8a3 100644 --- a/front/src/applications/opendata/components/Map.js +++ b/front/src/applications/opendata/components/Map.js @@ -23,7 +23,7 @@ import { getMapMouseEventNearestFeature } from 'utils/mapboxHelper'; export default function Map(props) { const { viewport, setViewport, setClickedFeature } = props; - const { mapStyle } = useSelector((state) => state.map); + const mapStyle = useSelector((state) => state.map.mapStyle); const [lngLatHover, setLngLatHover] = useState(); const [trackSectionGeoJSON, setTrackSectionGeoJSON] = useState(); const [snappedPoint, setSnappedPoint] = useState(); From c567887d4bdfff8fdb176425c355a7857ee84aa9 Mon Sep 17 00:00:00 2001 From: Nicolas Wurtz Date: Thu, 15 Dec 2022 20:44:09 +0100 Subject: [PATCH 27/27] front: OpenDataImport: state selector for timetableID more lightweight --- .../src/applications/osrd/views/OSRDConfig/TimetableSelector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js index d2d6970e42c..89c5a36b07a 100644 --- a/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js +++ b/front/src/applications/osrd/views/OSRDConfig/TimetableSelector.js @@ -19,7 +19,7 @@ export default function TimetableSelector(props) { const [selectedTimetable, setSelectedTimetable] = useState(undefined); const [isWorking, setIsWorking] = useState(false); const [trainList, setTrainList] = useState(undefined); - const { timetableID } = useSelector((state) => state.osrdconf); + const timetableID = useSelector((state) => state.osrdconf.timetableID); const dispatch = useDispatch(); const { t } = useTranslation();