Compare commits
No commits in common. "8d0f92af453ba7fac47122ebf2451e8c29ab38be" and "e730e2c83224b8762f650b017add999579316152" have entirely different histories.
8d0f92af45
...
e730e2c832
@ -278,8 +278,8 @@ const ControlPrinter = ({ slicerIntegration = false }) => {
|
|||||||
</Flex>
|
</Flex>
|
||||||
|
|
||||||
<AlertsDisplay
|
<AlertsDisplay
|
||||||
object={objectFormState.objectData}
|
alerts={objectFormState.objectData?.alerts}
|
||||||
objectType='printer'
|
printerId={printerId}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<ScrollBox>
|
<ScrollBox>
|
||||||
|
|||||||
@ -1,36 +1,27 @@
|
|||||||
import PropTypes from 'prop-types'
|
import PropTypes from 'prop-types'
|
||||||
import { createElement, useContext } from 'react'
|
import { createElement } from 'react'
|
||||||
import { Flex, Alert, Button, Dropdown } from 'antd'
|
import { Flex, Alert, Button, Dropdown } from 'antd'
|
||||||
import ExclamationOctagonIcon from '../../Icons/ExclamationOctagonIcon'
|
import ExclamationOctagonIcon from '../../Icons/ExclamationOctagonIcon'
|
||||||
import InfoCircleIcon from '../../Icons/InfoCircleIcon'
|
import InfoCircleIcon from '../../Icons/InfoCircleIcon'
|
||||||
import XMarkIcon from '../../Icons/XMarkIcon'
|
import { CaretDownOutlined } from '@ant-design/icons'
|
||||||
|
|
||||||
import { getModelByName } from '../../../database/ObjectModels'
|
import { getModelByName } from '../../../database/ObjectModels'
|
||||||
import { useNavigate } from 'react-router-dom'
|
import { useNavigate } from 'react-router-dom'
|
||||||
import ActionsIcon from '../../Icons/ActionsIcon'
|
|
||||||
import { ApiServerContext } from '../context/ApiServerContext'
|
|
||||||
|
|
||||||
const AlertsDisplay = ({
|
const AlertsDisplay = ({
|
||||||
object,
|
alerts = [],
|
||||||
objectType,
|
printerId,
|
||||||
showDismiss = true,
|
showDismiss = true,
|
||||||
showActions = true
|
showActions = true
|
||||||
}) => {
|
}) => {
|
||||||
const alerts = object?.alerts ?? []
|
|
||||||
const objectId = object?._id
|
|
||||||
const getAlertType = (type, priority) => {
|
const getAlertType = (type, priority) => {
|
||||||
if (type === 'error' || priority === '9') return 'error'
|
if (type === 'error' || priority === '9') return 'error'
|
||||||
if (type === 'warning' || priority === '8') return 'warning'
|
if (type === 'warning' || priority === '8') return 'warning'
|
||||||
return 'info'
|
return 'info'
|
||||||
}
|
}
|
||||||
|
|
||||||
const model = objectType ? getModelByName(objectType) : null
|
const printerModel = getModelByName('printer')
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { updateObject } = useContext(ApiServerContext)
|
|
||||||
|
|
||||||
const handleDismissAlert = (alertId) => {
|
|
||||||
const updatedAlerts = alerts.filter((a) => a._id !== alertId)
|
|
||||||
updateObject(objectId, objectType, { alerts: updatedAlerts })
|
|
||||||
}
|
|
||||||
const getAlertIcon = (type, priority) => {
|
const getAlertIcon = (type, priority) => {
|
||||||
if (type === 'error' || priority === '9') return <ExclamationOctagonIcon />
|
if (type === 'error' || priority === '9') return <ExclamationOctagonIcon />
|
||||||
if (type === 'warning' || priority === '8')
|
if (type === 'warning' || priority === '8')
|
||||||
@ -112,7 +103,7 @@ const AlertsDisplay = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const alertElements = alerts.map((alert, index) => {
|
const alertElements = alerts.map((alert, index) => {
|
||||||
const objectActions = model?.actions || []
|
const printerActions = printerModel?.actions || []
|
||||||
|
|
||||||
const alertActionKeys = Array.isArray(alert?.actions)
|
const alertActionKeys = Array.isArray(alert?.actions)
|
||||||
? alert.actions
|
? alert.actions
|
||||||
@ -125,7 +116,7 @@ const AlertsDisplay = ({
|
|||||||
: []
|
: []
|
||||||
|
|
||||||
const allowedKeys = new Set(alertActionKeys)
|
const allowedKeys = new Set(alertActionKeys)
|
||||||
const filteredActions = filterActionsByKeys(objectActions, allowedKeys)
|
const filteredActions = filterActionsByKeys(printerActions, allowedKeys)
|
||||||
|
|
||||||
const findActionByKey = (actions, key) => {
|
const findActionByKey = (actions, key) => {
|
||||||
if (!Array.isArray(actions)) return null
|
if (!Array.isArray(actions)) return null
|
||||||
@ -153,7 +144,7 @@ const AlertsDisplay = ({
|
|||||||
const action = findActionByKey(filteredActions, key)
|
const action = findActionByKey(filteredActions, key)
|
||||||
|
|
||||||
if (action?.url) {
|
if (action?.url) {
|
||||||
navigate(action.url(objectId))
|
navigate(action.url(printerId))
|
||||||
} else {
|
} else {
|
||||||
console.warn('No action found for key:', key)
|
console.warn('No action found for key:', key)
|
||||||
}
|
}
|
||||||
@ -164,46 +155,20 @@ const AlertsDisplay = ({
|
|||||||
<Alert
|
<Alert
|
||||||
key={`${alert.createdAt}-${index}-${alert._id}`}
|
key={`${alert.createdAt}-${index}-${alert._id}`}
|
||||||
message={alert.message}
|
message={alert.message}
|
||||||
style={{ padding: '4px 5px 4px 10px', minHeight: '35px' }}
|
style={{ padding: '4px 10px 4px 8px' }}
|
||||||
type={getAlertType(alert.type, alert.priority)}
|
type={getAlertType(alert.type, alert.priority)}
|
||||||
icon={getAlertIcon(alert.type, alert.priority)}
|
icon={getAlertIcon(alert.type, alert.priority)}
|
||||||
showIcon
|
showIcon
|
||||||
closable={false}
|
closable={showDismiss && alert.canDismiss}
|
||||||
onClose={() => {}}
|
onClose={() => {}}
|
||||||
action={
|
action={
|
||||||
<Flex gap='1px'>
|
showActions ? (
|
||||||
{showActions && filteredActions.length >= 0 && (
|
|
||||||
<Dropdown menu={menu} on>
|
<Dropdown menu={menu} on>
|
||||||
<Button
|
<Button size='small' type='text' style={{ marginLeft: '5px' }}>
|
||||||
size='small'
|
<CaretDownOutlined />
|
||||||
type='text'
|
</Button>
|
||||||
style={{ marginLeft: '5px' }}
|
|
||||||
icon={
|
|
||||||
<ActionsIcon
|
|
||||||
style={{ fontSize: '12px', marginBottom: '3.5px' }}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
</Dropdown>
|
</Dropdown>
|
||||||
)}
|
) : null
|
||||||
{showDismiss && alert.canDismiss && (
|
|
||||||
<Button
|
|
||||||
size='small'
|
|
||||||
type='text'
|
|
||||||
style={{ marginLeft: '5px' }}
|
|
||||||
onClick={() => handleDismissAlert(alert._id)}
|
|
||||||
icon={
|
|
||||||
<XMarkIcon
|
|
||||||
style={{
|
|
||||||
fontSize: '10px',
|
|
||||||
marginBottom: '5px',
|
|
||||||
marginLeft: '0.5px'
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
</Flex>
|
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
)
|
)
|
||||||
@ -217,24 +182,20 @@ const AlertsDisplay = ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
AlertsDisplay.propTypes = {
|
AlertsDisplay.propTypes = {
|
||||||
object: PropTypes.shape({
|
printerId: PropTypes.string.isRequired,
|
||||||
_id: PropTypes.string.isRequired,
|
showActions: PropTypes.bool.isRequired,
|
||||||
|
showDismiss: PropTypes.bool.isRequired,
|
||||||
alerts: PropTypes.arrayOf(
|
alerts: PropTypes.arrayOf(
|
||||||
PropTypes.shape({
|
PropTypes.shape({
|
||||||
canDismiss: PropTypes.bool.isRequired,
|
canDismiss: PropTypes.bool.isRequired,
|
||||||
_id: PropTypes.string.isRequired,
|
_id: PropTypes.string.isRequired,
|
||||||
code: PropTypes.string,
|
|
||||||
type: PropTypes.string.isRequired,
|
type: PropTypes.string.isRequired,
|
||||||
createdAt: PropTypes.string.isRequired,
|
createdAt: PropTypes.string.isRequired,
|
||||||
updatedAt: PropTypes.string.isRequired,
|
updatedAt: PropTypes.string.isRequired,
|
||||||
message: PropTypes.string,
|
message: PropTypes.string,
|
||||||
actions: PropTypes.arrayOf(PropTypes.string)
|
actions: PropTypes.arrayOf(PropTypes.string)
|
||||||
})
|
})
|
||||||
)
|
).isRequired
|
||||||
}).isRequired,
|
|
||||||
objectType: PropTypes.string.isRequired,
|
|
||||||
showActions: PropTypes.bool,
|
|
||||||
showDismiss: PropTypes.bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export default AlertsDisplay
|
export default AlertsDisplay
|
||||||
|
|||||||
@ -538,7 +538,7 @@ const ObjectChildTable = ({
|
|||||||
dataSource={rollupDataSource}
|
dataSource={rollupDataSource}
|
||||||
showHeader={false}
|
showHeader={false}
|
||||||
columns={rollupColumns}
|
columns={rollupColumns}
|
||||||
loading={{ spinning: loading, indicator: <></> }}
|
loading={{ spinning: loading, indicator: null }}
|
||||||
pagination={false}
|
pagination={false}
|
||||||
size={size}
|
size={size}
|
||||||
rowKey={resolvedRowKey}
|
rowKey={resolvedRowKey}
|
||||||
|
|||||||
@ -553,8 +553,8 @@ const ObjectProperty = ({
|
|||||||
if (value != null && value?.length != 0) {
|
if (value != null && value?.length != 0) {
|
||||||
return (
|
return (
|
||||||
<AlertsDisplay
|
<AlertsDisplay
|
||||||
object={objectData}
|
alerts={value}
|
||||||
objectType={objectType}
|
printerId={objectData._id}
|
||||||
showDismiss={false}
|
showDismiss={false}
|
||||||
showActions={false}
|
showActions={false}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -720,7 +720,7 @@ const ObjectSelect = ({
|
|||||||
|
|
||||||
// --- Main TreeSelect UI ---
|
// --- Main TreeSelect UI ---
|
||||||
return (
|
return (
|
||||||
<div style={{ ...style, position: 'relative' }}>
|
<div style={style}>
|
||||||
<TreeSelect
|
<TreeSelect
|
||||||
key={treeVersion}
|
key={treeVersion}
|
||||||
treeDataSimpleMode={false}
|
treeDataSimpleMode={false}
|
||||||
|
|||||||
@ -288,19 +288,6 @@ export const GCodeFile = {
|
|||||||
required: true,
|
required: true,
|
||||||
showHyperlink: true
|
showHyperlink: true
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: 'partSku',
|
|
||||||
label: 'Part SKU',
|
|
||||||
type: 'object',
|
|
||||||
objectType: 'partSku',
|
|
||||||
required: true,
|
|
||||||
showHyperlink: true,
|
|
||||||
masterFilter: (objectData) => {
|
|
||||||
const partId = objectData?.part?._id
|
|
||||||
if (partId == null) return {}
|
|
||||||
return { part: partId }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: 'quantity',
|
name: 'quantity',
|
||||||
label: 'Quantity',
|
label: 'Quantity',
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user