Add expandHeight prop to various Dashboard components for improved layout flexibility
All checks were successful
farmcontrol/farmcontrol-ui/pipeline/head This commit looks good

This commit is contained in:
Tom Butcher 2026-06-22 01:48:12 +01:00
parent 2c3cf9d02b
commit 657c1dd17e
42 changed files with 73 additions and 6 deletions

View File

@ -80,6 +80,7 @@ const Invoices = () => {
type='invoice' type='invoice'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const Payments = () => {
type='payment' type='payment'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal
@ -105,4 +106,3 @@ const Payments = () => {
} }
export default Payments export default Payments

View File

@ -80,6 +80,7 @@ const TaxRecords = () => {
type='taxRecord' type='taxRecord'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -86,6 +86,7 @@ const FilamentStocks = () => {
type='filamentStock' type='filamentStock'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const OrderItems = () => {
type='orderItem' type='orderItem'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -86,6 +86,7 @@ const PartStocks = () => {
type='partStock' type='partStock'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -87,6 +87,7 @@ const ProductStocks = () => {
type='productStock' type='productStock'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const PurchaseOrders = () => {
type='purchaseOrder' type='purchaseOrder'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const Shipments = () => {
type='shipment' type='shipment'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -86,6 +86,7 @@ const StockAudits = () => {
type='stockAudit' type='stockAudit'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -69,6 +69,7 @@ const StockEvents = () => {
type='stockEvent' type='stockEvent'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
</> </>

View File

@ -84,6 +84,7 @@ const StockLocations = () => {
type='stockLocation' type='stockLocation'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -84,6 +84,7 @@ const StockTransfers = () => {
type='stockTransfer' type='stockTransfer'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const AppPasswords = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
<Modal <Modal

View File

@ -62,6 +62,7 @@ const AuditLogs = () => {
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
type='auditLog' type='auditLog'
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
</> </>

View File

@ -80,6 +80,7 @@ const CourierServices = () => {
type='courierService' type='courierService'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -79,6 +79,7 @@ const Couriers = () => {
type='courier' type='courier'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const DocumentJobs = () => {
type='documentJob' type='documentJob'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -79,6 +79,7 @@ const DocumentPrinters = () => {
type='documentPrinter' type='documentPrinter'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -78,6 +78,7 @@ const DocumentSizes = () => {
type='documentSize' type='documentSize'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const DocumentTemplates = () => {
type='documentTemplate' type='documentTemplate'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -84,6 +84,7 @@ const FilamentSkus = () => {
type='filamentSku' type='filamentSku'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -86,6 +86,7 @@ const Filaments = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
<Modal <Modal

View File

@ -68,6 +68,7 @@ const Files = () => {
type='file' type='file'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
</> </>

View File

@ -85,6 +85,7 @@ const Hosts = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
<Modal <Modal

View File

@ -83,6 +83,7 @@ const Materials = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
<Modal <Modal

View File

@ -80,6 +80,7 @@ const NoteTypes = () => {
type='noteType' type='noteType'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -83,6 +83,7 @@ const PartSkus = () => {
type='partSku' type='partSku'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -85,6 +85,7 @@ const Parts = (filter) => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
filter={filter} filter={filter}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -83,6 +83,7 @@ const ProductCategories = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
<Modal <Modal

View File

@ -84,6 +84,7 @@ const ProductSkus = () => {
type='productSku' type='productSku'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -355,6 +355,7 @@ const Products = () => {
type={'product'} type={'product'}
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -79,6 +79,7 @@ const TaxRates = () => {
type='taxRate' type='taxRate'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -79,6 +79,7 @@ const Vendors = () => {
type='vendor' type='vendor'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -82,6 +82,7 @@ const GCodeFiles = () => {
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -86,6 +86,7 @@ const Jobs = () => {
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -71,6 +71,7 @@ const SubJobs = () => {
visibleColumns={columnVisibility} visibleColumns={columnVisibility}
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
</> </>

View File

@ -79,6 +79,7 @@ const Clients = () => {
type='client' type='client'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal
@ -101,4 +102,3 @@ const Clients = () => {
} }
export default Clients export default Clients

View File

@ -80,6 +80,7 @@ const Listings = () => {
type='listing' type='listing'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const Marketplaces = () => {
type='marketplace' type='marketplace'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal

View File

@ -80,6 +80,7 @@ const SalesOrders = () => {
type='salesOrder' type='salesOrder'
cards={viewMode === 'cards'} cards={viewMode === 'cards'}
showFilterSidebar={showFilterSidebar} showFilterSidebar={showFilterSidebar}
expandHeight={true}
/> />
</Flex> </Flex>
<Modal <Modal
@ -105,4 +106,3 @@ const SalesOrders = () => {
} }
export default SalesOrders export default SalesOrders

View File

@ -101,7 +101,8 @@ const ObjectTable = forwardRef(
masterFilter = {}, masterFilter = {},
size = 'middle', size = 'middle',
onStateChange, onStateChange,
showFilterSidebar = false showFilterSidebar = false,
expandHeight = false
}, },
ref ref
) => { ) => {
@ -728,6 +729,30 @@ const ObjectTable = forwardRef(
setTableData(pages.flatMap((page) => page.items)) setTableData(pages.flatMap((page) => page.items))
}, [pages]) }, [pages])
useEffect(() => {
if (!expandHeight || cards) return
const findAntTableBody = (element) => {
if (!element) return null
if (element.classList?.contains('ant-table-body')) return element
for (const child of element.children) {
const found = findAntTableBody(child)
if (found) return found
}
return null
}
const root = tableRef.current?.nativeElement ?? tableRef.current
const tableBody = findAntTableBody(root)
if (!tableBody) return
tableBody.style.minHeight = adjustedScrollHeight
return () => {
tableBody.style.minHeight = ''
}
}, [expandHeight, adjustedScrollHeight, cards, loading, tableData])
// Add columns in the order specified by model.columns // Add columns in the order specified by model.columns
model.columns.forEach((colName) => { model.columns.forEach((colName) => {
const prop = modelProperties.find((p) => p.name === colName) const prop = modelProperties.find((p) => p.name === colName)
@ -878,7 +903,10 @@ const ObjectTable = forwardRef(
return ( return (
<Row <Row
gutter={[16, 16]} gutter={[16, 16]}
style={{ overflowY: 'auto', maxHeight: adjustedScrollHeight }} style={{
overflowY: 'auto',
maxHeight: adjustedScrollHeight
}}
ref={cardsContainerRef} ref={cardsContainerRef}
> >
{tableData.map((record) => { {tableData.map((record) => {
@ -1002,7 +1030,8 @@ ObjectTable.propTypes = {
masterFilter: PropTypes.object, masterFilter: PropTypes.object,
size: PropTypes.string, size: PropTypes.string,
onStateChange: PropTypes.func, onStateChange: PropTypes.func,
showFilterSidebar: PropTypes.bool showFilterSidebar: PropTypes.bool,
expandHeight: PropTypes.bool
} }
export default ObjectTable export default ObjectTable