Enhance ObjectTable component to support Electron context; adjust scroll height based on Electron environment and improve action button handling with dynamic disabled state.

This commit is contained in:
Tom Butcher 2025-09-05 23:17:20 +01:00
parent f0cb4b3b83
commit 5300874b80

View File

@ -39,7 +39,8 @@ import CheckIcon from '../../Icons/CheckIcon'
import { useNavigate } from 'react-router-dom'
import QuestionCircleIcon from '../../Icons/QuestionCircleIcon'
import { AuthContext } from '../context/AuthContext'
import unionBy from 'lodash/unionBy'
import { ElectronContext } from '../context/ElectronContext'
const logger = loglevel.getLogger('DasboardTable')
logger.setLevel(config.logLevel)
@ -58,6 +59,7 @@ const ObjectTable = forwardRef(
ref
) => {
const { token } = useContext(AuthContext)
const { isElectron } = useContext(ElectronContext)
const {
fetchObjects,
connected,
@ -73,6 +75,15 @@ const ObjectTable = forwardRef(
if (cards) {
adjustedScrollHeight = 'calc(var(--unit-100vh) - 280px)'
}
if (isElectron) {
adjustedScrollHeight = 'calc(var(--unit-100vh) - 244px)'
}
if (isMobile && isElectron) {
adjustedScrollHeight = 'calc(var(--unit-100vh) - 282px)'
}
if (cards && isElectron) {
adjustedScrollHeight = 'calc(var(--unit-100vh) - 260px)'
}
const [, contextHolder] = message.useMessage()
const tableRef = useRef(null)
const model = getModelByName(type)
@ -108,26 +119,37 @@ const ObjectTable = forwardRef(
const renderActions = (objectData) => {
return (
<Flex gap='small' align='center' justify='center'>
{rowActions.map((action, index) => (
<Tooltip key={index} title={action.label} arrow={false}>
<Button
icon={
action.icon ? (
createElement(action.icon)
) : (
<QuestionCircleIcon />
)
}
type={'text'}
size={'small'}
onClick={() => {
if (action.url) {
navigate(action.url(objectData._id))
{rowActions.map((action, index) => {
var disabled = false
if (action.disabled) {
if (typeof action.disabled === 'function') {
disabled = action.disabled(objectData)
} else {
disabled = action.disabled
}
}
return (
<Tooltip key={index} title={action.label} arrow={false}>
<Button
icon={
action.icon ? (
createElement(action.icon)
) : (
<QuestionCircleIcon />
)
}
}}
/>
</Tooltip>
))}
disabled={disabled}
type={'text'}
size={'small'}
onClick={() => {
if (action.url) {
navigate(action.url(objectData._id))
}
}}
/>
</Tooltip>
)
})}
</Flex>
)
}
@ -289,11 +311,12 @@ const ObjectTable = forwardRef(
const updateEventHandler = useCallback((id, updatedData) => {
setPages((prevPages) =>
prevPages.map((page) => {
const updatedItems = unionBy(
[{ ...updatedData, _id: id }],
page.items,
'_id'
)
const updatedItems = page.items.map((item) => {
if (item._id === id) {
return { ...item, ...updatedData }
}
return item
})
return {
...page,
items: updatedItems
@ -748,6 +771,7 @@ const ObjectTable = forwardRef(
onChange={handleTableChange}
showSorterTooltip={false}
style={{ height: '100%' }}
size={isElectron ? 'small' : 'middle'}
/>
{cards ? (
<Spin indicator={<LoadingOutlined />} spinning={loading}>