Add ObjectTypeDisplay and ObjectTypeSelect components for enhanced object type management
- Introduced ObjectTypeDisplay component to visually represent object types with optional icons and labels. - Created ObjectTypeSelect component to allow users to select object types from a dropdown, utilizing ObjectTypeDisplay for rendering options. - Implemented prop types for both components to ensure proper type checking and documentation clarity.
This commit is contained in:
parent
b4763e01af
commit
9a406bb7df
47
src/components/Dashboard/common/ObjectTypeDisplay.jsx
Normal file
47
src/components/Dashboard/common/ObjectTypeDisplay.jsx
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import { Tag, Typography } from 'antd'
|
||||||
|
import { getModelByName } from '../../../database/ObjectModels'
|
||||||
|
|
||||||
|
const { Text } = Typography
|
||||||
|
|
||||||
|
const ObjectTypeDisplay = ({
|
||||||
|
objectType,
|
||||||
|
showIcon = true,
|
||||||
|
showLabel = true,
|
||||||
|
style,
|
||||||
|
color = 'default'
|
||||||
|
}) => {
|
||||||
|
if (!objectType) {
|
||||||
|
return <Text type='secondary'>n/a</Text>
|
||||||
|
}
|
||||||
|
|
||||||
|
const model = getModelByName(objectType)
|
||||||
|
|
||||||
|
if (!model || model.name === 'unknown') {
|
||||||
|
return <Text type='secondary'>Unknown type</Text>
|
||||||
|
}
|
||||||
|
|
||||||
|
const Icon = model.icon
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tag
|
||||||
|
color={color}
|
||||||
|
style={{ margin: 0, ...style }}
|
||||||
|
icon={showIcon && Icon ? <Icon /> : undefined}
|
||||||
|
>
|
||||||
|
{showLabel && model.label && model.label}
|
||||||
|
</Tag>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectTypeDisplay.propTypes = {
|
||||||
|
objectType: PropTypes.string,
|
||||||
|
showIcon: PropTypes.bool,
|
||||||
|
showLabel: PropTypes.bool,
|
||||||
|
showPrefix: PropTypes.bool,
|
||||||
|
style: PropTypes.object,
|
||||||
|
color: PropTypes.string
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ObjectTypeDisplay
|
||||||
56
src/components/Dashboard/common/ObjectTypeSelect.jsx
Normal file
56
src/components/Dashboard/common/ObjectTypeSelect.jsx
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import { Select } from 'antd'
|
||||||
|
import PropTypes from 'prop-types'
|
||||||
|
import { objectModels } from '../../../database/ObjectModels'
|
||||||
|
import ObjectTypeDisplay from './ObjectTypeDisplay'
|
||||||
|
|
||||||
|
const ObjectTypeSelect = ({
|
||||||
|
value,
|
||||||
|
onChange,
|
||||||
|
style,
|
||||||
|
placeholder = 'Select object type...',
|
||||||
|
showSearch = true,
|
||||||
|
allowClear = true,
|
||||||
|
disabled = false
|
||||||
|
}) => {
|
||||||
|
// Create options from object models
|
||||||
|
const options = objectModels
|
||||||
|
.sort((a, b) => a.label.localeCompare(b.label))
|
||||||
|
.map((model) => ({
|
||||||
|
value: model.name,
|
||||||
|
label: <ObjectTypeDisplay objectType={model.name} />
|
||||||
|
}))
|
||||||
|
|
||||||
|
console.log('VALUE', value)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Select
|
||||||
|
showSearch={showSearch}
|
||||||
|
style={{ width: '100%', ...style }}
|
||||||
|
placeholder={placeholder}
|
||||||
|
optionFilterProp='children'
|
||||||
|
value={value}
|
||||||
|
onChange={onChange}
|
||||||
|
allowClear={allowClear}
|
||||||
|
disabled={disabled}
|
||||||
|
filterOption={(input, option) =>
|
||||||
|
option.label.props.children[1].props.children
|
||||||
|
.toLowerCase()
|
||||||
|
.indexOf(input.toLowerCase()) >= 0
|
||||||
|
}
|
||||||
|
options={options}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
ObjectTypeSelect.propTypes = {
|
||||||
|
value: PropTypes.string,
|
||||||
|
onChange: PropTypes.func,
|
||||||
|
style: PropTypes.object,
|
||||||
|
placeholder: PropTypes.string,
|
||||||
|
showSearch: PropTypes.bool,
|
||||||
|
allowClear: PropTypes.bool,
|
||||||
|
disabled: PropTypes.bool
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ObjectTypeSelect
|
||||||
Loading…
x
Reference in New Issue
Block a user