diff --git a/config.json b/config.json index 98b9f9d750c4114a0e1af223465015b1ad157304..b051f492261eb7e87e0bca7507a309f52df6b7fb 100644 --- a/config.json +++ b/config.json @@ -1,4 +1,5 @@ { + "repo": "http://localhost:8080/repo/", "api": "/solr/ocflcore", "dev": { "proxy": { diff --git a/src/components/Footer.js b/src/components/Footer.js new file mode 100644 index 0000000000000000000000000000000000000000..fccd44c3973cd43f36b92c353d7ff54fe341491d --- /dev/null +++ b/src/components/Footer.js @@ -0,0 +1,17 @@ +const Footer = function (data) { + return ` + <footer class="footer"> + <div class="container"> + <div class="row"> + <div class="col-md-10"> + <div class="copyright"> + <p class="font-weight-light small">© copyright</p> + </div> + </div> + </div> + </div> + </footer> + ` +}; + +module.exports = Footer; \ No newline at end of file diff --git a/src/components/Header.js b/src/components/Header.js index e46a4404062f4da5da1e0f4adf139f6bccd00fd4..c106968650039b21668587a2b792139f6c06f00e 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -1,41 +1,32 @@ const Header = function (data) { return ` <header id="header" class="container"> - <nav class="navbar navbar-expand-lg navbar-light bg-light"> - <a class="navbar-brand" href="#">Navbar</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="#">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="#" tabindex="-1" aria-disabled="true">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 class="container-fluid"> + <div class="row"> + <div class="col-md-9"> + <p></p> + <p class="header-main"> + <img src="${data.header.logoURL}" [attr.alt]="${data.header.title}" style="width:110px;"/> + <a href="${data.header.URL}">${data.header.title}</a> + </p> + </div> + <div class="col-md-3"> + <p></p> + <nav class="navbar"> + <div class="navbar-nav"> + <a class="nav-item nav-link" + href="${data.header.helpURL}" target="_blank noreferer"> + ${data.header.help}<i class="fa fa-question-circle" aria-hidden="true"></i></a> + </div> + <div class="navbar-nav"> + <a class="nav-item nav-link" + href="${data.header.portalURL}" target="_blank noreferer"> + ${data.header.portal}<i class="fa fa-external-link" aria-hidden="true"></i></a> + </div> + </nav> + </div> + </div> </div> - </nav> </header> ` }; diff --git a/src/components/Loading.js b/src/components/Loading.js new file mode 100644 index 0000000000000000000000000000000000000000..09c0650f6b8294caecc8898e5fc37270c1219111 --- /dev/null +++ b/src/components/Loading.js @@ -0,0 +1,9 @@ +const Loading = function () { + return ` + <section class="center"> + <div>loading</div> + </section> + `; +}; + +module.exports = Loading; \ No newline at end of file diff --git a/src/components/Main.js b/src/components/Main.js index ecb5a0480835ae15857fc41d7b1b484f247934a2..40e1a5ca8845a72f08a3b0a385529c0b7e87c245 100644 --- a/src/components/Main.js +++ b/src/components/Main.js @@ -1,12 +1,17 @@ const Main = function (data) { var html = ''; const docs = data.main.docs; + html += `<ul class="list-group">`; if (docs.length > 0) { docs.forEach((d) => { - var url = '/repo/' + d['uri_id'] + '/'; - html += '<div class="item"><a href="' + url + '">' + d['name'][0] + '</a> ' + d['record_type_s'] + '</div>\n' + var url = `${data.config.repo}${d['uri_id']}/`; + html += `<li class="list-group-item"> + <div class="item"><a href="${url}">${d['name'][0]}</a> ${d['record_type_s']} </div> +</li>` }); } + html += `</ul>`; + return html; }; diff --git a/src/components/Search.js b/src/components/Search.js new file mode 100644 index 0000000000000000000000000000000000000000..4e5a63889c97ea32a88e2d3cf17ecf245932aaf5 --- /dev/null +++ b/src/components/Search.js @@ -0,0 +1,36 @@ +const Search = function (data) { + return ` + <div class="search-header"> + <div class="row no-gutters align-items-center h-100"> + <div class="col-md-2"></div> + <div class="col-md-8"> + <div class="input-group mb-3" *ngIf="currentParam"> + <input [(ngModel)]="currentParam.searchText" type="text" class="form-control form-control-lg" + [attr.aria-label]="${data.search.searchText}" [attr.placeholder]="${data.search.searchText}" + (keyup.enter)="goSearch()" (keyup)="checkSearchText()"> + <div class="input-group-append"> + <button [disabled]="isSearching || !currentParam.searchText || invalidSearchText" [innerHTML]="searchLabelStr" + (click)="goSearch()" class="btn btn-secondary btn-lg" type="submit">${data.search.searchText}</button> + <button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split btn-lg" + data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> + <span class="sr-only">Toggle Search Type</span> + </button> + <div class="dropdown-menu"> + <button *ngFor="let rType of availableRecordTypes" class="dropdown-item" (click)="setRecordType(rType)" + [innerHTML]="getSearchRecordTypeLabel(rType)"></button> + </div> + </div> + </div> + <div *ngIf="searchError" class="alert alert-danger" role="alert"> + ${data.search.error} + </div> + <div *ngIf="invalidSearchText" class="alert alert-danger" role="alert"> + ${data.search.invalidSearch} + </div> + </div> + <div class="col-md-2"></div> + </div> + </div> + `; +}; +module.exports = Search; \ No newline at end of file diff --git a/src/index.js b/src/index.js index 3eb499b9cf7c9e58e14d267e97f32f50a95a75a1..e1da1ef17c9b7c7922de0ff1e9b1d56fdf05b918 100644 --- a/src/index.js +++ b/src/index.js @@ -4,48 +4,52 @@ import 'bootstrap'; import './style.css'; const Delegate = require('./lib/Delegate'); -const nginxService = require('./lib/NginxService'); +const searchService = require('./lib/SearchService'); const config = require('../config.json'); //App view components const Header = require('./components/header'); const Main = require('./components/main'); +const Footer = require('./components/footer'); +const Search = require('./components/search'); //Default state let state = { header: { title: 'Data Portal', + URL: '/', + logo: 'assets/mint.svg', + help: 'help', + helpURL: '', + portal: 'Back to Stash', + portalURL: 'http://stash.research.uts.edu.au', menu: [ - {id: 'sign-out-header', name: 'Sign Out'} + {id: 'back', name: 'Back'} ] }, + search:{ + error: 'Search Error', + invalidSearch: 'Invalid Search', + searchText: 'Search' + }, main: { docs: [] - } + }, + config: config }; const app = document.querySelector('#app'); const renderApp = function (data, into) { console.log('rendering') - into.innerHTML = [Header(data), Main(data)].join(''); -}; - -const renderLoading = function () { - let loading = ` - <section class="center"> - <div>loading</div> - </section> - ` - state.main = loading; - renderApp(state, app) + into.innerHTML = [Header(data), Search(data), Main(data), Footer(data)].join(''); }; (async () => { - const res = await nginxService({uri: '/solr/ocflcore'}); - state.main.docs = res['response']['docs']; - console.log(state); + + state.main.docs = await searchService.searchAll({api: config.api}); + renderApp(state, app); })(); \ No newline at end of file diff --git a/src/lib/NginxService.js b/src/lib/NginxService.js deleted file mode 100644 index 9e4336cf8586ced8d572ac803b49714400284ceb..0000000000000000000000000000000000000000 --- a/src/lib/NginxService.js +++ /dev/null @@ -1,8 +0,0 @@ -const axios = require('axios'); - -const NginxService = async function (config) { - const req = await axios.get(`${config.uri}/select?q=*%3A*`); - return req.data; -}; - -module.exports = NginxService; \ No newline at end of file diff --git a/src/lib/SearchService.js b/src/lib/SearchService.js new file mode 100644 index 0000000000000000000000000000000000000000..8d4161e674b9193cca0af853c3844866e4776ecf --- /dev/null +++ b/src/lib/SearchService.js @@ -0,0 +1,14 @@ +const axios = require('axios'); + +const SearchService = { + searchAll: async function (config) { + const req = await axios.get(`${config.api}/select?q=*%3A*`); + if (req.data) { + return req.data['response']['docs']; + } else { + return []; + } + } +}; + +module.exports = SearchService; \ No newline at end of file