When you delete everything event.filter becomes empty. This creates invalid OData filter expression such as and Region/Region1 eq 'USA'
(the filter expression cannot start with and
and or
).
The solution is to use a condition when using event.filter - ${event.filter ? event.filter + ' and ' : ''}
. Here is how to use that in your expression:
${event.filter ? event.filter + ' and ' : ''}(Region/Region1 eq '${security.user.roles[0]}' or Region/Region1 eq '${security.user.roles[1]}' or Region/Region1 eq '${security.user.roles[2]}' or Region/Region1 eq '${security.user.roles[3]}' or Region/Region1 eq '${security.user.roles[4]}')
I can suggest a shorter version which will allow you to use arbitrary number of roles without modifying the filter expression any more:
${event.filter ? event.filter + ' and ' : ''}Region/Region1 in (${security.user.roles.map(role => "'" + role + "'").join(', ')})
The latter uses the Array.map and Array.join functions to create a string in the form ('Role1', 'Role2', 'Role3')
regardless of the number of roles.