Skip to content

Commit

Permalink
- rename some ref to train schedule in timetable item
Browse files Browse the repository at this point in the history
  • Loading branch information
SharglutDev committed Feb 27, 2025
1 parent 2234f05 commit f24ec4c
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ const Timetable = ({
dtoImport();
}, []);

const { filteredTrainSchedules, ...timetableFilters } = useFilterTrainSchedules(timetableItems);
const { filteredTimetableItems, ...timetableFilters } = useFilterTrainSchedules(timetableItems);

const toggleConflictsListExpanded = () => {
setConflictsListExpanded(!conflictsListExpanded);
Expand Down Expand Up @@ -113,8 +113,8 @@ const Timetable = ({
};

const currentDepartureDates = useMemo(
() => filteredTrainSchedules.map((train) => formatDepartureDate(train.startTime)),
[filteredTrainSchedules]
() => filteredTimetableItems.map((train) => formatDepartureDate(train.startTime)),
[filteredTimetableItems]
);

const showDepartureDates = useMemo(() => {
Expand Down Expand Up @@ -182,7 +182,7 @@ const Timetable = ({
showTrainDetails={showTrainDetails}
toggleShowTrainDetails={toggleShowTrainDetails}
timetableItems={timetableItems}
filteredTimetableItems={filteredTrainSchedules}
filteredTimetableItems={filteredTimetableItems}
timetableFilters={timetableFilters}
selectedTimetableItemIds={selectedTimetableItemIds}
setSelectedTimetableItemIds={setSelectedTimetableItemIds}
Expand All @@ -191,7 +191,7 @@ const Timetable = ({
isInSelection={selectedTimetableItemIds.length > 0}
/>
<Virtualizer overscan={15}>
{filteredTrainSchedules.map((timetableItem, index) => (
{filteredTimetableItems.map((timetableItem, index) => (
<div key={`timetable-train-card-${timetableItem.id}`}>
{showDepartureDates[index] && (
<div className="scenario-timetable-departure-date">
Expand Down Expand Up @@ -241,8 +241,8 @@ const Timetable = ({
toggleConflictsList={toggleConflictsListExpanded}
// TODO PACED TRAIN : Adapt this props to handle paced trains in issue
trainSchedulesDetails={
filteredTrainSchedules.filter((train) =>
isTrainSchedule(train.id)
filteredTimetableItems.filter((timetableItem) =>
isTrainSchedule(timetableItem.id)
) as TrainScheduleWithDetails[]
}
onConflictClick={handleConflictClick}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import { formatTrainScheduleIdToEditoastTrainId, isTrainSchedule } from 'utils/t

import FilterPanel from './FilterPanel';
import type { TimetableFilters, TimetableItemResult } from './types';
import { timetableHasInvalidTrain } from './utils';
import { timetableHasInvalidItem } from './utils';

type TimetableToolbarProps = {
showTrainDetails: boolean;
Expand Down Expand Up @@ -279,7 +279,7 @@ const TimetableToolbar = ({
</div>
)}
</div>
{timetableHasInvalidTrain(filteredTimetableItems) && (
{timetableHasInvalidItem(filteredTimetableItems) && (
<div className="invalid-trains">
<Alert size="sm" variant="fill" />
<span data-testid="invalid-trains-message" className="invalid-trains-message">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,16 @@ import type {
TimetableItemResult,
ValidityFilter,
} from './types';
import { extractTagCode, keepTrain } from './utils';
import { extractTagCode, keepItem } from './utils';

/**
* Hook filtering a train schedules array for timetable train cards
* Hook filtering a timetable items array depending on some filters
* @param timetableItems the timetable's items
* @param setDisplayedTimetableItems the function to update the trains to display in the timetable
* @returns all filters and their setters
* @returns all filters, their setters, the unique speed limit tags among all items and the filtered timetable items
*/
const useFilterTrainSchedules = (
const useFilterTimetableItems = (
timetableItems: TimetableItemResult[]
): TimetableFilters & { filteredTrainSchedules: TimetableItemResult[] } => {
): TimetableFilters & { filteredTimetableItems: TimetableItemResult[] } => {
const [nameLabelFilter, setNameLabelFilter] = useState('');
const [rollingStockFilter, setRollingStockFilter] = useState('');
const [validityFilter, setValidityFilter] = useState<ValidityFilter>('both');
Expand All @@ -32,27 +31,27 @@ const useFilterTrainSchedules = (
const debouncedRollingstockFilter = useDebounce(rollingStockFilter, 500);

const uniqueTags = useMemo(
() => uniq(timetableItems.map((train) => extractTagCode(train.speedLimitTag))),
() => uniq(timetableItems.map((timetableItem) => extractTagCode(timetableItem.speedLimitTag))),
[timetableItems]
);

const filteredTrainSchedules: TimetableItemResult[] = useMemo(
const filteredTimetableItems: TimetableItemResult[] = useMemo(
() =>
timetableItems.filter((trainSchedule) => {
if (!keepTrain(trainSchedule, debouncedNameLabelFilter)) return false;
timetableItems.filter((timetableItem) => {
if (!keepItem(timetableItem, debouncedNameLabelFilter)) return false;

// Apply validity filter
if (validityFilter !== 'both') {
if (validityFilter === 'valid' && !trainSchedule.isValid) return false;
if (validityFilter === 'invalid' && trainSchedule.isValid) return false;
if (validityFilter === 'valid' && !timetableItem.isValid) return false;
if (validityFilter === 'invalid' && timetableItem.isValid) return false;
}

// Apply scheduled points honored filter
if (scheduledPointsHonoredFilter !== 'both') {
if (!trainSchedule.isValid) {
if (!timetableItem.isValid) {
return false;
}
const { scheduledPointsNotHonored } = trainSchedule;
const { scheduledPointsNotHonored } = timetableItem;
if (
(scheduledPointsHonoredFilter === 'honored' && scheduledPointsNotHonored) ||
(scheduledPointsHonoredFilter === 'notHonored' && !scheduledPointsNotHonored)
Expand All @@ -64,7 +63,7 @@ const useFilterTrainSchedules = (
// Apply tag filter
if (
selectedTags.size > 0 &&
!selectedTags.has(extractTagCode(trainSchedule.speedLimitTag))
!selectedTags.has(extractTagCode(timetableItem.speedLimitTag))
) {
return false;
}
Expand All @@ -77,7 +76,7 @@ const useFilterTrainSchedules = (
reference = '',
series = '',
subseries = '',
} = trainSchedule.rollingStock?.metadata || {};
} = timetableItem.rollingStock?.metadata || {};
if (
![detail, family, reference, series, subseries].some((v) =>
v.toLowerCase().includes(debouncedRollingstockFilter.toLowerCase())
Expand All @@ -99,7 +98,7 @@ const useFilterTrainSchedules = (
);

return {
filteredTrainSchedules,
filteredTimetableItems,
uniqueTags,
nameLabelFilter,
setNameLabelFilter,
Expand All @@ -114,4 +113,4 @@ const useFilterTrainSchedules = (
};
};

export default useFilterTrainSchedules;
export default useFilterTimetableItems;
14 changes: 7 additions & 7 deletions front/src/modules/trainschedule/components/Timetable/utils.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import specialCodeDictionary from './consts';
import type { TimetableItemResult } from './types';

/** Filter train schedules by their names and labels */
export const keepTrain = (train: TimetableItemResult, searchString: string): boolean => {
/** Filter timetable items by their names and labels */
export const keepItem = (item: TimetableItemResult, searchString: string): boolean => {
if (searchString) {
const searchStringInName = train.trainName.toLowerCase().includes(searchString.toLowerCase());
const searchStringInTags = train.labels
? train.labels.join('').toLowerCase().includes(searchString.toLowerCase())
const searchStringInName = item.trainName.toLowerCase().includes(searchString.toLowerCase());
const searchStringInTags = item.labels
? item.labels.join('').toLowerCase().includes(searchString.toLowerCase())
: false;
return searchStringInName || searchStringInTags;
}
Expand All @@ -25,5 +25,5 @@ export const extractTagCode = (tag?: string | null) => {
return matches ? matches[0] : tag;
};

export const timetableHasInvalidTrain = (trains: TimetableItemResult[]) =>
trains.some((train) => train.invalidReason);
export const timetableHasInvalidItem = (timetableItems: TimetableItemResult[]) =>
timetableItems.some((timetableItem) => timetableItem.invalidReason);

0 comments on commit f24ec4c

Please sign in to comment.