diff --git a/components/events/event-card.js b/components/events/event-card.js index 963dc009d..1a1ae38ab 100644 --- a/components/events/event-card.js +++ b/components/events/event-card.js @@ -97,11 +97,7 @@ export default props => ( - - {props.tense === 'past' - ? format(props.time, "ddd MMM Do 'YY") - : format(props.time, "ddd MMM Do 'YY, h:mm A")} - + {format(props.time, "ddd MMM Do 'YY, h:mm A")} diff --git a/components/events/event-content-loader.js b/components/events/event-content-loader.js new file mode 100644 index 000000000..eb093df1e --- /dev/null +++ b/components/events/event-content-loader.js @@ -0,0 +1,37 @@ +import React from 'react'; +import ContentLoader from 'react-content-loader'; +import styled from 'react-emotion'; +import { space } from 'styled-system'; +import { Flex } from 'grid-emotion'; + +import { breakpoints, graySecondary } from '../../utils/base.styles'; + +const EventLoader = styled(Flex)` + ${space}; + border: 1px solid ${graySecondary}; + margin: 32px 0; + min-height: 120px; + ${breakpoints.md} { + padding-right: 15px; + } + ${breakpoints.sm} { + padding-right: 15px; + } + ${breakpoints.xs} { + padding-right: 15px; + } +`; + +export default () => ( + + + + + + + + + + + +); diff --git a/package.json b/package.json index d04463cfa..d2b93f643 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,7 @@ "main": "index.js", "scripts": { "test": "xo && jest", - "lint": - "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", + "lint": "prettier 'utils/**/*.js' 'components/**/*.js' 'pages/**/*.js' 'lib/**/*.js' 'hocs/**/*.js' '*.js' --write && xo && markdownlint .", "precommit": "lint-staged", "analyze": "cross-env ANALYZE=1 next build", "dev": "cross-env NODE_ENV=development node server.js", @@ -18,19 +17,32 @@ }, "xo": { "parser": "babel-eslint", - "extends": ["prettier", "prettier/react", "plugin:react/recommended"], - "env": ["browser", "node"], + "extends": [ + "prettier", + "prettier/react", + "plugin:react/recommended" + ], + "env": [ + "browser", + "node" + ], "rules": { "linebreak-style": 0, "react/display-name": 0, "react/prop-types": 0 }, "space:": 2, - "ignores": ["next.config.js"], + "ignores": [ + "next.config.js" + ], "overrides": [ { "files": "**/__tests__/*.test.js", - "globals": ["describe", "it", "expect"] + "globals": [ + "describe", + "it", + "expect" + ] } ] }, @@ -41,8 +53,16 @@ "jest --findRelatedTests", "git add" ], - "**/*.md": ["prettier", "markdownlint", "git add"], - ".github/CONTRIBUTING.md": ["doctoc", "prettier", "git add"] + "**/*.md": [ + "prettier", + "markdownlint", + "git add" + ], + ".github/CONTRIBUTING.md": [ + "doctoc", + "prettier", + "git add" + ] }, "dependencies": { "babel-plugin-emotion": "^8.0.10", @@ -62,6 +82,7 @@ "preact-emotion": "^8.0.10", "prop-types": "^15.5.10", "react": "^16.0.0", + "react-content-loader": "^1.7.1", "react-dom": "^16.0.0", "react-emotion": "^8.0.10", "react-event-timeline": "^1.4.0", diff --git a/pages/events.js b/pages/events.js index f021f03ba..b92ad9438 100644 --- a/pages/events.js +++ b/pages/events.js @@ -9,6 +9,7 @@ import BannerSection from '../components/common/banner'; import { Container, SubTitle, Button } from '../utils/base.styles'; import { baseEventsURL, futureEventsURL, pastEventsURL, imagePlaceholderURL } from '../utils/urls'; import EventCard from '../components/events/event-card'; +import EventLoader from '../components/events/event-content-loader'; const EventsSection = styled.section` ${space}; @@ -70,11 +71,9 @@ export default class Events extends React.Component { renderEvents(events, loadLimit) { if (this.state.loading) { - return ( - - Loading.. - - ); + return [1, 2].map(i => { + return ; + }); } else if (events.length === 0) { return ( @@ -132,6 +131,7 @@ export default class Events extends React.Component { } render() { + const { loading } = this.state; return ( @@ -143,7 +143,8 @@ export default class Events extends React.Component { Upcoming Events {this.renderEvents(this.state.futureEvents, this.state.futureEventsLoadLimit)} - {this.renderLoadMoreButton(this.state.futureEvents.length, this.state.futureEventsLoadLimit, false)} + {!loading && + this.renderLoadMoreButton(this.state.futureEvents.length, this.state.futureEventsLoadLimit, false)} @@ -152,7 +153,8 @@ export default class Events extends React.Component { Recent Events {this.renderEvents(this.state.pastEvents, this.state.pastEventsLoadLimit)} - {this.renderLoadMoreButton(this.state.pastEvents.length, this.state.pastEventsLoadLimit, true)} + {!loading && + this.renderLoadMoreButton(this.state.pastEvents.length, this.state.pastEventsLoadLimit, true)} diff --git a/yarn.lock b/yarn.lock index 01a5b56c2..81c154b0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1046,7 +1046,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0, babel-runtime@^6.6.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -5834,6 +5834,12 @@ rc@~1.1.6: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-content-loader@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/react-content-loader/-/react-content-loader-1.7.1.tgz#e6e18adbf632829fd56ba6fe558d16d2a5a00af9" + dependencies: + babel-runtime "^6.6.1" + react-deep-force-update@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-2.1.1.tgz#8ea4263cd6455a050b37445b3f08fd839d86e909"