import React from 'react'
import PropTypes from 'prop-types'
import get from 'lodash/get'
import { FieldTitle, useRecordContext } from 'react-admin'
import { TextField } from '@material-ui/core'
import { makeStyles } from '@material-ui/core/styles'
import { useDateLocale } from '../i18n/useDateLocale'
import {
formatBytes,
formatDateTime,
formatDuration2,
formatNumber,
} from '../utils/formatters'
import { isDateSet } from '../utils/validations'
const useStyles = makeStyles(
(theme) => ({
inputRoot: {
'&:hover $notchedOutline': {
borderColor: theme.palette.divider,
},
},
notchedOutline: {
borderColor: theme.palette.divider,
},
}),
{ name: 'NDReadOnlyField' },
)
const identity = (v) => v
// Renders a record value as a dimmed, non-editable input, so it lines up with the inputs in a form
export const ReadOnlyTextField = ({
source,
label,
resource,
className,
fullWidth,
format = identity,
...props
}) => {
const classes = useStyles(props)
const record = useRecordContext(props)
const value = get(record, source)
return (
}
value={value == null ? '' : format(value)}
variant="outlined"
margin="dense"
fullWidth={fullWidth}
focused={false}
helperText=" "
InputProps={{
readOnly: true,
classes: {
root: classes.inputRoot,
notchedOutline: classes.notchedOutline,
},
}}
inputProps={{ tabIndex: -1 }}
/>
)
}
ReadOnlyTextField.propTypes = {
source: PropTypes.string.isRequired,
label: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
record: PropTypes.object,
resource: PropTypes.string,
className: PropTypes.string,
classes: PropTypes.object,
fullWidth: PropTypes.bool,
format: PropTypes.func,
}
export const ReadOnlyDateField = (props) => {
const locale = useDateLocale()
const format = (v) => (isDateSet(v) ? formatDateTime(v, locale) : '')
return
}
export const ReadOnlyNumberField = (props) => {
const locale = useDateLocale()
return (
formatNumber(v, locale)} {...props} />
)
}
export const ReadOnlySizeField = (props) => (
)
export const ReadOnlyDurationField = (props) => (
)