From 093f8a39fe678fa0f3f676384653e4c972b4cd4e Mon Sep 17 00:00:00 2001 From: Qstick Date: Sun, 31 Dec 2023 12:55:09 -0600 Subject: [PATCH] New: Custom sort crew by job in movie details --- .../Credits/Crew/MovieCrewPostersConnector.js | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/frontend/src/Movie/Details/Credits/Crew/MovieCrewPostersConnector.js b/frontend/src/Movie/Details/Credits/Crew/MovieCrewPostersConnector.js index 97572ed70..cc1b8ea53 100644 --- a/frontend/src/Movie/Details/Credits/Crew/MovieCrewPostersConnector.js +++ b/frontend/src/Movie/Details/Credits/Crew/MovieCrewPostersConnector.js @@ -5,6 +5,29 @@ import { createSelector } from 'reselect'; import MovieCreditPosters from '../MovieCreditPosters'; import MovieCrewPoster from './MovieCrewPoster'; +function crewSort(a, b) { + const jobOrder = ['Director', 'Writer', 'Producer', 'Executive Producer', 'Director of Photography']; + + const indexA = jobOrder.indexOf(a.job); + const indexB = jobOrder.indexOf(b.job); + + if (indexA === -1 && indexB === -1) { + return 0; + } else if (indexA === -1) { + return 1; + } else if (indexB === -1) { + return -1; + } + + if (indexA < indexB) { + return -1; + } else if (indexA > indexB) { + return 1; + } + + return 0; +} + function createMapStateToProps() { return createSelector( (state) => state.movieCredits.items, @@ -17,8 +40,10 @@ function createMapStateToProps() { return acc; }, []); + const sortedCrew = crew.sort(crewSort); + return { - items: _.uniqBy(crew, 'personName') + items: _.uniqBy(sortedCrew, 'personName') }; } );