diff --git a/app/javascript/vue/projects/list.vue b/app/javascript/vue/projects/list.vue index 51f20c740..6168d1b4d 100644 --- a/app/javascript/vue/projects/list.vue +++ b/app/javascript/vue/projects/list.vue @@ -326,18 +326,22 @@ export default { } }, async exportProjects(event, rows) { - this.exportDescription = event.message; - const ok = await this.$refs.exportModal.show(); - if (ok) { - axios.post(event.path, { - project_ids: rows.filter((row) => !row.folder).map((row) => row.id), - project_folder_ids: rows.filter((row) => row.folder).map((row) => row.id) - }).then((response) => { - this.reloadingTable = true; - HelperModule.flashAlertMsg(response.data.flash, 'success'); - }).catch((error) => { - HelperModule.flashAlertMsg(error.response.data.error, 'danger'); - }); + if (event.number_of_projects === 0) { + HelperModule.flashAlertMsg(this.i18n.t('projects.export_projects.zero_projects_flash'), 'danger'); + } else { + this.exportDescription = event.message; + const ok = await this.$refs.exportModal.show(); + if (ok) { + axios.post(event.path, { + project_ids: rows.filter((row) => !row.folder).map((row) => row.id), + project_folder_ids: rows.filter((row) => row.folder).map((row) => row.id) + }).then((response) => { + this.reloadingTable = true; + HelperModule.flashAlertMsg(response.data.message, 'success'); + }).catch((error) => { + HelperModule.flashAlertMsg(error.response.data.error, 'danger'); + }); + } } }, move(event, rows) { diff --git a/app/services/toolbars/projects_service.rb b/app/services/toolbars/projects_service.rb index 3b451d443..e01e4d85f 100644 --- a/app/services/toolbars/projects_service.rb +++ b/app/services/toolbars/projects_service.rb @@ -101,7 +101,7 @@ module Toolbars def export_action return unless @items.all? { |item| item.is_a?(Project) ? can_export_project?(item) : true } - num_projects = @items.length + num_projects = count_of_export_projects limit = TeamZipExport.exports_limit num_of_requests_left = @current_user.exports_left - 1 team = @items.first.team @@ -121,6 +121,7 @@ module Toolbars icon: 'sn-icon sn-icon-export', message: message, path: export_projects_team_path(team), + number_of_projects: num_projects, type: :emit } end @@ -205,5 +206,19 @@ module Toolbars type: :link } end + + def count_of_export_projects + @items.sum do |item| + if item.is_a?(Project) && can_export_project?(item) + 1 + elsif item.respond_to?(:inner_projects) + item.inner_projects.visible_to(@current_user, item.team).count do |project| + can_export_project?(project) + end + else + 0 + end + end + end end end