-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add Table component and add result table to query interface
- Loading branch information
1 parent
b12e84d
commit bede9fa
Showing
10 changed files
with
339 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
|
||
import TableHeader from './TableHeader' | ||
import TablePane from './TablePane' | ||
|
||
const Table = ({ columns, rows, params, setParams }) => { | ||
return ( | ||
<div className="dq-table"> | ||
<TableHeader count={rows.count} params={params} setParams={setParams} /> | ||
<TablePane columns={columns} rows={rows} params={params} setParams={setParams} /> | ||
</div> | ||
) | ||
} | ||
|
||
Table.defaultProps = { | ||
columns: [], | ||
rows: {}, | ||
} | ||
|
||
Table.propTypes = { | ||
columns: PropTypes.array, | ||
rows: PropTypes.object, | ||
params: PropTypes.object.isRequired, | ||
setParams: PropTypes.func.isRequired | ||
} | ||
|
||
export default Table |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
|
||
const TableBody = ({ columns, rows }) => { | ||
return ( | ||
<tbody> | ||
{ | ||
rows.results && rows.results.map((row, rowIndex) => ( | ||
<tr key={rowIndex}> | ||
{ | ||
columns.map((column, columnIndex) => ( | ||
<td key={columnIndex}> | ||
<div className="dq-table-cell"> | ||
{row[columnIndex]} | ||
</div> | ||
</td> | ||
)) | ||
} | ||
</tr> | ||
)) | ||
} | ||
</tbody> | ||
) | ||
} | ||
|
||
TableBody.propTypes = { | ||
columns: PropTypes.array.isRequired, | ||
rows: PropTypes.object.isRequired | ||
} | ||
|
||
export default TableBody |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
import classNames from 'classnames' | ||
|
||
const TableHead = ({ columns, params, setParams }) => { | ||
const tooltips = true | ||
const ordering = params.ordering || '' | ||
|
||
const handleOrdering = (column) => { | ||
setParams({...params, ordering: (ordering == column.name) ? '-' + column.name : column.name}) | ||
} | ||
|
||
return ( | ||
<thead> | ||
<tr> | ||
{ | ||
columns.map((column, columnIndex) => ( | ||
<th key={columnIndex}> | ||
<div className="dq-table-cell"> | ||
<div className="name"> | ||
{ | ||
column.label ? ( | ||
<span>{column.label}</span> | ||
) : ( | ||
<span>{column.name}</span> | ||
) | ||
} | ||
</div> | ||
{ | ||
tooltips && ( | ||
<div className="info"> | ||
<span className="material-symbols-rounded align-middle text-body-tertiary">help</span> | ||
</div> | ||
) | ||
} | ||
<div className="order" onClick={() => handleOrdering(column)}> | ||
<span className={classNames('material-symbols-rounded align-middle', { | ||
'text-body-tertiary': ![column.name, '-' + column.name].includes(ordering) | ||
})}> | ||
{ | ||
ordering == '-' + column.name ? ( | ||
'expand_less' | ||
) : ( | ||
'expand_more' | ||
) | ||
} | ||
</span> | ||
</div> | ||
{ | ||
columnIndex < columns.length -1 && ( | ||
<div className="handle"></div> | ||
) | ||
} | ||
</div> | ||
</th> | ||
)) | ||
} | ||
</tr> | ||
</thead> | ||
) | ||
} | ||
|
||
TableHead.propTypes = { | ||
columns: PropTypes.array.isRequired, | ||
params: PropTypes.object.isRequired, | ||
setParams: PropTypes.func.isRequired | ||
} | ||
|
||
export default TableHead |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
import classnames from 'classnames' | ||
|
||
const TableHeader = ({ count, params, setParams }) => { | ||
|
||
const lastPage = count / params.page_size | ||
const isFirstPage = params.page == 1 | ||
const isLastPage = params.page == lastPage | ||
|
||
const handleFirst = () => setParams({...params, page: 1}) | ||
const handlePrevious = () => setParams({...params, page: params.page - 1}) | ||
const handleNext = () => setParams({...params, page: params.page + 1}) | ||
const handleLast = () => setParams({...params, page: lastPage }) | ||
const handleReset = () => setParams({page: 1, page_size: 10}) | ||
|
||
// eslint-disable-next-line react/prop-types | ||
const PageItem = ({label, disabled, onClick}) => ( | ||
<li className={classnames('page-item', { disabled })}> | ||
<span className="page-link" onClick={onClick}> | ||
{label} | ||
</span> | ||
</li> | ||
) | ||
|
||
return ( | ||
<div className="dq-table-header"> | ||
<ul className="pagination"> | ||
<PageItem label={gettext('First')} onClick={handleFirst} disabled={isFirstPage} /> | ||
<PageItem label={gettext('Previous')} onClick={handlePrevious} disabled={isFirstPage} /> | ||
<PageItem label={gettext('Next')} onClick={handleNext} disabled={isLastPage} /> | ||
<PageItem label={gettext('Last')} onClick={handleLast} disabled={isLastPage} /> | ||
</ul> | ||
<ul className="pagination"> | ||
<PageItem label={gettext('Reset')} onClick={handleReset} /> | ||
</ul> | ||
</div> | ||
) | ||
} | ||
|
||
TableHeader.propTypes = { | ||
count: PropTypes.number, | ||
params: PropTypes.object.isRequired, | ||
setParams: PropTypes.func.isRequired | ||
} | ||
|
||
export default TableHeader |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
import React from 'react' | ||
import PropTypes from 'prop-types' | ||
|
||
import TableHead from './TableHead' | ||
import TableBody from './TableBody' | ||
|
||
const TablePane = ({ columns, rows, params, setParams }) => { | ||
|
||
return ( | ||
<div className="dq-table-pane"> | ||
<table className="table"> | ||
<TableHead columns={columns} params={params} setParams={setParams} /> | ||
<TableBody columns={columns} rows={rows} /> | ||
</table> | ||
</div> | ||
) | ||
} | ||
|
||
TablePane.propTypes = { | ||
columns: PropTypes.array.isRequired, | ||
rows: PropTypes.object.isRequired, | ||
params: PropTypes.object.isRequired, | ||
setParams: PropTypes.func.isRequired | ||
} | ||
|
||
export default TablePane |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
.dq-table { | ||
.dq-table-header { | ||
display: flex; | ||
gap: 5px; | ||
|
||
.page-link { | ||
cursor: pointer; | ||
} | ||
} | ||
|
||
.dq-table-pane { | ||
border: 1px solid var(--bs-border-color); | ||
border-radius: 4px; | ||
width: auto; | ||
overflow-x: auto; | ||
table-layout: fixed; | ||
width: 100%; | ||
|
||
table.table { | ||
margin: 0; | ||
table-layout: fixed !important; | ||
|
||
th, | ||
td { | ||
width: 300px; | ||
padding: 0; | ||
border-right: 1px solid var(--bs-border-color); | ||
|
||
&:last-child, | ||
&:last-child { | ||
border-right: none; | ||
} | ||
} | ||
tr { | ||
&.selected { | ||
background-color: var(--dq-table-active-bg); | ||
} | ||
} | ||
th.dq-table-check { | ||
width: 32px; | ||
|
||
@include media-breakpoint-up(md) { | ||
width: 40px; | ||
} | ||
} | ||
.dq-table-cell, | ||
.dq-table-check { | ||
white-space: nowrap; | ||
padding: 8px; | ||
position: relative; | ||
overflow: hidden; | ||
} | ||
.dq-table-check { | ||
white-space: nowrap; | ||
padding: 9px 4px 7px 6px; | ||
text-align: center; | ||
} | ||
|
||
th { | ||
.dq-table-cell { | ||
display: flex; | ||
padding-right: 0; | ||
|
||
.name { | ||
overflow: hidden; | ||
flex-grow: 1; | ||
} | ||
.info { | ||
.material-symbols-rounded { | ||
font-size: 20px !important; | ||
} | ||
} | ||
.order { | ||
cursor: pointer; | ||
|
||
.material-symbols-rounded { | ||
line-height: 20px !important; | ||
} | ||
} | ||
.handle { | ||
width: 10px; | ||
|
||
&:hover { | ||
cursor: move; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters