Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Front: Adn/add grid margin #2596

Merged
merged 16 commits into from
Dec 15, 2022
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions front/public/locales/fr/allowances.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
"percentage": "Pourcentage",
"time_per_distance": "Distance"
},
"gridMarginBefore": "Marge grille avant",
"gridMarginAfter": "Marge grille arrière",
"op": "pr",
"to": "à",
"trainSchedules": "Type de marche"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,10 @@ import SelectSNCF from 'common/BootstrapSNCF/SelectSNCF';
import StandardAllowanceDefault from 'applications/osrd/components/Simulation/Allowances/StandardAllowanceDefault';
import nextId from 'react-id-generator';
import { useTranslation } from 'react-i18next';
import { trainscheduleURI } from 'applications/osrd/components/Simulation/consts';
import { TYPES_UNITS, ALLOWANCE_UNITS_KEYS } from './consts';


const TYPEUNITS = {
time: 's',
percentage: '%',
time_per_distance: 'min/100km',
};

const TYPES_UNITS = {
time: 'seconds',
percentage: 'percentage',
time_per_distance: 'minutes',
};

function EmptyLine(props) {
const {
Expand Down Expand Up @@ -220,10 +211,9 @@ function EmptyLine(props) {
}

function Allowance(props) {
const { data, delAllowance, idx } = props;
const { data, delAllowance, idx, selectedTrain, simulation } = props;
const { t } = useTranslation(['allowances']);
const { selectedTrain } = useSelector((state) => state.osrdsimulation);
const simulation = useSelector((state) => state.osrdsimulation.simulation.present);


const position2name = (position) => {
const place = simulation.trains[selectedTrain].base.stops.find(
Expand All @@ -248,7 +238,7 @@ function Allowance(props) {
<div className="col-md-3 text-left">
{t(`allowanceTypes.${data.value.value_type}`)} /
{data.value[TYPES_UNITS[data.value.value_type]]}
{TYPEUNITS[data.value.value_type]}
{ALLOWANCE_UNITS_KEYS[data.value.value_type]}
</div>
<div className="col-md-1 d-flex align-items-right">
<button
Expand All @@ -265,34 +255,30 @@ function Allowance(props) {
}

export default function Allowances(props) {
const { toggleAllowancesDisplay } = props;
const { allowancesSettings, selectedProjection, selectedTrain } = useSelector(
(state) => state.osrdsimulation
);
const simulation = useSelector((state) => state.osrdsimulation.simulation.present);
const [trainDetail, setTrainDetail] = useState(undefined);
const { toggleAllowancesDisplay, t, dispatch, simulation, allowancesSettings, selectedProjection, selectedTrain, persistentAllowances, syncInProgress, mutateAllowances, getAllowances, trainDetail } = props;
//const [trainDetail, setTrainDetail] = useState(undefined);
const [allowances, setAllowances] = useState([]);
const [rawExtensions] = useState([]);
const [updateAllowances, setUpdateAllowances] = useState(false);
const [isUpdating, setIsUpdating] = useState(false);
const dispatch = useDispatch();
const { t } = useTranslation(['allowances']);



const allowanceTypes = [
{
id: 'time',
label: t('allowanceTypes.time'),
unit: TYPEUNITS.time,
unit: ALLOWANCE_UNITS_KEYS.time,
},
{
id: 'percentage',
label: t('allowanceTypes.percentage'),
unit: TYPEUNITS.percentage,
unit: ALLOWANCE_UNITS_KEYS.percentage,
},
{
id: 'time_per_distance',
label: t('allowanceTypes.time_per_distance'),
unit: TYPEUNITS.time_per_distance,
unit: ALLOWANCE_UNITS_KEYS.time_per_distance,
},
];

Expand All @@ -308,62 +294,11 @@ export default function Allowances(props) {
},
];

const getAllowances = async () => {
try {
setIsUpdating(true);
const result = await get(`${trainscheduleURI}${simulation.trains[selectedTrain].id}/`);
setTrainDetail(result);
setAllowances(result.allowances);
setIsUpdating(false);
} catch (e) {
console.log('ERROR', e);
dispatch(
setFailure({
name: e.name,
message: e.message,
})
);
}
};

// Change this to adapt to MARECO SPEC
const changeAllowances = async (newAllowances) => {
try {
setIsUpdating(true);
await patch(`${trainscheduleURI}${simulation.trains[selectedTrain].id}/`, {
...trainDetail,
allowances: newAllowances,
});
const newSimulationTrains = Array.from(simulation.trains);
newSimulationTrains[selectedTrain] = await get(
`${trainscheduleURI}${simulation.trains[selectedTrain].id}/result/`,
{
id: simulation.trains[selectedTrain].id,
path: selectedProjection.path,
}
);

getAllowances();
dispatch(updateSimulation({ ...simulation, trains: newSimulationTrains }));
dispatch(updateMustRedraw(true));
dispatch(
setSuccess({
title: t('allowanceModified.anyAllowanceModified'),
text: '',
})
);
setIsUpdating(false);
} catch (e) {
setIsUpdating(false);
console.log('ERROR', e);
dispatch(
setFailure({
name: e.name,
message: t('allowanceModified.anyAllowanceModificationError'),
})
);
}
};
const handleChangeAllowances = (newAllowances) => {
mutateAllowances(newAllowances)
}

const delAllowance = (idx, allowanceType) => {
// change to take into considerations Mareco Ones
Expand Down Expand Up @@ -394,16 +329,21 @@ export default function Allowances(props) {

useEffect(() => {
if (updateAllowances) {
changeAllowances(allowances);
handleChangeAllowances(allowances);
setUpdateAllowances(false);
}
}, [allowances]);

useEffect(() => {
getAllowances();
}, [selectedTrain]);
setAllowances(persistentAllowances)
}, [persistentAllowances]);

const standardAllowance = allowances.find(
useEffect(() => {
setIsUpdating(syncInProgress)
}, [syncInProgress]);


const standardAllowance = allowances && allowances.find(
(allowance) => allowance.allowance_type === 'standard' && allowance.ranges
);

Expand All @@ -419,7 +359,7 @@ export default function Allowances(props) {
<DotsLoader />
</div>
)}
{trainDetail && trainDetail.allowances && (
{allowances && (
<>
<div className="h2 d-flex">
<StandardAllowanceDefault
Expand All @@ -429,6 +369,11 @@ export default function Allowances(props) {
setIsUpdating={setIsUpdating}
trainDetail={trainDetail}
TYPES_UNITS={TYPES_UNITS}
selectedTrain = {selectedTrain}
selectedProjection = {selectedProjection}
simulation = {simulation}
t={t}
dispatch={dispatch}
/>
<button
type="button"
Expand All @@ -438,14 +383,14 @@ export default function Allowances(props) {
<i className="icons-arrow-up" />
</button>
</div>
{trainDetail.allowances.find((a) => a.ranges) && (
{allowances.find((a) => a.ranges) && (
<div className="text-normal">{t('specificValuesOnIntervals')}</div>
)}

{trainDetail.allowances
{allowances
.find((a) => a.ranges)
?.ranges?.map((allowance, idx) => (
<Allowance data={allowance} delAllowance={delAllowance} idx={idx} key={nextId()} />
<Allowance data={allowance} delAllowance={delAllowance} idx={idx} key={nextId()} selectedTrain = {selectedTrain } simulation = { simulation } />
))}

{trainDetail.allowances.find((a) => a.ranges) && (
Expand All @@ -457,6 +402,7 @@ export default function Allowances(props) {
allowances={allowances}
distribution="mareco"
allowanceTypes={allowanceTypes}

/>
)}

Expand All @@ -472,7 +418,7 @@ export default function Allowances(props) {
{trainDetail.allowances.map((allowance, idx) => {
if (allowance.allowance_type === 'engineering') {
return (
<Allowance data={allowance} delAllowance={delAllowance} idx={idx} key={nextId()} />
<Allowance data={allowance} delAllowance={delAllowance} idx={idx} key={nextId()} selectedTrain = {selectedTrain } simulation = { simulation }/>
);
}
return null;
Expand Down Expand Up @@ -504,14 +450,16 @@ export default function Allowances(props) {
);
}

Allowances.propTypes = {
toggleAllowancesDisplay: PropTypes.func.isRequired,
};


Allowance.propTypes = {
data: PropTypes.object.isRequired,
delAllowance: PropTypes.func.isRequired,
idx: PropTypes.number.isRequired,
t: PropTypes.func,
dispatch: PropTypes.func,
mutateAllowances: PropTypes.func,
getAllowances: PropTypes.func
};

EmptyLine.propTypes = {
Expand All @@ -531,3 +479,10 @@ EmptyLine.defaultProps = {
allowanceType: 'construction',
marecoBeginPosition: 0,
};

Allowance.defaultProps = {
t:(key) => key,
dispatch:() => {},
getAllowances:() => {},
mutateAllowances:() => {},
}
Loading