UNPKG

kepler.gl.geoiq

Version:

kepler.gl is a webgl based application to visualize large scale location data in the browser

113 lines (98 loc) 3.43 kB
// Copyright (c) 2023 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. import React from 'react'; import styled from 'styled-components'; import DataGridFactory from 'components/common/datagrid'; import DatasetLabel from 'components/common/dataset-label'; const dgSettings = { sidePadding: '38px', verticalPadding: '16px', height: '36px' }; const StyledModal = styled.div` min-height: 70vh; overflow: hidden; `; const DatasetCatalog = styled.div` display: flex; padding: ${dgSettings.verticalPadding} ${dgSettings.sidePadding} 0; `; export const DatasetModalTab = styled.div` align-items: center; border-bottom: 3px solid ${props => (props.active ? 'black' : 'transparent')}; cursor: pointer; display: flex; height: 35px; margin: 0 3px; padding: 0 5px; :first-child { margin-left: 0; padding-left: 0; } `; export const DatasetTabs = React.memo( ({activeDataset, datasets, showDatasetTable}) => ( <DatasetCatalog className="dataset-modal-catalog"> {Object.values(datasets).map(dataset => dataset.externalData && dataset.externalData === true ? null : ( <DatasetModalTab className="dataset-modal-tab" active={dataset === activeDataset} key={dataset.id} onClick={() => showDatasetTable(dataset.id)} > <DatasetLabel dataset={dataset} /> </DatasetModalTab> ) )} </DatasetCatalog> ) ); DatasetTabs.displayName = 'DatasetTabs'; DataTableModalFactory.deps = [DataGridFactory]; function DataTableModalFactory(DataGrid) { const DataTableModal = React.memo( ({datasets, dataId, height, showDatasetTable, width}) => { if (!datasets || !dataId) { return null; } const activeDataset = datasets[dataId]; const rows = activeDataset.data; return ( <StyledModal className="dataset-modal"> <DatasetTabs activeDataset={activeDataset} datasets={datasets} showDatasetTable={showDatasetTable} /> <DataGrid width={width} height={height} rows={rows} columns={activeDataset.fields} /> </StyledModal> ); } ); DataTableModal.displayName = 'DataTableModal'; return DataTableModal; } export default DataTableModalFactory;