diff --git a/app/javascript/vue/global_search/container.vue b/app/javascript/vue/global_search/container.vue index 5138212fd..0e2488829 100644 --- a/app/javascript/vue/global_search/container.vue +++ b/app/javascript/vue/global_search/container.vue @@ -57,7 +57,7 @@ @@ -151,6 +151,10 @@ export default { currentTeam: { type: Number || String, required: true + }, + singleTeam: { + type: Boolean, + default: false } }, components: { @@ -227,7 +231,7 @@ export default { to: null }, include_archived: urlParams.get('include_archived') === 'true', - teams: urlParams.getAll('teams[]').map((team) => parseInt(team, 10)), + teams: (this.singleTeam ? [] : urlParams.getAll('teams[]').map((team) => parseInt(team, 10))), users: urlParams.getAll('users[]').map((user) => parseInt(user, 10)), group: urlParams.get('group') }; diff --git a/app/javascript/vue/global_search/filters.vue b/app/javascript/vue/global_search/filters.vue index 6d148e5c9..9e8e3fa3d 100644 --- a/app/javascript/vue/global_search/filters.vue +++ b/app/javascript/vue/global_search/filters.vue @@ -36,7 +36,7 @@ :multiple="true" :value="selectedTeams" :placeholder="i18n.t('search.filters.by_team_placeholder')" - @change="(v) => {selectedTeams = v}" /> + @change="selectTeams" />
{{ i18n.t('search.filters.by_user') }} @@ -52,7 +52,7 @@ :with-checkboxes="true" :multiple="true" :placeholder="i18n.t('search.filters.by_user_placeholder')" - @change="(v) => {selectedUsers = v}" /> + @change="selectUsers" />
@@ -178,6 +178,16 @@ export default { this.users = response.data.data.map((user) => ([parseInt(user.id, 10), user.attributes.name, { avatar_url: user.attributes.avatar_url }])); }); }, + selectTeams(teams) { + if (Array.isArray(teams)) { + this.selectedTeams = teams; + } + }, + selectUsers(users) { + if (Array.isArray(users)) { + this.selectedUsers = users; + } + }, clearFilters() { this.createdAt = { on: null, diff --git a/app/javascript/vue/shared/select_dropdown.vue b/app/javascript/vue/shared/select_dropdown.vue index e706149f9..7fe585c9c 100644 --- a/app/javascript/vue/shared/select_dropdown.vue +++ b/app/javascript/vue/shared/select_dropdown.vue @@ -26,7 +26,7 @@ ref="search" v-else v-model="query" - :placeholder="label || placeholder || this.i18n.t('general.select_dropdown.placeholder')" + :placeholder="placeholderRender" class="w-full border-0 outline-none pl-0 placeholder:text-sn-grey" />
@@ -142,6 +142,13 @@ export default { }, mixins: [FixedFlyoutMixin], computed: { + placeholderRender() { + if (this.searchable && this.labelRenderer && this.label) { + return ''; + } + + return this.label || this.placeholder || this.i18n.t('general.select_dropdown.placeholder'); + }, sizeClass() { switch (this.size) { case 'xs': @@ -301,8 +308,6 @@ export default { }); }, setValue(value) { - this.query = ''; - if (this.multiple) { if (this.newValue.includes(value)) { this.newValue = this.newValue.filter((v) => v !== value); @@ -310,7 +315,6 @@ export default { this.newValue = [...this.newValue, value]; } } else { - this.newValue = value; this.$nextTick(() => { this.close(); }); diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb index fc84a611f..a68c8f33a 100644 --- a/app/views/search/index.html.erb +++ b/app/views/search/index.html.erb @@ -6,6 +6,7 @@ :search-url="'<%= search_path(format: :json) %>'" teams-url="<%= visible_teams_teams_path %>" users-url="<%= visible_users_teams_path %>" + :single-team="<%= current_user.teams.count == 1 %>" current-team="<%= current_team.id %>" />
diff --git a/config/locales/en.yml b/config/locales/en.yml index 0e0b23350..edf5414e3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -479,7 +479,7 @@ en: by_user_placeholder: "Filter by user" by_user_info: "The 'Filter by user' option will refine search results based on records where the selected user is the creator, modifier, or is assigned to the entry." include_archived: "Include Archived objects" - clear: "Clear filters" + clear: "Clear" date: today: "Today" yesterday: "Yesterday"