-
Notifications
You must be signed in to change notification settings - Fork 12.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is really just a mock up written in React to try different components. It could become scaffolding to build a prototype, or not.
- Loading branch information
1 parent
eb3bfb5
commit dc0c143
Showing
7 changed files
with
240 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
import React from 'react'; | ||
import { render } from 'react-dom'; | ||
|
||
import { Button, ButtonGroup } from 'react-bootstrap'; | ||
import { Table } from 'reactable'; | ||
|
||
import brace from 'brace'; | ||
import AceEditor from 'react-ace'; | ||
import 'brace/mode/sql'; | ||
import 'brace/theme/chrome'; | ||
|
||
|
||
var ReactGridLayout = require('react-grid-layout'); | ||
|
||
require('../stylesheets/carapal.css') | ||
|
||
const GridItem = React.createClass({ | ||
getDefaultProps: function() { | ||
return { | ||
nopadding: false | ||
}; | ||
}, | ||
render: function () { | ||
return ( | ||
<div className="panel panel-default"> | ||
<div className="panel-heading">{this.props.header}</div> | ||
<div className={"panel-body " + (this.props.nopadding ? 'nopadding': '')}> | ||
{this.props.children} | ||
</div> | ||
</div> | ||
) | ||
} | ||
}); | ||
|
||
const SqlEditor = React.createClass({ | ||
render: function () { | ||
return ( | ||
<GridItem | ||
nopadding={true} | ||
header={ | ||
<div>Query | ||
<span className="pull-right"> | ||
<Button bsSize="small">Run</Button> | ||
</span> | ||
</div> | ||
}> | ||
<div className="sqleditor"> | ||
<AceEditor | ||
mode="sql" | ||
name={this.props.name} | ||
theme="chrome" | ||
minLines={10} | ||
maxLines={50} | ||
editorProps={{$blockScrolling: true}} | ||
value="SELECT * FROM users" | ||
/> | ||
</div> | ||
</GridItem> | ||
) | ||
} | ||
}); | ||
|
||
const ResultSet = React.createClass({ | ||
render: function () { | ||
return ( | ||
<GridItem | ||
header={( | ||
<div> | ||
Result Set | ||
<span className="pull-right"> | ||
<ButtonGroup> | ||
<Button bsSize="small">.csv</Button> | ||
<Button bsSize="small">.json</Button> | ||
</ButtonGroup> | ||
</span> | ||
</div> | ||
)} | ||
nopadding={true}> | ||
<Table | ||
className="table table-condensed table-striped table-bordered small" | ||
sortable={true} | ||
data={[ | ||
{'State': 'New York', 'Description': 'this is some text', 'Tag': 'new'}, | ||
{'State': 'New Mexico', 'Description': 'lorem ipsum', 'Tag': 'old'}, | ||
{'State': 'Colorado', | ||
'Description': 'new description that shouldn\'t match filter', | ||
'Tag': 'old'}, | ||
{'State': 'Alaska', 'Description': 'bacon', 'Tag': 'renewed'}, | ||
{'State': 'New York', 'Description': 'this is some text', 'Tag': 'new'}, | ||
{'State': 'New Mexico', 'Description': 'lorem ipsum', 'Tag': 'old'}, | ||
{'State': 'Colorado', | ||
'Description': 'new description that shouldn\'t match filter', | ||
'Tag': 'old'}, | ||
{'State': 'Alaska', 'Description': 'bacon', 'Tag': 'renewed'}, | ||
{'State': 'New York', 'Description': 'this is some text', 'Tag': 'new'}, | ||
{'State': 'New Mexico', 'Description': 'lorem ipsum', 'Tag': 'old'}, | ||
{'State': 'Colorado', | ||
'Description': 'new description that shouldn\'t match filter', | ||
'Tag': 'old'}, | ||
{'State': 'Alaska', 'Description': 'bacon', 'Tag': 'renewed'}, | ||
]}/> | ||
</GridItem> | ||
) | ||
} | ||
}); | ||
|
||
|
||
const Workspace = React.createClass({ | ||
render: function () { | ||
return ( | ||
<GridItem header="Workspace Browser"> | ||
<strong> | ||
Tables <Button bsSize="small"><a className="fa fa-plus"></a></Button> | ||
</strong> | ||
<ul> | ||
<li><a href="#">fct_bookings</a></li> | ||
<li><a href="#">dim_users</a></li> | ||
<li><a href="#">dim_markets</a></li> | ||
</ul> | ||
<strong> | ||
Queries <Button bsSize="small"><a className="fa fa-plus"></a></Button> | ||
</strong> | ||
<ul> | ||
<li><a href="#">bookings by market</a></li> | ||
<li><a href="#">bookings time series</a></li> | ||
<li><a href="#">hour hot spots</a></li> | ||
</ul> | ||
</GridItem> | ||
) | ||
} | ||
}); | ||
|
||
const App = React.createClass({ | ||
render: function () { | ||
return ( | ||
<ReactGridLayout | ||
className="layout" | ||
cols={12} rowHeight={30} | ||
width={window.innerWidth}> | ||
<div key="qry1" _grid={{x: 3, y: 0, w: 5, h: 5}}> | ||
<SqlEditor name="qry1"/> | ||
</div> | ||
<div key="qry2" _grid={{x: 8, y: 0, w: 4, h: 5}}> | ||
<SqlEditor name="qry2"/> | ||
</div> | ||
<div key="results" _grid={{x: 3, y: 6, w: 9, h: 10}}> | ||
<ResultSet/> | ||
</div> | ||
<div key="workspace" _grid={{x: 0, y: 0, w: 3, h: 15, maxW:4, minW: 4}}> | ||
<Workspace/> | ||
</div> | ||
</ReactGridLayout> | ||
) | ||
} | ||
}); | ||
|
||
render( | ||
<App/>, | ||
document.getElementById('app') | ||
); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
|
||
.nopadding { | ||
padding: 0px; | ||
} | ||
.panel { | ||
height: 100%; | ||
width: 100%; | ||
overflow: auto; | ||
} | ||
.panel-body { | ||
} | ||
|
||
.react-grid-layout { | ||
position: relative; | ||
transition: height 200ms ease; | ||
} | ||
.react-grid-item { | ||
transition: all 200ms ease; | ||
transition-property: left, top; | ||
} | ||
.react-grid-item.cssTransforms { | ||
transition-property: transform; | ||
} | ||
.react-grid-item.resizing { | ||
z-index: 1; | ||
} | ||
|
||
.react-grid-item.react-draggable-dragging { | ||
transition: none; | ||
z-index: 3; | ||
} | ||
|
||
.react-grid-item.react-grid-placeholder { | ||
background: red; | ||
opacity: 0.2; | ||
transition-duration: 100ms; | ||
z-index: 2; | ||
-webkit-user-select: none; | ||
-moz-user-select: none; | ||
-ms-user-select: none; | ||
-o-user-select: none; | ||
user-select: none; | ||
} | ||
|
||
.react-grid-item > .react-resizable-handle { | ||
position: absolute; | ||
width: 20px; | ||
height: 20px; | ||
bottom: 0; | ||
right: 0; | ||
background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg08IS0tIEdlbmVyYXRvcjogQWRvYmUgRmlyZXdvcmtzIENTNiwgRXhwb3J0IFNWRyBFeHRlbnNpb24gYnkgQWFyb24gQmVhbGwgKGh0dHA6Ly9maXJld29ya3MuYWJlYWxsLmNvbSkgLiBWZXJzaW9uOiAwLjYuMSAgLS0+DTwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DTxzdmcgaWQ9IlVudGl0bGVkLVBhZ2UlMjAxIiB2aWV3Qm94PSIwIDAgNiA2IiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmMDAiIHZlcnNpb249IjEuMSINCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbDpzcGFjZT0icHJlc2VydmUiDQl4PSIwcHgiIHk9IjBweCIgd2lkdGg9IjZweCIgaGVpZ2h0PSI2cHgiDT4NCTxnIG9wYWNpdHk9IjAuMzAyIj4NCQk8cGF0aCBkPSJNIDYgNiBMIDAgNiBMIDAgNC4yIEwgNCA0LjIgTCA0LjIgNC4yIEwgNC4yIDAgTCA2IDAgTCA2IDYgTCA2IDYgWiIgZmlsbD0iIzAwMDAwMCIvPg0JPC9nPg08L3N2Zz4='); | ||
background-position: bottom right; | ||
padding: 0 3px 3px 0; | ||
background-repeat: no-repeat; | ||
background-origin: content-box; | ||
box-sizing: border-box; | ||
cursor: se-resize; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{% extends "caravel/basic.html" %} | ||
|
||
{% block tail_js %} | ||
{{ super() }} | ||
<script src="/static/assets/javascripts/dist/carapal.entry.js"></script> | ||
{% endblock %} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters