title: '{{ component.flex_name|capitalize }}'
description: '{{ component.flex_name|capitalize }}'
type: flex-objects

# Flex Configuration
config:
    # Administration Configuration
    admin:
        # Admin router (optional)
        router:
            path: '/{{ component.flex_name|lower|underscorize }}'

        # Admin menu (optional)
        menu:
            list:
                route: '/{{ component.flex_name|lower|underscorize }}'
                title: '{{ component.flex_name|capitalize }}'
                icon: fa-address-card-o
                # Authorization to collection admin
                authorize: ['admin.{{ component.flex_name|lower|underscorize }}.list', 'admin.super']
                # Priority -10 .. 10 (highest goes up)
                priority: 2

        # Admin template type / folder
        template: default

        # Permissions
        permissions:
            # Primary permissions
            admin.{{ component.flex_name|lower|underscorize }}:
                type: crudpl
                label: '{{ component.flex_name|capitalize }}'

        # List view
        list:
            title: name
            fields:
                published:
                    field:
                        type: toggle
                        label: Published
                    width: 8
                name:
                    link: edit
                description:

        # Edit View
        edit:
            title:
                template: '{{ object.name }}'

        # Preview View
        preview:
            enabled: false
            route:
            #template: '/plugins/flex-objects/directory:contacts'

        # Data Export
        export:
            enabled: true
            method: 'jsonSerialize'
            formatter:
                class: 'Grav\Framework\File\Formatter\YamlFormatter'
            filename: '{{ component.flex_name|lower|underscorize }}'

    # Site Configuration
    site:
        templates:
            collection:
                # Lookup for the template layout files for collections of objects
                paths:
                    - 'flex/{TYPE}/collection/{LAYOUT}{EXT}'
            object:
                # Lookup for the template layout files for objects
                paths:
                    - 'flex/{TYPE}/object/{LAYOUT}{EXT}'
            defaults:
                # Default template {TYPE}; overridden by filename of this blueprint if template folder exists
                type: '{{ component.flex_name|lower|underscorize }}'
                # Default template {LAYOUT}; can be overridden in render calls (usually Twig in templates)
                layout: default

    # Data Configuration
    data:
        # Object class to be used, allowing custom methods for the object
        object: 'Grav\Plugin\{{ component.name|camelize }}\Flex\Types\{{ component.flex_name|camelize }}\{{ component.flex_name|camelize }}Object'
        # Collection class to be used, allowing custom methods for the collections
        collection: 'Grav\Plugin\{{ component.name|camelize }}\Flex\Types\{{ component.flex_name|camelize }}\{{ component.flex_name|camelize }}Collection'
        # Index class to be used, works as a quick database-like lookup index
        index: 'Grav\Common\Flex\Types\Generic\GenericIndex'
        storage:
            # Storage class, use single file storage (does not support images and assets)
            class: 'Grav\Framework\Flex\Storage\{{ component.flex_storage|capitalize }}Storage'
            options:
                formatter:
                    # File formatter class, in this case the file is stored in markdown
                    class: 'Grav\Framework\File\Formatter\JsonFormatter'
                # JSON file where all the objects will be stored
                folder: user-data://{{ component.flex_name|underscorize }}
        search:
            # Search options
            options:
                contains: 1
            # Fields to be searched
            fields:
                - name
                - description

form:
    validation: loose
    fields:
        published:
            type: toggle
            label: Published
            highlight: 1
            default: 1
            options:
                1: PLUGIN_ADMIN.YES
                0: PLUGIN_ADMIN.NO
            validate:
                type: bool
                required: true
        name:
            type: text
            label: Name
            validate:
                required: true
        description:
            type: text
            label: Description
            validate:
                required: true