Files
firecms/website/docs/custom_schema_views.md
francesco d10a9bd82f Fix for url paths including custom views.
Added blog preview example
2021-08-07 16:04:28 +02:00

2.9 KiB

id, title, sidebar_label
id title sidebar_label
custom_schema_views Custom schema views Custom schema views

FireCMS offers default form and table fields for common use cases and also allows overriding fields if you need a custom implementation, but that might be not enough in certain cases, where you might want to have a full custom view related to one entity.

In order to accomplish that you can pass an array of EntityCustomView to your schema. Like in this example:

const sampleView: EntityCustomViewBuilder = {
    path: "preview",
    name: "Blog entry preview",
    builder: ({ schema, entity, modifiedValues }) => (
        // This is a custom component that you can build as any React component
        <MyBlogPreviewComponent entity={entity} modifiedValues={modifiedValues}/>
    )
};

const blogSchema = buildSchema({
    name: "Blog entry",
    views: [
        sampleView
    ],
    properties: {
        name: {
            title: "Name",
            validation: { required: true },
            dataType: "string"
        },
        header_image: {
            title: "Header image",
            dataType: "string",
            config: {
                storageMeta: {
                    mediaType: "image",
                    storagePath: "images",
                    acceptedFiles: ["image/*"],
                    metadata: {
                        cacheControl: "max-age=1000000"
                    }
                }
            }
        },
        content: {
            title: "Content",
            description: "Example of a complex array with multiple properties as children",
            validation: { required: true },
            dataType: "array",
            columnWidth: 400,
            oneOf: {
                properties: {
                    images: {
                        title: "Images",
                        dataType: "array",
                        of: {
                            dataType: "string",
                            config: {
                                storageMeta: {
                                    mediaType: "image",
                                    storagePath: "images",
                                    acceptedFiles: ["image/*"]
                                }
                            }
                        }
                    },
                    text: {
                        dataType: "string",
                        title: "Text",
                        config: {
                            markdown: true
                        }
                    },
                    products: {
                        title: "Products",
                        dataType: "array",
                        of:{
                            dataType: "reference",
                            collectionPath: "products"
                        }
                    }
                }
            }
        },
    }
})