new
This commit is contained in:
commit
9f4cf669de
6
.babelrc
Normal file
6
.babelrc
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"@babel/preset-env",
|
||||||
|
"@babel/preset-react"
|
||||||
|
]
|
||||||
|
}
|
21
.eslintrc
Normal file
21
.eslintrc
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"extends": ["eslint:recommended", "plugin:react/recommended"],
|
||||||
|
"parser": "babel-eslint",
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"es6": true,
|
||||||
|
"node": true,
|
||||||
|
"mocha": true
|
||||||
|
},
|
||||||
|
|
||||||
|
"rules": {
|
||||||
|
"quotes": [1, "single"],
|
||||||
|
"no-unused-vars": [1],
|
||||||
|
"no-use-before-define": [2, "nofunc"],
|
||||||
|
"indent": [1, 2],
|
||||||
|
"semi": [1, "never"],
|
||||||
|
"no-console": 0,
|
||||||
|
"no-irregular-whitespace": 0,
|
||||||
|
"react/prop-types": 0
|
||||||
|
}
|
||||||
|
}
|
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
node_modules
|
||||||
|
bundle.js
|
||||||
|
.git
|
16
dist/css/style.css
vendored
Normal file
16
dist/css/style.css
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
html {
|
||||||
|
position: relative;
|
||||||
|
min-height: 100%;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
/* Margin bottom by footer height */
|
||||||
|
margin-bottom: 60px;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
/* Set the fixed height of the footer here */
|
||||||
|
height: 60px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
26
dist/index.html
vendored
Normal file
26
dist/index.html
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" type="image/png" href="fire.png" />
|
||||||
|
<meta name="viewport" content="width=device-width initial-scale=1.0" />
|
||||||
|
<title>Anarchy Planet</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="css/style.css" />
|
||||||
|
<link
|
||||||
|
rel="stylesheet"
|
||||||
|
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
|
||||||
|
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
/>
|
||||||
|
<script
|
||||||
|
src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
|
||||||
|
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div className="container" id="app"></div>
|
||||||
|
<script defer src="/bundle.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
4
index.js
Normal file
4
index.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ReactDOM from 'react-dom'
|
||||||
|
import { App } from './src'
|
||||||
|
ReactDOM.render(<App />, document.getElementById('app'))
|
8153
package-lock.json
generated
Normal file
8153
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
35
package.json
Normal file
35
package.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "client",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "webpack-dev-server --config ./webpack.config.dev.js",
|
||||||
|
"build": "webpack --config ./webpack.config.prod.js",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.3.3",
|
||||||
|
"@babel/polyfill": "^7.2.5",
|
||||||
|
"@babel/preset-env": "^7.3.1",
|
||||||
|
"@babel/preset-react": "^7.0.0",
|
||||||
|
"babel-eslint": "^10.0.1",
|
||||||
|
"babel-loader": "^8.0.5",
|
||||||
|
"eslint": "^5.14.1",
|
||||||
|
"eslint-loader": "^2.1.2",
|
||||||
|
"eslint-plugin-react": "^7.12.4",
|
||||||
|
"http-proxy-middleware": "^0.19.1",
|
||||||
|
"webpack": "^4.29.5",
|
||||||
|
"webpack-cli": "^3.2.3",
|
||||||
|
"webpack-dev-server": "^3.2.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.18.0",
|
||||||
|
"react": "^16.8.2",
|
||||||
|
"react-bootstrap": "^1.0.0-beta.6",
|
||||||
|
"react-dom": "^16.8.2"
|
||||||
|
}
|
||||||
|
}
|
13
src/components/footer.js
Normal file
13
src/components/footer.js
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
const Footer = () => {
|
||||||
|
return (
|
||||||
|
<footer className="text-center footer">
|
||||||
|
<div className="container-fluid">
|
||||||
|
<h6 className="mt-3">Ⓐ anarchy planet</h6>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Footer
|
3
src/components/index.js
Normal file
3
src/components/index.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export { default as Navbar } from './navbar'
|
||||||
|
export { default as Footer } from './footer'
|
||||||
|
export { default as Main } from './main'
|
15
src/components/items/ItemList.js
Normal file
15
src/components/items/ItemList.js
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ItemRow from './ItemRow'
|
||||||
|
const ItemList = props => {
|
||||||
|
const { items } = props
|
||||||
|
console.log(items)
|
||||||
|
return (
|
||||||
|
<tbody>
|
||||||
|
{items.map(item => (
|
||||||
|
<ItemRow key={item.id} {...item} />
|
||||||
|
))}
|
||||||
|
</tbody>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ItemList
|
12
src/components/items/ItemRow.js
Normal file
12
src/components/items/ItemRow.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import React from 'react'
|
||||||
|
|
||||||
|
const ItemRow = item => {
|
||||||
|
return (
|
||||||
|
<tr>
|
||||||
|
<th>{item.id}</th>
|
||||||
|
<td>{item.name}</td>
|
||||||
|
</tr>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ItemRow
|
20
src/components/items/Items.js
Normal file
20
src/components/items/Items.js
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ItemList from './ItemList'
|
||||||
|
import Table from 'react-bootstrap/Table'
|
||||||
|
const Items = props => {
|
||||||
|
const { items } = props
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Table striped bordered hover>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>#</th>
|
||||||
|
<th>Item</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<ItemList items={items} />
|
||||||
|
</Table>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Items
|
3
src/components/items/index.js
Normal file
3
src/components/items/index.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export { default as Items } from './Items'
|
||||||
|
export { default as ItemList } from './ItemList'
|
||||||
|
export { default as ItemRow } from './ItemRow'
|
53
src/components/main.js
Normal file
53
src/components/main.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
import React, { Component } from 'react'
|
||||||
|
import axios from 'axios'
|
||||||
|
import { Items } from './items'
|
||||||
|
|
||||||
|
class Main extends Component {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
this.state = { loading: true }
|
||||||
|
}
|
||||||
|
|
||||||
|
componentDidMount() {
|
||||||
|
this.fetchAPI()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchAPI() {
|
||||||
|
try {
|
||||||
|
const { data } = await axios.get('/api')
|
||||||
|
const { ascii } = await data
|
||||||
|
await console.log(ascii)
|
||||||
|
await this.fetchItems()
|
||||||
|
await this.setState({ ascii })
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async fetchItems() {
|
||||||
|
try {
|
||||||
|
const { data } = await axios.get('/api/items')
|
||||||
|
this.setState({ loading: false, items: data })
|
||||||
|
} catch (e) {
|
||||||
|
console.log(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
renderData() {
|
||||||
|
return (
|
||||||
|
<div className="mt-5">
|
||||||
|
<Items {...this.state} />
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
renderError() {
|
||||||
|
return <div>{this.state.error} </div>
|
||||||
|
}
|
||||||
|
render() {
|
||||||
|
if (this.state.loading) return <div />
|
||||||
|
if (this.state.items) return this.renderData()
|
||||||
|
if (this.state.error) return this.renderError()
|
||||||
|
return <div />
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default Main
|
41
src/components/navbar.js
Normal file
41
src/components/navbar.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import {
|
||||||
|
Navbar,
|
||||||
|
Nav,
|
||||||
|
NavDropdown,
|
||||||
|
FormControl,
|
||||||
|
Form,
|
||||||
|
Button
|
||||||
|
} from 'react-bootstrap'
|
||||||
|
|
||||||
|
const MainNav = () => {
|
||||||
|
return (
|
||||||
|
<Navbar bg="dark" variant="dark" expand="lg">
|
||||||
|
<Navbar.Brand href="#home">Anarchy Planet</Navbar.Brand>
|
||||||
|
<Navbar.Toggle aria-controls="basic-navbar-nav" />
|
||||||
|
<Navbar.Collapse id="basic-navbar-nav">
|
||||||
|
<Nav className="mr-auto">
|
||||||
|
<Nav.Link href="#home">Home</Nav.Link>
|
||||||
|
<Nav.Link href="#link">Link</Nav.Link>
|
||||||
|
<NavDropdown title="Dropdown" id="basic-nav-dropdown">
|
||||||
|
<NavDropdown.Item href="#action/3.1">Action</NavDropdown.Item>
|
||||||
|
<NavDropdown.Item href="#action/3.2">
|
||||||
|
Another action
|
||||||
|
</NavDropdown.Item>
|
||||||
|
<NavDropdown.Item href="#action/3.3">Something</NavDropdown.Item>
|
||||||
|
<NavDropdown.Divider />
|
||||||
|
<NavDropdown.Item href="#action/3.4">
|
||||||
|
Separated link
|
||||||
|
</NavDropdown.Item>
|
||||||
|
</NavDropdown>
|
||||||
|
</Nav>
|
||||||
|
<Form inline>
|
||||||
|
<FormControl type="text" placeholder="Search" className="mr-sm-2" />
|
||||||
|
<Button variant="outline-success">Search</Button>
|
||||||
|
</Form>
|
||||||
|
</Navbar.Collapse>
|
||||||
|
</Navbar>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default MainNav
|
12
src/index.js
Normal file
12
src/index.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import ReactDOM from 'react-dom'
|
||||||
|
import { Navbar, Footer, Main } from './components'
|
||||||
|
|
||||||
|
ReactDOM.render(
|
||||||
|
<div>
|
||||||
|
<Navbar />
|
||||||
|
<Main />
|
||||||
|
<Footer />
|
||||||
|
</div>,
|
||||||
|
document.getElementById('app')
|
||||||
|
)
|
32
webpack.config.dev.js
Normal file
32
webpack.config.dev.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
module.exports = {
|
||||||
|
entry: { app: ['@babel/polyfill', './src/index.js'] },
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|jsx)$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader', 'eslint-loader']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['*', '.js', '.jsx']
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: 'bundle.js'
|
||||||
|
},
|
||||||
|
|
||||||
|
devServer: {
|
||||||
|
contentBase: './dist',
|
||||||
|
port: 8080,
|
||||||
|
open: true,
|
||||||
|
proxy: {
|
||||||
|
'/api': 'http://localhost:1337'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
32
webpack.config.prod.js
Normal file
32
webpack.config.prod.js
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
module.exports = {
|
||||||
|
entry: { app: ['@babel/polyfill', './src/index.js'] },
|
||||||
|
module: {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
test: /\.(js|jsx)$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
test: /\.js$/,
|
||||||
|
exclude: /node_modules/,
|
||||||
|
use: ['babel-loader', 'eslint-loader']
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
extensions: ['*', '.js', '.jsx']
|
||||||
|
},
|
||||||
|
output: {
|
||||||
|
filename: 'bundle.js'
|
||||||
|
},
|
||||||
|
|
||||||
|
devServer: {
|
||||||
|
contentBase: './dist',
|
||||||
|
port: 8080,
|
||||||
|
open: true,
|
||||||
|
proxy: {
|
||||||
|
'/api': 'http://localhost:1337'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user