Skip to content

Commit f4ebfc7

Browse files
ppitouMartinBourbier
authored andcommitted
front: allow users to export timetables and to remove trains by cuting (ctrl+x)
Signed-off-by: Angelina Kuntz <[email protected]>
1 parent 3669987 commit f4ebfc7

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

front/src/applications/operationalStudies/views/Scenario/components/Timetable/TimetableBoardWrapper.tsx

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,16 @@ const TimetableBoardWrapper = ({
115115
[selectedTimetableItemIds]
116116
);
117117

118+
const removeAndUnselectTrains = useCallback(
119+
(timetableItemIds: TimetableItemId[]) => {
120+
removeTimetableItems(timetableItemIds);
121+
setSelectedTimetableItemIds([]);
122+
},
123+
[removeTimetableItems, setSelectedTimetableItemIds]
124+
);
125+
118126
const ctrlC = useCallback(
119-
(event: KeyboardEvent<Element>) => {
127+
(event: KeyboardEvent) => {
120128
if (!event.repeat && event.ctrlKey && event.key === 'c') {
121129
copyTimetableItemsToClipboard(selectedTimetableItemIds, timetableItems);
122130
}
@@ -125,7 +133,7 @@ const TimetableBoardWrapper = ({
125133
);
126134

127135
const ctrlV = useCallback(
128-
async (event: KeyboardEvent<Element>) => {
136+
async (event: KeyboardEvent) => {
129137
if (!event.repeat && event.ctrlKey && event.key === 'v') {
130138
const clipboardContent = await navigator.clipboard.readText();
131139
const data = JSON.parse(clipboardContent);
@@ -143,6 +151,16 @@ const TimetableBoardWrapper = ({
143151
[navigator.clipboard, timetableId]
144152
);
145153

154+
const ctrlX = useCallback(
155+
(event: KeyboardEvent) => {
156+
if (!event.repeat && event.ctrlKey && event.key === 'x') {
157+
copyTimetableItemsToClipboard(selectedTimetableItemIds, timetableItems);
158+
removeAndUnselectTrains(selectedTimetableItemIds);
159+
}
160+
},
161+
[selectedTimetableItemIds, timetableItems]
162+
);
163+
146164
useEffect(() => {
147165
document.addEventListener('keydown', ctrlC);
148166
return () => document.removeEventListener('keydown', ctrlC);
@@ -153,6 +171,11 @@ const TimetableBoardWrapper = ({
153171
return () => document.removeEventListener('keydown', ctrlV);
154172
}, [ctrlV]);
155173

174+
useEffect(() => {
175+
document.addEventListener('keydown', ctrlX);
176+
return () => document.removeEventListener('keydown', ctrlX);
177+
}, [ctrlX]);
178+
156179
// --- BOARD WRAPPER TITLE MANAGEMENT -------------------------
157180
const computedItemLabel = useCallback(() => {
158181
if (totalTrainScheduleCount === 0 && totalPacedTrainCount === 0)
@@ -217,14 +240,6 @@ const TimetableBoardWrapper = ({
217240
}
218241
};
219242

220-
const removeAndUnselectTrains = useCallback(
221-
(timetableItemIds: TimetableItemId[]) => {
222-
removeTimetableItems(timetableItemIds);
223-
setSelectedTimetableItemIds([]);
224-
},
225-
[removeTimetableItems, setSelectedTimetableItemIds]
226-
);
227-
228243
const handleTrainsDelete = async (currentSelectedTrainId?: TrainId) => {
229244
const itemsCount = selectedTimetableItemIds.length;
230245

0 commit comments

Comments
 (0)