diff --git a/data-viewer/app/viewer/app.js b/data-viewer/app/viewer/app.js
index e326ece6..be6970bf 100644
--- a/data-viewer/app/viewer/app.js
+++ b/data-viewer/app/viewer/app.js
@@ -15,7 +15,8 @@ const viewer = new Vue ({
entities: [],
columns: [],
data: [],
- rowDetails: undefined,
+ rowDetails: {},
+ rowKey: storageGet('rowKey')
},
watch: {
@@ -55,17 +56,37 @@ const viewer = new Vue ({
if (viewer.dataSource === 'db') url += `&dataSource=db`
const {data} = await GET(url)
viewer.data = data.value.map(d => d.record.map(r => r.data))
- viewer.rowDetails = undefined
+ const row = viewer.data.find(data => viewer._makeRowKey(data) === viewer.rowKey)
+ if (row) viewer._setRowDetails(row)
+ else viewer.rowDetails = {}
},
inspectRow (eve) {
viewer.rowDetails = {}
const selectedRow = eve.currentTarget.rowIndex-1
- viewer.data[selectedRow].forEach((line, colIndex) => {
+ viewer.rowKey = viewer._makeRowKey(viewer.data[selectedRow])
+ storageSet('rowKey', viewer.rowKey)
+ viewer._setRowDetails(viewer.data[selectedRow])
+ },
+
+ _setRowDetails(row) {
+ viewer.rowDetails = {}
+ row.forEach((line, colIndex) => {
viewer.rowDetails[viewer.columns[colIndex].name] = line
})
},
+ _makeRowKey(row) {
+ // to identify a row, build a key string out of all key columns' values
+ return row
+ .filter((_, colIndex) => viewer.columns[colIndex] && viewer.columns[colIndex].isKey)
+ .reduce(((prev, next) => prev += next), '')
+ },
+
+ isActiveRow(row) {
+ return viewer._makeRowKey(row) === viewer.rowKey
+ }
+
}
})
diff --git a/data-viewer/app/viewer/index.html b/data-viewer/app/viewer/index.html
index 121c4d4d..b5a80635 100644
--- a/data-viewer/app/viewer/index.html
+++ b/data-viewer/app/viewer/index.html
@@ -8,7 +8,7 @@