-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathuseUpdateTrainSchedule.ts
75 lines (69 loc) · 2.94 KB
/
useUpdateTrainSchedule.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { useTranslation } from 'react-i18next';
import { useSelector } from 'react-redux';
import { MANAGE_TRAIN_SCHEDULE_TYPES } from 'applications/operationalStudies/consts';
import { osrdEditoastApi, type TrainScheduleResult } from 'common/api/osrdEditoastApi';
import { useOsrdConfSelectors } from 'common/osrdContext';
import { useStoreDataForRollingStockSelector } from 'modules/rollingStock/components/RollingStockSelector/useStoreDataForRollingStockSelector';
import checkCurrentConfig from 'modules/trainschedule/components/ManageTrainSchedule/helpers/checkCurrentConfig';
import { setFailure, setSuccess } from 'reducers/main';
import { getOperationalStudiesConf } from 'reducers/osrdconf/operationalStudiesConf/selectors';
import { updateSelectedTrainId } from 'reducers/simulationResults';
import { useAppDispatch } from 'store';
import { formatToIsoDate } from 'utils/date';
import { castErrorToFailure } from 'utils/error';
import formatTrainSchedulePayload from '../helpers/formatTrainSchedulePayload';
const useUpdateTrainSchedule = (
setIsWorking: (isWorking: boolean) => void,
setDisplayTrainScheduleManagement: (type: string) => void,
upsertTrainSchedules: (trainSchedules: TrainScheduleResult[]) => void,
setTrainIdToEdit: (trainIdToEdit?: number) => void,
dtoImport: () => void,
trainIdToEdit?: number
) => {
const { t } = useTranslation(['operationalStudies/manageTrainSchedule']);
const [putTrainScheduleById] = osrdEditoastApi.endpoints.putTrainScheduleById.useMutation();
const dispatch = useAppDispatch();
const { getName, getStartTime } = useOsrdConfSelectors();
const confName = useSelector(getName);
const simulationConf = useSelector(getOperationalStudiesConf);
const startTime = useSelector(getStartTime);
const { rollingStock } = useStoreDataForRollingStockSelector();
return async function submitConfUpdateTrainSchedules() {
const formattedSimulationConf = checkCurrentConfig(
simulationConf,
t,
dispatch,
rollingStock?.name
);
if (formattedSimulationConf && trainIdToEdit) {
setIsWorking(true);
const trainSchedule = formatTrainSchedulePayload(
formattedSimulationConf,
confName,
startTime
);
try {
const trainScheduleResult = await putTrainScheduleById({
id: trainIdToEdit,
trainScheduleForm: trainSchedule,
}).unwrap();
upsertTrainSchedules([trainScheduleResult]);
dtoImport();
dispatch(
setSuccess({
title: t('trainUpdated'),
text: `${confName}: ${formatToIsoDate(startTime, true)}`,
})
);
dispatch(updateSelectedTrainId(trainIdToEdit));
setDisplayTrainScheduleManagement(MANAGE_TRAIN_SCHEDULE_TYPES.none);
setTrainIdToEdit(undefined);
} catch (e) {
dispatch(setFailure(castErrorToFailure(e)));
} finally {
setIsWorking(false);
}
}
};
};
export default useUpdateTrainSchedule;