Compare commits

..

8 Commits

Author SHA1 Message Date
ef3b9935a8 Update '.gitignore' 2018-08-04 21:13:14 +00:00
502121b536 Apache htaccess redirection 2018-08-04 21:12:20 +00:00
4039a74fd7 Update '.env' 2018-08-04 21:11:01 +00:00
Malar Kannan
b3358023f1 static serving under path 2018-08-03 21:57:25 +05:30
Malar Kannan
dc9c0d5e59 added configurable root directory in .env* files 2018-08-03 00:11:20 +05:30
Malar Kannan
6bdb8b6174 menu aesthetics 2018-07-02 00:43:06 +05:30
Malar Kannan
97e628c4e1 added plot titles to config 2018-07-02 00:06:04 +05:30
Malar Kannan
b02c090d03 add multiple lines if number of charts are more 2018-07-02 00:01:28 +05:30
13 changed files with 66 additions and 27 deletions

3
.env Normal file
View File

@@ -0,0 +1,3 @@
GENERATE_SOURCEMAP=false
REACT_APP_API_HOST="http://localhost:5000/test/"
REACT_APP_API_DIR="/test/"

2
.env.development Normal file
View File

@@ -0,0 +1,2 @@
REACT_APP_API_HOST="http://localhost:3000/"
REACT_APP_API_DIR="/"

1
.gitignore vendored
View File

@@ -66,6 +66,7 @@ build/Release
# Dependency directories # Dependency directories
node_modules/ node_modules/
jspm_packages/ jspm_packages/
build/
# Typescript v1 declaration files # Typescript v1 declaration files
typings/ typings/

4
public/.htaccess Normal file
View File

@@ -0,0 +1,4 @@
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.html [QSA,L]

View File

