@@ -0,0 +1,14 @@ | |||||
import { h, Component } from 'preact'; | |||||
class WBInlineSearch extends Component { | |||||
render() { | |||||
return ( | |||||
<form class="form-inline my-2 my-lg-0"> | |||||
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" /> | |||||
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> | |||||
</form> | |||||
); | |||||
} | |||||
} | |||||
export default WBInlineSearch; |
@@ -1,49 +0,0 @@ | |||||
import { h, Component } from 'preact'; | |||||
class WBNavbar extends Component { | |||||
render() { | |||||
return ( | |||||
<nav class="navbar navbar-expand-lg navbar-light bg-light"> | |||||
<a class="navbar-brand" href="#">Workbench Advanced</a> | |||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> | |||||
<span class="navbar-toggler-icon"></span> | |||||
</button> | |||||
<div class="collapse navbar-collapse" id="navbarSupportedContent"> | |||||
<ul class="navbar-nav mr-auto"> | |||||
<li class="nav-item active"> | |||||
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> | |||||
</li> | |||||
<li class="nav-item"> | |||||
<a class="nav-link" href="#"><i class="fas fa-user"></i> Log In</a> | |||||
</li> | |||||
<li class="nav-item"> | |||||
<a class="nav-link" href="#">Link</a> | |||||
</li> | |||||
<li class="nav-item dropdown"> | |||||
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | |||||
Dropdown | |||||
</a> | |||||
<div class="dropdown-menu" aria-labelledby="navbarDropdown"> | |||||
<a class="dropdown-item" href="#">Action</a> | |||||
<a class="dropdown-item" href="#">Another action</a> | |||||
<div class="dropdown-divider"></div> | |||||
<a class="dropdown-item" href="#">Something else here</a> | |||||
</div> | |||||
</li> | |||||
<li class="nav-item"> | |||||
<a class="nav-link disabled" href="#">Disabled</a> | |||||
</li> | |||||
</ul> | |||||
<form class="form-inline my-2 my-lg-0"> | |||||
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search" /> | |||||
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button> | |||||
</form> | |||||
</div> | |||||
</nav> | |||||
); | |||||
} | |||||
} | |||||
export default WBNavbar; |
@@ -6,6 +6,7 @@ import WBPagination from 'wb-pagination'; | |||||
import WBProjectListing from 'wb-project-listing'; | import WBProjectListing from 'wb-project-listing'; | ||||
import WBNavbar from 'wb-navbar'; | import WBNavbar from 'wb-navbar'; | ||||
import WBBrowse from 'wb-browse'; | import WBBrowse from 'wb-browse'; | ||||
import WBSignIn from 'wb-sign-in'; | |||||
class WBApp extends Component { | class WBApp extends Component { | ||||
render({}, { activePage }) { | render({}, { activePage }) { | ||||
@@ -15,9 +16,7 @@ class WBApp extends Component { | |||||
Hello, world! | Hello, world! | ||||
</div> | </div> | ||||
<div path="/login"> | |||||
<WBNavbar /> | |||||
</div> | |||||
<WBSignIn path="/sign-in" /> | |||||
<WBBrowse path="/browse/:ownerUuid?" /> | <WBBrowse path="/browse/:ownerUuid?" /> | ||||
</Router> | </Router> |
@@ -1,12 +1,18 @@ | |||||
import { h, Component } from 'preact'; | import { h, Component } from 'preact'; | ||||
import WBNavbar from 'wb-navbar'; | import WBNavbar from 'wb-navbar'; | ||||
import WBProjectListing from 'wb-project-listing'; | import WBProjectListing from 'wb-project-listing'; | ||||
import WBInlineSearch from 'wb-inline-search'; | |||||
class WBBrowse extends Component { | class WBBrowse extends Component { | ||||
render({ ownerUuid }) { | render({ ownerUuid }) { | ||||
return ( | return ( | ||||
<div> | <div> | ||||
<WBNavbar /> | |||||
<WBNavbar items={ [ | |||||
{ 'name': 'Browse', 'active': true }, | |||||
{ 'name': 'User', 'dropdown': [ 'Sign Off' ]} | |||||
] } rhs={ ( | |||||
<WBInlineSearch /> | |||||
) } /> | |||||
<WBProjectListing arvHost="api.arkau.roche.com" | <WBProjectListing arvHost="api.arkau.roche.com" | ||||
arvToken="v2/arkau-gj3su-uf4hnu2o2qkvm8j/15kla38mafzq6b31d5t74ynhk6iuy32v1ticslodr0obvvhde9" | arvToken="v2/arkau-gj3su-uf4hnu2o2qkvm8j/15kla38mafzq6b31d5t74ynhk6iuy32v1ticslodr0obvvhde9" | ||||
ownerUuid={ ownerUuid } | ownerUuid={ ownerUuid } | ||||
@@ -0,0 +1,31 @@ | |||||
import { h, Component } from 'preact'; | |||||
import WBNavbar from 'wb-navbar'; | |||||
class WBLogin extends Component { | |||||
render() { | |||||
return ( | |||||
<div> | |||||
<div class="container"> | |||||
<div class="row justify-content-center"> | |||||
<div class="col-6"> | |||||
<h1>Sign In</h1> | |||||
<form> | |||||
<div class="form-group"> | |||||
<label for="arvHost">Arvados API Host</label> | |||||
<input type="text" class="form-control" id="arvHost" placeholder="Enter Arvados API Host" /> | |||||
</div> | |||||
<div class="form-group"> | |||||
<label for="arvToken">Token</label> | |||||
<input type="text" class="form-control" id="arvToken" placeholder="Enter Arvados API Token" /> | |||||
</div> | |||||
<button type="submit" class="btn btn-primary">Submit</button> | |||||
</form> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
</div> | |||||
); | |||||
} | |||||
} | |||||
export default WBLogin; |
@@ -0,0 +1,87 @@ | |||||
import { h, Component } from 'preact'; | |||||
class WBNavbar extends Component { | |||||
render({ title, items, rhs, onItemClicked }) { | |||||
return ( | |||||
<nav class="navbar navbar-expand-lg navbar-light bg-light"> | |||||
<a class="navbar-brand" href="#">{ title }</a> | |||||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> | |||||
<span class="navbar-toggler-icon"></span> | |||||
</button> | |||||
<div class="collapse navbar-collapse" id="navbarSupportedContent"> | |||||
<ul class="navbar-nav mr-auto"> | |||||
{ items.map(i => { | |||||
if (typeof(i) === 'string') | |||||
return ( | |||||
<li class="nav-item"> | |||||
<a class="nav-link" href="#">{ i }</a> | |||||
</li> | |||||
); | |||||
else if (typeof(i) === 'object') | |||||
var li_cls = ['nav-item']; | |||||
if (i['active']) | |||||
li_cls.push('active'); | |||||
var a_cls = ['nav-link']; | |||||
if (i['disabled']) | |||||
a_cls.push('disabled'); | |||||
if ('dropdown' in i) { | |||||
li_cls.push('dropdown'); | |||||
a_cls.push('dropdown-toggle'); | |||||
li_cls = li_cls.join(' '); | |||||
a_cls = a_cls.join(' '); | |||||
return ( | |||||
<li class={ li_cls }> | |||||
<a class={ a_cls } href="#" id={ i['name'].replace(' ', '-').toLowerCase() + '-dropdown' } | |||||
role="button" data-toggle="dropdown" aria-haspopup="true" | |||||
aria-expanded="false">{ i['name'] }</a> | |||||
<div class="dropdown-menu" aria-labelledby={ i['name'].replace(' ', '-').toLowerCase() + '-dropdown' }> | |||||
{ i['dropdown'].map(d => { | |||||
if (typeof(d) === 'string') | |||||
return ( | |||||
<a class="dropdown-item" href="#" onclick={ e => { e.preventDefault(); onItemClicked(d); } }>{ d }</a> | |||||
); | |||||
else if (typeof(d) === 'object' && d['divider']) | |||||
return ( | |||||
<div class="dropdown-divider" /> | |||||
); | |||||
}) } | |||||
</div> | |||||
</li> | |||||
); | |||||
} else { | |||||
li_cls = li_cls.join(' '); | |||||
a_cls = a_cls.join(' '); | |||||
return ( | |||||
<li class={ li_cls }> | |||||
<a class={ a_cls } href="#" onclick={ e => { e.preventDefault(); onItemClicked(i); } }>{ i['name'] }</a> | |||||
</li> | |||||
); | |||||
} | |||||
}) } | |||||
</ul> | |||||
{ rhs } | |||||
</div> | |||||
</nav> | |||||
); | |||||
} | |||||
} | |||||
WBNavbar.defaultProps = { | |||||
'title': 'Workbench Advanced', | |||||
'items': [], | |||||
'form': null, | |||||
'onItemClicked': () => {} | |||||
} | |||||
export default WBNavbar; |