quintodrome/ui/src/common/MultiLineTextField.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

53 lines
1.3 KiB
JavaScript
Raw Normal View History

import React, { memo } from 'react'
import Typography from '@material-ui/core/Typography'
import sanitizeFieldRestProps from './sanitizeFieldRestProps'
import md5 from 'blueimp-md5'
import { useRecordContext } from 'react-admin'
2020-11-13 17:11:24 -09:00
export const MultiLineTextField = memo(
({
className,
emptyText,
source,
firstLine,
maxLines,
addLabel,
...rest
}) => {
const record = useRecordContext(rest)
2021-05-11 18:08:07 -08:00
const value = record && record[source]
2020-11-13 17:11:24 -09:00
let lines = value ? value.split('\n') : []
if (maxLines || firstLine) {
lines = lines.slice(firstLine, maxLines)
}
return (
<Typography
className={className}
variant="body2"
component="span"
{...sanitizeFieldRestProps(rest)}
>
{lines.length === 0 && emptyText
? emptyText
2020-11-13 17:11:24 -09:00
: lines.map((line, idx) =>
line === '' ? (
<br key={md5(line + idx)} />
) : (
<div
data-testid={`${source}.${idx}`}
key={md5(line + idx)}
dangerouslySetInnerHTML={{ __html: line }}
/>
)
)}
</Typography>
)
}
)
MultiLineTextField.defaultProps = {
addLabel: true,
2020-11-13 17:11:24 -09:00
firstLine: 0,
}