import { useThemeConfig } from '@/components/Layout/ThemeProvider';
import { MainCard } from '@/components/MainCard';
import { Toolbar } from '@/components/ra-forms/Toolbar';
import { Grid, GridProps } from '@mui/material';
import { styled } from '@mui/material/styles';
import React, { PropsWithChildren, useMemo } from 'react';
import { Form, SaveButton, useResourceContext, useTranslate } from 'react-admin';
/**
* Basic card form layout.
* It is a simple form layout that uses a card as the main container.
*
* @see https://mui.com/material-ui/react-stack/
*/
function CardForm({ children, spacing, defaultValues, ...gridProps }: CardFormProps): JSX.Element {
const { spacing: themeSpacing } = useThemeConfig();
return (
// @ts-ignore
{children}
);
}
function Section({
children,
// @ts-ignore
content = true,
title,
subheader = null,
secondary = null,
toolbar = false,
lg = 12,
md = 12,
sm = 12,
xs = 12,
...gridProps
}: SectionProps): JSX.Element {
const translate = useTranslate();
const resource = useResourceContext();
const { cardTitle, cardSubheader } = useMemo(() => {
const defaultTitle = (title || `resources.${resource}.title`) as string;
return {
cardTitle: translate(defaultTitle, { _: defaultTitle }),
cardSubheader: subheader !== null ? translate(subheader as string, { _: subheader }) : null
};
}, [resource, subheader, title, translate]);
return (
<>
{children}
{toolbar === true ? (
) : (
toolbar
)}
>
);
}
type StyledFormProps = PropsWithChildren<{
spacing?: number;
defaultValues?: any;
theme: any;
}>;
const StyledForm = styled(Form, { slot: 'root' })(({ theme, spacing }: StyledFormProps) => ({
backgroundColor: 'transparent',
'& .RaToolbar-desktopToolbar': {
marginTop: theme.spacing((spacing as number) * 1.25),
padding: 0,
minHeight: 'unset'
},
'& .RaToolbar-mobileToolbar': {
paddingTop: `${theme.spacing(2.5)} !important`,
paddingRight: '0 !important',
paddingLeft: '0 !important',
paddingBottom: '0 !important'
}
}));
type CardFormProps = PropsWithChildren<{
spacing?: number;
defaultValues?: any;
}> &
GridProps;
type SectionProps = PropsWithChildren<{
content?: boolean | undefined | null;
title?: string | React.ReactNode | null;
subheader?: string | React.ReactNode;
secondary?: string | React.ReactNode;
toolbar?: React.ReactNode | boolean;
}> &
GridProps;
CardForm.Section = Section;
export { CardForm };
export type { CardFormProps, SectionProps };