I created a smart field on collection A (= foreign key to collection B).
When I create a record on collection A, for this smart field, I have a drop down with all possible values from the linked collection B.
I need to filter this dropdown, but I can’t find a way to do it.
I see the web front dropdown queries a route /forest/{collection B}
Since it’s not /routes/{collection B} I’m not sure I can override it with .js files in routes folder.
Moreover, I want the filter to apply to the dropdown of collection A, not on the normal list of collection B.
How can this be done? I basically want a smart field dropdown to show filtered list of records from the linked collection
the field on collection A is not a smart field but a smart relationship
the field in collection B on which I want to filter is a smart field, not a regular field
I indeed found the filtering options for the edit widget, but the collection B field I want to filter on is a smart field, and it seems dropdown filtering does not allow me to choose a smart field in collection B.
Unfortunately, ForestAdmin does not support filtering on smart fields. That is because filters are directly applied in SQL queries, which cannot natively be understand how you defined your smart fields.
However I can log your need for filterable smart field for future prioritization.
hello, I know it’s not supported by FA but what would you recommend as a workaround?
I could override the GET route on collection B so that it filters how I want to, when the call is being made for a dropdown
When calling the API to fetch dropdown values, isn’t FA sending elements of context that indicates it’s for a dropdown? If yes I can just override the GET route and do the filtering myself, in the event the endpoint is called by a dropdown
If the filter is the same you can override the route /forest/{collection B} and do something like that:
router.get('/forest/collection B', permissionMiddleware.list(), (request, response, next) => {
if (request.query && request.query.context && request.query.context.recordId) {
// NOTICE: This is when you are in a dropdown
// FIXME: DO your filtering here
}
next();
})
If these are recurring filters you’ll use a lot, another alternative might be to compute the field in a Smart Segment and apply your filtering on it. Only record :ids that pass your filter will be returned in the Segment.