From 5875e28efd9cc27d4a168c22e7c138841be34d03 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 18 Aug 2021 09:57:50 -0300 Subject: [PATCH 01/27] Remove FC usage from Link component --- packages/ra-ui-materialui/src/Link.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/ra-ui-materialui/src/Link.tsx b/packages/ra-ui-materialui/src/Link.tsx index 39023926cf0..b5beec6313d 100644 --- a/packages/ra-ui-materialui/src/Link.tsx +++ b/packages/ra-ui-materialui/src/Link.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { Link as RRLink, LinkProps as RRLinkProps } from 'react-router-dom'; @@ -23,7 +22,7 @@ export interface LinkProps extends RRLinkProps { className?: string; } -const Link: FC = props => { +const Link = (props: LinkProps) => { const { to, children, From b981ac24e1ebcbcbe68f933a01af916aa16ba029 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 18 Aug 2021 10:11:53 -0300 Subject: [PATCH 02/27] Remove FC usage from FilterList and FilterLiveSearch component --- .../ra-ui-materialui/src/list/filter/FilterList.tsx | 11 ++++++----- .../src/list/filter/FilterLiveSearch.tsx | 4 ++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/ra-ui-materialui/src/list/filter/FilterList.tsx b/packages/ra-ui-materialui/src/list/filter/FilterList.tsx index e9d978b082b..a00942a7ede 100644 --- a/packages/ra-ui-materialui/src/list/filter/FilterList.tsx +++ b/packages/ra-ui-materialui/src/list/filter/FilterList.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC } from 'react'; +import { ReactNode } from 'react'; import { Box, Typography, List } from '@material-ui/core'; import { useTranslate } from 'ra-core'; @@ -40,11 +40,12 @@ import { useTranslate } from 'ra-core'; * * ); */ -const FilterList: FC<{ label: string; icon: React.ReactNode }> = ({ - label, - icon, - children, +const FilterList = (props: { + label: string; + icon: ReactNode; + children: ReactNode; }) => { + const { label, icon, children } = props; const translate = useTranslate(); return ( <> diff --git a/packages/ra-ui-materialui/src/list/filter/FilterLiveSearch.tsx b/packages/ra-ui-materialui/src/list/filter/FilterLiveSearch.tsx index 5372bbaeb51..fbff7c3aa56 100644 --- a/packages/ra-ui-materialui/src/list/filter/FilterLiveSearch.tsx +++ b/packages/ra-ui-materialui/src/list/filter/FilterLiveSearch.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ChangeEvent, memo, useMemo } from 'react'; +import { ChangeEvent, memo, useMemo } from 'react'; import { InputAdornment } from '@material-ui/core'; import SearchIcon from '@material-ui/icons/Search'; import { Form } from 'react-final-form'; @@ -22,7 +22,7 @@ import TextInput from '../../input/TextInput'; * * ); */ -const FilterLiveSearch: FC<{ source?: string }> = props => { +const FilterLiveSearch = (props: { source?: string }) => { const { source = 'q', ...rest } = props; const { filterValues, setFilters } = useListFilterContext(); const translate = useTranslate(); From 9fa718a25be821f572b2ba0a7206879aac1d2781 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 18 Aug 2021 10:24:15 -0300 Subject: [PATCH 03/27] Remove FC usage from Pagination component --- packages/ra-ui-materialui/src/list/pagination/Pagination.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ra-ui-materialui/src/list/pagination/Pagination.tsx b/packages/ra-ui-materialui/src/list/pagination/Pagination.tsx index d47e5d16529..56f1f0e3398 100644 --- a/packages/ra-ui-materialui/src/list/pagination/Pagination.tsx +++ b/packages/ra-ui-materialui/src/list/pagination/Pagination.tsx @@ -20,7 +20,7 @@ import DefaultPaginationLimit from './PaginationLimit'; const emptyArray = []; -const Pagination: FC = props => { +const Pagination = (props: PaginationProps) => { const { rowsPerPageOptions, actions, limit, ...rest } = props; const { loading, @@ -129,4 +129,4 @@ export interface PaginationProps extends TablePaginationBaseProps { limit?: ReactElement; } -export default React.memo(Pagination); +export default React.memo(Pagination); From d3154dcac85e062fa88fd3e0c7110e784ca62f34 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 18 Aug 2021 10:35:19 -0300 Subject: [PATCH 04/27] Remove FC usage from List related components --- .../src/list/BulkActionsToolbar.tsx | 3 +-- .../ra-ui-materialui/src/list/ListActions.tsx | 4 ++-- .../ra-ui-materialui/src/list/ListToolbar.tsx | 4 ++-- .../ra-ui-materialui/src/list/Placeholder.tsx | 3 +-- .../ra-ui-materialui/src/list/SimpleList.tsx | 19 ++++++++++--------- .../src/list/SimpleListLoading.tsx | 3 +-- .../src/list/SingleFieldList.tsx | 3 +-- .../src/list/filter/Filter.tsx | 4 ++-- .../src/list/pagination/PaginationActions.tsx | 4 ++-- 9 files changed, 22 insertions(+), 25 deletions(-) diff --git a/packages/ra-ui-materialui/src/list/BulkActionsToolbar.tsx b/packages/ra-ui-materialui/src/list/BulkActionsToolbar.tsx index 72c22831d72..8369fa13448 100644 --- a/packages/ra-ui-materialui/src/list/BulkActionsToolbar.tsx +++ b/packages/ra-ui-materialui/src/list/BulkActionsToolbar.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import { Children, ReactNode, cloneElement, isValidElement } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; @@ -54,7 +53,7 @@ const useStyles = makeStyles( { name: 'RaBulkActionsToolbar' } ); -const BulkActionsToolbar: FC = props => { +const BulkActionsToolbar = (props: BulkActionsToolbarProps) => { const { classes: classesOverride, label = 'ra.action.bulk_actions', diff --git a/packages/ra-ui-materialui/src/list/ListActions.tsx b/packages/ra-ui-materialui/src/list/ListActions.tsx index 29423ce50ef..f71ba87a230 100644 --- a/packages/ra-ui-materialui/src/list/ListActions.tsx +++ b/packages/ra-ui-materialui/src/list/ListActions.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { cloneElement, useMemo, useContext, FC, ReactElement } from 'react'; +import { cloneElement, useMemo, useContext, ReactElement } from 'react'; import PropTypes from 'prop-types'; import { sanitizeListRestProps, @@ -45,7 +45,7 @@ import FilterButton from './filter/FilterButton'; * * ); */ -const ListActions: FC = props => { +const ListActions = (props: ListActionsProps) => { const { className, exporter, filters: filtersProp, ...rest } = props; const { currentSort, diff --git a/packages/ra-ui-materialui/src/list/ListToolbar.tsx b/packages/ra-ui-materialui/src/list/ListToolbar.tsx index f8fcb405d5e..ba94cef855a 100644 --- a/packages/ra-ui-materialui/src/list/ListToolbar.tsx +++ b/packages/ra-ui-materialui/src/list/ListToolbar.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement } from 'react'; +import { ReactElement } from 'react'; import PropTypes from 'prop-types'; import { Toolbar, ToolbarProps } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; @@ -35,7 +35,7 @@ const useStyles = makeStyles( { name: 'RaListToolbar' } ); -const ListToolbar: FC = props => { +const ListToolbar = (props: ListToolbarProps) => { const { classes: classesOverride, filters, actions, ...rest } = props; const classes = useStyles(props); diff --git a/packages/ra-ui-materialui/src/list/Placeholder.tsx b/packages/ra-ui-materialui/src/list/Placeholder.tsx index 4629ba9c280..227638fc584 100644 --- a/packages/ra-ui-materialui/src/list/Placeholder.tsx +++ b/packages/ra-ui-materialui/src/list/Placeholder.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import { makeStyles } from '@material-ui/core/styles'; import classnames from 'classnames'; @@ -18,7 +17,7 @@ interface Props { classes?: Record<'root', string>; } -const Placeholder: FC = props => { +const Placeholder = (props: Props) => { const classes = useStyles(props); return ( diff --git a/packages/ra-ui-materialui/src/list/SimpleList.tsx b/packages/ra-ui-materialui/src/list/SimpleList.tsx index 679dc51c80f..c16035dd81b 100644 --- a/packages/ra-ui-materialui/src/list/SimpleList.tsx +++ b/packages/ra-ui-materialui/src/list/SimpleList.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactNode, ReactElement } from 'react'; +import { ReactNode, ReactElement } from 'react'; import PropTypes from 'prop-types'; import { Avatar, @@ -238,14 +238,15 @@ const useLinkOrNotStyles = makeStyles( { name: 'RaLinkOrNot' } ); -const LinkOrNot: FC = ({ - classes: classesOverride, - linkType, - basePath, - id, - children, - record, -}) => { +const LinkOrNot = (props: LinkOrNotProps) => { + const { + classes: classesOverride, + linkType, + basePath, + id, + children, + record, + } = props; const classes = useLinkOrNotStyles({ classes: classesOverride }); const link = typeof linkType === 'function' ? linkType(record, id) : linkType; diff --git a/packages/ra-ui-materialui/src/list/SimpleListLoading.tsx b/packages/ra-ui-materialui/src/list/SimpleListLoading.tsx index 300808048f1..85c4fdda7f6 100644 --- a/packages/ra-ui-materialui/src/list/SimpleListLoading.tsx +++ b/packages/ra-ui-materialui/src/list/SimpleListLoading.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import PropTypes from 'prop-types'; import Avatar from '@material-ui/core/Avatar'; import List, { ListProps } from '@material-ui/core/List'; @@ -36,7 +35,7 @@ interface Props { nbFakeLines?: number; } -const SimpleListLoading: FC = props => { +const SimpleListLoading = (props: Props & ListProps) => { const { classes: classesOverride, className, diff --git a/packages/ra-ui-materialui/src/list/SingleFieldList.tsx b/packages/ra-ui-materialui/src/list/SingleFieldList.tsx index c59543cb161..3727fa44e0e 100644 --- a/packages/ra-ui-materialui/src/list/SingleFieldList.tsx +++ b/packages/ra-ui-materialui/src/list/SingleFieldList.tsx @@ -3,7 +3,6 @@ import { cloneElement, Children, HtmlHTMLAttributes, - FC, ComponentType, } from 'react'; import PropTypes from 'prop-types'; @@ -78,7 +77,7 @@ const handleClick = () => {}; * * */ -const SingleFieldList: FC = props => { +const SingleFieldList = (props: SingleFieldListProps) => { const { classes: classesOverride, className, diff --git a/packages/ra-ui-materialui/src/list/filter/Filter.tsx b/packages/ra-ui-materialui/src/list/filter/Filter.tsx index 6c33e0cd3c4..c15fa368fb1 100644 --- a/packages/ra-ui-materialui/src/list/filter/Filter.tsx +++ b/packages/ra-ui-materialui/src/list/filter/Filter.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactNode } from 'react'; +import { ReactNode } from 'react'; import PropTypes from 'prop-types'; import { makeStyles } from '@material-ui/core/styles'; import { sanitizeListRestProps, useListContext } from 'ra-core'; @@ -42,7 +42,7 @@ export interface FilterProps { * ); * */ -const Filter: FC = props => { +const Filter = (props: FilterProps) => { const classes = useStyles(props); const { resource, diff --git a/packages/ra-ui-materialui/src/list/pagination/PaginationActions.tsx b/packages/ra-ui-materialui/src/list/pagination/PaginationActions.tsx index be822f9d2ce..f25b91ed5fc 100644 --- a/packages/ra-ui-materialui/src/list/pagination/PaginationActions.tsx +++ b/packages/ra-ui-materialui/src/list/pagination/PaginationActions.tsx @@ -21,7 +21,7 @@ const useStyles = makeStyles( { name: 'RaPaginationActions' } ); -function PaginationActions(props) { +const PaginationActions = props => { const { page, rowsPerPage, count, onChangePage, color, size } = props; const classes = useStyles(props); const translate = useTranslate(); @@ -159,7 +159,7 @@ function PaginationActions(props) { )} ); -} +}; /** * PaginationActions propTypes are copied over from material-ui’s From 4020d1981bd36241e3498440f5559ed678b0c7a9 Mon Sep 17 00:00:00 2001 From: asvarcas Date: Wed, 18 Aug 2021 10:45:19 -0300 Subject: [PATCH 05/27] Remove FC usage from Button components --- .../src/button/BulkDeleteButton.tsx | 12 ++++++----- .../button/BulkDeleteWithConfirmButton.tsx | 6 ++++-- .../src/button/BulkDeleteWithUndoButton.tsx | 4 ++-- .../src/button/BulkUpdateButton.tsx | 15 +++++++------- .../button/BulkUpdateWithConfirmButton.tsx | 6 ++++-- .../src/button/BulkUpdateWithUndoButton.tsx | 4 ++-- .../ra-ui-materialui/src/button/Button.tsx | 4 ++-- .../src/button/CloneButton.tsx | 20 ++++++++++--------- .../src/button/CreateButton.tsx | 4 ++-- .../src/button/EditButton.tsx | 19 +++++++++--------- .../src/button/ExportButton.tsx | 4 ++-- .../src/button/ListButton.tsx | 15 +++++++------- .../src/button/RefreshButton.tsx | 15 +++++++------- .../src/button/RefreshIconButton.tsx | 17 ++++++++-------- .../src/button/SaveButton.tsx | 4 ++-- .../src/button/ShowButton.tsx | 19 +++++++++--------- .../src/button/SortButton.tsx | 9 +++------ 17 files changed, 93 insertions(+), 84 deletions(-) diff --git a/packages/ra-ui-materialui/src/button/BulkDeleteButton.tsx b/packages/ra-ui-materialui/src/button/BulkDeleteButton.tsx index f87d72134f9..3f097a074c2 100644 --- a/packages/ra-ui-materialui/src/button/BulkDeleteButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkDeleteButton.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import PropTypes from 'prop-types'; import BulkDeleteWithConfirmButton, { BulkDeleteWithConfirmButtonProps, @@ -31,12 +30,15 @@ import BulkDeleteWithUndoButton, { * * ); */ -const BulkDeleteButton: FC = ({ undoable, ...props }) => - undoable ? ( - +const BulkDeleteButton = (props: BulkDeleteButtonProps) => { + const { undoable, ...rest } = props; + + return undoable ? ( + ) : ( - + ); +}; interface Props { undoable?: boolean; diff --git a/packages/ra-ui-materialui/src/button/BulkDeleteWithConfirmButton.tsx b/packages/ra-ui-materialui/src/button/BulkDeleteWithConfirmButton.tsx index 1b137d36efe..9c8fb6f63c2 100644 --- a/packages/ra-ui-materialui/src/button/BulkDeleteWithConfirmButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkDeleteWithConfirmButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, Fragment, useState, ReactElement } from 'react'; +import { Fragment, useState, ReactElement } from 'react'; import PropTypes from 'prop-types'; import ActionDelete from '@material-ui/icons/Delete'; import { fade } from '@material-ui/core/styles/colorManipulator'; @@ -37,7 +37,9 @@ const useStyles = makeStyles( const defaultIcon = ; -const BulkDeleteWithConfirmButton: FC = props => { +const BulkDeleteWithConfirmButton = ( + props: BulkDeleteWithConfirmButtonProps +) => { const { basePath, classes: classesOverride, diff --git a/packages/ra-ui-materialui/src/button/BulkDeleteWithUndoButton.tsx b/packages/ra-ui-materialui/src/button/BulkDeleteWithUndoButton.tsx index 3c51b15771f..ed2761d2c56 100644 --- a/packages/ra-ui-materialui/src/button/BulkDeleteWithUndoButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkDeleteWithUndoButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement } from 'react'; +import { ReactElement } from 'react'; import PropTypes from 'prop-types'; import ActionDelete from '@material-ui/icons/Delete'; import { fade } from '@material-ui/core/styles/colorManipulator'; @@ -33,7 +33,7 @@ const useStyles = makeStyles( { name: 'RaBulkDeleteWithUndoButton' } ); -const BulkDeleteWithUndoButton: FC = props => { +const BulkDeleteWithUndoButton = (props: BulkDeleteWithUndoButtonProps) => { const { basePath, classes: classesOverride, diff --git a/packages/ra-ui-materialui/src/button/BulkUpdateButton.tsx b/packages/ra-ui-materialui/src/button/BulkUpdateButton.tsx index 20791dc256d..d15ab42cd8c 100644 --- a/packages/ra-ui-materialui/src/button/BulkUpdateButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkUpdateButton.tsx @@ -1,5 +1,4 @@ import * as React from 'react'; -import { FC } from 'react'; import PropTypes from 'prop-types'; import BulkUpdateWithConfirmButton, { BulkUpdateWithConfirmButtonProps, @@ -32,15 +31,15 @@ import { MutationMode } from 'ra-core'; * * ); */ -const BulkUpdateButton: FC = ({ - mutationMode, - ...props -}) => - mutationMode === 'undoable' ? ( - +const BulkUpdateButton = (props: BulkUpdateButtonProps) => { + const { mutationMode, ...rest } = props; + + return mutationMode === 'undoable' ? ( + ) : ( - + ); +}; interface Props { mutationMode?: MutationMode; diff --git a/packages/ra-ui-materialui/src/button/BulkUpdateWithConfirmButton.tsx b/packages/ra-ui-materialui/src/button/BulkUpdateWithConfirmButton.tsx index ebee56ce3e7..8e0154e030b 100644 --- a/packages/ra-ui-materialui/src/button/BulkUpdateWithConfirmButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkUpdateWithConfirmButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, Fragment, useState, ReactElement } from 'react'; +import { Fragment, useState, ReactElement } from 'react'; import PropTypes from 'prop-types'; import ActionUpdate from '@material-ui/icons/Update'; import { fade } from '@material-ui/core/styles/colorManipulator'; @@ -38,7 +38,9 @@ const useStyles = makeStyles( const defaultIcon = ; -const BulkUpdateWithConfirmButton: FC = props => { +const BulkUpdateWithConfirmButton = ( + props: BulkUpdateWithConfirmButtonProps +) => { const notify = useNotify(); const refresh = useRefresh(); const translate = useTranslate(); diff --git a/packages/ra-ui-materialui/src/button/BulkUpdateWithUndoButton.tsx b/packages/ra-ui-materialui/src/button/BulkUpdateWithUndoButton.tsx index 6ec704e3d83..902ad38c580 100644 --- a/packages/ra-ui-materialui/src/button/BulkUpdateWithUndoButton.tsx +++ b/packages/ra-ui-materialui/src/button/BulkUpdateWithUndoButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement } from 'react'; +import { ReactElement } from 'react'; import PropTypes from 'prop-types'; import ActionUpdate from '@material-ui/icons/Update'; import { fade } from '@material-ui/core/styles/colorManipulator'; @@ -33,7 +33,7 @@ const useStyles = makeStyles( { name: 'RaBulkUpdateWithUndoButton' } ); -const BulkUpdateWithUndoButton: FC = props => { +const BulkUpdateWithUndoButton = (props: BulkUpdateWithUndoButtonProps) => { const { selectedIds } = useListContext(props); const classes = useStyles(props); const notify = useNotify(); diff --git a/packages/ra-ui-materialui/src/button/Button.tsx b/packages/ra-ui-materialui/src/button/Button.tsx index 2a61a2ab2d3..cf1120c5c91 100644 --- a/packages/ra-ui-materialui/src/button/Button.tsx +++ b/packages/ra-ui-materialui/src/button/Button.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement, SyntheticEvent, ReactNode } from 'react'; +import { ReactElement, SyntheticEvent, ReactNode } from 'react'; import PropTypes from 'prop-types'; import { Button as MuiButton, @@ -28,7 +28,7 @@ import { LocationDescriptor } from 'history'; * * */ -const Button: FC = props => { +const Button = (props: ButtonProps) => { const { alignIcon = 'left', children, diff --git a/packages/ra-ui-materialui/src/button/CloneButton.tsx b/packages/ra-ui-materialui/src/button/CloneButton.tsx index 4c136f735aa..95ae01781d7 100644 --- a/packages/ra-ui-materialui/src/button/CloneButton.tsx +++ b/packages/ra-ui-materialui/src/button/CloneButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, memo, ReactElement } from 'react'; +import { memo, ReactElement } from 'react'; import PropTypes from 'prop-types'; import Queue from '@material-ui/icons/Queue'; import { Link } from 'react-router-dom'; @@ -8,14 +8,16 @@ import { Record, useResourceContext } from 'ra-core'; import Button, { ButtonProps } from './Button'; -export const CloneButton: FC = ({ - basePath = '', - label = 'ra.action.clone', - scrollToTop = true, - record, - icon = defaultIcon, - ...rest -}) => { +export const CloneButton = (props: CloneButtonProps) => { + const { + basePath = '', + label = 'ra.action.clone', + scrollToTop = true, + record, + icon = defaultIcon, + ...rest + } = props; + const resource = useResourceContext(); const pathname = basePath ? `${basePath}/create` : `/${resource}/create`; return ( diff --git a/packages/ra-ui-materialui/src/button/CreateButton.tsx b/packages/ra-ui-materialui/src/button/CreateButton.tsx index 750e071c7a6..e873db8f85d 100644 --- a/packages/ra-ui-materialui/src/button/CreateButton.tsx +++ b/packages/ra-ui-materialui/src/button/CreateButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement, memo, useMemo } from 'react'; +import { ReactElement, memo, useMemo } from 'react'; import PropTypes from 'prop-types'; import { Fab, useMediaQuery, Theme } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; @@ -23,7 +23,7 @@ import Button, { ButtonProps, sanitizeButtonRestProps } from './Button'; * * ); */ -const CreateButton: FC = props => { +const CreateButton = (props: CreateButtonProps) => { const { basePath = '', className, diff --git a/packages/ra-ui-materialui/src/button/EditButton.tsx b/packages/ra-ui-materialui/src/button/EditButton.tsx index 4b16bde1053..cfccdd1f3c9 100644 --- a/packages/ra-ui-materialui/src/button/EditButton.tsx +++ b/packages/ra-ui-materialui/src/button/EditButton.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, ReactElement, useMemo } from 'react'; +import { ReactElement, useMemo } from 'react'; import PropTypes from 'prop-types'; import ContentCreate from '@material-ui/icons/Create'; import { ButtonProps as MuiButtonProps } from '@material-ui/core/Button'; @@ -18,14 +18,15 @@ import Button, { ButtonProps } from './Button'; * * ); */ -const EditButton: FC = ({ - basePath = '', - icon = defaultIcon, - label = 'ra.action.edit', - record, - scrollToTop = true, - ...rest -}) => { +const EditButton = (props: EditButtonProps) => { + const { + basePath = '', + icon = defaultIcon, + label = 'ra.action.edit', + record, + scrollToTop = true, + ...rest + } = props; const resource = useResourceContext(); return (