Skip to content

Commit

Permalink
feat(trackersOrder): add orderTracker reducer
Browse files Browse the repository at this point in the history
  • Loading branch information
Clm-Roig committed Jun 23, 2022
1 parent 508800c commit e627fbc
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 0 deletions.
53 changes: 53 additions & 0 deletions src/store/trackers/reducers/__tests__/order.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import {
testTracker1,
testTracker1Id,
testTracker2,
testTracker2Id,
testTracker3,
testTracker3Id
} from '../../FAKE_DATA';
import trackersReducer, { initialState, orderTracker } from '../../trackersSlice';

describe('trackers reducer', () => {
describe('Move a tracker', () => {
it('should not do anything if the new index is the same as the previous one', () => {
const finalState = trackersReducer(
{
...initialState,
trackers: [testTracker1, testTracker2, testTracker3]
},
orderTracker({ trackerIdSource: testTracker1Id, trackerIdDestination: testTracker1Id })
);
const { trackers: trackers } = finalState;
expect(trackers[0].id).toBe(testTracker1Id);
expect(trackers[1].id).toBe(testTracker2Id);
expect(trackers[2].id).toBe(testTracker3Id);
});
it('should move the first tracker from the start to the end.', () => {
const finalState = trackersReducer(
{
...initialState,
trackers: [testTracker1, testTracker2, testTracker3]
},
orderTracker({ trackerIdSource: testTracker1Id, trackerIdDestination: testTracker3Id })
);
const { trackers: trackers } = finalState;
expect(trackers[0].id).toBe(testTracker2Id);
expect(trackers[1].id).toBe(testTracker3Id);
expect(trackers[2].id).toBe(testTracker1Id);
});
it('should move the last tracker from the end to the start.', () => {
const finalState = trackersReducer(
{
...initialState,
trackers: [testTracker1, testTracker2, testTracker3]
},
orderTracker({ trackerIdSource: testTracker3Id, trackerIdDestination: testTracker1Id })
);
const { trackers: trackers } = finalState;
expect(trackers[0].id).toBe(testTracker3Id);
expect(trackers[1].id).toBe(testTracker1Id);
expect(trackers[2].id).toBe(testTracker2Id);
});
});
});
20 changes: 20 additions & 0 deletions src/store/trackers/reducers/order.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { PayloadAction } from '@reduxjs/toolkit';

import TrackersState from '../TrackersState';

export type Indexes = {
trackerIdSource: string;
trackerIdDestination: string;
};

const orderTrackerReducer = (state: TrackersState, action: PayloadAction<Indexes>) => {
const { trackerIdSource, trackerIdDestination } = action.payload;
const sourceIndex = state.trackers.findIndex((t) => t.id === trackerIdSource);
const destinationIndex = state.trackers.findIndex((t) => t.id === trackerIdDestination);
if (sourceIndex !== -1 && destinationIndex !== -1) {
const tracker = state.trackers.splice(sourceIndex, 1)[0];
state.trackers.splice(destinationIndex, 0, tracker);
}
};

export { orderTrackerReducer };
3 changes: 3 additions & 0 deletions src/store/trackers/trackersSlice.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import { editTrackerReducer } from './reducers/edit';
import { hideTrackerReducer } from './reducers/hide';
import { markTrackerAsActiveReducer, markTrackersAsActiveReducer } from './reducers/markAsActive';
import { markTrackerAsVisibleReducer } from './reducers/markAsVisible';
import { orderTrackerReducer } from './reducers/order';
import { setSelectedDateReducer } from './reducers/setSelectedDate';
import { completelyValidateReducer, customValidateReducer } from './reducers/validate';

Expand Down Expand Up @@ -48,6 +49,7 @@ export const trackersSlice = createSlice({
markTrackersAsActive: markTrackersAsActiveReducer,
markTrackerAsActive: markTrackerAsActiveReducer,
markTrackerAsVisible: markTrackerAsVisibleReducer,
orderTracker: orderTrackerReducer,
setSelectedDate: setSelectedDateReducer
}
// The `extraReducers` field lets the slice handle actions defined elsewhere,
Expand All @@ -69,6 +71,7 @@ export const {
markTrackerAsActive,
markTrackersAsActive,
markTrackerAsVisible,
orderTracker,
setSelectedDate
} = trackersSlice.actions;
export default trackersSlice.reducer;

0 comments on commit e627fbc

Please sign in to comment.