From 2e8f3c522872a1fd475f0edf3a656a7e30bc8355 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 8 Sep 2021 11:38:34 -0300 Subject: [PATCH 1/4] Fix Field components definitions --- packages/ra-ui-materialui/src/field/ArrayField.tsx | 9 +++++---- packages/ra-ui-materialui/src/field/ChipField.tsx | 10 ++++++---- packages/ra-ui-materialui/src/field/DateField.tsx | 9 +++++---- packages/ra-ui-materialui/src/field/EmailField.tsx | 10 +++++----- packages/ra-ui-materialui/src/field/NumberField.tsx | 9 +++++---- packages/ra-ui-materialui/src/field/RichTextField.tsx | 9 +++++---- packages/ra-ui-materialui/src/field/SelectField.tsx | 11 ++++++----- packages/ra-ui-materialui/src/field/TextField.tsx | 8 ++++---- packages/ra-ui-materialui/src/field/UrlField.tsx | 9 +++++---- 9 files changed, 46 insertions(+), 38 deletions(-) diff --git a/packages/ra-ui-materialui/src/field/ArrayField.tsx b/packages/ra-ui-materialui/src/field/ArrayField.tsx index cb504b1762d..eb9d4f4f979 100644 --- a/packages/ra-ui-materialui/src/field/ArrayField.tsx +++ b/packages/ra-ui-materialui/src/field/ArrayField.tsx @@ -117,7 +117,7 @@ const getDataAndIds = ( * ); * TagsField.defaultProps = { addLabel: true }; */ -export const ArrayField = (props: ArrayFieldProps) => { +export const ArrayField = memo((props: ArrayFieldProps) => { const { addLabel, basePath, @@ -178,12 +178,13 @@ export const ArrayField = (props: ArrayFieldProps) => { })} ); -}; +}); +// @ts-ignore ArrayField.defaultProps = { addLabel: true, }; - +// @ts-ignore ArrayField.propTypes = { ...fieldPropTypes, fieldKey: PropTypes.string, @@ -201,4 +202,4 @@ interface State { ArrayField.displayName = 'ArrayField'; -export default memo(ArrayField); +export default ArrayField; diff --git a/packages/ra-ui-materialui/src/field/ChipField.tsx b/packages/ra-ui-materialui/src/field/ChipField.tsx index c2a5175fdbb..2f44723c8a8 100644 --- a/packages/ra-ui-materialui/src/field/ChipField.tsx +++ b/packages/ra-ui-materialui/src/field/ChipField.tsx @@ -17,7 +17,7 @@ const useStyles = makeStyles( { name: 'RaChipField' } ); -export const ChipField = (props: ChipFieldProps) => { +export const ChipField = memo((props: ChipFieldProps) => { const { className, classes: classesOverride, @@ -49,13 +49,15 @@ export const ChipField = (props: ChipFieldProps) => { {...sanitizeFieldRestProps(rest)} /> ); -}; +}); +// @ts-ignore ChipField.defaultProps = { addLabel: true, }; - +// @ts-ignore ChipField.propTypes = { + // @ts-ignore ...ChipField.propTypes, ...fieldPropTypes, }; @@ -65,4 +67,4 @@ export interface ChipFieldProps InjectedFieldProps, Omit {} -export default memo(ChipField); +export default ChipField; diff --git a/packages/ra-ui-materialui/src/field/DateField.tsx b/packages/ra-ui-materialui/src/field/DateField.tsx index 4217b78845e..5ab21f0359a 100644 --- a/packages/ra-ui-materialui/src/field/DateField.tsx +++ b/packages/ra-ui-materialui/src/field/DateField.tsx @@ -42,7 +42,7 @@ const toLocaleStringSupportsLocales = (() => { * // renders the record { id: 1234, new Date('2012-11-07') } as * mercredi 7 novembre 2012 */ -export const DateField = (props: DateFieldProps) => { +export const DateField = memo((props: DateFieldProps) => { const { className, emptyText, @@ -89,12 +89,13 @@ export const DateField = (props: DateFieldProps) => { {dateString} ); -}; +}); +// @ts-ignore DateField.defaultProps = { addLabel: true, }; - +// @ts-ignore DateField.propTypes = { // @ts-ignore ...Typography.propTypes, @@ -116,4 +117,4 @@ export interface DateFieldProps showTime?: boolean; } -export default memo(DateField); +export default DateField; diff --git a/packages/ra-ui-materialui/src/field/EmailField.tsx b/packages/ra-ui-materialui/src/field/EmailField.tsx index 24338e784da..cfb80be5864 100644 --- a/packages/ra-ui-materialui/src/field/EmailField.tsx +++ b/packages/ra-ui-materialui/src/field/EmailField.tsx @@ -11,7 +11,7 @@ import { PublicFieldProps, InjectedFieldProps, fieldPropTypes } from './types'; // useful to prevent click bubbling in a datagrid with rowClick const stopPropagation = e => e.stopPropagation(); -const EmailField = (props: EmailFieldProps) => { +const EmailField = memo((props: EmailFieldProps) => { const { className, source, emptyText, ...rest } = props; const record = useRecordContext(props); const value = get(record, source); @@ -39,12 +39,12 @@ const EmailField = (props: EmailFieldProps) => { {value} ); -}; - +}); +// @ts-ignore EmailField.defaultProps = { addLabel: true, }; - +// @ts-ignore EmailField.propTypes = fieldPropTypes; export interface EmailFieldProps @@ -52,4 +52,4 @@ export interface EmailFieldProps InjectedFieldProps, AnchorHTMLAttributes {} -export default memo(EmailField); +export default EmailField; diff --git a/packages/ra-ui-materialui/src/field/NumberField.tsx b/packages/ra-ui-materialui/src/field/NumberField.tsx index 2d72148aa0e..9f791a4f281 100644 --- a/packages/ra-ui-materialui/src/field/NumberField.tsx +++ b/packages/ra-ui-materialui/src/field/NumberField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, memo } from 'react'; +import { memo } from 'react'; import PropTypes from 'prop-types'; import get from 'lodash/get'; import Typography, { TypographyProps } from '@material-ui/core/Typography'; @@ -42,8 +42,8 @@ const hasNumberFormat = !!( * // renders the record { id: 1234, price: 25.99 } as * 25,99 $US */ -export const NumberField: FC = memo( - props => { +export const NumberField = memo( + (props: NumberFieldProps) => { const { className, emptyText, @@ -89,11 +89,12 @@ export const NumberField: FC = memo( // what? TypeScript loses the displayName if we don't set it explicitly NumberField.displayName = 'NumberField'; +// @ts-ignore NumberField.defaultProps = { addLabel: true, textAlign: 'right', }; - +// @ts-ignore NumberField.propTypes = { // @ts-ignore ...Typography.propTypes, diff --git a/packages/ra-ui-materialui/src/field/RichTextField.tsx b/packages/ra-ui-materialui/src/field/RichTextField.tsx index ce9bac06e18..1f7170d4a69 100644 --- a/packages/ra-ui-materialui/src/field/RichTextField.tsx +++ b/packages/ra-ui-materialui/src/field/RichTextField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, memo } from 'react'; +import { memo } from 'react'; import PropTypes from 'prop-types'; import get from 'lodash/get'; import Typography, { TypographyProps } from '@material-ui/core/Typography'; @@ -11,8 +11,8 @@ import { InjectedFieldProps, PublicFieldProps, fieldPropTypes } from './types'; export const removeTags = (input: string) => input ? input.replace(/<[^>]+>/gm, '') : ''; -const RichTextField: FC = memo( - props => { +const RichTextField = memo( + (props: RichTextFieldProps) => { const { className, emptyText, source, stripTags, ...rest } = props; const record = useRecordContext(props); const value = get(record, source); @@ -36,11 +36,12 @@ const RichTextField: FC = memo( } ); +// @ts-ignore RichTextField.defaultProps = { addLabel: true, stripTags: false, }; - +// @ts-ignore RichTextField.propTypes = { // @ts-ignore ...Typography.propTypes, diff --git a/packages/ra-ui-materialui/src/field/SelectField.tsx b/packages/ra-ui-materialui/src/field/SelectField.tsx index efff2a4cc43..c3dda0b03d9 100644 --- a/packages/ra-ui-materialui/src/field/SelectField.tsx +++ b/packages/ra-ui-materialui/src/field/SelectField.tsx @@ -67,7 +67,7 @@ import { PublicFieldProps, InjectedFieldProps, fieldPropTypes } from './types'; * * **Tip**: sets `translateChoice` to false by default. */ -export const SelectField = (props: SelectFieldProps) => { +export const SelectField = memo((props: SelectFieldProps) => { const { className, emptyText, @@ -113,18 +113,19 @@ export const SelectField = (props: SelectFieldProps) => { {choiceText} ); -}; +}); +// @ts-ignore SelectField.defaultProps = { optionText: 'name', optionValue: 'id', translateChoice: true, }; - +// @ts-ignore SelectField.defaultProps = { addLabel: true, }; - +// @ts-ignore SelectField.propTypes = { // @ts-ignore ...Typography.propTypes, @@ -147,4 +148,4 @@ export interface SelectFieldProps SelectField.displayName = 'SelectField'; -export default memo(SelectField); +export default SelectField; diff --git a/packages/ra-ui-materialui/src/field/TextField.tsx b/packages/ra-ui-materialui/src/field/TextField.tsx index 2244b42e33d..e762c1e2257 100644 --- a/packages/ra-ui-materialui/src/field/TextField.tsx +++ b/packages/ra-ui-materialui/src/field/TextField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, memo, ElementType } from 'react'; +import { memo, ElementType } from 'react'; import get from 'lodash/get'; import Typography, { TypographyProps } from '@material-ui/core/Typography'; import { useRecordContext } from 'ra-core'; @@ -7,7 +7,7 @@ import { useRecordContext } from 'ra-core'; import sanitizeFieldRestProps from './sanitizeFieldRestProps'; import { PublicFieldProps, InjectedFieldProps, fieldPropTypes } from './types'; -const TextField: FC = memo(props => { +const TextField = memo((props: TextFieldProps) => { const { className, source, emptyText, ...rest } = props; const record = useRecordContext(props); const value = get(record, source); @@ -28,11 +28,11 @@ const TextField: FC = memo(props => { // what? TypeScript loses the displayName if we don't set it explicitly TextField.displayName = 'TextField'; - +// @ts-ignore TextField.defaultProps = { addLabel: true, }; - +// @ts-ignore TextField.propTypes = { // @ts-ignore ...Typography.propTypes, diff --git a/packages/ra-ui-materialui/src/field/UrlField.tsx b/packages/ra-ui-materialui/src/field/UrlField.tsx index b80f515415a..7dc6dc496e4 100644 --- a/packages/ra-ui-materialui/src/field/UrlField.tsx +++ b/packages/ra-ui-materialui/src/field/UrlField.tsx @@ -6,7 +6,7 @@ import { Typography, Link } from '@material-ui/core'; import { useRecordContext } from 'ra-core'; import { PublicFieldProps, InjectedFieldProps, fieldPropTypes } from './types'; -const UrlField = (props: UrlFieldProps) => { +const UrlField = memo((props: UrlFieldProps) => { const { className, emptyText, source, ...rest } = props; const record = useRecordContext(props); const value = get(record, source); @@ -33,12 +33,13 @@ const UrlField = (props: UrlFieldProps) => { {value} ); -}; +}); +// @ts-ignore UrlField.defaultProps = { addLabel: true, }; - +// @ts-ignore UrlField.propTypes = fieldPropTypes; UrlField.displayName = 'UrlField'; @@ -47,4 +48,4 @@ export interface UrlFieldProps InjectedFieldProps, AnchorHTMLAttributes {} -export default memo(UrlField); +export default UrlField; From bbe17334843b9553fe8da4378434acdd49ef48d7 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 8 Sep 2021 11:49:04 -0300 Subject: [PATCH 2/4] Applied prettier --- .../src/field/NumberField.tsx | 68 +++++++++---------- .../src/field/RichTextField.tsx | 46 ++++++------- 2 files changed, 54 insertions(+), 60 deletions(-) diff --git a/packages/ra-ui-materialui/src/field/NumberField.tsx b/packages/ra-ui-materialui/src/field/NumberField.tsx index 9f791a4f281..d82f9282758 100644 --- a/packages/ra-ui-materialui/src/field/NumberField.tsx +++ b/packages/ra-ui-materialui/src/field/NumberField.tsx @@ -42,49 +42,45 @@ const hasNumberFormat = !!( * // renders the record { id: 1234, price: 25.99 } as * 25,99 $US */ -export const NumberField = memo( - (props: NumberFieldProps) => { - const { - className, - emptyText, - source, - locales, - options, - textAlign, - ...rest - } = props; - const record = useRecordContext(props); - if (!record) { - return null; - } - const value = get(record, source); - if (value == null) { - return emptyText ? ( - - {emptyText} - - ) : null; - } - - return ( +export const NumberField = memo((props: NumberFieldProps) => { + const { + className, + emptyText, + source, + locales, + options, + textAlign, + ...rest + } = props; + const record = useRecordContext(props); + if (!record) { + return null; + } + const value = get(record, source); + if (value == null) { + return emptyText ? ( - {hasNumberFormat - ? value.toLocaleString(locales, options) - : value} + {emptyText} - ); + ) : null; } -); + + return ( + + {hasNumberFormat ? value.toLocaleString(locales, options) : value} + + ); +}); // what? TypeScript loses the displayName if we don't set it explicitly NumberField.displayName = 'NumberField'; diff --git a/packages/ra-ui-materialui/src/field/RichTextField.tsx b/packages/ra-ui-materialui/src/field/RichTextField.tsx index 1f7170d4a69..db324988f50 100644 --- a/packages/ra-ui-materialui/src/field/RichTextField.tsx +++ b/packages/ra-ui-materialui/src/field/RichTextField.tsx @@ -11,30 +11,28 @@ import { InjectedFieldProps, PublicFieldProps, fieldPropTypes } from './types'; export const removeTags = (input: string) => input ? input.replace(/<[^>]+>/gm, '') : ''; -const RichTextField = memo( - (props: RichTextFieldProps) => { - const { className, emptyText, source, stripTags, ...rest } = props; - const record = useRecordContext(props); - const value = get(record, source); - - return ( - - {value == null && emptyText ? ( - emptyText - ) : stripTags ? ( - removeTags(value) - ) : ( - - )} - - ); - } -); +const RichTextField = memo((props: RichTextFieldProps) => { + const { className, emptyText, source, stripTags, ...rest } = props; + const record = useRecordContext(props); + const value = get(record, source); + + return ( + + {value == null && emptyText ? ( + emptyText + ) : stripTags ? ( + removeTags(value) + ) : ( + + )} + + ); +}); // @ts-ignore RichTextField.defaultProps = { From ae162090054590801275cb3a30dbf8d25e233243 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 8 Sep 2021 12:09:31 -0300 Subject: [PATCH 3/4] Revert changes to RichTextField --- .../src/field/RichTextField.tsx | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/packages/ra-ui-materialui/src/field/RichTextField.tsx b/packages/ra-ui-materialui/src/field/RichTextField.tsx index db324988f50..7ad2e3d2585 100644 --- a/packages/ra-ui-materialui/src/field/RichTextField.tsx +++ b/packages/ra-ui-materialui/src/field/RichTextField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { memo } from 'react'; +import { FC, memo } from 'react'; import PropTypes from 'prop-types'; import get from 'lodash/get'; import Typography, { TypographyProps } from '@material-ui/core/Typography'; @@ -9,37 +9,38 @@ import sanitizeFieldRestProps from './sanitizeFieldRestProps'; import { InjectedFieldProps, PublicFieldProps, fieldPropTypes } from './types'; export const removeTags = (input: string) => - input ? input.replace(/<[^>]+>/gm, '') : ''; + input ? input.replace(/<[^>]+>/gm, '') : ''; -const RichTextField = memo((props: RichTextFieldProps) => { - const { className, emptyText, source, stripTags, ...rest } = props; - const record = useRecordContext(props); - const value = get(record, source); +const RichTextField: FC = memo( + props => { + const { className, emptyText, source, stripTags, ...rest } = props; + const record = useRecordContext(props); + const value = get(record, source); - return ( + return ( {value == null && emptyText ? ( - emptyText + emptyText ) : stripTags ? ( - removeTags(value) + removeTags(value) ) : ( - + )} - ); -}); + ); + } +); -// @ts-ignore RichTextField.defaultProps = { addLabel: true, stripTags: false, }; -// @ts-ignore + RichTextField.propTypes = { // @ts-ignore ...Typography.propTypes, From 07a2e56fad32ae5b9e17be80001eb3cc7e0ec1df Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 8 Sep 2021 12:18:34 -0300 Subject: [PATCH 4/4] Applied prettier --- .../src/field/RichTextField.tsx | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/ra-ui-materialui/src/field/RichTextField.tsx b/packages/ra-ui-materialui/src/field/RichTextField.tsx index 7ad2e3d2585..ce9bac06e18 100644 --- a/packages/ra-ui-materialui/src/field/RichTextField.tsx +++ b/packages/ra-ui-materialui/src/field/RichTextField.tsx @@ -9,31 +9,31 @@ import sanitizeFieldRestProps from './sanitizeFieldRestProps'; import { InjectedFieldProps, PublicFieldProps, fieldPropTypes } from './types'; export const removeTags = (input: string) => - input ? input.replace(/<[^>]+>/gm, '') : ''; + input ? input.replace(/<[^>]+>/gm, '') : ''; const RichTextField: FC = memo( - props => { - const { className, emptyText, source, stripTags, ...rest } = props; - const record = useRecordContext(props); - const value = get(record, source); - - return ( - - {value == null && emptyText ? ( - emptyText - ) : stripTags ? ( - removeTags(value) - ) : ( - - )} - - ); - } + props => { + const { className, emptyText, source, stripTags, ...rest } = props; + const record = useRecordContext(props); + const value = get(record, source); + + return ( + + {value == null && emptyText ? ( + emptyText + ) : stripTags ? ( + removeTags(value) + ) : ( + + )} + + ); + } ); RichTextField.defaultProps = {