Closed (fixed)
Project:
Experience Builder
Version:
0.x-dev
Component:
Component sources
Priority:
Normal
Category:
Bug report
Assigned:
Unassigned
Issue tags:
Reporter:
Created:
28 May 2025 at 09:36 UTC
Updated:
17 Jun 2025 at 08:59 UTC
Jump to comment: Most recent
Comments
Comment #2
jatingupta40 commentedHello @heyyo
I attempted to replicate the issue, but as per the description everything seems to be working as expected.
Here are the steps I followed:
1. I manually disabled one of the components via /admin/appearance/component.
2. The component correctly appeared under the Disabled Components tab at /admin/appearance/component/status.
3. I cleared the cache both via Drush and through the UI at /admin/config/development/performance. The component remained disabled as expected.
However, I did notice an inconsistency:
When I disabled the component, it was correctly listed under the Disabled Components tab, but it was not removed from the Enabled Components tab. As a result, the component appeared in both tabs simultaneously, which could be misleading.
This seems to indicate a UI or rendering issue where the list of enabled components is not being updated properly after a change.
Please can you help me with more details on it.
Thanks.
Comment #3
thoward216 commentedI'm able to reproduce the same behaviour as @jatingupta40 - disabling an SDC component shows that component in both lists. Interestingly under "disabled components" the status for the component shows as "Incompatible" but the reason shows as "Manually disabled" I think that the status here maybe at least part of the problem and it should be marked as "Disabled" and not "Incompatible".
@heyyo can you re-test and confirm if this is the same behaviour you're seeing if not provide some more steps to reproduce.
Comment #4
wim leersJust yesterday I happen to have worked on this code in #3523841: Versioned Component config entities (SDC, JS: prop_field_definitions, block: default_setting, all: slots for fallback) + component instances refer to versions ⇒ less data to store per XB field row — the place to update is
src/Plugin/ExperienceBuilder/ComponentSource/SingleDirectoryComponent.php.Great find!
We're definitely lacking test coverage for this. I think a new
ComponentSourceTestBase::testUpdateDiscovery()would probably make sense?Comment #5
heyyo commentedExact steps with latest dev:
0. Check the status property of the SDC Druplicon with drush, we see status: true
drush cget experience_builder.component.sdc.experience_builder.druplicon1. Disable druplicon in UI : /admin/appearance/component.
2. check again the status property. As expected status turned now to false
You can also the SDC component is not available anymore in XB UI
drush cget experience_builder.component.sdc.experience_builder.druplicon3. execute
drush cr4. check again the status property. Status turned back to true !
drush cget experience_builder.component.sdc.experience_builder.drupliconComment #6
wim leersComment #7
jatingupta40 commentedThanks @heyyo for the descriptive steps.
I have checked the scenario as per #5, and now i can reproduce the issue.
Comment #8
thoward216 commentedI've found the code that looks to have been causing this, it was recently changed. I've created an MR to run all the tests and will need further testing. It may need more logic rather than just removing the enable function and some tests around this.
Comment #10
thoward216 commentedAll the tests look good. Assigning to myself to look at adding a test for this next.
Comment #11
thoward216 commentedComment #12
wim leersComment #13
wim leersThis elegantly fixes a confusing behavior 👍
Minor lingering concern that needs a minor follow-up:
fooinstalled that provides ahelloSDCfoo, then thesdc.helloComponentconfig entity will be disabled by\Drupal\experience_builder\Entity\Component::onDependencyRemoval()foobecause I realize my mistake, thensdc.hellowill start working again … but it will not appear in the list of available components in the UI anymore, because it remains disabledComment #14
wim leersFollow-up created: #3528075: `Component::onDependencyRemoval()` should store the reason for disabling that Component.
Comment #16
wim leers