Enhance ObjectProperty component to support conditional input rendering
- Added `useFormItem` prop to control input rendering behavior. - Refactored input rendering logic to streamline component structure and improve maintainability. - Updated various input types to utilize the new `inputProps` for consistent handling of properties.
This commit is contained in:
parent
aa6fe3c839
commit
cefe77bc0e
@ -85,6 +85,7 @@ const ObjectProperty = ({
|
|||||||
minimal = false,
|
minimal = false,
|
||||||
previewOpen = false,
|
previewOpen = false,
|
||||||
showPreview = true,
|
showPreview = true,
|
||||||
|
useFormItem = true,
|
||||||
options = [],
|
options = [],
|
||||||
roundNumber = false,
|
roundNumber = false,
|
||||||
fixedNumber = false,
|
fixedNumber = false,
|
||||||
@ -613,254 +614,218 @@ const ObjectProperty = ({
|
|||||||
mergedFormItemProps.onChange = onChange
|
mergedFormItemProps.onChange = onChange
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (type) {
|
const inputProps = useFormItem
|
||||||
case 'netGross':
|
? {}
|
||||||
return (
|
: {
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
value,
|
||||||
|
onChange,
|
||||||
|
disabled
|
||||||
|
}
|
||||||
|
|
||||||
|
const renderInput = () => {
|
||||||
|
switch (type) {
|
||||||
|
case 'netGross':
|
||||||
|
return (
|
||||||
<NetGrossInput
|
<NetGrossInput
|
||||||
difference={difference}
|
difference={difference}
|
||||||
prefix={prefix}
|
prefix={prefix}
|
||||||
suffix={suffix}
|
suffix={suffix}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'secret':
|
||||||
case 'secret':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<Input.Password
|
<Input.Password
|
||||||
placeholder={label}
|
placeholder={label}
|
||||||
disabled={disabled}
|
|
||||||
{...mergedFormItemProps}
|
|
||||||
iconRender={(visible) =>
|
iconRender={(visible) =>
|
||||||
visible ? <EyeSlashIcon /> : <EyeIcon />
|
visible ? <EyeSlashIcon /> : <EyeIcon />
|
||||||
}
|
}
|
||||||
|
{...mergedFormItemProps}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'wsprotocol':
|
||||||
case 'wsprotocol':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<Select
|
<Select
|
||||||
defaultValue='ws'
|
defaultValue='ws'
|
||||||
disabled={disabled}
|
|
||||||
options={[
|
options={[
|
||||||
{ value: 'ws', label: 'Websocket' },
|
{ value: 'ws', label: 'Websocket' },
|
||||||
{ value: 'wss', label: 'Websocket Secure' }
|
{ value: 'wss', label: 'Websocket Secure' }
|
||||||
]}
|
]}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'select':
|
||||||
case 'select':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<CustomSelect
|
<CustomSelect
|
||||||
placeholder={'Select a ' + label.toLowerCase() + '...'}
|
placeholder={'Select a ' + label.toLowerCase() + '...'}
|
||||||
disabled={disabled}
|
|
||||||
options={Array.isArray(options) ? options : []}
|
options={Array.isArray(options) ? options : []}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'priceMode':
|
||||||
case 'priceMode':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<Select
|
<Select
|
||||||
defaultValue='margin'
|
defaultValue='margin'
|
||||||
disabled={disabled}
|
|
||||||
options={[
|
options={[
|
||||||
{ value: 'margin', label: 'Margin %' },
|
{ value: 'margin', label: 'Margin %' },
|
||||||
{ value: 'amount', label: '£ Amount' }
|
{ value: 'amount', label: '£ Amount' }
|
||||||
]}
|
]}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'bool':
|
||||||
case 'bool':
|
return (
|
||||||
return (
|
<Switch
|
||||||
<Form.Item
|
{...inputProps}
|
||||||
name={formItemName}
|
{...(useFormItem ? {} : { checked: value })}
|
||||||
{...mergedFormItemProps}
|
/>
|
||||||
valuePropName='checked'
|
)
|
||||||
>
|
case 'dateTime':
|
||||||
<Switch disabled={disabled} />
|
return (
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'dateTime':
|
|
||||||
return (
|
|
||||||
<Form.Item
|
|
||||||
name={formItemName}
|
|
||||||
{...mergedFormItemProps}
|
|
||||||
getValueProps={(v) => ({ value: v ? dayjs(v) : null })}
|
|
||||||
>
|
|
||||||
<DatePicker
|
<DatePicker
|
||||||
showTime
|
showTime
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
disabled={disabled}
|
{...inputProps}
|
||||||
|
{...(useFormItem ? {} : { value: value ? dayjs(value) : null })}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'country':
|
||||||
case 'country':
|
return <CountrySelect {...inputProps} />
|
||||||
return (
|
case 'color':
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
return (
|
||||||
<CountrySelect disabled={disabled} />
|
<ColorSelector
|
||||||
</Form.Item>
|
required={required}
|
||||||
)
|
{...inputProps}
|
||||||
case 'color':
|
{...(useFormItem ? {} : { value })}
|
||||||
return (
|
/>
|
||||||
<Form.Item
|
)
|
||||||
name={formItemName}
|
case 'weight':
|
||||||
{...mergedFormItemProps}
|
return (
|
||||||
valuePropName='value'
|
|
||||||
getValueFromEvent={(v) => v}
|
|
||||||
>
|
|
||||||
<ColorSelector required={required} disabled={disabled} />
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'weight':
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<InputNumber
|
<InputNumber
|
||||||
suffix='g'
|
suffix='g'
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
placeholder={label}
|
placeholder={label}
|
||||||
disabled={disabled}
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'number':
|
||||||
case 'number':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<InputNumber
|
<InputNumber
|
||||||
placeholder={label}
|
placeholder={label}
|
||||||
disabled={disabled}
|
|
||||||
prefix={prefix}
|
prefix={prefix}
|
||||||
suffix={suffix}
|
suffix={suffix}
|
||||||
min={min}
|
min={min}
|
||||||
max={max}
|
max={max}
|
||||||
step={step}
|
step={step}
|
||||||
{...mergedFormItemProps}
|
|
||||||
style={{ width: '100%' }}
|
style={{ width: '100%' }}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'text':
|
||||||
case 'text':
|
return <Input placeholder={label} {...inputProps} />
|
||||||
return (
|
case 'codeBlock':
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
return (
|
||||||
<Input
|
|
||||||
placeholder={label}
|
|
||||||
{...mergedFormItemProps}
|
|
||||||
disabled={disabled}
|
|
||||||
/>
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'codeBlock':
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<CodeBlockEditor
|
<CodeBlockEditor
|
||||||
code={value}
|
code={value}
|
||||||
language={language}
|
language={language}
|
||||||
disabled={disabled}
|
|
||||||
height={height}
|
height={height}
|
||||||
minimal={minimal}
|
minimal={minimal}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'markdown':
|
||||||
case 'markdown':
|
return <MarkdownInput {...inputProps} />
|
||||||
return (
|
case 'material':
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
return (
|
||||||
<MarkdownInput value={value} />
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'material':
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<Select
|
<Select
|
||||||
options={MATERIAL_OPTIONS}
|
options={MATERIAL_OPTIONS}
|
||||||
placeholder={label}
|
placeholder={label}
|
||||||
disabled={disabled}
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'id':
|
|
||||||
// id is not editable, just show view mode
|
|
||||||
if (value) {
|
|
||||||
return <IdDisplay id={value} type={objectType} {...rest} />
|
|
||||||
} else {
|
|
||||||
return (
|
|
||||||
<Text type='secondary' {...textParams}>
|
|
||||||
n/a
|
|
||||||
</Text>
|
|
||||||
)
|
)
|
||||||
}
|
case 'id':
|
||||||
case 'object':
|
// id is not editable, just show view mode
|
||||||
return (
|
if (value) {
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
return <IdDisplay id={value} type={objectType} {...rest} />
|
||||||
|
} else {
|
||||||
|
return (
|
||||||
|
<Text type='secondary' {...textParams}>
|
||||||
|
n/a
|
||||||
|
</Text>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
case 'object':
|
||||||
|
return (
|
||||||
<ObjectSelect
|
<ObjectSelect
|
||||||
type={objectType}
|
type={objectType}
|
||||||
disabled={disabled}
|
|
||||||
masterFilter={masterFilter}
|
masterFilter={masterFilter}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'objectType':
|
||||||
case 'objectType':
|
return (
|
||||||
return (
|
<ObjectTypeSelect masterFilter={masterFilter} {...inputProps} />
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
)
|
||||||
<ObjectTypeSelect disabled={disabled} masterFilter={masterFilter} />
|
case 'objectList':
|
||||||
</Form.Item>
|
return <ObjectSelect type={objectType} multiple {...inputProps} />
|
||||||
)
|
case 'tags':
|
||||||
case 'objectList':
|
return <TagsInput {...inputProps} />
|
||||||
return (
|
case 'file':
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
return (
|
||||||
<ObjectSelect type={objectType} multiple disabled={disabled} />
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'tags':
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<TagsInput />
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
case 'file':
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<FileUpload
|
<FileUpload
|
||||||
value={value}
|
|
||||||
multiple={false}
|
multiple={false}
|
||||||
defaultPreviewOpen={previewOpen}
|
defaultPreviewOpen={previewOpen}
|
||||||
showPreview={showPreview}
|
showPreview={showPreview}
|
||||||
showInfo={showHyperlink}
|
showInfo={showHyperlink}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'fileList':
|
||||||
case 'fileList':
|
return (
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<FileUpload
|
<FileUpload
|
||||||
value={value}
|
|
||||||
multiple={true}
|
multiple={true}
|
||||||
defaultPreviewOpen={previewOpen}
|
defaultPreviewOpen={previewOpen}
|
||||||
showPreview={showPreview}
|
showPreview={showPreview}
|
||||||
showInfo={showHyperlink}
|
showInfo={showHyperlink}
|
||||||
|
{...inputProps}
|
||||||
/>
|
/>
|
||||||
</Form.Item>
|
)
|
||||||
)
|
case 'objectChildren': {
|
||||||
case 'objectChildren': {
|
return (
|
||||||
return (
|
<ObjectChildTable
|
||||||
<ObjectChildTable
|
properties={properties}
|
||||||
value={value}
|
objectData={objectData}
|
||||||
properties={properties}
|
isEditing={true}
|
||||||
objectData={objectData}
|
rollups={rollups}
|
||||||
isEditing={true}
|
{...inputProps}
|
||||||
formListName={formItemName}
|
/>
|
||||||
rollups={rollups}
|
)
|
||||||
/>
|
}
|
||||||
)
|
default:
|
||||||
|
return <Input placeholder={label} {...inputProps} />
|
||||||
}
|
}
|
||||||
default:
|
|
||||||
return (
|
|
||||||
<Form.Item name={formItemName} {...mergedFormItemProps}>
|
|
||||||
<Input placeholder={label} {...mergedFormItemProps} />
|
|
||||||
</Form.Item>
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!useFormItem) {
|
||||||
|
return renderInput()
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Form.Item
|
||||||
|
name={formItemName}
|
||||||
|
{...mergedFormItemProps}
|
||||||
|
{...(type === 'bool' ? { valuePropName: 'checked' } : {})}
|
||||||
|
{...(type === 'color'
|
||||||
|
? { valuePropName: 'value', getValueFromEvent: (v) => v }
|
||||||
|
: {})}
|
||||||
|
{...(type === 'dateTime'
|
||||||
|
? { getValueProps: (v) => ({ value: v ? dayjs(v) : null }) }
|
||||||
|
: {})}
|
||||||
|
>
|
||||||
|
{renderInput()}
|
||||||
|
</Form.Item>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const property = renderProperty()
|
const property = renderProperty()
|
||||||
@ -892,6 +857,7 @@ ObjectProperty.propTypes = {
|
|||||||
height: PropTypes.string,
|
height: PropTypes.string,
|
||||||
previewOpen: PropTypes.bool,
|
previewOpen: PropTypes.bool,
|
||||||
showPreview: PropTypes.bool,
|
showPreview: PropTypes.bool,
|
||||||
|
useFormItem: PropTypes.bool,
|
||||||
showHyperlink: PropTypes.bool,
|
showHyperlink: PropTypes.bool,
|
||||||
options: PropTypes.array,
|
options: PropTypes.array,
|
||||||
showSince: PropTypes.bool,
|
showSince: PropTypes.bool,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user