From ddee8dcc6be975784a47f8a8a0a381cd4a5d4ab0 Mon Sep 17 00:00:00 2001 From: ysandler Date: Wed, 29 Jul 2020 00:34:33 -0500 Subject: [PATCH] feat: data table of selected table --- src/Controllers/TableListController.js | 6 ++- src/Models/Tables.js | 7 +++ src/views/App.js | 2 + src/views/DataTable/DataTable.js | 68 ++++++++++++++++++++++++++ src/views/TableList/TableListItem.js | 2 +- 5 files changed, 82 insertions(+), 3 deletions(-) diff --git a/src/Controllers/TableListController.js b/src/Controllers/TableListController.js index 374d1dd..76e9901 100644 --- a/src/Controllers/TableListController.js +++ b/src/Controllers/TableListController.js @@ -4,6 +4,7 @@ class TableListController { constructor() { this.tables = new Tables() this.updatedTablesEvent = new Event('updateTables') + this.setSelectedTableEvent = new Event('setSelectedTable') } deleteTable = id => { @@ -11,8 +12,9 @@ class TableListController { document.dispatchEvent(this.updatedTablesEvent) } - logExportById = id => { - console.log(this.tables.getById(id).headers) + selectTableToView = id => { + this.tables.setSelectedTableById(id) + document.dispatchEvent(this.setSelectedTableEvent) } } diff --git a/src/Models/Tables.js b/src/Models/Tables.js index 190c25c..dbd5aa4 100644 --- a/src/Models/Tables.js +++ b/src/Models/Tables.js @@ -7,6 +7,7 @@ class Tables { constructor () { if (!instance) instance = this this.collection = [] + this.selectedTable = null return instance } @@ -31,6 +32,12 @@ class Tables { getCollectionProps = () => this.collection.map(table => table.getProperties()) getById = id => this.collection.find(t => id === t.id) + + setSelectedTableById = id => { + const table = this.collection.find(t => id === t.id) + if (table) this.selectedTable = table + else this.selectedTable = null + } } export default Tables diff --git a/src/views/App.js b/src/views/App.js index 0ca63b9..e0a215f 100644 --- a/src/views/App.js +++ b/src/views/App.js @@ -5,6 +5,7 @@ import CreateTableForm from './CreateTable/CreateTableForm' import TableList from './TableList/TableList' import CreateNodule from './CreateNodule/CreateNodule' import NoduleList from './NoduleList/NoduleList' +import DataTable from './DataTable/DataTable' class App extends Component { render = () => { @@ -14,6 +15,7 @@ class App extends Component { + ) } diff --git a/src/views/DataTable/DataTable.js b/src/views/DataTable/DataTable.js index e69de29..9ff4c60 100644 --- a/src/views/DataTable/DataTable.js +++ b/src/views/DataTable/DataTable.js @@ -0,0 +1,68 @@ +import React, { Component } from 'react' +import { Table } from 'semantic-ui-react' + +import Tables from '../../Models/Tables' + +class DataTable extends Component { + constructor (props) { + super(props) + this.tables = new Tables() + this.state = { + headers: [], + tableData: [] + } + + document.addEventListener('setSelectedTable', this.setSelectedTable) + } + + setSelectedTable = () => { + const selectedTable = this.tables.selectedTable + if (selectedTable) { + this.setState({ + headers: selectedTable.headers, + tableData: selectedTable.rows + }) + } + } + + renderCellElements = data => { + const { headers } = this.state + const rowElements = headers.map(h => {data[h]}) + return rowElements + } + + renderTableHeaderElements = () => { + const headers = this.state.headers + const headerElements = headers.map(h => {h}) + return headerElements + } + + + renderTableRowElements = () => { + const { tableData, headers } = this.state + const tableRowElements = tableData.map(d => { + return { this.renderCellElements(d) } + }) + + return tableRowElements + } + + render = () => { + return ( +
+ + + + { this.renderTableHeaderElements() } + + + + { this.renderTableRowElements() } + +
+
+ ) + } +} + +export default DataTable diff --git a/src/views/TableList/TableListItem.js b/src/views/TableList/TableListItem.js index 6113f03..d9a9ec2 100644 --- a/src/views/TableList/TableListItem.js +++ b/src/views/TableList/TableListItem.js @@ -25,7 +25,7 @@ class TableListItem extends Component { Delete { this.controller.logExportById(table.id) }} + onClick={() => { this.controller.selectTableToView(table.id) }} style={{ cursor: 'pointer' }}> View