diff --git a/src/js/common/pages/Politician/PoliticianDetailsPage.jsx b/src/js/common/pages/Politician/PoliticianDetailsPage.jsx index b30f368e0..48002d45a 100644 --- a/src/js/common/pages/Politician/PoliticianDetailsPage.jsx +++ b/src/js/common/pages/Politician/PoliticianDetailsPage.jsx @@ -101,8 +101,14 @@ class PoliticianDetailsPage extends Component { this.politicianStoreListener = PoliticianStore.addListener(this.onPoliticianStoreChange.bind(this)); this.onRepresentativeStoreChange(); this.representativeStoreListener = RepresentativeStore.addListener(this.onRepresentativeStoreChange.bind(this)); + let politicianSEOFriendlyPathFromObject; + let triggerSEOPathRedirect = false; if (politicianSEOFriendlyPathFromUrl) { const politician = PoliticianStore.getPoliticianBySEOFriendlyPath(politicianSEOFriendlyPathFromUrl); + politicianSEOFriendlyPathFromObject = politician.seo_friendly_path; + triggerSEOPathRedirect = politicianSEOFriendlyPathFromObject && (politicianSEOFriendlyPathFromUrl !== politicianSEOFriendlyPathFromObject); + // console.log('componentDidMount politicianSEOFriendlyPathFromObject: ', politicianSEOFriendlyPathFromObject); + // Only change politician if the we_vote_id is different if (politician && politician.politician_we_vote_id) { this.setState({ linkedCampaignXWeVoteId: politician.linked_campaignx_we_vote_id, @@ -125,6 +131,10 @@ class PoliticianDetailsPage extends Component { } // Take the "calculated" identifiers and retrieve if missing retrievePoliticianFromIdentifiersIfNeeded(politicianSEOFriendlyPathFromUrl, politicianWeVoteId); + // console.log('componentDidMount triggerSEOPathRedirect: ', triggerSEOPathRedirect, ', politicianSEOFriendlyPathFromObject: ', politicianSEOFriendlyPathFromObject); + if (triggerSEOPathRedirect && politicianSEOFriendlyPathFromObject) { + historyPush(`/${politicianSEOFriendlyPathFromObject}/-`, true); + } window.scrollTo(0, 0); } @@ -134,31 +144,47 @@ class PoliticianDetailsPage extends Component { const { politicianSEOFriendlyPath: prevPoliticianSEOFriendlyPath, politicianWeVoteId: prevPoliticianWeVoteId } = prevParams; const { match: { params } } = this.props; const { politicianSEOFriendlyPath: politicianSEOFriendlyPathFromUrl, politicianWeVoteId } = params; + let politicianSEOFriendlyPath = ''; let triggerFreshRetrieve = false; - // console.log('componentDidUpdate politicianSEOFriendlyPathFromUrl: ', politicianSEOFriendlyPathFromUrl, ', politicianWeVoteId: ', politicianWeVoteId); - if (politicianSEOFriendlyPathFromUrl && politicianSEOFriendlyPathFromUrl !== prevPoliticianSEOFriendlyPath) { + let triggerSEOPathRedirect = false; + const politician = PoliticianStore.getPoliticianBySEOFriendlyPath(politicianSEOFriendlyPathFromUrl); + const politicianSEOFriendlyPathFromObject = politician.seo_friendly_path; + // console.log('componentDidUpdate politicianSEOFriendlyPathFromUrl: ', politicianSEOFriendlyPathFromUrl, ', politicianSEOFriendlyPathFromObject: ', politicianSEOFriendlyPathFromObject); + if (politicianSEOFriendlyPathFromObject && (politicianSEOFriendlyPathFromUrl !== politicianSEOFriendlyPathFromObject)) { + politicianSEOFriendlyPath = politicianSEOFriendlyPathFromObject; + triggerSEOPathRedirect = true; + } else if (politicianSEOFriendlyPathFromUrl && politicianSEOFriendlyPathFromUrl !== prevPoliticianSEOFriendlyPath) { // console.log('componentDidUpdate prevPoliticianSEOFriendlyPath: ', prevPoliticianSEOFriendlyPath); - this.clearPoliticianValues(); - const politician = PoliticianStore.getPoliticianBySEOFriendlyPath(politicianSEOFriendlyPathFromUrl); - if (politician && politician.politician_we_vote_id) { - this.setState({ - linkedCampaignXWeVoteId: politician.linked_campaignx_we_vote_id, - politicianSEOFriendlyPath: politicianSEOFriendlyPathFromUrl, - politicianSEOFriendlyPathForDisplay: politicianSEOFriendlyPathFromUrl, - politicianWeVoteId: politician.politician_we_vote_id, - politicianWeVoteIdForDisplay: politician.politician_we_vote_id, - }, () => this.onfirstRetrievalOfPoliticianWeVoteId()); + const politicianWeVoteIdFromUrl = PoliticianStore.getPoliticianWeVoteIdFromPoliticianSEOFriendlyPath(politicianSEOFriendlyPathFromUrl); + const politicianWeVoteIdFromPreviousUrl = PoliticianStore.getPoliticianWeVoteIdFromPoliticianSEOFriendlyPath(prevPoliticianSEOFriendlyPath); + const isSamePolitician = politicianWeVoteIdFromPreviousUrl && (politicianWeVoteIdFromUrl !== politicianWeVoteIdFromPreviousUrl); + // Only change politician if the we_vote_id is different + if (isSamePolitician) { + // Don't change the politician if the we_vote_id is the same as the previous + // but specify that we want to triggerSEOPathRedirect + politicianSEOFriendlyPath = politician.seo_friendly_path; + triggerSEOPathRedirect = true; } else { - this.setState({ - politicianSEOFriendlyPath: politicianSEOFriendlyPathFromUrl, - politicianSEOFriendlyPathForDisplay: politicianSEOFriendlyPathFromUrl, - }, () => this.onfirstRetrievalOfPoliticianWeVoteId()); + this.clearPoliticianValues(); + if (politician && politician.politician_we_vote_id) { + this.setState({ + linkedCampaignXWeVoteId: politician.linked_campaignx_we_vote_id, + politicianSEOFriendlyPath: politicianSEOFriendlyPathFromUrl, + politicianSEOFriendlyPathForDisplay: politicianSEOFriendlyPathFromUrl, + politicianWeVoteId: politician.politician_we_vote_id, + politicianWeVoteIdForDisplay: politician.politician_we_vote_id, + }, () => this.onfirstRetrievalOfPoliticianWeVoteId()); + } else { + this.setState({ + politicianSEOFriendlyPath: politicianSEOFriendlyPathFromUrl, + politicianSEOFriendlyPathForDisplay: politicianSEOFriendlyPathFromUrl, + }, () => this.onfirstRetrievalOfPoliticianWeVoteId()); + } + triggerFreshRetrieve = true; } - triggerFreshRetrieve = true; } else if (politicianWeVoteId && politicianWeVoteId !== prevPoliticianWeVoteId) { // console.log('componentDidUpdate prevPoliticianWeVoteId: ', prevPoliticianWeVoteId); this.clearPoliticianValues(); - const politician = PoliticianStore.getPoliticianByWeVoteId(politicianWeVoteId); if (politician && politician.politician_we_vote_id) { this.setState({ linkedCampaignXWeVoteId: politician.linked_campaignx_we_vote_id, @@ -175,9 +201,17 @@ class PoliticianDetailsPage extends Component { } triggerFreshRetrieve = true; } + // console.log('componentDidUpdate triggerSEOPathRedirect: ', triggerSEOPathRedirect, ', politicianSEOFriendlyPath: ', politicianSEOFriendlyPath); + if (triggerSEOPathRedirect && politicianSEOFriendlyPath) { + // Direct to the updated SEO path + historyPush(`/${politicianSEOFriendlyPath}/-`, true); + } if (triggerFreshRetrieve) { // Take the "calculated" identifiers and retrieve if missing retrievePoliticianFromIdentifiersIfNeeded(politicianSEOFriendlyPathFromUrl, politicianWeVoteId); + } + if (triggerFreshRetrieve || triggerSEOPathRedirect) { + // Take the "calculated" identifiers and retrieve if missing window.scrollTo(0, 0); } } diff --git a/src/js/common/stores/PoliticianStore.js b/src/js/common/stores/PoliticianStore.js index fcc4748ad..8ef933892 100644 --- a/src/js/common/stores/PoliticianStore.js +++ b/src/js/common/stores/PoliticianStore.js @@ -331,7 +331,6 @@ class PoliticianStore extends ReduceStore { // - latest_politician_supporter_endorsement_list // - latest_politician_supporter_list // - voter_politician_supporter - if (!action.res || !action.res.success) { revisedState = state; if (action.res && action.res.seo_friendly_path) { @@ -383,6 +382,14 @@ class PoliticianStore extends ReduceStore { if (!(politician.seo_friendly_path in allCachedPoliticianWeVoteIdsBySEOFriendlyPath)) { allCachedPoliticianWeVoteIdsBySEOFriendlyPath[politician.seo_friendly_path] = politician.politician_we_vote_id; } + // Link alternate SEOFriendlyPaths to politician_we_vote_id + if (politician.seo_friendly_path_list) { + for (let i = 0; i < politician.seo_friendly_path_list.length; ++i) { + if (!(politician.seo_friendly_path_list[i] in allCachedPoliticianWeVoteIdsBySEOFriendlyPath)) { + allCachedPoliticianWeVoteIdsBySEOFriendlyPath[politician.seo_friendly_path_list[i]] = politician.politician_we_vote_id; + } + } + } if (action.res.seo_friendly_path) { const foundIndex = politicianDataNotFoundForSEOFriendlyPathList.indexOf(action.res.seo_friendly_path); if (foundIndex !== -1) { diff --git a/src/js/common/utils/addressFunctions.js b/src/js/common/utils/addressFunctions.js index 280af2a50..47a8ea072 100644 --- a/src/js/common/utils/addressFunctions.js +++ b/src/js/common/utils/addressFunctions.js @@ -91,7 +91,7 @@ export function convertStateCodeFilterToStateCode (stateCodeFilter) { export function isValidStateCode (incomingStateCode) { if (incomingStateCode) { // Log incoming State Code - console.log('incomingStateCode:', incomingStateCode); + // console.log('incomingStateCode:', incomingStateCode); const incomingStateCodeUpper = incomingStateCode.toUpperCase(); const existingStateCodes = Object.keys(stateCodeMap); return existingStateCodes.indexOf(incomingStateCodeUpper) > -1;