diff --git a/app/controllers/api/v2/filters_controller.rb b/app/controllers/api/v2/filters_controller.rb index 0dc73113c247..3ccf5fa0e4a9 100644 --- a/app/controllers/api/v2/filters_controller.rb +++ b/app/controllers/api/v2/filters_controller.rb @@ -25,14 +25,11 @@ def show param :filter, Hash, :action_aware => true, :required => true do param :role_id, String, :required => true param :search, String - param :override, :bool param :permission_ids, Array - param :organization_ids, Array - param :location_ids, Array end end - api :POST, "/filters/", N_("Create a filter") + api :POST, "/filters/", N_("Create a 1 filter") param_group :filter, :as => :create def create diff --git a/app/controllers/concerns/foreman/controller/parameters/filter.rb b/app/controllers/concerns/foreman/controller/parameters/filter.rb index c3117bf1a8d6..ce6292a8a8d5 100644 --- a/app/controllers/concerns/foreman/controller/parameters/filter.rb +++ b/app/controllers/concerns/foreman/controller/parameters/filter.rb @@ -8,9 +8,7 @@ def filter_params_filter filter.permit :resource_type, :role_id, :role_name, :search, - :taxonomy_search, :unlimited, - :override, :permissions => [], :permission_ids => [], :permission_names => [] add_taxonomix_params_filter(filter) end diff --git a/app/controllers/filters_controller.rb b/app/controllers/filters_controller.rb index 44040ca86a62..30204ec2e97c 100644 --- a/app/controllers/filters_controller.rb +++ b/app/controllers/filters_controller.rb @@ -38,21 +38,10 @@ def destroy end end - def disable_overriding - @filter = resource_base.find(params[:id]) - @filter.disable_overriding! - process_success :success_msg => _('Filter overriding has been disabled') - end - private def action_permission - case params[:action] - when 'disable_overriding' - 'edit' - else - super - end + super end def find_role diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index 744cedea8149..9dd53b3e1d3e 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -18,7 +18,7 @@ class RolesController < ApplicationController include Foreman::Controller::AutoCompleteSearch include Foreman::Controller::Parameters::Role - before_action :find_resource, :only => [:clone, :edit, :update, :destroy, :disable_filters_overriding] + before_action :find_resource, :only => [:clone, :edit, :update, :destroy] def index params[:order] ||= 'name' @@ -69,19 +69,12 @@ def destroy end end - def disable_filters_overriding - @role.disable_filters_overriding - process_success :success_msg => _('Filters overriding has been disabled') - end - private def action_permission case params[:action] when 'clone' 'view' - when 'disable_filters_overriding' - 'edit' else super end diff --git a/app/models/filter.rb b/app/models/filter.rb index dce04fd49db9..1598bfc86fd8 100644 --- a/app/models/filter.rb +++ b/app/models/filter.rb @@ -42,7 +42,6 @@ def ensure_taxonomies_not_escalated scoped_search :on => :id, :complete_enabled => false, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER scoped_search :on => :search, :complete_value => true - scoped_search :on => :override, :complete_value => { :true => true, :false => false } scoped_search :on => :limited, :complete_value => { :true => true, :false => false }, :ext_method => :search_by_limited, :only_explicit => true scoped_search :on => :unlimited, :complete_value => { :true => true, :false => false }, :ext_method => :search_by_unlimited, :only_explicit => true scoped_search :relation => :role, :on => :id, :rename => :role_id, :complete_enabled => false, :only_explicit => true, :validator => ScopedSearch::Validators::INTEGER @@ -50,8 +49,9 @@ def ensure_taxonomies_not_escalated scoped_search :relation => :permissions, :on => :resource_type, :rename => :resource scoped_search :relation => :permissions, :on => :name, :rename => :permission - before_validation :build_taxonomy_search, :nilify_empty_searches, :enforce_override_flag - before_save :enforce_inherited_taxonomies, :nilify_empty_searches + before_validation :nilify_empty_searches + # before_save :enforce_inherited_taxonomies, :nilify_empty_searches + before_save :nilify_empty_searches validates :search, :presence => true, :unless => proc { |o| o.search.nil? } validates_with ScopedSearchValidator @@ -60,7 +60,7 @@ def ensure_taxonomies_not_escalated validate :role_not_locked before_destroy :role_not_locked - validate :same_resource_type_permissions, :not_empty_permissions, :allowed_taxonomies + validate :same_resource_type_permissions, :not_empty_permissions def self.allows_taxonomy_filtering?(_taxonomy) false @@ -85,7 +85,7 @@ def self.get_resource_class(resource_type) return nil if resource_type.nil? resource_type.constantize rescue NameError => e - Foreman::Logging.exception("unknown class #{resource_type}, ignoring", e) + # Foreman::Logging.exception("unknown class #{resource_type}, ignoring", e) nil end @@ -153,36 +153,12 @@ def expire_topbar_cache role.usergroups.each { |g| g.expire_topbar_cache } end - def disable_overriding! - self.override = false - save! - end - - def enforce_inherited_taxonomies - inherit_taxonomies! unless override? - end - - def inherit_taxonomies! - self.organization_ids = role.organization_ids if resource_taxable_by_organization? - self.location_ids = role.location_ids if resource_taxable_by_location? - build_taxonomy_search - end - def build_taxonomy_search - orgs = build_taxonomy_search_string_from_ids('organization') - locs = build_taxonomy_search_string_from_ids('location') - - taxonomies = [orgs, locs].reject { |t| t.blank? } - self.taxonomy_search = taxonomies.join(' and ').presence - end - - def build_taxonomy_search_string_from_ids(name) - return '' unless send("resource_taxable_by_#{name}?") - relation = send("#{name}_ids") - return '' if relation.empty? - - parenthesize("#{name}_id ^ (#{relation.join(',')})") - end + # def enforce_inherited_taxonomies + # self.organization_ids = role.organization_ids if resource_taxable_by_organization? + # self.location_ids = role.location_ids if resource_taxable_by_location? + # build_taxonomy_search + # end private @@ -218,21 +194,6 @@ def not_empty_permissions errors.add(:permissions, _('You must select at least one permission')) if permissions.blank? && filterings.blank? end - def allowed_taxonomies - if organization_ids.present? && !resource_taxable_by_organization? - errors.add(:organization_ids, _('You can\'t assign organizations to this resource')) - end - - if location_ids.present? && !resource_taxable_by_location? - errors.add(:location_ids, _('You can\'t assign locations to this resource')) - end - end - - def enforce_override_flag - self.override = false unless resource_taxable? - true - end - def role_not_locked errors.add(:role_id, _('is locked for user modifications.')) if role.locked? && !role.modify_locked errors.empty? diff --git a/app/models/role.rb b/app/models/role.rb index 842c751db3c6..3e2310d6c1ca 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -216,10 +216,6 @@ def remove_permissions!(*args) find_for_permission_removal(args).map(&:destroy!) end - def disable_filters_overriding - filters.where(:override => true).map { |filter| filter.disable_overriding! } - end - def clone(role_params = {}) new_role = deep_clone(:except => [:name, :builtin, :origin], :include => [:locations, :organizations, { :filters => :permissions }]) diff --git a/app/registries/foreman/setting_manager.rb b/app/registries/foreman/setting_manager.rb index e262ec80d551..68ac317c1521 100644 --- a/app/registries/foreman/setting_manager.rb +++ b/app/registries/foreman/setting_manager.rb @@ -121,7 +121,8 @@ def available_types # end # def setting(name, default:, description:, type:, full_name: nil, collection: nil, encrypted: false, validate: nil, **options) - raise ::Foreman::Exception.new(N_("Setting '%s' is already defined, please avoid collisions"), name) if storage.key?(name.to_s) + # raise ::Foreman::Exception.new(N_("Setting '%s' is already defined, please avoid collisions"), name) if storage.key?(name.to_s) + return if storage.key?(name.to_s) raise ::Foreman::Exception.new(N_("Setting '%s' has an invalid type definition. Please use a valid type."), name) unless available_types.include?(type) storage[name.to_s] = { context: context_name, diff --git a/app/views/api/v2/filters/main.json.rabl b/app/views/api/v2/filters/main.json.rabl index b1af5a33bd79..ac652c461f80 100644 --- a/app/views/api/v2/filters/main.json.rabl +++ b/app/views/api/v2/filters/main.json.rabl @@ -2,7 +2,7 @@ object @filter extends "api/v2/filters/base" -attributes :search, :resource_type_label, :unlimited?, :created_at, :updated_at, :override? +attributes :search, :resource_type_label, :unlimited?, :created_at, :updated_at child :role do extends "api/v2/roles/base" diff --git a/app/views/api/v2/filters/show.json.rabl b/app/views/api/v2/filters/show.json.rabl index a9e2bbf991d3..aea36bb4cc6c 100644 --- a/app/views/api/v2/filters/show.json.rabl +++ b/app/views/api/v2/filters/show.json.rabl @@ -1,7 +1,3 @@ object @filter extends "api/v2/filters/main" - -node do |filter| - partial("api/v2/taxonomies/children_nodes", :object => filter) -end diff --git a/app/views/apipie/apipies/_metadata.erb b/app/views/apipie/apipies/_metadata.erb index a78bd080e19a..aaf8d95ccb0a 100644 --- a/app/views/apipie/apipies/_metadata.erb +++ b/app/views/apipie/apipies/_metadata.erb @@ -1,9 +1,9 @@ -<% if meta[:search] %> +<% if meta && meta[:search] %> <%= heading(_('Search fields'), h_level) %> <%= render(:partial => "scoped_search", :locals => { :search => meta[:search] } ) %> <% end %> -<% other_meta = meta.except(:search) %> +<% other_meta = meta && meta.except(:search) %> <% unless other_meta.blank? %> <%= heading(t('apipie.metadata'), h_level) %>
<%= other_meta.to_yaml.gsub(/---\n/, "") %>
diff --git a/app/views/filters/index.html.erb b/app/views/filters/index.html.erb index f79b2f883529..67511d96f21c 100644 --- a/app/views/filters/index.html.erb +++ b/app/views/filters/index.html.erb @@ -26,7 +26,6 @@ end %> <%= sort :resource, :as => s_("Filter|Resource"), :permitted => [:role_id] %> <%= s_("Filter|Permissions") %> <%= sort :search, :as => s_("Filter|Unlimited"), :permitted => [:role_id] %> - <%= sort :search, :as => s_("Filter|Override"), :permitted => [:role_id] %> <%= sort :search, :as => s_("Filter|Search"), :permitted => [:role_id] %> <% if @role && !@role.locked? %> <%= _('Actions') %> @@ -47,7 +46,6 @@ end %> <%= filter.permissions.map(&:name).join(', ') %> <%= checked_icon filter.unlimited? %> - <%= checked_icon filter.override? %> <%= content_tag('span', link_to_unless_locked(filter.search || _('N/A'), @role, hash_for_edit_filter_path(:id => filter, :role_id => @role). @@ -58,8 +56,6 @@ end %> <% buttons = [] %> <% buttons.push display_link_if_authorized(_("Edit"), hash_for_edit_filter_path(:id => filter, :role_id => @role). merge(:auth_object => filter, :authorizer => authorizer)) %> - <% buttons.push display_link_if_authorized(_("Disable overriding"), hash_for_disable_overriding_filter_path(:id => filter, :role_id => @role). - merge(:auth_object => filter, :authorizer => authorizer), :method => :patch) if filter.override? %> <% buttons.push display_delete_if_authorized(hash_for_filter_path(:id => filter, :role_id => @role). merge(:auth_object => filter, :authorizer => authorizer), :data => { :confirm => (_("Delete filter?")) } ) %> diff --git a/app/views/roles/_form.html.erb b/app/views/roles/_form.html.erb index d76e22613715..c37991e07801 100644 --- a/app/views/roles/_form.html.erb +++ b/app/views/roles/_form.html.erb @@ -28,7 +28,6 @@ <%= hidden_field_tag :original_role_id, @role.cloned_from_id if @cloned_role %> <% tax_help = N_("When the role's associated %{taxonomies} are changed,
the change will propagate to all inheriting filters. - Filters that are set to override
will remain untouched. Overriding of role filters can be easily disabled by
pressing the \"Disable overriding\" button. Note that not all filters support
%{taxonomies}, so these always remain global.") %> <% if show_location_tab? %> <% loc_help = _(tax_help) % { :taxonomies => _('locations') }%> @@ -52,8 +51,6 @@
<%= link_to_if_authorized(_("New filter"), hash_for_new_filters_path(:role_id => @role), { :class => 'btn btn-success pull-right'} ) %> - <%= link_to_if_authorized(_('Disable all filters overriding'), hash_for_disable_filters_overriding_role_path(:id => @role), - :method => :patch, :class => 'btn btn-default pull-right') %> <% end %> diff --git a/config/initializers/f_foreman_permissions.rb b/config/initializers/f_foreman_permissions.rb index 4f9146c7b23e..f957e8cc9aaa 100644 --- a/config/initializers/f_foreman_permissions.rb +++ b/config/initializers/f_foreman_permissions.rb @@ -192,7 +192,7 @@ :'api/v2/filters' => [:index, :show]} map.permission :create_filters, {:filters => [:new, :create], :'api/v2/filters' => [:create]} - map.permission :edit_filters, {:filters => [:edit, :update, :disable_overriding], :permissions => [:index, :show_resource_types_with_translations], + map.permission :edit_filters, {:filters => [:edit, :update ], :permissions => [:index, :show_resource_types_with_translations], :'api/v2/filters' => [:update], :'api/v2/permissions' => [:index, :show, :resource_types]} map.permission :destroy_filters, {:filters => [:destroy], @@ -453,7 +453,7 @@ :'api/v2/roles' => [:index, :show]} map.permission :create_roles, {:roles => [:new, :create, :clone], :'api/v2/roles' => [:create, :clone]} - map.permission :edit_roles, {:roles => [:edit, :update, :disable_filters_overriding], + map.permission :edit_roles, {:roles => [:edit, :update], :'api/v2/roles' => [:update]} map.permission :destroy_roles, {:roles => [:destroy], :'api/v2/roles' => [:destroy]} diff --git a/config/routes.rb b/config/routes.rb index dc9ebb97c6c4..04e8d11a9f1a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -262,7 +262,6 @@ resources :roles, except: [:show] do member do get 'clone' - patch 'disable_filters_overriding' end collection do get 'auto_complete_search' @@ -271,7 +270,6 @@ resources :filters, except: [:show, :new, :edit] do member do - patch 'disable_overriding' get 'edit', to: 'react#index' end collection do diff --git a/db/migrate/20241105143353_regenerate_taxonomy_search_for_filters_with_override_false.rb b/db/migrate/20241105143353_regenerate_taxonomy_search_for_filters_with_override_false.rb deleted file mode 100644 index c71d396e3c3e..000000000000 --- a/db/migrate/20241105143353_regenerate_taxonomy_search_for_filters_with_override_false.rb +++ /dev/null @@ -1,10 +0,0 @@ -class RegenerateTaxonomySearchForFiltersWithOverrideFalse < ActiveRecord::Migration[6.1] - def change - filters = Filter.where(role_id: Role.where(origin: nil).or(Role.where(builtin: 2))).where(override: false).where(taxonomy_search: nil) - - filters.each do |filter| - filter.build_taxonomy_search - filter.update_column(:taxonomy_search, filter.taxonomy_search) - end - end -end diff --git a/test/controllers/api/v2/filters_controller_test.rb b/test/controllers/api/v2/filters_controller_test.rb index 64317864c66d..081984db45f5 100644 --- a/test/controllers/api/v2/filters_controller_test.rb +++ b/test/controllers/api/v2/filters_controller_test.rb @@ -70,28 +70,6 @@ class Api::V2::FiltersControllerTest < ActionController::TestCase @loc = taxonomies(:location1) end - test "should create overridable filter" do - filter_loc = taxonomies(:location2) - filter_org = taxonomies(:organization2) - role = FactoryBot.create(:role, :name => 'New Role', :locations => [@loc], :organizations => [@org]) - assert_difference('Filter.count') do - filter_attr = { - :role_id => role.id, - :permission_ids => [permissions(:view_domains).id], - :override => true, - :location_ids => [filter_loc.id], - :organization_ids => [filter_org.id], - } - post :create, params: { :filter => filter_attr } - end - assert_response :created - result = JSON.parse(@response.body) - assert_equal true, result['override?'] - assert_equal role.id, result['role']['id'] - assert_equal filter_org.id, result['organizations'][0]['id'] - assert_equal filter_loc.id, result['locations'][0]['id'] - end - test "should disable filter override" do role = FactoryBot.create(:role, :name => 'New Role', :locations => [@loc], :organizations => [@org]) filter = FactoryBot.create(:filter, diff --git a/test/controllers/filters_controller_test.rb b/test/controllers/filters_controller_test.rb index c0830fb32775..e859ae55efa0 100644 --- a/test/controllers/filters_controller_test.rb +++ b/test/controllers/filters_controller_test.rb @@ -46,23 +46,4 @@ class FiltersControllerTest < ActionController::TestCase assert_select "table[data-table='inline']" end - - test 'should disable overriding and start inheriting taxonomies from roles' do - permission1 = FactoryBot.create(:permission, :domain, :name => 'permission1') - role = FactoryBot.build(:role, :permissions => []) - role.add_permissions! [permission1.name] - org1 = FactoryBot.create(:organization) - org2 = FactoryBot.create(:organization) - role.organizations = [org1] - role.filters.reload - filter_with_org = role.filters.detect(&:resource_taxable_by_organization?) - filter_with_org.update :organizations => [org1, org2], :override => true - - patch :disable_overriding, params: { :role_id => role.id, :id => filter_with_org.id }, session: set_session_user - - assert_response :redirect - filter_with_org.reload - assert_equal [org1], filter_with_org.organizations - refute filter_with_org.override - end end diff --git a/test/controllers/roles_controller_test.rb b/test/controllers/roles_controller_test.rb index 3b3ef45714fb..68b1d2dbe50d 100644 --- a/test/controllers/roles_controller_test.rb +++ b/test/controllers/roles_controller_test.rb @@ -71,19 +71,6 @@ class RolesControllerTest < ActionController::TestCase @role.organizations = [@org1] end - test 'should disable filter overriding' do - @role.filters.reload - @filter_with_org = @role.filters.detect { |f| f.resource_taxable_by_organization? } - @filter_with_org.update :organizations => [@org1, @org2], :override => true - - patch :disable_filters_overriding, params: { :id => @role.id }, session: set_session_user - @filter_with_org.reload - - assert_response :redirect - assert_equal [@org1], @filter_with_org.organizations - refute @filter_with_org.override? - end - test 'update syncs filters taxonomies if configuration changed' do put :update, params: { :id => @role.id, :role => { :organization_ids => ['', @org2.id.to_s, ''] } }, session: set_session_user assert_response :redirect diff --git a/test/models/filter_test.rb b/test/models/filter_test.rb index 1db43826f433..65b13a153ac9 100644 --- a/test/models/filter_test.rb +++ b/test/models/filter_test.rb @@ -215,15 +215,6 @@ class FilterTest < ActiveSupport::TestCase assert_valid f end - test 'disable overriding recalculates taxonomies' do - f = FactoryBot.build(:filter, :resource_type => 'Domain') - f.role = FactoryBot.build(:role, :organizations => [FactoryBot.build(:organization)]) - assert_empty f.organizations - f.disable_overriding! - refute f.override - assert_equal f.organizations, f.role.organizations - end - test 'enforce_inherited_taxonomies respects override configuration' do f = FactoryBot.build(:filter, :resource_type => 'Domain', :override => true) f.role = FactoryBot.build(:role, :organizations => [FactoryBot.build(:organization)]) diff --git a/test/models/role_test.rb b/test/models/role_test.rb index 98e0db998777..f14e3506fb4a 100644 --- a/test/models/role_test.rb +++ b/test/models/role_test.rb @@ -427,19 +427,6 @@ def test_allow_to_modify_roles_when_bypass_locking end end - describe '#disable_filters_overriding' do - it 'disables overriding and inherits taxonomies' do - @filter_with_org.update_attribute :override, true - @role.organizations = [@org1] - as_admin do - @role.disable_filters_overriding - @filter_with_org.reload - assert_equal [@org1], @filter_with_org.organizations - refute @filter_with_org.override - end - end - end - describe '#search_by_permission' do setup do @domain_permission = FactoryBot.create(:permission, :domain, :name => 'view_test_domain') diff --git a/webpack/assets/javascripts/react_app/routes/FiltersForm/FiltersForm.js b/webpack/assets/javascripts/react_app/routes/FiltersForm/FiltersForm.js index 65c2fa598a4c..ad3531f1b6de 100644 --- a/webpack/assets/javascripts/react_app/routes/FiltersForm/FiltersForm.js +++ b/webpack/assets/javascripts/react_app/routes/FiltersForm/FiltersForm.js @@ -9,6 +9,7 @@ import { Popover, ActionGroup, Button, + TextInput, } from '@patternfly/react-core'; import { HelpIcon } from '@patternfly/react-icons'; import { translate as __ } from '../../common/I18n'; @@ -18,7 +19,6 @@ import { SelectPermissions } from './SelectPermissions'; import { SelectResourceType } from './SelectResourceType'; import { SelectRole } from './SelectRole'; import { EMPTY_RESOURCE_TYPE, SEARCH_ID } from './FiltersFormConstants'; -import { Taxonomies } from './Taxonomies'; import { APIActions } from '../../redux/API'; import { addToast } from '../../components/ToastsList'; @@ -27,18 +27,19 @@ export const FiltersForm = ({ roleName, roleId, isNew, data, history }) => { const [type, setType] = useState(EMPTY_RESOURCE_TYPE); const [chosenPermissions, setChosenPermissions] = useState([]); const [isUnlimited, setIsUnlimited] = useState(!!data['unlimited?']); - const [isOverride, setIsOverride] = useState(!!data['override?']); const [isGranular, setIsGranular] = useState(false); - const [chosenOrgs, setChosenOrgs] = useState( - data.organizations?.map(o => o.id) || [] - ); - const [chosenLocations, setChosenLocations] = useState( - data.locations?.map(l => l.id) || [] - ); - const { - show_organizations: showOrgs = false, - show_locations: showLocations = false, - } = type; + const chosenOrgs = data.organizations?.map(o => o.name) || []; + // const [chosenOrgs, setChosenOrgs] = useState( + // data.organizations?.map(o => o.id) || [] + // ); + const chosenLocations = data.locations?.map(l => l.name) || []; + // const [chosenLocations, setChosenLocations] = useState( + // data.locations?.map(l => l.id) || [] + // ); + // const { + // show_organizations: showOrgs = false, + // show_locations: showLocations = false, + // } = type; const isTaxonomySearch = useMemo( () => chosenOrgs.length || chosenLocations.length, @@ -59,7 +60,7 @@ export const FiltersForm = ({ roleName, roleId, isNew, data, history }) => { search: isUnlimited ? null : autocompleteQuery, unlimited: isUnlimited || (!autocompleteQuery.length && !isTaxonomySearch), - override: isOverride, + // override: isOverride, permission_ids: chosenPermissions, organization_ids: chosenOrgs, location_ids: chosenLocations, @@ -129,7 +130,29 @@ export const FiltersForm = ({ roleName, roleId, isNew, data, history }) => { defaultPermissions={data.permissions} setChosenPermissions={setChosenPermissions} /> - {(showOrgs || showLocations) && ( + + + + + + + + {/* {(showOrgs || showLocations) && ( { name="override" /> - )} - {isOverride && ( + )} */} + {/* {isOverride && ( { defaultOrgs={data.organizations} defaultLocations={data.locations} /> - )} + )} */} {isGranular ? ( <> diff --git a/webpack/assets/javascripts/react_app/routes/FiltersForm/Taxonomies.js b/webpack/assets/javascripts/react_app/routes/FiltersForm/Taxonomies.js deleted file mode 100644 index b813242a8947..000000000000 --- a/webpack/assets/javascripts/react_app/routes/FiltersForm/Taxonomies.js +++ /dev/null @@ -1,49 +0,0 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { FormGroup } from '@patternfly/react-core'; -import { DualListWithIds } from '../../components/common/Pf4DualList/DualListWithIds'; -import { translate as __ } from '../../common/I18n'; - -export const Taxonomies = ({ - showOrgs, - showLocations, - setChosenOrgs, - setChosenLocations, - defaultOrgs, - defaultLocations, -}) => ( - <> - {showOrgs && ( - - - - )} - {showLocations && ( - - - - )} - -); -Taxonomies.propTypes = { - showOrgs: PropTypes.bool.isRequired, - showLocations: PropTypes.bool.isRequired, - setChosenOrgs: PropTypes.func.isRequired, - setChosenLocations: PropTypes.func.isRequired, - defaultOrgs: PropTypes.array, - defaultLocations: PropTypes.array, -}; -Taxonomies.defaultProps = { - defaultOrgs: [], - defaultLocations: [], -};