in src/components/modals/data-table-modal.js [89:193]
function DataTableModalFactory(DataTable) {
class DataTableModal extends React.Component {
datasetCellSizeCache = {};
dataId = props => props.dataId;
datasets = props => props.datasets;
fields = props => (props.datasets[props.dataId] || {}).fields;
columns = createSelector(this.fields, fields => fields.map(f => f.name));
colMeta = createSelector(this.fields, fields =>
fields.reduce(
(acc, {name, type}) => ({
...acc,
[name]: type
}),
{}
)
);
cellSizeCache = createSelector(this.dataId, this.datasets, (dataId, datasets) => {
if (!this.props.datasets[dataId]) {
return {};
}
const {fields, allData} = this.props.datasets[dataId];
let showCalculate = null;
if (!this.datasetCellSizeCache[dataId]) {
showCalculate = true;
} else if (
this.datasetCellSizeCache[dataId].fields !== fields ||
this.datasetCellSizeCache[dataId].allData !== allData
) {
showCalculate = true;
}
if (!showCalculate) {
return this.datasetCellSizeCache[dataId].cellSizeCache;
}
const cellSizeCache = fields.reduce(
(acc, field, colIdx) => ({
...acc,
[field.name]: renderedSize({
text: {
rows: allData,
column: field.name
},
colIdx,
type: field.type,
fontSize: this.props.theme.cellFontSize,
font: this.props.theme.fontFamily
})
}),
{}
);
// save it to cache
this.datasetCellSizeCache[dataId] = {
cellSizeCache,
fields,
allData
};
return cellSizeCache;
});
render() {
const {datasets, dataId, showDatasetTable} = this.props;
if (!datasets || !dataId) {
return null;
}
const activeDataset = datasets[dataId];
const columns = this.columns(this.props);
const colMeta = this.colMeta(this.props);
const cellSizeCache = this.cellSizeCache(this.props);
return (
<StyledModal className="dataset-modal" id="dataset-modal">
<CanvasHack />
<TableContainer>
<DatasetTabs
activeDataset={activeDataset}
datasets={datasets}
showDatasetTable={showDatasetTable}
/>
{datasets[dataId] ? (
<DataTable
key={dataId}
dataId={dataId}
columns={columns}
colMeta={colMeta}
cellSizeCache={cellSizeCache}
rows={activeDataset.allData}
pinnedColumns={activeDataset.pinnedColumns}
sortOrder={activeDataset.sortOrder}
sortColumn={activeDataset.sortColumn}
copyTableColumn={this.props.copyTableColumn}
pinTableColumn={this.props.pinTableColumn}
sortTableColumn={this.props.sortTableColumn}
/>
) : null}
</TableContainer>
</StyledModal>
);
}
}
return withTheme(DataTableModal);
}