Skip to content

Commit

Permalink
🐛 Fix pagination (load more) not to have incomplete days groups
Browse files Browse the repository at this point in the history
  • Loading branch information
karlosos committed Jun 26, 2023
1 parent e4e14fb commit 473d534
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export const TimeEntriesList = () => {
selectTimeEntriesGroupedByDate(state, timeEntriesLimit)
);

const sortedTimeEntries = Object.entries(groupedTimeEntries).sort((a, b) =>
a[0] > b[0] ? -1 : 1
const sortedTimeEntries = Array.from(groupedTimeEntries.entries()).sort(
(a, b) => (a[0] > b[0] ? -1 : 1)
);

if (sortedTimeEntries.length === 0) {
Expand Down
32 changes: 22 additions & 10 deletions src/app/features/TimeEntries/store/selectors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,33 @@ export const selectCurrentTimeEntry = (state: RootState) => {
export const selectTimeEntriesGroupedByDate = createSelector(
[selectAllTimeEntries, (_, limit: number) => limit],
(allTimeEntries, limit?: number) => {
let timeEntries = allTimeEntries
let timeEntries: TimeEntry[] = allTimeEntries
.filter((entry) => entry.stopTime)
.sort((a, b) => b.stopTime! - a.stopTime!);

if (limit !== undefined) {
timeEntries = timeEntries.slice(0, limit);
}

return timeEntries
const groupedByDate = timeEntries
.sort((a, b) => a.startTime - b.startTime)
.reduce(groupTimeEntriesByText, [])
.reverse()
.reduce(groupCombinedTimeEntriesByDate, {});
.reduce(
groupCombinedTimeEntriesByDate,
new Map<string, GroupedTimeEntry[]>()
);

// remove last (incomplete) day if there are more elements remaining
// this way we don't have incomplete groups
if (timeEntries.length !== allTimeEntries.length) {
const lastKey = Array.from(groupedByDate.keys()).pop();
if (lastKey) {
groupedByDate.delete(lastKey);
}
}

return groupedByDate;
}
);

Expand Down Expand Up @@ -77,18 +91,16 @@ const groupTimeEntriesByText = (
return grouped;
};

type GroupedEntriesByDate = {
[date: string]: GroupedTimeEntry[];
};
type EntriesByDateMap = Map<string, GroupedTimeEntry[]>;

const groupCombinedTimeEntriesByDate = (
grouped: GroupedEntriesByDate,
grouped: EntriesByDateMap,
current: GroupedTimeEntry
) => {
if (!grouped[current.date]) {
grouped[current.date] = [];
if (!grouped.has(current.date)) {
grouped.set(current.date, []);
}
grouped[current.date] = [...grouped[current.date], current];
grouped.get(current.date)?.push(current);

return grouped;
};

0 comments on commit 473d534

Please sign in to comment.