Merge pull request #1 from BradNut/updatedeps

Updating dependencies and fixing issues on update.
This commit is contained in:
Bradley Shellnut 2021-10-04 11:24:44 -07:00 committed by GitHub
commit c67d0db504
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 14831 additions and 186 deletions

View file

@ -46,24 +46,31 @@ export default function Event({ event }) {
</div> </div>
{showSchedule && {showSchedule &&
scheduleEvents && scheduleEvents &&
scheduleEvents.map(({ name, start, end, venueName }) => ( scheduleEvents.map(
<ScheduleStyle key={name} className="schedule-event"> ({
<div> name: eventName,
{start && ( start: eventStart,
<h3> end: eventEnd,
{start} venueName: eventVenueName,
{end && ` - {end}`} }) => (
</h3> <ScheduleStyle key={name} className="schedule-event">
)} <div>
</div> {eventStart && (
<div> <h3>
{name && <h3>{name}</h3>} {eventStart}
{venueName && ( {eventEnd && ` - {end}`}
<div dangerouslySetInnerHTML={{ __html: venueName }} /> </h3>
)} )}
</div> </div>
</ScheduleStyle> <div>
))} {eventName && <h3>{eventName}</h3>}
{eventVenueName && (
<div dangerouslySetInnerHTML={{ __html: eventVenueName }} />
)}
</div>
</ScheduleStyle>
)
)}
</EventStyles> </EventStyles>
); );
} }

View file

@ -7,6 +7,9 @@ const Layout = ({ children }) => (
<Head> <Head>
<title>NN By the Sea</title> <title>NN By the Sea</title>
</Head> </Head>
<noscript>
<h1>Please enable JavaScript to view our site.</h1>
</noscript>
<main> <main>
<div className="container">{children}</div> <div className="container">{children}</div>
</main> </main>

View file

@ -18,5 +18,7 @@ export default function WeddingStart() {
update: 60000, update: 60000,
}); });
return <>{timeAsDays}</>; return (
<span style={{ color: '#e64c44', fontSize: '3.157rem' }}>{timeAsDays}</span>
);
} }

14732
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -10,49 +10,53 @@
}, },
"dependencies": { "dependencies": {
"babel-core": "^6.26.3", "babel-core": "^6.26.3",
"babel-plugin-styled-components": "^1.12.0", "babel-plugin-styled-components": "^1.13.2",
"bcryptjs": "^2.4.3", "bcryptjs": "^2.4.3",
"cloudinary-build-url": "^0.2.1", "cloudinary-build-url": "^0.2.1",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"escape-html": "^1.0.3",
"jsonwebtoken": "^8.5.1", "jsonwebtoken": "^8.5.1",
"mongodb": "^3.6.9", "mongodb": "^4.1.2",
"mongoose": "^5.12.13", "mongoose": "^6.0.8",
"next": "^10.2.3", "next": "^11.1.2",
"next-iron-session": "^4.2.0", "next-iron-session": "^4.2.0",
"next-with-apollo": "^5.1.1", "next-with-apollo": "^5.2.1",
"normalize.css": "^8.0.1", "normalize.css": "^8.0.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-icons": "^4.2.0", "react-icons": "^4.2.0",
"styled-components": "^5.3.0", "styled-components": "^5.3.1",
"swr": "^0.5.6", "swr": "^0.5.6",
"waait": "^1.0.5" "waait": "^1.0.5"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.14.3", "@babel/core": "^7.15.5",
"@babel/preset-env": "^7.14.4", "@babel/preset-env": "^7.15.6",
"@typescript-eslint/eslint-plugin": "^4.26.1", "@typescript-eslint/eslint-plugin": "^4.32.0",
"@typescript-eslint/parser": "^4.26.1", "@typescript-eslint/parser": "^4.32.0",
"babel-eslint": "^10.1.0", "babel-eslint": "^10.1.0",
"eslint": "^7.28.0", "eslint": "^7.32.0",
"eslint-config-airbnb": "^18.2.1", "eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.3.0",
"eslint-config-wesbos": "^2.0.0-beta.7", "eslint-config-wesbos": "^2.0.1",
"eslint-plugin-html": "^6.1.2", "eslint-plugin-html": "^6.2.0",
"eslint-plugin-import": "^2.23.4", "eslint-plugin-import": "^2.24.2",
"eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^3.4.0", "eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.24.0", "eslint-plugin-react": "^7.26.0",
"eslint-plugin-react-hooks": "^4.2.0", "eslint-plugin-react-hooks": "^4.2.0",
"prettier": "^2.3.1", "prettier": "^2.4.1",
"typescript": "^4.3.2" "typescript": "^4.4.3"
}, },
"eslintConfig": { "eslintConfig": {
"extends": [ "extends": [
"wesbos" "wesbos"
] ],
"rules": {
"react/prop-types": 0
}
}, },
"//": "This is our babel config, I prefer this over a .babelrc file", "//": "This is our babel config, I prefer this over a .babelrc file",
"babel": { "babel": {
@ -108,4 +112,4 @@
} }
} }
} }
} }

