We want you to create a very basic ecommerce project in React by creating the homepage of a web shop.
We are interested in the way you:
- setup database
- connect to this external resource from Next.js
- manage state
- work with asynchronous data
| import Document, { DocumentContext, DocumentInitialProps } from "next/document"; | |
| import { ReactElement } from "react"; | |
| import { ServerStyleSheet } from "styled-components"; | |
| interface InitialProps extends DocumentInitialProps { | |
| styles: ReactElement; | |
| } | |
| export default class MyDocument extends Document { | |
| static async getInitialProps(ctx: DocumentContext): Promise<InitialProps> { |
| // https://dev.to/selbekk/how-to-fade-in-content-as-it-scrolls-into-view-10j4 | |
| import React from "react"; | |
| import styled from "styled-components"; | |
| const Section = styled.div` | |
| opacity: 0; | |
| transform: translateY(20vh); | |
| visibility: hidden; | |
| transition: opacity 1200ms ease-out, transform 600ms ease-out, | |
| visibility 1200ms ease-out; |
| # Add to .bashrc | |
| alias ios='open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app' |
| #!/bin/sh | |
| # | |
| npm version patch | |
| git add package.json | |
| exit 0 |
| grunt.registerTask('default', function () { | |
| var fs = require('fs'); | |
| // my precommit hook is inside the repo as /hooks/pre-commit | |
| // copy the hook file to the correct place in the .git directory | |
| grunt.file.copy('hooks/pre-commit', '.git/hooks/pre-commit'); | |
| // chmod the file to readable and executable by all | |
| fs.chmodSync('.git/hooks/pre-commit', '755'); | |
| }); |
| # -r -> Include subdirectories | |
| # -n -> Print line number | |
| # -i -> Ignore case | |
| # . -> From current directory | |
| grep -rn "searchString" . |
| echo "Start Git pre commit hook" | |
| #!/bin/sh | |
| # stash unstaged changes, run release task, stage release updates and restore stashed files | |
| NAME=$(git branch | grep '*' | sed 's/* //') | |
| # don't run on rebase | |
| if [ $NAME != '(no branch)' ] | |
| then |
| /* | |
| Returns true if element has next sibling (of type element) | |
| */ | |
| function hasNextSibling(node) { | |
| var bln = false; | |
| while( (node = node.nextSibling) !== null ) { | |
| if (node.nodeType !== 1) { | |
| continue; | |
| } | |
| bln = true; |
| /** | |
| * Check element has a certain classname | |
| * We cannot use classList yet because of browser support | |
| * @param {Object} ele DOM element | |
| * @param {String} cls Classname | |
| * @return {Boolean} True is classname is found | |
| */ | |
| function hasClass(ele,cls) { | |
| if (ele === null || cls === '') return false; | |
| return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)')); |