wintercms / wn-blocks-plugin

Block based content management plugin for Winter CMS.
MIT License
21 stars 5 forks source link

Allow callable for block config options #26

Open damsfx opened 9 months ago

damsfx commented 9 months ago

Allow options for block config to be AJAX-derived options.

config:
    bg_color:
        label: Background color
        type: dropdown
        span: auto
        options: \Acme\Plugin\Classes\Helpers\ThemeHelper::staticMethodOptions

Supplying the dropdown options in the helper class :

public static function staticMethodOptions($fieldName): array
{
    return [
        'bg-red-500' => 'Red',
        'bg-blue-500' => 'Blue',
        // ...
    ];
}

or returns different options depending on the field name

public static function staticMethodOptions($fieldName): array
{
    if ($fieldName == 'bg_color') {
        return [
            'bg-red-500' => 'Red',
            'bg-blue-500' => 'Blue',
            // ...
        ];
    }
    elseif ($fieldName == 'size') {
        return [
            'w-full' => 'Full width',
            'w-2/3' => '2/3',
            'w-1/2' => '1/2',
            // ...
        ];
    }
    else {
        return ['' => '-- none --'];
    }
}
LukeTowers commented 8 months ago

@damsfx would you be interested in looking into refactoring the options processing in backend forms in the Winter core so that we can have a helper of some sort that can be used from anywhere in order to support all of the different ways that options can be defined (I think we're up to 6 or 7 now)?

damsfx commented 8 months ago

@LukeTowers Yes, I'd like to ... but I need to know where to start and if it's within my reach.

LukeTowers commented 8 months ago

@jaxwilko any pointers for @damsfx?

jaxwilko commented 8 months ago

@LukeTowers @damsfx it's like 4am but from memory I think it happens here: https://github.com/wintercms/storm/blob/6855ef4280d2587367f6127a2bd56a89e727e490/src/Parse/Syntax/FieldParser.php#L416

Although that might just be for values defined in cms pages and not in yaml configs. @damsfx let me know how you get on and if you need help feel free to @ me :)

bennothommo commented 7 months ago

Ideally, I think a trait that can process them would be beneficial, then we can use it wherever it is required :)