View file

@ -8,7 +8,7 @@ export default function FourOhFourPage() {
</Head> </Head>
<h1>Sorry page not found!</h1> <h1>Sorry page not found!</h1>
<p>404.</p> <p>404.</p>
<p>You just hit a route that doesn&#39;t exist.</p> <p>You just hit a route that doesn't exist.</p>
</> </>
); );
} }

View file

@ -4,8 +4,8 @@ import { ServerStyleSheet } from 'styled-components';
export default class MyDocument extends Document { export default class MyDocument extends Document {
static getInitialProps({ renderPage }) { static getInitialProps({ renderPage }) {
const sheet = new ServerStyleSheet(); const sheet = new ServerStyleSheet();
const page = renderPage((App) => (props) => const page = renderPage(
sheet.collectStyles(<App {...props} />) (App) => (props) => sheet.collectStyles(<App {...props} />)
); );
const styleTags = sheet.getStyleElement(); const styleTags = sheet.getStyleElement();
return { ...page, styleTags }; return { ...page, styleTags };

View file

@ -1,3 +1,4 @@
import escape from 'escape-html';
import withSession from '../../lib/session'; import withSession from '../../lib/session';
import Group from '../../models/Group'; import Group from '../../models/Group';
import Guest from '../../models/Guest'; import Guest from '../../models/Guest';
@ -60,7 +61,7 @@ export default withSession(async (req, res) => {
try { try {
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
if (process.env.SITE_ENV === 'TEST_SITE') { if (process.env.SITE_ENV === 'TEST_SITE') {
console.log('DONE!') console.log('DONE!');
res.status(200).json(JSON.stringify({ message: 'SUCCESS' })); res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
} else { } else {
const { groupId, guests, note } = body; const { groupId, guests, note } = body;
@ -70,8 +71,8 @@ export default withSession(async (req, res) => {
const accepted = guest?.rsvpStatus === 'accepted'; const accepted = guest?.rsvpStatus === 'accepted';
guestData.rsvpStatus = guestData.rsvpStatus =
guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited'; guest?.rsvpStatus !== 'invited' ? guest?.rsvpStatus : 'invited';
guestData.dietaryNotes = guest?.dietaryNotes; guestData.dietaryNotes = escape(guest?.dietaryNotes);
guestData.songRequests = guest?.songRequests; guestData.songRequests = escape(guest?.songRequests);
guestData.plusOne = guestData.plusOne =
(guestData?.hasPlusOne && guest?.plusOne && accepted) || false; (guestData?.hasPlusOne && guest?.plusOne && accepted) || false;
guestData.plusOneFirstName = guestData.plusOneFirstName =
@ -81,7 +82,7 @@ export default withSession(async (req, res) => {
guestData.save(); guestData.save();
} }
await Group.findByIdAndUpdate(groupId, { await Group.findByIdAndUpdate(groupId, {
note, note: escape(note),
}); });
res.status(200).json(JSON.stringify({ message: 'SUCCESS' })); res.status(200).json(JSON.stringify({ message: 'SUCCESS' }));
} }

View file

@ -1,4 +1,5 @@
import bcrypt from 'bcryptjs'; import bcrypt from 'bcryptjs';
import escape from 'escape-html';
import withSession from '../../lib/session'; import withSession from '../../lib/session';
import connectDb from '../../utils/db'; import connectDb from '../../utils/db';
import User from '../../models/User'; import User from '../../models/User';
@ -14,7 +15,7 @@ export default withSession(async (req, res) => {
} }
try { try {
if (username && password && penguin && penguin === 'penguin') { if (username && password && penguin && escape(penguin) === 'penguin') {
let isAuthorized = false; let isAuthorized = false;
// TODO: REMOVE THIS IF GOING TO PRODUCTION // TODO: REMOVE THIS IF GOING TO PRODUCTION
@ -24,7 +25,7 @@ export default withSession(async (req, res) => {
await req.session.save(); await req.session.save();
res.json(user); res.json(user);
} else { } else {
const userData = await User.findOne({ username }); const userData = await User.findOne({ username: escape(username) });
const savedPassword = userData?.password || ''; const savedPassword = userData?.password || '';
isAuthorized = await compare(password, savedPassword); isAuthorized = await compare(password, savedPassword);
if (isAuthorized) { if (isAuthorized) {

View file

@ -1,3 +1,4 @@
import escape from 'escape-html';
import withSession from '../../lib/session'; import withSession from '../../lib/session';
import connectDb from '../../utils/db.js'; import connectDb from '../../utils/db.js';
import Guest from '../../models/Guest'; import Guest from '../../models/Guest';
@ -25,8 +26,8 @@ export default withSession(async (req, res) => {
try { try {
const result = await Guest.findOne({ const result = await Guest.findOne({
firstName: { $regex: new RegExp(firstName.trim(), 'i') }, firstName: { $regex: new RegExp(escape(firstName.trim()), 'i') },
lastName: { $regex: new RegExp(lastName.trim(), 'i') }, lastName: { $regex: new RegExp(escape(lastName.trim()), 'i') },
}); });
// console.log(JSON.stringify(result)); // console.log(JSON.stringify(result));
res.status(200).json({ status: 'SUCCESS', groupId: result.group }); res.status(200).json({ status: 'SUCCESS', groupId: result.group });

View file

@ -129,13 +129,13 @@ export default function PartyPage() {
{weddingParty.map((party, index) => ( {weddingParty.map((party, index) => (
<PartyCard className="card" key={index}> <PartyCard className="card" key={index}>
<h2 className="center">{party.name}</h2> <h2 className="center">{party.name}</h2>
<CustomNextImage <CustomNextImage
src="https://via.placeholder.com/1200x1600.png" src="https://via.placeholder.com/1200x1600.png"
alt={`${party.name} - ${party.title}`} alt={`${party.name} - ${party.title}`}
objectFit="cover" objectFit="cover"
width="1200" width="1200"
height="1600" height="1600"
/> />
<h3 className="center">{party.title}</h3> <h3 className="center">{party.title}</h3>
</PartyCard> </PartyCard>
))} ))}

View file

@ -1,37 +0,0 @@
import useUser from '../lib/useUser'
import Layout from '../components/Layout'
const SgProfile = () => {
const { user } = useUser({ redirectTo: '/login' })
if (!user || user.isLoggedIn === false) {
return <Layout>Loading...</Layout>
}
return (
<Layout>
<h1>Your GitHub profile</h1>
<h2>
This page uses{' '}
<a href="https://nextjs.org/docs/basic-features/pages#static-generation-recommended">
Static Generation (SG)
</a>{' '}
and the <a href="/api/user">/api/user</a> route (using{' '}
<a href="https://github.com/zeit/swr">SWR</a>)
</h2>
<p style={{ fontStyle: 'italic' }}>
Public data, from{' '}
<a href={githubUrl(user.login)}>{githubUrl(user.login)}</a>, reduced to
`login` and `avatar_url`.
</p>
<pre>{JSON.stringify(user, null, 2)}</pre>
</Layout>
)
}
function githubUrl(login) {
return `https://api.github.com/users/${login}`
}
export default SgProfile

View file

@ -1,61 +0,0 @@
import PropTypes from 'prop-types';
import Layout from '../components/Layout';
import withSession from '../lib/session';
const SsrProfile = ({ user }) => (
<Layout>
<h1>Your GitHub profile</h1>
<h2>
This page uses{' '}
<a href="https://nextjs.org/docs/basic-features/pages#server-side-rendering">
Server-side Rendering (SSR)
</a>{' '}
and{' '}
<a href="https://nextjs.org/docs/basic-features/data-fetching#getserversideprops-server-side-rendering">
getServerSideProps
</a>
</h2>
{user?.isLoggedIn && (
<>
<p style={{ fontStyle: 'italic' }}>
Public data, from{' '}
<a href={githubUrl(user.login)}>{githubUrl(user.login)}</a>, reduced
to `login` and `avatar_url`.
</p>
<pre>{JSON.stringify(user, null, 2)}</pre>
</>
)}
</Layout>
);
export const getServerSideProps = withSession(async ({ req, res }) => {
const user = req.session.get('user');
if (!user) {
return {
redirect: {
destination: '/login',
permanent: false,
},
};
}
return {
props: { user: req.session.get('user') },
};
});
export default SsrProfile;
function githubUrl(login) {
return `https://api.github.com/users/${login}`;
}
SsrProfile.propTypes = {
user: PropTypes.shape({
isLoggedIn: PropTypes.bool,
login: PropTypes.string,
avatarUrl: PropTypes.string,
}),
};

View file

@ -36,9 +36,7 @@ export default function QandAPage() {
<QAStyles> <QAStyles>
<ol> <ol>
<li>Question 1</li> <li>Question 1</li>
<p> <p>Answer 1</p>
Answer 1
</p>
<li>How do I get to the venue?</li> <li>How do I get to the venue?</li>
<p> <p>
See more detailed info on our{' '} See more detailed info on our{' '}

View file

@ -163,9 +163,8 @@ export default function SingleGroupPage({ group }) {
return initial; return initial;
} }
const { inputs, handleChange, clearForm, resetForm } = useForm( const { inputs, handleChange, clearForm, resetForm } =
getInitialFormData useForm(getInitialFormData);
);
if (!user || user.isLoggedIn === false) { if (!user || user.isLoggedIn === false) {
return <Layout>Loading...</Layout>; return <Layout>Loading...</Layout>;
@ -288,7 +287,7 @@ export default function SingleGroupPage({ group }) {
gap: '1rem', gap: '1rem',
}} }}
> >
{group.guests.map((guest) => {group?.guests?.map((guest) =>
!guest.isPlusOne ? ( !guest.isPlusOne ? (
<QuestionStyles key={`${guest?.id}-dietaryNotes`}> <QuestionStyles key={`${guest?.id}-dietaryNotes`}>
<p> <p>
@ -320,7 +319,7 @@ export default function SingleGroupPage({ group }) {
gap: '1rem', gap: '1rem',
}} }}
> >
{group.guests.map((guest) => {group?.guests?.map((guest) =>
!guest?.isPlusOne ? ( !guest?.isPlusOne ? (
<QuestionStyles key={`${guest?.id}-songRequests`}> <QuestionStyles key={`${guest?.id}-songRequests`}>
<p> <p>
@ -389,20 +388,21 @@ export async function getServerSideProps({ params }) {
// TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION // TODO: REMOVE THIS WHEN TAKING YOUR SITE TO PRODUCTION
if (process.env.SITE_ENV === 'TEST_SITE') { if (process.env.SITE_ENV === 'TEST_SITE') {
const group = {};
group.id = params.id; group.id = params.id;
group.guests = [{ group.guests = [
id: 'TEST_GUEST_ID_12345', {
firstName: 'Test', id: 'TEST_GUEST_ID_12345',
lastName: 'Lastname', firstName: 'Test',
rsvpStatus: false, lastName: 'Lastname',
dietaryNotes: '', rsvpStatus: false,
songRequests: '', dietaryNotes: '',
hasPlusOne: true, songRequests: '',
plusOne: false, hasPlusOne: true,
plusOneFirstName: '', plusOne: false,
plusOneLastName: '', plusOneFirstName: '',
}]; plusOneLastName: '',
},
];
group.note = ''; group.note = '';
return { props: { group } }; return { props: { group } };
} }

View file

@ -78,9 +78,7 @@ export default function TravelAndStayPage() {
<div> <div>
<h2>Hotel Information</h2> <h2>Hotel Information</h2>
<h2>Do I need to book a hotel room?</h2> <h2>Do I need to book a hotel room?</h2>
<p> <p>Answer</p>
Answer
</p>
<p>There are also hotels in the area such as:</p> <p>There are also hotels in the area such as:</p>
<ul> <ul>
<li> <li>
@ -104,7 +102,8 @@ export default function TravelAndStayPage() {
Example 1 <RiExternalLinkLine /> Example 1 <RiExternalLinkLine />
</a> </a>
</li> </li>
<p>Travel Time: X minute drive (X miles)</p><li> <p>Travel Time: X minute drive (X miles)</p>
<li>
<a <a
href="https://www.hotelexample.com/" href="https://www.hotelexample.com/"
aria-label="Name of Hotel" aria-label="Name of Hotel"

View file

@ -9,12 +9,7 @@ async function connectDb() {
if (mongoose.connection.readyState >= 1) { if (mongoose.connection.readyState >= 1) {
return; return;
} }
return mongoose.connect(url, { return mongoose.connect(url);
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
});
} }
export default connectDb; export default connectDb;