From 387bedd8f54a9dfa5484fc5e6e61f5c70bee1d3a Mon Sep 17 00:00:00 2001
From: Derek Lieu
Date: Thu, 1 Jun 2017 17:59:58 +0100
Subject: [PATCH 1/4] Include dummy table view, top bar item
---
src/components/table/index.js | 10 ++++++++++
src/containers/index_route.js | 4 ++++
src/containers/top_bar.js | 5 +++++
3 files changed, 19 insertions(+)
create mode 100644 src/components/table/index.js
diff --git a/src/components/table/index.js b/src/components/table/index.js
new file mode 100644
index 0000000..8ccfbc9
--- /dev/null
+++ b/src/components/table/index.js
@@ -0,0 +1,10 @@
+import React from 'react'
+
+class TableView extends React.Component {
+
+ render () {
+ return
+ }
+}
+
+export default TableView
diff --git a/src/containers/index_route.js b/src/containers/index_route.js
index 4f8d93a..4c16b80 100644
--- a/src/containers/index_route.js
+++ b/src/containers/index_route.js
@@ -14,6 +14,7 @@ import Settings from '../components/settings'
import MapView from '../components/map'
import ReportView from '../components/report'
import MediaView from '../components/media'
+import TableView from '../components/table'
const styles = {
outer: {
@@ -90,6 +91,9 @@ IndexRoute.defaultProps = {
}, {
id: 'report',
component: ReportView
+ }, {
+ id: 'table',
+ component: TableView
}]
}
diff --git a/src/containers/top_bar.js b/src/containers/top_bar.js
index 731014c..0cd4545 100644
--- a/src/containers/top_bar.js
+++ b/src/containers/top_bar.js
@@ -63,6 +63,11 @@ const messages = defineMessages({
id: 'topbar.report',
defaultMessage: 'Report',
description: 'Report tab name'
+ },
+ table: {
+ id: 'topbar.table',
+ defaultMessage: 'Table',
+ description: 'Table tab name'
}
})
From 507edd0be1d1343ad0a3b9f2d638f4def6cfbb53 Mon Sep 17 00:00:00 2001
From: Derek Lieu
Date: Thu, 1 Jun 2017 19:14:19 +0100
Subject: [PATCH 2/4] First render
---
src/components/table/index.js | 32 ++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/src/components/table/index.js b/src/components/table/index.js
index 8ccfbc9..e32046e 100644
--- a/src/components/table/index.js
+++ b/src/components/table/index.js
@@ -1,9 +1,37 @@
import React from 'react'
+import Table from 'react-virtualized/dist/commonjs/Table/Table'
+import Column from 'react-virtualized/dist/commonjs/Table/Column'
+import AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer'
-class TableView extends React.Component {
+const rowHeight = 30
+class TableView extends React.Component {
render () {
- return
+ console.log(this.props)
+ const { features } = this.props
+ const rowGetter = ({ index }) => features[index].properties
+ return (
+
+
+ {({ width, height }) => (
+
+ )}
+
+
+ )
}
}
From 645fdd2d7f78658fdc4756623dcce3e7d4272da1 Mon Sep 17 00:00:00 2001
From: Derek Lieu
Date: Thu, 1 Jun 2017 19:31:35 +0100
Subject: [PATCH 3/4] Use filteredFeatures and render every column
---
src/components/table/index.js | 35 +++++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/src/components/table/index.js b/src/components/table/index.js
index e32046e..0ad9a0e 100644
--- a/src/components/table/index.js
+++ b/src/components/table/index.js
@@ -3,30 +3,49 @@ import Table from 'react-virtualized/dist/commonjs/Table/Table'
import Column from 'react-virtualized/dist/commonjs/Table/Column'
import AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer'
+require('react-virtualized/styles.css')
+
const rowHeight = 30
class TableView extends React.Component {
+ shouldComponentUpdate (nextProps) {
+ return nextProps.filteredFeatures !== this.props.filteredFeatures
+ }
+
+ getColumns () {
+ const { filteredFeatures } = this.props
+ const featureWithProperties = filteredFeatures.find(d => d.hasOwnProperty('properties'))
+ if (!featureWithProperties) { return false }
+ return Object.keys(featureWithProperties.properties)
+ }
+
render () {
- console.log(this.props)
- const { features } = this.props
- const rowGetter = ({ index }) => features[index].properties
+ const { filteredFeatures } = this.props
+ const rowGetter = ({ index }) => filteredFeatures[index].properties
+ const columns = this.getColumns()
return (
{({ width, height }) => (
-
+ {columns.map(column => (
+
+ ))}
)}
From e223778567103ad4304b00b579eb5610e74c8e75 Mon Sep 17 00:00:00 2001
From: Derek Lieu
Date: Thu, 1 Jun 2017 19:48:37 +0100
Subject: [PATCH 4/4] Calculate column width, taking scrollbar into account
---
src/components/table/index.js | 21 +++++++++++++++------
1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/src/components/table/index.js b/src/components/table/index.js
index 0ad9a0e..4cfef1a 100644
--- a/src/components/table/index.js
+++ b/src/components/table/index.js
@@ -2,6 +2,7 @@ import React from 'react'
import Table from 'react-virtualized/dist/commonjs/Table/Table'
import Column from 'react-virtualized/dist/commonjs/Table/Column'
import AutoSizer from 'react-virtualized/dist/commonjs/AutoSizer'
+import getScrollBarWidth from 'get-scrollbar-width'
require('react-virtualized/styles.css')
@@ -12,22 +13,31 @@ class TableView extends React.Component {
return nextProps.filteredFeatures !== this.props.filteredFeatures
}
+ componentWillMount () {
+ this.scrollbarWidth = getScrollBarWidth()
+ }
+
getColumns () {
const { filteredFeatures } = this.props
const featureWithProperties = filteredFeatures.find(d => d.hasOwnProperty('properties'))
- if (!featureWithProperties) { return false }
+ if (!featureWithProperties) { return [] }
return Object.keys(featureWithProperties.properties)
}
render () {
const { filteredFeatures } = this.props
const rowGetter = ({ index }) => filteredFeatures[index].properties
+ const rowLength = filteredFeatures.length
const columns = this.getColumns()
return (
- {({ width, height }) => (
- {
+ const totalHeight = rowHeight * rowLength
+ const overflow = totalHeight > height
+ const columnWidth = overflow ? (width - this.scrollbarWidth) / columns.length
+ : width / columns.length
+ return
))}
- )}
+ }}
)