acp init
This commit is contained in:
parent
143b0e92cb
commit
99c575ac69
9
acp/.babelrc
Normal file
9
acp/.babelrc
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
"es2015",
|
||||||
|
"react"
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
["transform-react-jsx", { "pragma":"preact.h" }]
|
||||||
|
]
|
||||||
|
}
|
||||||
1501
acp/.eslintrc.js
Normal file
1501
acp/.eslintrc.js
Normal file
File diff suppressed because it is too large
Load Diff
5
acp/.gitignore
vendored
Normal file
5
acp/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package-lock.json
|
||||||
|
node_modules/
|
||||||
|
dist/
|
||||||
|
.cache/
|
||||||
|
assets/molecules
|
||||||
21
acp/acp.html
Normal file
21
acp/acp.html
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>mnml - acp</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
|
||||||
|
<meta name=apple-mobile-web-app-capable content=yes>
|
||||||
|
<meta name=apple-mobile-web-app-status-bar-style content=black>
|
||||||
|
<meta name="description" content="mnml pvp tbs">
|
||||||
|
<meta name="author" content="ntr@smokestack.io">
|
||||||
|
<link rel="stylesheet" href="./node_modules/izitoast/dist/css/iziToast.min.css"></script>
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Jura" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="assets/styles/normalize.css">
|
||||||
|
<link rel="stylesheet" href="assets/styles/skeleton.css">
|
||||||
|
</head>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>js is required to run mnml</noscript>
|
||||||
|
</body>
|
||||||
|
<script src="./acp.js"></script>
|
||||||
|
</html>
|
||||||
14
acp/acp.js
Normal file
14
acp/acp.js
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
require('./../client/assets/styles/styles.less');
|
||||||
|
require('./../client/assets/styles/menu.less');
|
||||||
|
require('./../client/assets/styles/nav.less');
|
||||||
|
require('./../client/assets/styles/footer.less');
|
||||||
|
require('./../client/assets/styles/account.less');
|
||||||
|
require('./../client/assets/styles/controls.less');
|
||||||
|
require('./../client/assets/styles/instance.less');
|
||||||
|
require('./../client/assets/styles/vbox.less');
|
||||||
|
require('./../client/assets/styles/game.less');
|
||||||
|
require('./../client/assets/styles/styles.mobile.css');
|
||||||
|
require('./../client/assets/styles/instance.mobile.css');
|
||||||
|
|
||||||
|
// kick it off
|
||||||
|
require('./src/acp');
|
||||||
50
acp/package.json
Normal file
50
acp/package.json
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"name": "mnml-client",
|
||||||
|
"version": "0.2.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"start": "parcel watch acp.html --no-hmr --out-dir /var/lib/mnml/public/current",
|
||||||
|
"build": "parcel build acp.html",
|
||||||
|
"lint": "eslint --fix --ext .jsx src/",
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "UNLICENSED",
|
||||||
|
"dependencies": {
|
||||||
|
"anime": "^0.1.2",
|
||||||
|
"animejs": "^3.0.1",
|
||||||
|
"async": "^2.6.2",
|
||||||
|
"axios": "^0.19.0",
|
||||||
|
"borc": "^2.0.3",
|
||||||
|
"docco": "^0.7.0",
|
||||||
|
"izitoast": "^1.4.0",
|
||||||
|
"keymaster": "^1.6.2",
|
||||||
|
"linkstate": "^1.1.1",
|
||||||
|
"lodash": "^4.17.15",
|
||||||
|
"node-sass": "^4.12.0",
|
||||||
|
"parcel": "^1.12.3",
|
||||||
|
"preact": "^8.4.2",
|
||||||
|
"preact-compat": "^3.19.0",
|
||||||
|
"preact-context": "^1.1.3",
|
||||||
|
"preact-redux": "^2.1.0",
|
||||||
|
"react-stripe-elements": "^3.0.0",
|
||||||
|
"redux": "^4.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"babel-core": "^6.26.3",
|
||||||
|
"babel-plugin-module-resolver": "^3.2.0",
|
||||||
|
"babel-preset-es2015": "^6.24.1",
|
||||||
|
"babel-preset-react": "^6.24.1",
|
||||||
|
"eslint": "^5.6.0",
|
||||||
|
"eslint-config-airbnb-base": "^13.1.0",
|
||||||
|
"eslint-plugin-import": "^2.14.0",
|
||||||
|
"eslint-plugin-react": "^7.11.1",
|
||||||
|
"jest": "^18.0.0",
|
||||||
|
"less": "^3.9.0"
|
||||||
|
},
|
||||||
|
"alias": {
|
||||||
|
"react": "preact-compat",
|
||||||
|
"react-dom": "preact-compat"
|
||||||
|
}
|
||||||
|
}
|
||||||
35
acp/src/acp.jsx
Normal file
35
acp/src/acp.jsx
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
const preact = require('preact');
|
||||||
|
// const logger = require('redux-diff-logger');
|
||||||
|
|
||||||
|
const { Provider, connect } = require('preact-redux');
|
||||||
|
const { createStore, combineReducers } = require('redux');
|
||||||
|
|
||||||
|
const reducers = require('./reducers');
|
||||||
|
const actions = require('./actions');
|
||||||
|
|
||||||
|
const Users = require('./acp.users');
|
||||||
|
|
||||||
|
// Redux Store
|
||||||
|
const store = createStore(
|
||||||
|
combineReducers(reducers),
|
||||||
|
window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__(),
|
||||||
|
);
|
||||||
|
|
||||||
|
document.fonts.load('16pt "Jura"').then(() => {
|
||||||
|
const Acp = () => (
|
||||||
|
<Provider store={store}>
|
||||||
|
<div id="mnml">
|
||||||
|
<nav>
|
||||||
|
<h1>acp</h1>
|
||||||
|
<hr/>
|
||||||
|
<button>users</button>
|
||||||
|
</nav>
|
||||||
|
<Users />
|
||||||
|
<aside></aside>
|
||||||
|
</div>
|
||||||
|
</Provider>
|
||||||
|
);
|
||||||
|
|
||||||
|
// eslint-disable-next-line
|
||||||
|
preact.render(<Acp />, document.body);
|
||||||
|
});
|
||||||
91
acp/src/acp.users.jsx
Normal file
91
acp/src/acp.users.jsx
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
const preact = require('preact');
|
||||||
|
const { Component } = require('preact');
|
||||||
|
const { connect } = require('preact-redux');
|
||||||
|
const linkState = require('linkstate').default;
|
||||||
|
|
||||||
|
const axios = require('axios');
|
||||||
|
|
||||||
|
const actions = require('./actions');
|
||||||
|
|
||||||
|
const addState = connect(
|
||||||
|
function receiveState(state) {
|
||||||
|
const {
|
||||||
|
account,
|
||||||
|
user,
|
||||||
|
} = state;
|
||||||
|
|
||||||
|
return {
|
||||||
|
account, user,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
|
||||||
|
function receiveDispatch(dispatch) {
|
||||||
|
function setUser(user) {
|
||||||
|
dispatch(actions.setUser(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
return { setUser };
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
class AccountStatus extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
account: {},
|
||||||
|
search: '',
|
||||||
|
msg: '-',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
render(args, state) {
|
||||||
|
const {
|
||||||
|
user,
|
||||||
|
} = args;
|
||||||
|
|
||||||
|
const {
|
||||||
|
msg,
|
||||||
|
search,
|
||||||
|
} = state;
|
||||||
|
|
||||||
|
const getUser = () =>
|
||||||
|
axios.get(`/api/acp/user/${search}`)
|
||||||
|
.then(response => {
|
||||||
|
this.setState({ msg: response });
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
this.setState({ msg: error });
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!user) {
|
||||||
|
return (
|
||||||
|
<main>
|
||||||
|
<div>{msg.message}</div>
|
||||||
|
<label for="current">Username:</label>
|
||||||
|
<input
|
||||||
|
class="login-input"
|
||||||
|
type="text"
|
||||||
|
name="username"
|
||||||
|
value={this.state.search}
|
||||||
|
onInput={linkState(this, 'search')}
|
||||||
|
placeholder="username"
|
||||||
|
/>
|
||||||
|
<button
|
||||||
|
onClick={getUser}>
|
||||||
|
Search
|
||||||
|
</button>
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<main>
|
||||||
|
{JSON.stringify(user)}
|
||||||
|
</main>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = addState(AccountStatus);
|
||||||
2
acp/src/actions.jsx
Normal file
2
acp/src/actions.jsx
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export const setAccount = value => ({ type: 'SET_ACCOUNT', value });
|
||||||
|
export const setUser = value => ({ type: 'SET_USER', value });
|
||||||
16
acp/src/reducers.jsx
Normal file
16
acp/src/reducers.jsx
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
function createReducer(defaultState, actionType) {
|
||||||
|
return function reducer(state = defaultState, action) {
|
||||||
|
switch (action.type) {
|
||||||
|
case actionType:
|
||||||
|
return action.value;
|
||||||
|
default:
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* eslint-disable key-spacing */
|
||||||
|
module.exports = {
|
||||||
|
account: createReducer(null, 'SET_ACCOUNT'),
|
||||||
|
user: createReducer(null, 'SET_USER'),
|
||||||
|
};
|
||||||
@ -204,6 +204,23 @@ function postData(url = '/', data = {}) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getData(url = '/', data = {}) {
|
||||||
|
// Default options are marked with *
|
||||||
|
return fetch(`/api${url}`, {
|
||||||
|
method: 'GET', // *GET, POST, PUT, DELETE, etc.
|
||||||
|
// mode: 'no-cors', // no-cors, cors, *same-origin
|
||||||
|
cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached
|
||||||
|
credentials: 'include', // include, same-origin, *omit
|
||||||
|
headers: {
|
||||||
|
Accept: 'application/json',
|
||||||
|
'content-type': 'application/json',
|
||||||
|
},
|
||||||
|
redirect: 'error', // manual, *follow, error
|
||||||
|
// referrer: ', // no-referrer, *client
|
||||||
|
body: JSON.stringify(data), // body data type must match "Content-Type" header
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function errorToast(message) {
|
function errorToast(message) {
|
||||||
toast.error({
|
toast.error({
|
||||||
position: 'topRight',
|
position: 'topRight',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user