@@ -22,12 +22,24 @@
} }
], ],
"chartList": [{ "chartList": [{
"chartTitle": "Status Plot",
"fileName": "data.csv", "fileName": "data.csv",
"chartColumn": "status" "chartColumn": "status"
}, },
{ {
"fileName": "data.csv", "fileName": "data.csv",
"chartColumn": "age" "chartColumn": "age"
}, {
"chartTitle": "Another Status Plot",
"fileName": "data.csv",
"chartColumn": "status"
}, {
"chartTitle": "Yet Another Status Plot",
"fileName": "data.csv",
"chartColumn": "status"
}, {
"fileName": "data.csv",
"chartColumn": "status"
} }
], ],
"colorMaps": { "colorMaps": {

View File

@@ -23,8 +23,16 @@
} }
.navbar-item:hover { .navbar-item:hover {
background-color: #f0f0f0; background-color: rgba(10, 10, 10, .1);
color: #3273dc; color: white;
}
/* body {
font-family: BlinkMacSystemFont, -apple-system, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
} */
a,a:hover {
color: white;
} }
@keyframes App-logo-spin { @keyframes App-logo-spin {

View File

@@ -1,12 +1,13 @@
import * as React from 'react'; import * as React from 'react';
import 'bulma/css/bulma.css';
import './App.css'; import './App.css';
import AppRoute from './RouteMenu'; import RouteMenu from './RouteMenu';
class App extends React.Component { class App extends React.Component {
public render() { public render() {
return ( return (
<div className="App"> <div className="App">
<AppRoute /> <RouteMenu />
</div> </div>
); );
} }

View File

@@ -56,7 +56,7 @@ export class Chart extends React.Component<any, any> {
<Card> <Card>
<CardHeader> <CardHeader>
<CardHeaderTitle className='is-centered'> <CardHeaderTitle className='is-centered'>
{_.capitalize(this.props.chartColumn)} {this.props.title}
</CardHeaderTitle> </CardHeaderTitle>
</CardHeader> </CardHeader>
<CardImage> <CardImage>

View File

@@ -6,12 +6,17 @@ export default class ChartLoader extends React.Component<any, any> {
public render() { public render() {
const colorMaps = this.props.colorMaps; const colorMaps = this.props.colorMaps;
return ( return (
<Columns isCentered={true}> <Columns isCentered={true} isMultiline={true} style={{
backgroundColor:'#f0f0f0'
}}>
{this.props.chartList.map((o: any, i: number) => { {this.props.chartList.map((o: any, i: number) => {
const colorMap = colorMaps[o.chartColumn]; const colorMap = colorMaps[o.chartColumn];
return ( return (
<Column key={i} isSize={3}> <Column key={i} isSize={4}>
<Chart csvFile={o.fileName} chartColumn={o.chartColumn} colorMap={colorMap} /> <Chart
csvFile={o.fileName} chartColumn={o.chartColumn}
colorMap={colorMap} title={o.chartTitle ? o.chartTitle: o.chartColumn}
/>
</Column> </Column>
); );
})} })}

2
src/Config.tsx Normal file
View File

@@ -0,0 +1,2 @@
export const apiHost = process.env.REACT_APP_API_HOST
export const apiDir = process.env.REACT_APP_API_DIR

View File

@@ -6,17 +6,17 @@ import {
} from 'react-router-dom'; } from 'react-router-dom';
import { Container, Navbar, NavbarItem, NavbarMenu, Section } from 'bloomer'; import { Container, Navbar, NavbarItem, NavbarMenu, Section } from 'bloomer';
import * as local from 'localforage'; import * as local from 'localforage';
import 'bulma/css/bulma.css';
import ServerTabLoader from './ServerTabLoader'; import ServerTabLoader from './ServerTabLoader';
import ChartLoader from './ChartLoader'; import ChartLoader from './ChartLoader';
import { apiDir } from './Config';
const navButton = (name: string, link: string) => ( const navButton = (name: string, link: string) => (
<Link to={link}>{name}</Link> <Link to={link}>{name}</Link>
); );
const RedirectCharts = () => (<Redirect to='/charts' />); const RedirectCharts = () => (<Redirect to={apiDir+'charts'} />);
class AppRoute extends React.Component { class RouteMenu extends React.Component {
constructor(props: any) { constructor(props: any) {
super(props); super(props);
this.state = { this.state = {
@@ -24,7 +24,7 @@ class AppRoute extends React.Component {
chartList: [], chartList: [],
colorMaps: {} colorMaps: {}
} }
fetch('/config.json') fetch(apiDir+'config.json')
.then((response) => response.text()) .then((response) => response.text())
.then((jsonStr) => { .then((jsonStr) => {
const jsonObj = JSON.parse(jsonStr); const jsonObj = JSON.parse(jsonStr);
@@ -45,21 +45,21 @@ class AppRoute extends React.Component {
<Router> <Router>
<div> <div>
<Container isFluid={true} isMarginless={true} isFullWidth={true}> <Container isFluid={true} isMarginless={true} isFullWidth={true}>
<Navbar style={{ border: 'solid 1px #00D1B2', margin: '0' }}> <Navbar style={{ backgroundColor: '#00D1B2' }}>
<NavbarMenu isActive={true}> <NavbarMenu isActive={true}>
<NavbarItem >{navButton('Charts', '/charts')}</NavbarItem> <NavbarItem >{navButton('Charts', apiDir + 'charts')}</NavbarItem>
<NavbarItem>{navButton('Tables', '/tables')}</NavbarItem> <NavbarItem>{navButton('Tables', apiDir + 'tables')}</NavbarItem>
</NavbarMenu> </NavbarMenu>
</Navbar> </Navbar>
</Container> </Container>
<Section isPaddingless={true}> <Section isPaddingless={true}>
<Route exact={true} path="/" component={RedirectCharts} /> <Route exact={true} path={apiDir} component={RedirectCharts} />
<Route path="/charts" component={ConfiguredChart} /> <Route path={apiDir + "charts"} component={ConfiguredChart} />
<Route path="/tables" component={ConfiguredServerTab} /> <Route path={apiDir + "tables"} component={ConfiguredServerTab} />
</Section> </Section>
</div> </div>
</Router> </Router>
); );
} }
} }
export default AppRoute export default RouteMenu

View File

@@ -3,6 +3,7 @@ import { Tips } from "./Utils";
import * as _ from 'lodash'; import * as _ from 'lodash';
import { Button } from 'bloomer'; import { Button } from 'bloomer';
// const randomColor = require('randomcolor'); // const randomColor = require('randomcolor');
import { apiDir } from './Config';
const reactcsv = require('react-csv'); const reactcsv = require('react-csv');
const CSVLink = reactcsv.CSVLink; const CSVLink = reactcsv.CSVLink;
import * as Papa from 'papaparse'; import * as Papa from 'papaparse';
@@ -27,7 +28,7 @@ export default class ServerTable extends React.Component<any, any> {
colColorMap colColorMap
}); });
} }
Papa.parse(this.props.csvFile, { Papa.parse(apiDir + this.props.csvFile, {
header: true, header: true,
download: true, download: true,
skipEmptyLines: true, skipEmptyLines: true,

View File

@@ -2,10 +2,10 @@ import * as React from 'react';
import * as ReactDOM from 'react-dom'; import * as ReactDOM from 'react-dom';
import App from './App'; import App from './App';
import './index.css'; import './index.css';
import registerServiceWorker from './registerServiceWorker'; // import registerServiceWorker from './registerServiceWorker';
ReactDOM.render( ReactDOM.render(
<App />, <App />,
document.getElementById('root') as HTMLElement document.getElementById('root') as HTMLElement
); );
registerServiceWorker(); // registerServiceWorker();