Skip to content

Commit eecb121

Browse files
Merge pull request #312 from DemocracyLab/prerender_fixes
Prerender fixes
2 parents 89b40c7 + b1aafef commit eecb121

File tree

13 files changed

+81
-28
lines changed

13 files changed

+81
-28
lines changed

civictechprojects/templates/new_index.html

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@
1616
</head>
1717
<body>
1818
{{ googleTagsBodyScript }}
19+
<script>
20+
// Stop prerender.io from caching page until it loads
21+
window.prerenderReady = false;
22+
</script>
1923
<script>
2024
window.fbAsyncInit = function() {
2125
FB.init({
@@ -25,6 +29,8 @@
2529
version : 'v2.10',
2630
});
2731
FB.AppEvents.logPageView();
32+
window.democracyLabEvents = {'fbLoaded': true};
33+
window.dispatchEvent(new Event('fbLoaded'));
2834
};
2935
(function(d, s, id){
3036
var js, fjs = d.getElementsByTagName(s)[0];

common/components/componentsBySection/FindProjects/ProjectCardsContainer.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import ProjectCard from './ProjectCard.jsx';
1313
import ProjectSearchStore from '../../stores/ProjectSearchStore.js';
1414
import ProjectSearchDispatcher from '../../stores/ProjectSearchDispatcher.js';
1515
import LoadingMessage from '../../chrome/LoadingMessage.jsx';
16+
import prerender from "../../utils/prerender.js";
1617

1718
type State = {|
1819
projects: List<Project>,
@@ -28,6 +29,8 @@ class ProjectCardsContainer extends React.Component<{||}, State> {
2829
}
2930

3031
static calculateState(prevState: State): State {
32+
prerender.ready(!ProjectSearchStore.getProjectsLoading());
33+
3134
return {
3235
projects: ProjectSearchStore.getProjects(),
3336
project_pages: ProjectSearchStore.getProjectPages(),

common/components/controllers/AboutProjectController.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Truncate from "../utils/truncate.js";
1010
import AboutProjectDisplay from "../common/projects/AboutProjectDisplay.jsx";
1111
import {APIError} from "../utils/api.js";
1212
import url from "../utils/url.js";
13+
import prerender from "../utils/prerender.js";
1314

1415

1516
type State = {|
@@ -37,7 +38,7 @@ class AboutProjectController extends React.PureComponent<{||}, State> {
3738
loadProjectDetails(project: ProjectDetailsAPIData) {
3839
this.setState({
3940
project: project
40-
});
41+
}, prerender.ready);
4142
}
4243

4344
handleLoadProjectFailure(error: APIError) {

common/components/controllers/AboutUsController.jsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import BioModal from "../componentsBySection/AboutUs/BioModal.jsx";
1010
import url from "../utils/url.js";
1111
import Section from "../enums/Section.js";
1212
import LoadingMessage from "../chrome/LoadingMessage.jsx";
13+
import prerender from "../utils/prerender.js";
1314

1415
type State = {|
1516
aboutUs: ?ProjectDetailsAPIData,
@@ -42,7 +43,7 @@ class AboutUsController extends React.PureComponent<{||}, State> {
4243
loadProjectDetails(project: ProjectDetailsAPIData) {
4344
this.setState({
4445
aboutUs: project,
45-
});
46+
}, prerender.ready);
4647
}
4748

4849

common/components/controllers/ContactUsController.jsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@
22

33
import React from 'react';
44
import Headers from "../common/Headers.jsx";
5-
import {Glyph, GlyphStyles} from "../utils/glyphs.js";
65
import ContactForm from "../forms/ContactForm.jsx";
6+
import prerender from "../utils/prerender.js";
77

88
class ContactUsController extends React.PureComponent<{||}> {
9-
9+
componentDidMount() {
10+
prerender.ready();
11+
}
12+
1013
_renderHeader(): React$Node {
1114
const title: string = "DemocracyLab | Contact Us";
1215
const description: string = "Contact information for DemocracyLab."

common/components/controllers/DonateController.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import Headers from "../common/Headers.jsx";
66
import RadioButtons from "../common/selection/RadioButtons.jsx";
77
import PaypalDonationButton, {OtherAmountSelected} from "../common/integrations/PaypalDonationButton.jsx";
88
import {SelectOption} from "../types/SelectOption.jsx";
9+
import prerender from "../utils/prerender.js";
910

1011
type State = {|
1112
donateAmount: ?string,
@@ -36,6 +37,10 @@ class DonateController extends React.Component<{||}, State> {
3637
donateMonthly: null
3738
};
3839
}
40+
41+
componentDidMount() {
42+
prerender.ready();
43+
}
3944

4045
handleFieldSelection(field: string, option: SelectOption): void {
4146
let state: State = this.state;

common/components/controllers/PartnerWithUsController.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import Sponsors, {SponsorMetadata} from "../utils/Sponsors.js";
66
import Headers from "../common/Headers.jsx";
77
import Section from "../enums/Section.js";
88
import url from '../../components/utils/url.js';
9-
9+
import prerender from "../utils/prerender.js";
1010

1111

1212
class PartnerWithUsController extends React.Component<{||}> {
1313
constructor(): void {
1414
super();
1515
}
16+
17+
componentDidMount() {
18+
prerender.ready();
19+
}
1620

1721
render(): React$Node {
1822
return (

common/components/controllers/PressController.jsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@ import _ from 'lodash';
44
import React from 'react';
55
import Headers from "../common/Headers.jsx";
66
import cdn from "../utils/cdn.js";
7-
import url from "../utils/url.js";
8-
import Section from "../enums/Section.js";
9-
import ProjectAPIUtils from '../utils/ProjectAPIUtils.js';
107
import LoadingMessage from '../chrome/LoadingMessage.jsx';
8+
import prerender from "../utils/prerender.js";
119

1210

1311
//get press links
@@ -37,6 +35,10 @@ class PressController extends React.PureComponent<{||}, State> {
3735
stats: null,
3836
}
3937
}
38+
39+
componentDidMount() {
40+
prerender.ready();
41+
}
4042

4143
_renderHeader(): React$Node {
4244
const title: string = "DemocracyLab | News Feed";

common/components/test/utils.test.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,23 @@ import NavigationStore from '../stores/NavigationStore.js';
1010
import renderer from 'react-test-renderer';
1111

1212
describe('utils', () => {
13-
14-
test('async', () => {
13+
14+
test('async.doWhenReady', () => {
1515
const readyFunc = () => true;
1616
const doVoidFunc = jest.fn();
17-
17+
1818
async.doWhenReady(readyFunc, doVoidFunc, 1);
1919
expect(doVoidFunc).toBeCalled();
2020
});
21+
22+
test('async.onEvent', () => {
23+
const eventName = 'testEvent';
24+
const doVoidFunc = jest.fn();
25+
26+
async.onEvent(eventName, doVoidFunc);
27+
global.dispatchEvent(new Event(eventName));
28+
expect(doVoidFunc).toBeCalled();
29+
});
2130

2231
test('glyphs', () => {
2332
const glyph = Glyph('fa style', ' class2', ' class3');

common/components/utils/async.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,25 @@ class async {
2828
doFunc(value);
2929
}
3030
}
31+
32+
/**
33+
* Wait until a global(window) event has fired before performing the action. Besides subscribing to the event,
34+
* it will also check window.democracyLabEvents for the event (in case event fired before the subscription was made)
35+
*
36+
* @param eventName Name of the event to wait for
37+
* @param doFunc Action to perform
38+
*/
39+
static onEvent(eventName: string, doFunc: () => void): void {
40+
// Check event list first
41+
if (window.democracyLabEvents && eventName in window.democracyLabEvents) {
42+
doFunc();
43+
} else {
44+
// Otherwise add event listener
45+
window.addEventListener(eventName, () => {
46+
doFunc();
47+
});
48+
}
49+
}
3150
}
3251

3352
export default async

0 commit comments

Comments
 (0)