conditional-container
conditional-container copied to clipboard
Nova Flexible Content
Hello,
Is it compatible with Nova Flexible Content ?
I tried it and had a JS error..
Thanks !
Currently it doesn't work with flexible content
Yep, that's why i tried Nova Dependency Container but I encountered 2 issues with that package too :
-
The conditional field doesn't show on the detail view
-
Some values are overwritten by the last item of the layout
I've seen you used that package too, do these issues ring a bell to you ?
Thanks.
Le sam. 14 déc. 2019 à 02:34, Rafael Milewski [email protected] a écrit :
Currently it doesn't work with flexible content
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/dcasia/conditional-container/issues/17?email_source=notifications&email_token=AEV5PSOYN3CPZ25FQU3FBOTQYQZ23A5CNFSM4J2O6QCKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEG3WQSQ#issuecomment-565667914, or unsubscribe https://github.com/notifications/unsubscribe-auth/AEV5PSJZRTECFPWA5OZNMJTQYQZ23ANCNFSM4J2O6QCA .
Yeah I used that package before too but had too many issues for my use case so I built this one instead, I have seen how the Nova Dependency Container
implemented support for the flexible content on this commit: https://github.com/epartment/nova-dependency-container/commit/d4081499c45b86111d5d95ef3c4457db4dd4bbdf perhaps it may be very simple to port it over... I will give it a shoot, and about the 2 issues, I don't see how conditional-container
would fail in there
@dividy I got it almost working and I had pushed my proof of concept to a branch called flexible field, it works on create, on update and on details view as expected, however validation is still broken :(
Wow.. This sounds like a great step forward to something functional ;-) I'll try to have a look at this too!
Just did a composer require digital-creative/conditional-container:dev-flexible-content
Tried the package, and I'm still having an issue inside Flexible Content...
Here's the code, can you try it on your side and tell me if it works ?
Flexible::make('Produits', 'products')
->addLayout('Product', 'product', [
Select::make('Type de contrat', 'type')->options([
'L' => 'Location',
'VL' => 'Vente & Location',
'R' => 'Relevé',
'V' => 'Vente',
'VU' => 'Vente unique',
])->displayUsingLabels()->rules('required'),
ConditionalContainer::make([ Text::make('Prix en Location (htva)', 'price_rent') ])
->if('type = L'),
ConditionalContainer::make([ Text::make('Prix de Vente (htva)', 'price_sale') ])
->if('type = V')
->if('type = VU'),
ConditionalContainer::make([
Text::make('Prix en Location (htva)', 'price_rent'),
Text::make('Prix de Vente (htva)', 'price_sale')
])->if('type = VL'),
ConditionalContainer::make([
Text::make('Prix du Relevé (htva)', 'price_reading'),
])->if('type = R'),
]),
On my side, it never works, and displays all the fields when I select 'R - Relevé'.. Strange ;)
@milewski I just used the branch as well and tried the code of @dividy but i get
TypeError: Cannot read property 'join' of undefined
at _loop (conditional-container:175)
And I even dont see the fields.
I also tried my own, simpler example with the same result:
Flexible::make("Data")
->addLayout("Simple Layout", "html", [
Select::make("Type", "type")->options([
"html" => "HTML",
"plain" => "Plaintext"
]),
ConditionalContainer::make([
Trix::make('Content', 'html_content')
])->if('type = html'),
ConditionalContainer::make([
Textarea::make('Content', 'plain_content')
])->if('type = plain')
])
The join
issue is because the HasConditionalContainer
wasn't included ... but yeah indeed there are several issues, it did work for the example I had when I was developing it but using your samples has some bugs...
@bernhardh I just fixed the issues with your example you can try again it should be working perfectly now (but without validation of course)
Form View
Detail View
@dividy your example also works now for me... I think the issue were you forgot the trait
Oh. So stupid. Thank you!
Now I get
Method Whitecube\NovaFlexibleContent\Flexible::resolveConditionalContainer does not exist.
The
if ($flexibleContent->isNotEmpty()) {
$this->registerFlexibleMacros($request, $flexibleContent);
}
is false, so this macro is never added?
whats the endpoint nova is trying to hit that throws that error Method Whitecube\NovaFlexibleContent\Flexible::resolveConditionalContainer does not exist.
?
It occurs on edit and detail page. And the endpoint throwing it is /nova-api/MODELNAME/ID
On
vendor/laravel/framework/src/Illuminate/Support/Traits/Macroable.php:103
Btw. I am on dev-flexible-content 7e5e620
atm.
Ok, found it out, that if I don't use the https://github.com/eminiarts/nova-tabs package, than it works. Wrapping it into it, throws the error. The same goes with https://github.com/armincms/json package. It seems, that the FlexibleContent Element has to be on top Level?
Oh I see when you use the nova-tabs the "flexible" content is not found, so the macros are not added to it, that's why it crashes, I think it might be possible to detect, I think it is possible to add a check and see if its an instance of panel and recursively try to find flexible contents within its children
Ok, at least I can fix the issue with the tabs package (and all other packages based on Panel
items).
In HasConditionalContainer.php:460 just add
if($field instanceof Panel && $field->data) {
return $this->findAllFlexibleContentFields($field->data);
}
Ah ok let me add
Pushed
Ok, now it only worked on empty data. After save i get
Cannot bind an instance to a static closure
To fix this change HasConditionalContainer:178
$field::macro('generateFieldName', static function (array $fields) {
to
$field::macro('generateFieldName', function (array $fields = []) {
Not sure why it is decleared static in the first place? Or does this have any sideeffects?
That was a mistake, I didn't know macros wouldnt run in static context, I have removed it and pushed again
Thank you very much, for your help, this package (and nova-mega-filter
and collapsible-resource-manager
). Do you have a "buy me a cup of coffee" link or something else?
Good job guys, I watched all the action from far away, getting spammed by notifications.
I had to deliver the application to my customer, so I finally chose another working option, I used different presets instead of conditional fields. However, great work!
@dividy Can I know what you use in order to fix this issue?
@dividy I got it almost working and I had pushed my proof of concept to a branch called flexible field, it works on create, on update and on details view as expected, however validation is still broken :(
if ($controller instanceof CreationFieldController ||
$controller instanceof UpdateFieldController) {
this is the part where you check the fields for creation?
i have able to make the validation work for flexible but got other issue.
Flexible::make('Produits', 'content')
->addLayout('Product', 'product', [
Select::make('Type de contrat', 'type')->options([
'L' => 'Location',
'VL' => 'Vente & Location',
])->displayUsingLabels()->rules('required'),
ConditionalContainer::make([
Text::make('Prix en Location (htva)', 'price_rent')
->rules('required')
])
->if('type = L'),
ConditionalContainer::make([
Text::make('Prix en Location (htva)', 'price_rent'),
Text::make('Prix de Vente (htva)', 'price_sale'),
])->if('type = VL'),
]),
this will make all price_rent will required
https://github.com/anditsung/conditional-container/tree/flexible-content