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) {
|
||||
toast.error({
|
||||
position: 'topRight',
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user