diff --git a/web/client/actions/rulesmanager.js b/web/client/actions/rulesmanager.js index 9d2e2ce561..8bc682c22c 100644 --- a/web/client/actions/rulesmanager.js +++ b/web/client/actions/rulesmanager.js @@ -30,11 +30,12 @@ export function delRules(ids) { }; } -export function setFilter(key, value) { +export function setFilter(key, value, isResetField) { return { type: SET_FILTER, key, - value + value, + isResetField }; } diff --git a/web/client/api/geofence/RuleService.js b/web/client/api/geofence/RuleService.js index 5a0d841618..a376f0a42d 100644 --- a/web/client/api/geofence/RuleService.js +++ b/web/client/api/geofence/RuleService.js @@ -43,6 +43,8 @@ const normalizeKey = (key) => { return 'userName'; case 'rolename': return 'groupName'; + case 'roleAny': + return 'groupAny'; default: return key; } @@ -83,7 +85,7 @@ const Api = ({addBaseUrl, addBaseUrlGS, getGeoServerInstance}) => ({ .then( (response) => { return toJSONPromise(response.data); } - ).then(({RuleList = {}}) => ({rules: RuleList.rule || []})); + ).then(({RuleList = {}}) => ({rules: [].concat(RuleList.rule || [])})); }, getRulesCount: (rulesFiltersValues) => { diff --git a/web/client/components/manager/rulesmanager/rulesgrid/enhancers/rulesgrid.js b/web/client/components/manager/rulesmanager/rulesgrid/enhancers/rulesgrid.js index 4bdc208b35..21b3010b43 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/enhancers/rulesgrid.js +++ b/web/client/components/manager/rulesmanager/rulesgrid/enhancers/rulesgrid.js @@ -77,14 +77,15 @@ export default compose( error: undefined, isEditing: editing }), - setFilters: (state, {filters = {}, setFilters}) => ({column, filterTerm}) => { + setFilters: (state, {filters = {}, setFilters}) => ({column, filterTerm, isResetField}) => { // Can add some logic here to clean related filters if (column.key === "workspace" && filters.layer) { setFilters("layer"); } else if (column.key === "service" && filters.request) { setFilters("request"); } - setFilters(column.key, filterTerm); + + setFilters(column.key, filterTerm, isResetField); return {rowsCount: 0, pages: {}}; }, incrementVersion: ({ version }) => () => ({ diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/LayersFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/LayersFilter.jsx index 186ba88a30..948dcc63af 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/LayersFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/LayersFilter.jsx @@ -21,7 +21,8 @@ const parentFiltersSel = createSelector(workspaceSelector, (workspace) => ({ })); const selector = createSelector([filterSelector, parentFiltersSel], (filter, parentsFilter) => ({ selected: filter.layer, - parentsFilter + parentsFilter, + anyFieldVal: filter.layerAny })); export default compose( @@ -33,17 +34,20 @@ export default compose( loadData: loadLayers, parentsFilter: {}, filter: false, - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", loadingErrorMsg: { title: "rulesmanager.errorTitle", message: "rulesmanager.errorLoadingLayers" - } + }, + anyFilterRuleMode: 'layerAny' }), withHandlers({ onValueSelected: ({column = {}, onFilterChange = () => {}}) => filterTerm => { onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder"]), + localizedProps(["placeholder", "loadingErroMsg", "checkedAnyField", "unCheckedAnyField"]), autoComplete )(PagedCombo); diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RequestsFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RequestsFilter.jsx index b171157a68..21586c8fab 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RequestsFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RequestsFilter.jsx @@ -22,7 +22,8 @@ const selector = createSelector([filterSelector, parentFiltersSel, servicesConfi disabled: !filter.service, service: filter.service, parentsFilter, - services + services, + anyFieldVal: filter.requestAny })); @@ -34,7 +35,9 @@ export default compose( valueField: "value", parentsFilter: {}, filter: "startsWith", - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", services: { "WFS": [ "DescribeFeatureType", @@ -52,7 +55,8 @@ export default compose( "GetMap", "GetStyles" ] - } + }, + anyFilterRuleMode: 'requestAny' }), withPropsOnChange(["service", "services"], ({services = {}, service}) => { return { @@ -64,6 +68,6 @@ export default compose( onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder"]), + localizedProps(["placeholder", "checkedAnyField", "unCheckedAnyField"]), fixedOptions )(PagedCombo); diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RolesFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RolesFilter.jsx index 393f003492..6be9c2d098 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RolesFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/RolesFilter.jsx @@ -16,7 +16,8 @@ import { createSelector } from 'reselect'; import { error } from '../../../../../actions/notifications'; import { filterSelector } from '../../../../../selectors/rulesmanager'; const selector = createSelector(filterSelector, (filter) => ({ - selected: filter.rolename + selected: filter.rolename, + anyFieldVal: filter.roleAny })); export default compose( @@ -28,17 +29,20 @@ export default compose( loadData: getRoles, parentsFilter: {}, filter: false, - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", loadingErrorMsg: { title: "rulesmanager.errorTitle", message: "rulesmanager.errorLoadingRoles" - } + }, + anyFilterRuleMode: 'roleAny' }), withHandlers({ onValueSelected: ({column = {}, onFilterChange = () => {}}) => filterTerm => { onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder", "loadingErroMsg"]), + localizedProps(["placeholder", "loadingErroMsg", "checkedAnyField", "unCheckedAnyField"]), autoComplete )(PagedCombo); diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/ServicesFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/ServicesFilter.jsx index bc2520ede1..8428e9d6d6 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/ServicesFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/ServicesFilter.jsx @@ -16,7 +16,8 @@ import { filterSelector, servicesSelector } from '../../../../../selectors/rules const selector = createSelector(filterSelector, servicesSelector, (filter, services) => ({ selected: filter.service, - services + services, + anyFieldVal: filter.serviceAny })); export default compose( @@ -27,12 +28,15 @@ export default compose( valueField: "value", parentsFilter: {}, filter: "startsWith", - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", data: [ {value: "WMS", label: "WMS"}, {value: "WFS", label: "WFS"}, {value: "WCS", label: "WCS"} - ] + ], + anyFilterRuleMode: 'serviceAny' }), withPropsOnChange(["services"], ({services, data}) => ({data: services || data})), withHandlers({ @@ -40,6 +44,6 @@ export default compose( onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder"]), + localizedProps(["placeholder", "checkedAnyField", "unCheckedAnyField"]), fixedOptions )(PagedCombo); diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/UsersFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/UsersFilter.jsx index d4f28d519d..1a195c7bfb 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/UsersFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/UsersFilter.jsx @@ -16,7 +16,8 @@ import { createSelector } from 'reselect'; import { filterSelector } from '../../../../../selectors/rulesmanager'; import { error } from '../../../../../actions/notifications'; const selector = createSelector(filterSelector, (filter) => ({ - selected: filter.username + selected: filter.username, + anyFieldVal: filter.userAny })); export default compose( @@ -28,17 +29,20 @@ export default compose( loadData: getUsers, parentsFilter: {}, filter: false, - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", loadingErrorMsg: { title: "rulesmanager.errorTitle", message: "rulesmanager.errorLoadingUsers" - } + }, + anyFilterRuleMode: 'userAny' }), withHandlers({ onValueSelected: ({column = {}, onFilterChange = () => {}}) => filterTerm => { onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder"]), + localizedProps(["placeholder", "loadingErroMsg", "checkedAnyField", "unCheckedAnyField"]), autoComplete )(PagedCombo); diff --git a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/WorkspacesFilter.jsx b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/WorkspacesFilter.jsx index 2e7033d55e..0d8c3821ed 100644 --- a/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/WorkspacesFilter.jsx +++ b/web/client/components/manager/rulesmanager/rulesgrid/filterRenderers/WorkspacesFilter.jsx @@ -17,7 +17,8 @@ import { createSelector } from 'reselect'; import { filterSelector } from '../../../../../selectors/rulesmanager'; const selector = createSelector(filterSelector, (filter) => ({ - selected: filter.workspace + selected: filter.workspace, + anyFieldVal: filter.workspaceAny })); @@ -31,17 +32,20 @@ export default compose( loadData: getWorkspaces, parentsFilter: {}, filter: "startsWith", - placeholder: "rulesmanager.placeholders.filter", + placeholder: "rulesmanager.placeholders.filterAny", + unCheckedAnyField: "rulesmanager.tooltip.filterRuleList", + checkedAnyField: "rulesmanager.tooltip.showAllRules", loadingErrorMsg: { title: "rulesmanager.errorTitle", message: "rulesmanager.errorLoadingWorkspaces" - } + }, + anyFilterRuleMode: 'workspaceAny' }), withHandlers({ onValueSelected: ({column = {}, onFilterChange = () => {}}) => filterTerm => { onFilterChange({column, filterTerm}); } }), - localizedProps(["placeholder"]), + localizedProps(["placeholder", "loadingErroMsg", "checkedAnyField", "unCheckedAnyField"]), autoComplete )(PagedCombo); diff --git a/web/client/components/misc/__tests__/PagedCombobox-test.jsx b/web/client/components/misc/__tests__/PagedCombobox-test.jsx index f8b37a594b..ead65485b4 100644 --- a/web/client/components/misc/__tests__/PagedCombobox-test.jsx +++ b/web/client/components/misc/__tests__/PagedCombobox-test.jsx @@ -159,4 +159,35 @@ describe("This test for PagedCombobox component", () => { done(); }, 50); }); + it('tests PagedCombobox anyFilter Mode', (done) => { + const actions = { + onSelect: () => {} + }; + const spy = expect.spyOn(actions, "onSelect"); + const data = [{ + label: "label", value: "value" + }]; + const comp = ReactDOM.render(, document.getElementById("container")); + expect(comp).toExist(); + const domNode = ReactDOM.findDOMNode(comp); + expect(domNode).toExist(); + const inputs = domNode.getElementsByTagName("input"); + const checkbox = inputs[1]; + expect(inputs.length).toEqual(2); + expect(checkbox.checked).toEqual(true); + expect(checkbox.name).toEqual('userAny'); + + const tool = ReactDOM.findDOMNode(TestUtils.scryRenderedDOMComponentsWithClass(comp, "rw-i rw-i-caret-down")[0]); + tool.click(); + // this tests if the option list is opened + const firstOption = ReactDOM.findDOMNode(TestUtils.scryRenderedDOMComponentsWithClass(comp, "rw-list-option")[0]); + expect(firstOption).toExist(); + const valueOption = firstOption.getElementsByTagName("span")[0]; + expect(valueOption).toExist(); + TestUtils.Simulate.click(firstOption); + setTimeout(() => { + expect(spy.calls.length).toEqual(1); + done(); + }, 50); + }); }); diff --git a/web/client/components/misc/combobox/PagedCombobox.jsx b/web/client/components/misc/combobox/PagedCombobox.jsx index 3803f0810b..496905556a 100644 --- a/web/client/components/misc/combobox/PagedCombobox.jsx +++ b/web/client/components/misc/combobox/PagedCombobox.jsx @@ -55,7 +55,13 @@ class PagedCombobox extends React.Component { stopPropagation: PropTypes.bool, clearable: PropTypes.bool, onReset: PropTypes.func, - attribute: PropTypes.string + attribute: PropTypes.string, + anyFilterRuleMode: PropTypes.string, + onFilterChange: PropTypes.func, + anyFieldVal: PropTypes.bool, + column: PropTypes.object, + checkedAnyField: PropTypes.string, + unCheckedAnyField: PropTypes.string }; static contextTypes = { @@ -94,7 +100,12 @@ class PagedCombobox extends React.Component { placement: "top" }, valueField: "value", - clearable: false + clearable: false, + anyFilterRuleMode: '', + onFilterChange: ()=>{}, + column: {}, + checkedAnyField: "", + unCheckedAnyField: "" }; componentDidUpdate(prevProps) { @@ -118,6 +129,21 @@ class PagedCombobox extends React.Component { ); }; + renderTooltipCheckbox = () => { + const { onFilterChange, anyFieldVal } = this.props; + + let checkboxInput = ( + { + onFilterChange({column: {key: evt.target.name}, filterTerm: !evt.target.checked}); + }} type="checkbox" checked={!!(typeof anyFieldVal === 'boolean' && !anyFieldVal)} + name={this.props.anyFilterRuleMode} /> + ); + const tooltip = ( + { !!(typeof anyFieldVal === 'boolean' && !anyFieldVal) ? this.props.checkedAnyField : this.props.unCheckedAnyField }); + return ( + { checkboxInput } + ); + } renderPagination = () => { const firstPage = this.props.pagination.firstPage; @@ -182,17 +208,30 @@ class PagedCombobox extends React.Component { return this.props.tooltip && this.props.tooltip.enabled ? this.renderWithTooltip(field) : field; } render() { - const {selectedValue: v, disabled, onReset, label: l, clearable} = this.props; + const {selectedValue: v, disabled, onReset, label: l, clearable, onFilterChange } = this.props; let label = l ? () : (); // TODO change "the else case" value with null ? return ( -
- {label} +
{clearable ? (
{this.renderField()} - x -
) : this.renderField() + { + if (this.props.anyFilterRuleMode) { + // reset the checkbox as well + onFilterChange({column: {key: this.props.column?.key}, filterTerm: undefined, isResetField: true}); + } else { + onReset(); + } + }}>x +
) : + this.renderField() } +   +
+ {label} + { this.props.anyFilterRuleMode ? + this.renderTooltipCheckbox() : null} +
); } } diff --git a/web/client/reducers/__tests__/rulesmanager-test.js b/web/client/reducers/__tests__/rulesmanager-test.js index ee8feb9944..c2e781bde2 100644 --- a/web/client/reducers/__tests__/rulesmanager-test.js +++ b/web/client/reducers/__tests__/rulesmanager-test.js @@ -127,6 +127,43 @@ describe('test rules manager reducer', () => { filter3: "value3" }); }); + it('update set filter values', () => { + const oldState = { + filters: { + layer: "layer1" + } + }; + var state = rulesmanager(oldState, { + type: 'RULES_MANAGER:SET_FILTER', + key: "workspace", + value: "workspace1" + }); + expect(state.filters).toEqual({ + layer: "layer1", + workspace: "workspace1" + }); + }); + + it('update set reset filter values', () => { + const oldState = { + filters: { + workspace: "workspace1", + workspaceAny: false, + layer: "layer1" + } + }; + var state = rulesmanager(oldState, { + type: 'RULES_MANAGER:SET_FILTER', + key: "workspace", + value: undefined, + isResetField: true + }); + expect(state.filters).toEqual({ + workspace: undefined, + workspaceAny: undefined, + layer: "layer1" + }); + }); it('options loaded', () => { const oldState = { diff --git a/web/client/reducers/rulesmanager.js b/web/client/reducers/rulesmanager.js index 3bf574bf07..0522c9185d 100644 --- a/web/client/reducers/rulesmanager.js +++ b/web/client/reducers/rulesmanager.js @@ -105,8 +105,16 @@ function rulesmanager(state = defaultState, action) { case LOADING: return assign({}, state, {loading: action.loading}); case SET_FILTER: { - const {key, value} = action; - if (value) { + const {key, value, isResetField} = action; + if (isResetField) { + if (key === "rolename") { + return assign({}, state, {filters: {...state.filters, [key]: value, ['roleAny']: undefined}}); + } else if (key === "username") { + return assign({}, state, {filters: {...state.filters, [key]: value, ['userAny']: undefined}}); + } + return assign({}, state, {filters: {...state.filters, [key]: value, [key + 'Any']: undefined}}); + } + if (value || key?.includes('Any')) { return assign({}, state, {filters: {...state.filters, [key]: value}}); } const {[key]: omit, ...newFilters} = state.filters; diff --git a/web/client/selectors/__tests__/rulesmanager-test.js b/web/client/selectors/__tests__/rulesmanager-test.js index 5f1880a426..3b51ffe222 100644 --- a/web/client/selectors/__tests__/rulesmanager-test.js +++ b/web/client/selectors/__tests__/rulesmanager-test.js @@ -28,15 +28,21 @@ describe('test rules manager selectors', () => { const rules = rulesSelector(state); expect(rules.length).toBe(1); expect(rules[0]).toEqual({ - id: "rules1", + id: 'rules1', priority: 1, - roleName: "role1", - userName: "*", - service: "*", - request: "*", - workspace: "*", - layer: "*", - access: "ALLOW" + roleName: 'role1', + roleAny: '*', + userName: '*', + userAny: '*', + service: '*', + serviceAny: '*', + request: '*', + requestAny: '*', + workspace: '*', + workspaceAny: '*', + layer: '*', + layerAny: '*', + access: 'ALLOW' }); }); diff --git a/web/client/selectors/rulesmanager.js b/web/client/selectors/rulesmanager.js index b8098beb16..48a4c4ce22 100644 --- a/web/client/selectors/rulesmanager.js +++ b/web/client/selectors/rulesmanager.js @@ -21,11 +21,17 @@ export const rulesSelector = (state) => { assign(formattedRule, {'id': rule.id}); assign(formattedRule, {'priority': rule.priority}); assign(formattedRule, {'roleName': rule.roleName ? rule.roleName : '*'}); + assign(formattedRule, {'roleAny': rule.roleAny ? rule.roleAny : '*'}); assign(formattedRule, {'userName': rule.userName ? rule.userName : '*'}); + assign(formattedRule, {'userAny': rule.userAny ? rule.userAny : '*'}); assign(formattedRule, {'service': rule.service ? rule.service : '*'}); + assign(formattedRule, {'serviceAny': rule.serviceAny ? rule.serviceAny : '*'}); assign(formattedRule, {'request': rule.request ? rule.request : '*'}); + assign(formattedRule, {'requestAny': rule.requestAny ? rule.requestAny : '*'}); assign(formattedRule, {'workspace': rule.workspace ? rule.workspace : '*'}); + assign(formattedRule, {'workspaceAny': rule.workspaceAny ? rule.workspaceAny : '*'}); assign(formattedRule, {'layer': rule.layer ? rule.layer : '*'}); + assign(formattedRule, {'layerAny': rule.layerAny ? rule.layerAny : '*'}); assign(formattedRule, {'access': rule.access}); return formattedRule; }); diff --git a/web/client/themes/default/less/autocomplete.less b/web/client/themes/default/less/autocomplete.less index 62d9efef38..d8b496477e 100644 --- a/web/client/themes/default/less/autocomplete.less +++ b/web/client/themes/default/less/autocomplete.less @@ -38,3 +38,7 @@ .rw-combobox .rw-btn { overflow: hidden; } +.autocompleteField.d-flex{ + display: flex; + height: 100%; +} diff --git a/web/client/themes/default/less/react-data-grid.less b/web/client/themes/default/less/react-data-grid.less index ceb2ba7aa0..ab8eafb870 100644 --- a/web/client/themes/default/less/react-data-grid.less +++ b/web/client/themes/default/less/react-data-grid.less @@ -301,3 +301,15 @@ } } } +#page-rulesmanager{ + .ms2-border-layout-body{ + .rules-data-gird { + .react-grid-HeaderCell{ + .autocompleteField input { + position: relative; + top: 15%; + } + } + } + } +} diff --git a/web/client/translations/data.de-DE.json b/web/client/translations/data.de-DE.json index 5e22f81f8d..749ed06908 100644 --- a/web/client/translations/data.de-DE.json +++ b/web/client/translations/data.de-DE.json @@ -2647,7 +2647,8 @@ "layer": "Ebenen suchen", "access": "Zugriff suchen", "ip": "###.###.###.###/##", - "priority": "Priorität festlegen" + "priority": "Priorität festlegen", + "filterAny": "beliebig" }, "menutitle": "GeoFence-Regeln Verwalten", "tooltip": { @@ -2658,7 +2659,9 @@ "deleteT": "Entferne ausgewählte Regeln", "cacheT": "Cache leeren", "save": "Aktuelle Regel speichern", - "close": "Beenden Sie die Regelerstellung" + "close": "Beenden Sie die Regelerstellung", + "showAllRules": "Toon alle in aanmerking komende regels", + "filterRuleList": "Filterlijst met geselecteerde waarde" }, "navItems": { "main": "Allgemeine Regel", diff --git a/web/client/translations/data.en-US.json b/web/client/translations/data.en-US.json index 2b96ea26d0..dae62398ec 100644 --- a/web/client/translations/data.en-US.json +++ b/web/client/translations/data.en-US.json @@ -2620,7 +2620,8 @@ "access": "Type to search Access", "ip": "###.###.###.###/##", "priority": "Select Priority", - "filter": "Filter styles..." + "filter": "Filter styles...", + "filterAny": "ANY" }, "menutitle": "Manage Access Rules", "tooltip": { @@ -2631,7 +2632,9 @@ "deleteT": "Remove selected rules", "cacheT": "Clear cache", "save": "Save current rule", - "close": "Exit from create rule" + "close": "Exit from create rule", + "showAllRules": "Show all eligible rules", + "filterRuleList": "Filter list using selected value" }, "navItems": { "main": "General Rule", diff --git a/web/client/translations/data.es-ES.json b/web/client/translations/data.es-ES.json index 0db0bdfc42..98d17c959d 100644 --- a/web/client/translations/data.es-ES.json +++ b/web/client/translations/data.es-ES.json @@ -2610,7 +2610,8 @@ "layer": "Escriba para buscar Capas", "access": "Escriba para buscar Acceso", "ip": "###.###.###.###/##", - "priority": "Seleccionar prioridad" + "priority": "Seleccionar prioridad", + "filterAny": "Cualquier" }, "menutitle": "Administrar reglas de GeoFence", "tooltip": { @@ -2621,7 +2622,9 @@ "deleteT": "Eliminar las reglas seleccionadas", "cacheT": "Limpiar cache", "save": "Guardar la regla actual", - "close": "Salir de crear regla" + "close": "Salir de crear regla", + "showAllRules": "Mostrar todas las reglas elegibles", + "filterRuleList": "Lista de filtros usando un valor seleccionado" }, "navItems": { "main": "Regla general", diff --git a/web/client/translations/data.fr-FR.json b/web/client/translations/data.fr-FR.json index 96581a5ca3..068fab9e8b 100644 --- a/web/client/translations/data.fr-FR.json +++ b/web/client/translations/data.fr-FR.json @@ -2610,7 +2610,8 @@ "layer": "Rechercher des couches", "access": "Rechercher des accès", "ip": "###.###.###.###/##", - "priority": "Sélectionner la priorité" + "priority": "Sélectionner la priorité", + "filterAny": "n'importe quel" }, "menutitle": "Gérer les règles d'accès", "tooltip": { @@ -2621,7 +2622,9 @@ "deleteT": "Supprimer les règles sélectionnées", "cacheT": "Vider le cache", "save": "Enregistrer la règle actuelle", - "close": "Fermer la règle" + "close": "Fermer la règle", + "showAllRules": "Montrer toutes les règles éligibles", + "filterRuleList": "Liste de filtre à l'aide d'une valeur sélectionnée" }, "navItems": { "main": "Règle générale", diff --git a/web/client/translations/data.it-IT.json b/web/client/translations/data.it-IT.json index 5da365e892..cbc532dbc5 100644 --- a/web/client/translations/data.it-IT.json +++ b/web/client/translations/data.it-IT.json @@ -2611,7 +2611,8 @@ "layer": "Cerca Layers", "access": "Cerca Permesso", "ip": "###.###.###.###/##", - "priority": "Seleziona Priorità" + "priority": "Seleziona Priorità", + "filterAny": "Qualsiasi" }, "menutitle": "Configura Regole di Accesso", "tooltip": { @@ -2622,7 +2623,9 @@ "deleteT": "Rimuovi regole selezionate", "cacheT": "Pulisci la cache", "save": "Salva regola corrente", - "close": "Esci da modifica regola" + "close": "Esci da modifica regola", + "showAllRules": "Mostra tutte le regole applicabili", + "filterRuleList": "Filtra la lista usando il valore selezionato" }, "navItems": { "main": "Regola Generica",