feat: data table of selected table

This commit is contained in:
Joshua Shoemaker 2020-07-29 00:34:33 -05:00
parent a5d8c99e98
commit 9ab0abb574
5 changed files with 82 additions and 3 deletions

View File

@ -4,6 +4,7 @@ class TableListController {
constructor() { constructor() {
this.tables = new Tables() this.tables = new Tables()
this.updatedTablesEvent = new Event('updateTables') this.updatedTablesEvent = new Event('updateTables')
this.setSelectedTableEvent = new Event('setSelectedTable')
} }
deleteTable = id => { deleteTable = id => {
@ -11,8 +12,9 @@ class TableListController {
document.dispatchEvent(this.updatedTablesEvent) document.dispatchEvent(this.updatedTablesEvent)
} }
logExportById = id => { selectTableToView = id => {
console.log(this.tables.getById(id).headers) this.tables.setSelectedTableById(id)
document.dispatchEvent(this.setSelectedTableEvent)
} }
} }

View File

@ -7,6 +7,7 @@ class Tables {
constructor () { constructor () {
if (!instance) instance = this if (!instance) instance = this
this.collection = [] this.collection = []
this.selectedTable = null
return instance return instance
} }
@ -31,6 +32,12 @@ class Tables {
getCollectionProps = () => this.collection.map(table => table.getProperties()) getCollectionProps = () => this.collection.map(table => table.getProperties())
getById = id => this.collection.find(t => id === t.id) 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 export default Tables

View File

@ -5,6 +5,7 @@ import CreateTableForm from './CreateTable/CreateTableForm'
import TableList from './TableList/TableList' import TableList from './TableList/TableList'
import CreateNodule from './CreateNodule/CreateNodule' import CreateNodule from './CreateNodule/CreateNodule'
import NoduleList from './NoduleList/NoduleList' import NoduleList from './NoduleList/NoduleList'
import DataTable from './DataTable/DataTable'
class App extends Component { class App extends Component {
render = () => { render = () => {
@ -14,6 +15,7 @@ class App extends Component {
<CreateNodule /> <CreateNodule />
<TableList /> <TableList />
<NoduleList /> <NoduleList />
<DataTable />
</div> </div>
) )
} }

View File

@ -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 => <Table.Cell singleLine>{data[h]}</Table.Cell>)
return rowElements
}
renderTableHeaderElements = () => {
const headers = this.state.headers
const headerElements = headers.map(h => <Table.HeaderCell>{h}</Table.HeaderCell>)
return headerElements
}
renderTableRowElements = () => {
const { tableData, headers } = this.state
const tableRowElements = tableData.map(d => {
return <Table.Row>{ this.renderCellElements(d) }</Table.Row>
})
return tableRowElements
}
render = () => {
return (
<div className='DataTable'>
<Table celled>
<Table.Header>
<Table.Row>
{ this.renderTableHeaderElements() }
</Table.Row>
</Table.Header>
<Table.Body>
{ this.renderTableRowElements() }
</Table.Body>
</Table>
</div>
)
}
}
export default DataTable

View File

@ -25,7 +25,7 @@ class TableListItem extends Component {
Delete <Icon name='trash' /> Delete <Icon name='trash' />
</span> </span>
<span <span
onClick={() => { this.controller.logExportById(table.id) }} onClick={() => { this.controller.selectTableToView(table.id) }}
style={{ cursor: 'pointer' }}> style={{ cursor: 'pointer' }}>
View <Icon name='table' /> View <Icon name='table' />
</span> </span>