<Create>
provides us a layout to display the page. It does not contain any logic but adds extra functionalities like action buttons and giving titles to the page.
We'll show what <Create>
does using properties with examples.
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import React from "react" ; import { Create , useAutocomplete , TextField , Autocomplete , Box , } from "@pankod/refine-mui" ; import { useForm , Controller } from "@pankod/refine-react-hook-form" ; const SampleCreate = ( ) => { const { saveButtonProps , refineCore : { formLoading } , register , control , formState : { errors } , } = useForm ( ) ; const { autocompleteProps : categoryAutocompleteProps } = useAutocomplete ( { resource : "categories" , } ) ; return ( < Create isLoading = { formLoading } saveButtonProps = { saveButtonProps } > < Box component = " form " sx = { { display : "flex" , flexDirection : "column" } } autoComplete = " off " > < TextField { ... register ( "title" , { required : "This field is required" , } ) } error = { ! ! ( errors as any ) ?. title } helperText = { ( errors as any ) ?. title ?. message } margin = " normal " fullWidth InputLabelProps = { { shrink : true } } type = " text " label = " Title " name = " title " /> < TextField { ... register ( "content" , { required : "This field is required" , } ) } error = { ! ! ( errors as any ) ?. content } helperText = { ( errors as any ) ?. content ?. message } margin = " normal " fullWidth InputLabelProps = { { shrink : true } } multiline label = " Content " name = " content " /> < Controller control = { control } name = " category " rules = { { required : "This field is required" } } defaultValue = { null as any } render = { ( { field } ) => ( < Autocomplete { ... categoryAutocompleteProps } { ... field } onChange = { ( _ , value ) => { field . onChange ( value ) ; } } getOptionLabel = { ( item ) => { return ( categoryAutocompleteProps ?. options ?. find ( ( p ) => p ?. id ?. toString ( ) === item ?. id ?. toString ( ) , ) ?. title ?? "" ) ; } } isOptionEqualToValue = { ( option , value ) => value === undefined || option ?. id ?. toString ( ) === ( value ?. id ?? value ) ?. toString ( ) } renderInput = { ( params ) => ( < TextField { ... params } label = " Category " margin = " normal " variant = " outlined " error = { ! ! ( errors as any ) ?. category ?. id } helperText = { ( errors as any ) ?. category ?. id ?. message } required /> ) } /> ) } /> </ Box > </ Create > ) ; } ;
You can swizzle this component to customize it with the refine CLI
Properties title
It allows adding title inside the <Create>
component. if you don't pass title props it uses "Create" prefix and singular resource name by default. For example, for the /posts/create
resource, it will be "Create post".
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Typography } from "@pankod/refine-mui" ; const CreatePage : React . FC = ( ) => { return ( < Create title = { < Typography variant = " h5 " > Custom Title </ Typography > } > < span > Rest of your page here </ span > </ Create > ) ; } ;
resource
The <Create>
component reads the resource
information from the route by default. This default behavior will not work on custom pages. If you want to use the <Create>
component in a custom page, you can use the resource
prop.
Refer to the custom pages documentation for detailed usage. →
Live previews only work with the latest documentation.
Show Code Hide Code import { Refine } from "@pankod/refine-core" ; import { Create , Layout } from "@pankod/refine-mui" ; import routerProvider from "@pankod/refine-react-router-v6" ; import dataProvider from "@pankod/refine-simple-rest" ; const CustomPage : React . FC = ( ) => { return ( < Create resource = " posts " > < span > Rest of your page here </ span > </ Create > ) ; } ; const App : React . FC = ( ) => { return ( < Refine routerProvider = { { ... routerProvider , routes : [ { element : < CustomPage /> , path : "/custom" , } , ] , } } Layout = { Layout } dataProvider = { dataProvider ( "https://api.fake-rest.refine.dev" ) } resources = { [ { name : "posts" } ] } /> ) ; } ;
<Create>
component has a default button that submits the form. If you want to customize this button you can use the saveButtonProps
property like the code below.
Refer to the <SaveButton>
documentation for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { return ( < Create saveButtonProps = { { size : "small" } } > < span > Rest of your page here </ span > </ Create > ) ; } ;
goBack
To customize the back button or to disable it, you can use the goBack
property.
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Button } from "@pankod/refine-mui" ; import { useNavigation } from "@pankod/refine-core" ; const BackButton = ( ) => { const { goBack } = useNavigation ( ) ; return < Button onClick = { ( ) => goBack ( ) } > BACK! </ Button > ; } ; const PostCreate : React . FC = ( ) => { return ( < Create goBack = { < BackButton /> } > < span > Rest of your page here </ span > </ Create > ) ; } ;
isLoading
To toggle the loading state of the <Create/>
component, you can use the isLoading
property.
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create isLoading = { loading } > < span > Rest of your page here </ span > </ Create > ) ; } ;
breadcrumb
To customize or disable the breadcrumb, you can use the breadcrumb
property. By default it uses the Breadcrumb
component from @pankod/refine-mui
package.
Refer to the Breadcrumb
documentation for detailed usage. →
This feature can be managed globally via the <Refine>
component's options
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Breadcrumb } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { return ( < Create breadcrumb = { < div style = { { padding : "3px 6px" , border : "2px dashed cornflowerblue" , } } > < Breadcrumb /> </ div > } > < span > Rest of your page here </ span > </ Create > ) ; } ;
wrapperProps
If you want to customize the wrapper of the <Create/>
component, you can use the wrapperProps
property.
Refer to the Card
documentation from Material UI for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create wrapperProps = { { sx : { backgroundColor : "lightsteelblue" , } , } } > < span > Rest of your page here </ span > </ Create > ) ; } ;
If you want to customize the header of the <Create/>
component, you can use the headerProps
property.
Refer to the CardHeader
documentation from Material UI for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create headerProps = { { sx : { backgroundColor : "lightsteelblue" , } , } } > < span > Rest of your page here </ span > </ Create > ) ; } ;
contentProps
If you want to customize the content of the <Create/>
component, you can use the contentProps
property.
Refer to the CardContent
documentation from Material UI for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create contentProps = { { sx : { backgroundColor : "lightsteelblue" , } , } } > < span > Rest of your page here </ span > </ Create > ) ; } ;
You can customize the buttons at the header by using the headerButtons
property. It accepts React.ReactNode
or a render function ({ defaultButtons }) => React.ReactNode
which you can use to keep the existing buttons and add your own.
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Button } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create headerButtons = { ( { defaultButtons } ) => ( < > { defaultButtons } < Button type = " primary " > Custom Button </ Button > </ > ) } > < span > Rest of your page here </ span > </ Create > ) ; } ;
You can customize the wrapper element of the buttons at the header by using the headerButtonProps
property.
Refer to the Box
documentation from Material UI for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Button } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create headerButtonProps = { { sx : { backgroundColor : "lightsteelblue" , } , } } headerButtons = { ( { defaultButtons } ) => ( < > { defaultButtons } < Button type = " primary " > Custom Button </ Button > </ > ) } > < span > Rest of your page here </ span > </ Create > ) ; } ;
You can customize the buttons at the footer by using the footerButtons
property. It accepts React.ReactNode
or a render function ({ defaultButtons }) => React.ReactNode
which you can use to keep the existing buttons and add your own.
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Button } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create footerButtons = { ( { defaultButtons } ) => ( < > { defaultButtons } < Button type = " primary " > Custom Button </ Button > </ > ) } > < span > Rest of your page here </ span > </ Create > ) ; } ;
You can customize the wrapper element of the buttons at the footer by using the footerButtonProps
property.
Refer to the CardActions
documentation from Material UI for detailed usage. →
localhost:3000/posts/create
Live previews only work with the latest documentation.
Show Code Hide Code import { Create , Button } from "@pankod/refine-mui" ; const PostCreate : React . FC = ( ) => { const [ loading , setLoading ] = React . useState ( true ) ; return ( < Create footerButtonProps = { { sx : { backgroundColor : "lightsteelblue" , } , } } footerButtons = { ( { defaultButtons } ) => ( < > { defaultButtons } < Button type = " primary " > Custom Button </ Button > </ > ) } > < span > Rest of your page here </ span > </ Create > ) ; } ;
Use headerButtons
or footerButtons
instead.
<Create>
uses the Material UI <CardActions>
component. The children of the <CardActions>
component shows <SaveButton>
and <DeleteButton>
based on your resource definition in theresources
property you pass to <Refine>
. If you want to use other things instead of these buttons, you can use the actionButton
property like the code below.
src/pages/posts/create.tsx
import { Create , Button } from "@pankod/refine-mui" ; export const CreatePage : React . FC = ( ) => { return ( < Create actionButtons = { < > < Button > Custom Button 1 </ Button > < Button > Custom Button 2 </ Button > </ > } > ... </ Create > ) ; } ;
cardProps
Use wrapperProps
instead.
<Create>
uses the Material UI <Card>
components so you can customize with the props of cardProps
.
<Create>
uses the Material UI <CardHeader>
components so you can customize with the props of cardHeaderProps
.
import { Create , Typography } from "@pankod/refine-mui" ; export const CreatePage : React . FC = ( ) => { return ( < Create cardHeaderProps = { { title : < Typography variant = " h5 " > Custom Title </ Typography > , } } > ... </ Create > ) ; } ;
cardContentProps
Use contentProps
instead.
<Create>
uses the Material UI <CardContent>
components so you can customize with the props of cardContentProps
.
cardActionsProps
Use headerButtonProps
and footerButtonProps
instead.
<Create>
uses the Material UI <CardActions>
components so you can customize with the props of cardActionsProps
.
API Reference Properties