import { styled } from '@mui/system';
import React from 'react';
import {
Pagination,
ReferenceManyField as RaReferenceManyField,
ReferenceManyFieldProps as RaReferenceManyFieldProps
} from 'react-admin';
type StyledDivProps = {
children?: React.ReactNode;
className?: string;
};
type StyledRootProps = ReferenceManyFieldProps & {
theme?: any;
bulkActionButtons?: boolean | any;
};
function StyledDiv({ children = null, className = '' }: StyledDivProps) {
return
{children}
;
}
const StyledRoot = styled(StyledDiv, { slot: 'root' })(({ theme, bulkActionButtons }: StyledRootProps) => {
return {
marginLeft: `-${theme.spacing(2.5)}`,
marginRight: `-${theme.spacing(2.5)}`,
// Access first child of the root div and align it to center
// This "should" be the toolbar before the datagrid (remember: should be...).
'&>div:first-of-type': {
alignItems: 'center',
'& form': {
padding: theme.spacing(2.5)
},
'& .MuiToolbar-root': {
alignItems: 'center',
padding: '0 !important',
marginTop: theme.spacing(1),
[theme.breakpoints.up('sm')]: {
marginLeft: theme.spacing(2),
marginRight: theme.spacing(2),
width: `calc(100% - ${theme.spacing(4)})`
},
[theme.breakpoints.down('md')]: {
marginTop: 0,
display: 'contents'
}
}
},
'& .RaDatagrid-root': {
overflowX: 'auto',
paddingTop: bulkActionButtons === false ? 0 : 48,
[theme.breakpoints.down('sm')]: {
width: 'calc(100vw - 26px)'
},
'& .RaBulkActionsToolbar-toolbar': {
borderRadius: 0,
'& > .RaBulkActionsToolbar-title': {
alignItems: 'center'
},
[theme.breakpoints.down('sm')]: {
paddingLeft: theme.spacing(3)
}
},
'& .RaDatagrid-table': {
borderBottom: `1px solid ${theme.palette.divider}`
}
},
'& .MuiTablePagination-toolbar': {
marginTop: '0 !important',
marginBottom: '0 !important'
},
'& .RaBulkActionsToolbar-collapsed.RaBulkActionsToolbar-toolbar': {
minHeight: 0
}
};
});
/**
* This component allows you to manage the display of a list of records related to a main record.
* This component is a customized version of the ReferenceManyField component of React-Admin.
*
* If you want to display records and not show the list of available actions (bulk action buttons)
* you can set the bulkActionButtons prop to false and, subsequently, if you use an internal component of type
* you must set the same property, bulkActionButtons, to false (in this way the top padding of the component is completely removed).
*
* @example
* import { ReferenceManyField, Datagrid } from '@applica-software-guru/react-admin';
*
* const MyComponent = (props) => (
*
*
* ...
*
*
*/
function ReferenceManyField(props: ReferenceManyFieldProps): JSX.Element {
return (
{/** @ts-ignore */}
} {...props} />
);
}
type ReferenceManyFieldProps = RaReferenceManyFieldProps & {
/**
* Default undefined, serve ad aggiungere un padding superiore al componente per consentire
* la visualizzazione della toolbar delle bulk action buttons.
*/
bulkActionButtons?: boolean | any;
};
export { ReferenceManyField };
export type { ReferenceManyFieldProps };