in src/components/SearchTable.js [6:121]
function SearchTable (props) {
const {searchResults, isSearching} = props
const PAGE_SIZE = 15
const [menuDefinition, setMenuDefinition] = useState('')
const [menuIndex, setMenuIndex] = useState(1)
const [menuMaxIndex, setMenuMaxIndex] = useState(0)
const [tableItems, setTableItems] = useState(<Table.Row></Table.Row>)
const [activeRow, setActiveRow] = useState()
useEffect(() => {
if (searchResults !== undefined && searchResults != null) {
var _searchResults = searchResults.slice((menuIndex - 1) * PAGE_SIZE, ((menuIndex - 1) * PAGE_SIZE) + PAGE_SIZE)
setTableItems(
_searchResults.map(((record, index) => {
var callDate = moment(record.startDateTime)
return(
<Table.Row
key={record.sessionId}
onClick={() => {
props.onActiveRecord(record.sessionId)
setActiveRow(record.sessionId)
}}
active={record.sessionId === activeRow}
>
<Table.Cell>{record.cli}</Table.Cell>
<Table.Cell>{record.accountNumber}</Table.Cell>
<Table.Cell>{callDate.format("DD/MM/YYYY h:mmA")}</Table.Cell>
</Table.Row>
)
}))
)
}
}, [props, searchResults, menuIndex, activeRow])
useEffect(() => {
const handlePagerClick = (e, {name}) => {
switch(name) {
case 'previous':
if (menuIndex > 1) {setMenuIndex(menuIndex - 1)}
break
case 'next':
if (menuIndex < menuMaxIndex) {setMenuIndex(menuIndex + 1)}
break
default:
setMenuIndex(name)
}
}
if (searchResults !== undefined && searchResults != null) {
var searchItems = searchResults.length
var pages = Math.ceil(searchItems / 15)
setMenuMaxIndex(pages)
var items = [...Array(pages).keys()].map((pageNumber) => {
return (
<Menu.Item
as='a'
key={pageNumber + 1}
name={(pageNumber + 1).toString()}
active={menuIndex === pageNumber + 1}
onClick={handlePagerClick}
/>
)
})
setMenuDefinition(
<Menu floated='right' pagination>
<Menu.Item as='a' name='previous' icon onClick={handlePagerClick}>
<Icon name='chevron left' />
</Menu.Item>
{items}
<Menu.Item as='a' name='next' icon onClick={handlePagerClick}>
<Icon name='chevron right' />
</Menu.Item>
</Menu>
)
}
}, [searchResults, menuIndex, menuMaxIndex])
return (
<div>
<Segment basic>
<Dimmer active={isSearching} inverted>
<Loader active={isSearching} inline='centered' inverted>Searching...</Loader>
</Dimmer>
<Table celled striped selectable>
<Table.Header>
<Table.Row>
<Table.HeaderCell>Phone number</Table.HeaderCell>
<Table.HeaderCell>Account number</Table.HeaderCell>
<Table.HeaderCell>Call timestamp</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
{tableItems}
</Table.Body>
<Table.Footer>
<Table.Row>
<Table.HeaderCell colSpan='3'>
{menuDefinition}
</Table.HeaderCell>
</Table.Row>
</Table.Footer>
</Table>
</Segment>
</div>
)
}