Conversation
davisagli
left a comment
There was a problem hiding this comment.
I'm a little worried about the performance of fetching all control panel schemas in parallel.
There are also control panels which are not schema-based.
I was thinking we could change the controlpanels service in plone.restapi so that each controlpanel has a function where it can return its searchable text. That way schema-based control panels can return text from the schema, and other control panels can return other text. This would also let volto get all of the text with one request. What do you think?
|
@davisagli I think this is a great approach. Instead of making a lot of API calls we could make some changes in plone.restapi and replace them with a single request. I’ll try to implement this as soon as possible. |
|
@davisagli Should I create a separate PR in plone.restapi to implement this approach first, and once it gets merged, update Volto accordingly to align with the final implementation? |
|
@Manik-Khajuria-5 Yes. If possible, the implementation in Volto should degrade gracefully in case it is used with an older version of plone.restapi. (i.e., if the @ControlPanels service didn't return searchable text for the control panels, don't show the search box) |
|
@davisagli okk got it ,working on it |
Issue
Contributes to #7259
What this PR does
This PR adds an implementation of a global search for Control Panel settings, extending search beyond just control panel names.
Technical approach
The Control Panel overview currently exposes only high-level metadata (title, group,
@id).To enable searching inside control panels, this PR introduces the following approach:
Lazily triggers schema fetching when the user starts typing
Fetches control panel schemas in parallel
Builds a search index using:
schema.fieldsets[].fieldsschema.properties[fieldName].titleanddescriptionMatches the user’s query against this indexed data
Maps matched results back to their parent control panel for navigation
Fetched schemas are cached to avoid repeated backend requests and to reduce unnecessary backend load.
screenrecording-2026-02-01_14-12-13.mp4
Closes #7259