diff --git a/src/common/QrCodeGenerator.tsx b/src/common/QrCodeGenerator.tsx index 8d5ddcb..27eaff0 100644 --- a/src/common/QrCodeGenerator.tsx +++ b/src/common/QrCodeGenerator.tsx @@ -1,4 +1,4 @@ -import { Box, Button, DialogActions, DialogContent, DialogTitle } from "@mui/material"; +import { Box, Button, Checkbox, DialogActions, DialogContent, DialogTitle, Typography } from "@mui/material"; // import MaterialTable from "material-table"; import React, { useEffect, useState } from "react"; import ResponsiveDialog from "./ResponsiveDialog"; @@ -36,7 +36,7 @@ export default function(props: Props) { width: 500 }, viewerMobile: { - height: "100%", + height: 500, width: "100%" }, page: { @@ -103,12 +103,12 @@ export default function(props: Props) { selected.push(row) }else{ //remove the page/index from the map if(pageSelect){ - pageSelect.splice(pageSelect.indexOf(index)) + pageSelect.splice(pageSelect.indexOf(index), 1) } //remove the selected object from the array selected.forEach((codeKey, index) => { if(row.key === codeKey.key){ - selected.splice(index) + selected.splice(index, 1) } }) } @@ -137,35 +137,27 @@ export default function(props: Props) { total={keyList.length} setPage={(page) => {setTablePage(page)}} handleRowsPerPageChange={handleRowsPerPageChange} + loadMore={() => { + let clone: QrCodeKey[] = cloneDeep(keyList) + let current = cloneDeep(displayedRows) + let newRows = clone.splice(current.length, pageSize) + setDisplayedRows(current.concat(newRows)) + }} + renderMobile={(row, index) => { + return ( + + { + rowSelected(row, index, checked) + }} + /> + + {row.name} + + + ) + }} /> - {/* { - setSelectedKeys(data); - }} - columns={[ - { - cellStyle: { - padding: 0 - }, - title: "Name", - field: "name" - } - ]}> */} ); }; diff --git a/src/common/ResponsiveTable.tsx b/src/common/ResponsiveTable.tsx index 628836c..ee1e9dd 100644 --- a/src/common/ResponsiveTable.tsx +++ b/src/common/ResponsiveTable.tsx @@ -85,7 +85,7 @@ interface Props { multiGutter?: boolean; rowsPerPageOptions?: number[]; noDataMessage?: string; - renderMobile?: (row: T) => JSX.Element; + renderMobile?: (row: T, index: number) => JSX.Element; hideKeys?: boolean; onRowClick?: (row: T) => void; actions?: string | JSX.Element; @@ -273,9 +273,9 @@ export default function ResponsiveTable(props: Props) { return String(val).charAt(0).toUpperCase() + String(val).slice(1); } - const renderMobileRow = (row: T) => { + const renderMobileRow = (row: T, index: number) => { if (renderMobile) return ( - renderMobile(row) + renderMobile(row, index) ) if (columns) { return ( @@ -330,7 +330,7 @@ export default function ResponsiveTable(props: Props) { {rows.map((row, index) => { return ( onRowClick&&onRowClick(row)}> - {renderMobileRow(row)} + {renderMobileRow(row, index)} {renderGutter && <> diff --git a/src/contract/contractTransactionTable.tsx b/src/contract/contractTransactionTable.tsx index 4508377..ebee9ba 100644 --- a/src/contract/contractTransactionTable.tsx +++ b/src/contract/contractTransactionTable.tsx @@ -369,6 +369,12 @@ export default function ContractTransactionTable(props: Props) { total={tableData.length} handleRowsPerPageChange={(e)=>{setPageSize(e.target.value)}} setPage={(page)=>{setTablePage(page)}} + loadMore={()=>{ + let clone: Transaction[] = cloneDeep(tableData) + let current = cloneDeep(displayData) + let newRows = clone.splice(current.length, pageSize) + setDisplayData(current.concat(newRows)) + }} /> {/* 1 && data[data.length - 1].value > gate.lowerFlow() && data[data.length - 1].value < gate.upperFlow() ) { diff --git a/src/gate/GateList.tsx b/src/gate/GateList.tsx index 8f0c8bc..5c548e2 100644 --- a/src/gate/GateList.tsx +++ b/src/gate/GateList.tsx @@ -12,6 +12,7 @@ import AddGateFab from "./AddGateFab"; import GateSettings from "./GateSettings"; import { useGateAPI, useGlobalState } from "providers"; import { Settings } from "@mui/icons-material"; +import { cloneDeep } from "lodash"; interface Props { //gates: Gate[]; @@ -219,6 +220,19 @@ export default function GateList(props: Props) { onRowClick={(gate) => {goToGate(gate)}} hideKeys={isMobile || props.useMobile} setSearchText={(search) => setSearch(search)} + loadMore={()=>{ + let current = cloneDeep(gates) + let keys = undefined + let types = undefined + if(currentTerminal) { + keys = [currentTerminal] + types = ["terminal"] + } + gateAPI.listGates(pageSize, current.length , "asc", "name", search, undefined, keys, types, undefined, undefined, as).then(resp => { + let newGates = resp.data.gates.map(gate => Gate.create(gate)) + setGates(current.concat(newGates)) + }) + }} /> ) }; diff --git a/src/maps/mapDrawers/GroupDrawer.tsx b/src/maps/mapDrawers/GroupDrawer.tsx index 4048245..8eae42d 100644 --- a/src/maps/mapDrawers/GroupDrawer.tsx +++ b/src/maps/mapDrawers/GroupDrawer.tsx @@ -183,7 +183,7 @@ export default function GroupDrawer(props: Props) { onRowClick={toDevice} handleRowsPerPageChange={()=>{}} setPage={()=>{}} - total={0} + total={grpDevs.length} rows={grpDevs} renderMobile={mobile} renderGutter={gutter} diff --git a/src/pages/Bins.tsx b/src/pages/Bins.tsx index ae8f6b5..64a40a2 100644 --- a/src/pages/Bins.tsx +++ b/src/pages/Bins.tsx @@ -1117,6 +1117,7 @@ export default function Bins(props: Props) { { setOpenQrGenerator(true); + setBinMenuAnchorEl(null) }}> Generate QR Codes diff --git a/src/pages/Firmware.tsx b/src/pages/Firmware.tsx index ecd628a..b3a7c58 100644 --- a/src/pages/Firmware.tsx +++ b/src/pages/Firmware.tsx @@ -39,6 +39,7 @@ import { useGlobalState } from "providers"; import { useCallback, useEffect, useState } from "react"; import { downloadFile } from "utils/download"; import { or } from "utils/types"; +import { cloneDeep } from "lodash"; const useStyles = makeStyles((theme: Theme) => { const themeType = useThemeType() @@ -463,6 +464,22 @@ export default function Firmware() { columns={columns(width === "xs" || width === "sm")} setPage={(page)=>{setTablePage(page)}} handleRowsPerPageChange={(e)=>{setPageSize(e.target.value)}} + loadMore={() => { + let current = cloneDeep(tableData) + firmwareAPI.listFirmware(pageSize, current.length, "desc", "version", searchText) + .then((response) => { + let newRows: FirmwareModel[] = or(response.data.firmware, []).map( + (firmwareData: any) => { + return FirmwareModel.create(pond.Firmware.fromObject(firmwareData)); + } + ); + setTableData(current.concat(newRows)) + }) + .catch(() => { + //failed to load + error("Failed to load more firmware versions") + }); + }} />