diff --git a/src/api/db/request.js b/src/api/db/request.js
index 4a96a85..3235ea5 100644
--- a/src/api/db/request.js
+++ b/src/api/db/request.js
@@ -29,7 +29,8 @@ export default function (pool) {
LIMIT 1) AS "asOf"
FROM mpj.request
WHERE "userId" = $1
- GROUP BY request."requestId"`
+ GROUP BY request."requestId"
+ ORDER BY "asOf" DESC`
}, [userId])).rows,
/**
@@ -41,7 +42,7 @@ export default function (pool) {
addNew: async (userId, requestText) => {
const id = cuid()
const enteredOn = Date.now()
- ;(async () => {
+ return (async () => {
const client = await pool.connect()
try {
await client.query('BEGIN')
@@ -58,8 +59,11 @@ export default function (pool) {
} finally {
client.release()
}
- return { requestId: id, text: requestText, asOf: enteredOn }
- })().catch(e => console.error(e.stack))
+ return { requestId: id, text: requestText, asOf: enteredOn }
+ })().catch(e => {
+ console.error(e.stack)
+ return { requestId: '', text: 'error', asOf: 0 }
+ })
}
}
}
diff --git a/src/app/package-lock.json b/src/app/package-lock.json
index 0404c17..323a6eb 100644
--- a/src/app/package-lock.json
+++ b/src/app/package-lock.json
@@ -323,9 +323,9 @@
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"auth0-js": {
- "version": "8.9.3",
- "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-8.9.3.tgz",
- "integrity": "sha1-wqpAnnu69tVV6luFhCPMTumdeYY=",
+ "version": "8.10.1",
+ "resolved": "https://registry.npmjs.org/auth0-js/-/auth0-js-8.10.1.tgz",
+ "integrity": "sha1-1p1VPFUZQELEAK+oRuHtQ6XZ2ng=",
"requires": {
"base64-js": "1.2.1",
"idtoken-verifier": "1.1.0",
@@ -590,19 +590,49 @@
}
},
"babel-generator": {
- "version": "6.25.0",
- "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.25.0.tgz",
- "integrity": "sha1-M6GvcNXyiQrrRlpKd5PB32qeqfw=",
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.0.tgz",
+ "integrity": "sha1-rBriAHC3n248odMmlhMFN3TyDcU=",
"dev": true,
"requires": {
"babel-messages": "6.23.0",
- "babel-runtime": "6.23.0",
- "babel-types": "6.25.0",
+ "babel-runtime": "6.26.0",
+ "babel-types": "6.26.0",
"detect-indent": "4.0.0",
"jsesc": "1.3.0",
"lodash": "4.17.4",
"source-map": "0.5.6",
"trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "dev": true,
+ "requires": {
+ "core-js": "2.4.1",
+ "regenerator-runtime": "0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "dev": true,
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "esutils": "2.0.2",
+ "lodash": "4.17.4",
+ "to-fast-properties": "1.0.3"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz",
+ "integrity": "sha512-/aA0kLeRb5N9K0d4fw7ooEbI+xDe+DKD499EQqygGqeS8N3xto15p09uY2xj7ixP81sNPXvRLnAQIqdVStgb1A==",
+ "dev": true
+ }
}
},
"babel-helper-bindify-decorators": {
@@ -800,13 +830,13 @@
}
},
"babel-plugin-istanbul": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.4.tgz",
- "integrity": "sha1-GN3oS/POMp/d8/QQP66SFFbY5Yc=",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz",
+ "integrity": "sha1-Z2DN2Xf0EdPhdbsGTyvDJ9mbK24=",
"dev": true,
"requires": {
"find-up": "2.1.0",
- "istanbul-lib-instrument": "1.7.4",
+ "istanbul-lib-instrument": "1.8.0",
"test-exclude": "4.1.1"
}
},
@@ -1801,16 +1831,16 @@
}
},
"chromedriver": {
- "version": "2.32.2",
- "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.32.2.tgz",
- "integrity": "sha512-Cyvq89aWTtQXPz2Rk8J887orGgCHwZ649MwP4pi3weU7lN7Iw4/qhrHJ9k5bEOitF1JdvxmJmuv0RPIc5Qvfdg==",
+ "version": "2.32.3",
+ "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-2.32.3.tgz",
+ "integrity": "sha1-zoTwVb7ny/5W8xGCsnbzMlaxK/E=",
"dev": true,
"requires": {
"extract-zip": "1.6.5",
"kew": "0.7.0",
"mkdirp": "0.5.1",
"request": "2.81.0",
- "rimraf": "2.6.1"
+ "rimraf": "2.6.2"
}
},
"cipher-base": {
@@ -2779,7 +2809,7 @@
"object-assign": "4.1.1",
"pify": "2.3.0",
"pinkie-promise": "2.0.1",
- "rimraf": "2.6.1"
+ "rimraf": "2.6.2"
}
},
"delayed-stream": {
@@ -3447,13 +3477,13 @@
"loader-utils": "1.1.0",
"object-assign": "4.1.1",
"object-hash": "1.1.8",
- "rimraf": "2.6.1"
+ "rimraf": "2.6.2"
}
},
"eslint-plugin-html": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.1.tgz",
- "integrity": "sha512-zxcArJx7QTqE0Stm5BMpk1cuYwOxLecqKMqEYabRcvqImDrjcRdQVdXT5RtqFHdH1aVD2akzHe+/Q5Wou6Jvaw==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz",
+ "integrity": "sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ==",
"dev": true,
"requires": {
"htmlparser2": "3.9.2",
@@ -3997,7 +4027,7 @@
"jsonfile": "2.4.0",
"klaw": "1.3.1",
"path-is-absolute": "1.0.1",
- "rimraf": "2.6.1"
+ "rimraf": "2.6.2"
}
},
"fs.realpath": {
@@ -5075,18 +5105,26 @@
"dev": true
},
"istanbul-lib-instrument": {
- "version": "1.7.4",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.4.tgz",
- "integrity": "sha1-6f2SDkdn89Ge3HZeLWs/XMvQ7qg=",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.8.0.tgz",
+ "integrity": "sha1-ZvbJQhzJ7EcE928tsIS6kHiitTI=",
"dev": true,
"requires": {
- "babel-generator": "6.25.0",
+ "babel-generator": "6.26.0",
"babel-template": "6.25.0",
"babel-traverse": "6.25.0",
"babel-types": "6.25.0",
- "babylon": "6.17.4",
+ "babylon": "6.18.0",
"istanbul-lib-coverage": "1.1.1",
"semver": "5.4.1"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
+ "dev": true
+ }
}
},
"js-base64": {
@@ -5261,7 +5299,7 @@
"optimist": "0.6.1",
"qjobs": "1.1.5",
"range-parser": "1.2.0",
- "rimraf": "2.6.1",
+ "rimraf": "2.6.2",
"safe-buffer": "5.1.1",
"socket.io": "1.7.3",
"source-map": "0.5.6",
@@ -6046,9 +6084,9 @@
"dev": true
},
"mocha": {
- "version": "3.5.1",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.1.tgz",
- "integrity": "sha512-2jD6NS4PNKVDpaICERx8vEkXaisx2MlRKxj5KuFJVZJdK1zRGs/HnS3OeH7zXhXAbGlzaMIan4Kwpm4O5hORnA==",
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
+ "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
"dev": true,
"requires": {
"browser-stdout": "1.3.0",
@@ -9515,9 +9553,9 @@
}
},
"rimraf": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
- "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
"dev": true,
"requires": {
"glob": "7.1.2"
@@ -10662,9 +10700,9 @@
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
},
"vue": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/vue/-/vue-2.4.2.tgz",
- "integrity": "sha512-GB5r+CsrCHIB1PoXt4wgBienjF3WGYOIaTK27tDk96sZxpL5RwRrsi9I3ECwFt8x8qAmxT2xk1vsY2Vpcn9nIw=="
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-2.4.4.tgz",
+ "integrity": "sha512-PCiRmc8ZT1DD5+BN8QUAmnkBefcCLfZVSuhc1u7iu5JoPrSHyyk/+4nehm7k2xVMi8+RFLk5WIHAN14UKF0txw=="
},
"vue-hot-reload-api": {
"version": "2.1.0",
@@ -10689,7 +10727,7 @@
"resolve": "1.3.3",
"source-map": "0.5.6",
"vue-hot-reload-api": "2.1.0",
- "vue-style-loader": "3.0.1",
+ "vue-style-loader": "3.0.3",
"vue-template-es2015-compiler": "1.5.3"
},
"dependencies": {
@@ -10749,15 +10787,20 @@
}
}
},
+ "vue-progressbar": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/vue-progressbar/-/vue-progressbar-0.7.3.tgz",
+ "integrity": "sha1-KMqY+hr6YDZEpEPxjHxF/l0pAUQ="
+ },
"vue-router": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-2.7.0.tgz",
"integrity": "sha512-kxgsT50dDExua3i103nxNBjlfk8LeUmO9iujVxXV42MnISINHUjqMrknpOOJEg+i9nEkoVgG8N86Pklze35c/A=="
},
"vue-style-loader": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.1.tgz",
- "integrity": "sha1-yLY5uy8kuvnXgnTcF+TyZMHe2gg=",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.0.3.tgz",
+ "integrity": "sha512-P/ihpaZKU23T1kq3E0y4c+F8sbm1HQO69EFYoLoGMSGVAHroHsGir/WQ9qUavP8dyFYHmXenzHaJ/nqd8vfaxw==",
"dev": true,
"requires": {
"hash-sum": "1.0.2",
@@ -10765,9 +10808,9 @@
}
},
"vue-template-compiler": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.4.2.tgz",
- "integrity": "sha512-sKa2Bdvh+j6V9eQSyJRxsf8fak0FtQkCZ145aYFDVwZBhHOTt1vKrODLo4RelI1dUczKlDCp5aZ9MD7uJOZwvw==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.4.4.tgz",
+ "integrity": "sha512-XdHsNi8Z5WqwuFl/Z5eLKgE2DOEEOdMk1aA459uSgvwyy+pjKLBlQWsUpAtoR6o6Wmpujw6NtinAUGuqSTituQ==",
"dev": true,
"requires": {
"de-indent": "1.0.2",
diff --git a/src/app/package.json b/src/app/package.json
index 01ca176..15ee3cc 100644
--- a/src/app/package.json
+++ b/src/app/package.json
@@ -14,11 +14,12 @@
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
},
"dependencies": {
- "auth0-js": "^8.9.3",
+ "auth0-js": "^8.10.1",
"axios": "^0.16.2",
"element-ui": "^1.4.4",
"pug": "^2.0.0-rc.4",
- "vue": "^2.3.3",
+ "vue": "^2.4.4",
+ "vue-progressbar": "^0.7.3",
"vue-router": "^2.6.0",
"vuex": "^2.4.0"
},
@@ -27,14 +28,14 @@
"babel-core": "^6.26.0",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.2",
- "babel-plugin-istanbul": "^4.1.1",
+ "babel-plugin-istanbul": "^4.1.5",
"babel-plugin-transform-runtime": "^6.22.0",
"babel-preset-env": "^1.3.2",
"babel-preset-stage-2": "^6.22.0",
"babel-register": "^6.26.0",
"chai": "^3.5.0",
"chalk": "^2.1.0",
- "chromedriver": "^2.32.2",
+ "chromedriver": "^2.32.3",
"connect-history-api-fallback": "^1.3.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.5",
@@ -45,7 +46,7 @@
"eslint-config-standard": "^6.2.1",
"eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.7.1",
- "eslint-plugin-html": "^3.2.1",
+ "eslint-plugin-html": "^3.2.2",
"eslint-plugin-promise": "^3.4.0",
"eslint-plugin-standard": "^2.0.1",
"eventsource-polyfill": "^0.9.6",
@@ -66,13 +67,13 @@
"karma-spec-reporter": "0.0.31",
"karma-webpack": "^2.0.2",
"lolex": "^1.5.2",
- "mocha": "^3.5.1",
+ "mocha": "^3.5.3",
"nightwatch": "^0.9.12",
"opn": "^5.1.0",
"optimize-css-assets-webpack-plugin": "^2.0.0",
"ora": "^1.2.0",
"phantomjs-prebuilt": "^2.1.15",
- "rimraf": "^2.6.0",
+ "rimraf": "^2.6.2",
"selenium-server": "^3.5.3",
"semver": "^5.4.1",
"shelljs": "^0.7.6",
@@ -80,8 +81,8 @@
"sinon-chai": "^2.13.0",
"url-loader": "^0.5.8",
"vue-loader": "^12.1.0",
- "vue-style-loader": "^3.0.1",
- "vue-template-compiler": "^2.3.3",
+ "vue-style-loader": "^3.0.3",
+ "vue-template-compiler": "^2.4.4",
"webpack": "^2.6.1",
"webpack-bundle-analyzer": "^2.9.0",
"webpack-dev-middleware": "^1.12.0",
diff --git a/src/app/src/App.vue b/src/app/src/App.vue
index ef6baa4..4e7a013 100644
--- a/src/app/src/App.vue
+++ b/src/app/src/App.vue
@@ -3,6 +3,7 @@
navigation
#content.container
router-view
+ vue-progress-bar
footer
p.text-right: i myPrayerJournal v0.8.0
diff --git a/src/app/src/components/Dashboard.vue b/src/app/src/components/Dashboard.vue
index 71c273d..2875c47 100644
--- a/src/app/src/components/Dashboard.vue
+++ b/src/app/src/components/Dashboard.vue
@@ -21,8 +21,8 @@ import actions from '@/store/action-types'
export default {
name: 'dashboard',
- data () {
- this.$store.dispatch(actions.LOAD_JOURNAL)
+ async data () {
+ this.$store.dispatch(actions.LOAD_JOURNAL, this.$Progress)
return {}
},
components: {
diff --git a/src/app/src/components/request/RequestListItem.vue b/src/app/src/components/request/RequestListItem.vue
index d2b2445..453f46a 100644
--- a/src/app/src/components/request/RequestListItem.vue
+++ b/src/app/src/components/request/RequestListItem.vue
@@ -1,7 +1,9 @@
- div
- p Id {{ request.requestId }} as of {{ request.asOf }}
- p {{ request.text }}
+ el-row.journal-request(:id="request.requestId")
+ el-col(:span='4') Action buttons
+ el-col(:span='20')
+ p Id {{ request.requestId }} as of {{ request.asOf }}
+ p {{ request.text }}
+
+
diff --git a/src/app/src/main.js b/src/app/src/main.js
index 7bef638..3678954 100644
--- a/src/app/src/main.js
+++ b/src/app/src/main.js
@@ -2,6 +2,7 @@
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import ElementUI from 'element-ui'
+import VueProgressBar from 'vue-progressbar'
import 'element-ui/lib/theme-default/index.css'
import App from './App'
@@ -12,6 +13,12 @@ Vue.config.productionTip = false
Vue.use(ElementUI)
+Vue.use(VueProgressBar, {
+ color: 'rgb(143, 255, 199)',
+ failedColor: 'red',
+ height: '2px'
+})
+
/* eslint-disable no-new */
new Vue({
el: '#app',
diff --git a/src/app/src/store/index.js b/src/app/src/store/index.js
index 556f9ce..bca4d81 100644
--- a/src/app/src/store/index.js
+++ b/src/app/src/store/index.js
@@ -60,8 +60,9 @@ export default new Vuex.Store({
}
},
actions: {
- async [actions.LOAD_JOURNAL] ({ commit }) {
+ async [actions.LOAD_JOURNAL] ({ commit }, progress) {
commit(mutations.LOADED_JOURNAL, {})
+ progress.start()
commit(mutations.LOADING_JOURNAL, true)
api.setBearer(localStorage.getItem('id_token'))
try {
@@ -71,12 +72,13 @@ export default new Vuex.Store({
logError(err)
} finally {
commit(mutations.LOADING_JOURNAL, false)
+ progress.finish()
}
},
async [actions.ADD_REQUEST] ({ commit }, requestText) {
try {
const newRequest = await api.addRequest(requestText)
- commit(mutations.REQUEST_ADDED, newRequest)
+ commit(mutations.REQUEST_ADDED, newRequest.data)
} catch (err) {
logError(err)
}