refact: FocusTable Singleton Model

no longer "selectedTable" in Tables Model
This commit is contained in:
ysandler 2020-07-30 10:38:03 -05:00 committed by Joshua Shoemaker
parent ddee8dcc6b
commit 7a541cf09a
4 changed files with 40 additions and 19 deletions

View File

@ -1,8 +1,10 @@
import Tables from '../Models/Tables'
import FocusTable from '../Models/FocusTable'
class TableListController {
constructor() {
this.tables = new Tables()
this.focusTable = new FocusTable()
this.updatedTablesEvent = new Event('updateTables')
this.setSelectedTableEvent = new Event('setSelectedTable')
}
@ -13,7 +15,8 @@ class TableListController {
}
selectTableToView = id => {
this.tables.setSelectedTableById(id)
const table = this.tables.getById(id)
this.focusTable.table = table
document.dispatchEvent(this.setSelectedTableEvent)
}
}

26
src/Models/FocusTable.js Normal file
View File

@ -0,0 +1,26 @@
let instance = null
class FocusTable {
constructor (table) {
if (instance === null) instance = this
this._value = table
return instance
}
set table (table) {
if (table.type === 'Nodule' || table.type === 'Table') this._value = table
else {
this._value = null
console.error('Focus Tablw value must be of type "Nodule" or "Table"')
}
}
get table () {
if (this._value.type === 'Table') return this._value
else if (this._value.type === 'Nodule') return this._value.asTable()
else return {}
}
}
export default FocusTable

View File

@ -7,7 +7,6 @@ class Tables {
constructor () {
if (!instance) instance = this
this.collection = []
this.selectedTable = null
return instance
}
@ -32,12 +31,6 @@ 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

View File

@ -2,25 +2,27 @@ import React, { Component } from 'react'
import { Table } from 'semantic-ui-react'
import Tables from '../../Models/Tables'
import FocusTable from '../../Models/FocusTable'
class DataTable extends Component {
constructor (props) {
super(props)
this.tables = new Tables()
this.focusTable = new FocusTable()
this.state = {
headers: [],
tableData: []
}
document.addEventListener('setSelectedTable', this.setSelectedTable)
document.addEventListener('setSelectedTable', this.setFocusTable)
}
setSelectedTable = () => {
const selectedTable = this.tables.selectedTable
if (selectedTable) {
setFocusTable = () => {
const focusTable = this.focusTable.table
if (focusTable) {
this.setState({
headers: selectedTable.headers,
tableData: selectedTable.rows
headers: focusTable.headers,
tableData: focusTable.rows
})
}
}
@ -39,11 +41,8 @@ class DataTable extends Component {
renderTableRowElements = () => {
const { tableData, headers } = this.state
const tableRowElements = tableData.map(d => {
return <Table.Row>{ this.renderCellElements(d) }</Table.Row>
})
const { tableData } = this.state
const tableRowElements = tableData.map(d => <Table.Row>{ this.renderCellElements(d) }</Table.Row> )
return tableRowElements
}