diff --git a/app/assets/javascripts/my_modules/repositories.js b/app/assets/javascripts/my_modules/repositories.js index 6cf2d443f5..0b25a13801 100644 --- a/app/assets/javascripts/my_modules/repositories.js +++ b/app/assets/javascripts/my_modules/repositories.js @@ -210,6 +210,9 @@ var MyModuleRepositories = (function() { } function renderSimpleTable(tableContainer) { + console.log(tableContainer.attr('data-element')) + window.mountRepositoryTable(tableContainer.attr('data-element')); + return if (SIMPLE_TABLE) SIMPLE_TABLE.destroy(); SIMPLE_TABLE = $(tableContainer).DataTable({ dom: "Rt<'pagination-row'<'version-label'><'pagination-actions'p>>", @@ -265,6 +268,15 @@ var MyModuleRepositories = (function() { } function renderFullViewTable(tableContainer, options = {}) { + renderFullViewRepositoryName( + tableContainer.attr('data-repository-name'), + tableContainer.attr('data-repository-snapshot-created'), + options.assign_mode + ); + updateFullViewRowsCount(tableContainer.attr('data-assigned-items-count')); + window.mountRepositoryTable(); + return + if (FULL_VIEW_TABLE) FULL_VIEW_TABLE.destroy(); SELECTED_ROWS = {}; FULL_VIEW_TABLE_SCROLLBAR = false; @@ -448,7 +460,7 @@ var MyModuleRepositories = (function() { repositoryTable.attr('data-version-label', $(this).data('footer-label')); repositoryTable.attr('data-name-column-id', $(this).data('name-column-id')); repositoryTable.attr('data-stock-management', $(this).data('data-stock-management')); - repositoryContainer.html(repositoryTable); + //repositoryContainer.html(repositoryTable); renderSimpleTable(repositoryTable); }); @@ -591,6 +603,7 @@ var MyModuleRepositories = (function() { }); FULL_VIEW_MODAL.on('hidden.bs.modal', function() { + return FULL_VIEW_MODAL.find('.repository-versions-sidebar').empty(); FULL_VIEW_MODAL.find('.modal-content').removeClass('show-sidebar'); FULL_VIEW_MODAL.find('#showVersionsSidebar').removeClass('active'); diff --git a/app/controllers/my_module_repositories_controller.rb b/app/controllers/my_module_repositories_controller.rb index b2a201544f..69ed0c8d94 100644 --- a/app/controllers/my_module_repositories_controller.rb +++ b/app/controllers/my_module_repositories_controller.rb @@ -11,34 +11,38 @@ class MyModuleRepositoriesController < ApplicationController before_action :check_assign_repository_records_permissions, only: %i(update create) def index_dt - @draw = params[:draw].to_i - per_page = params[:length].to_i < 1 ? Constants::REPOSITORY_DEFAULT_PAGE_SIZE : params[:length].to_i - page = (params[:start].to_i / per_page) + 1 - datatable_service = RepositoryDatatableService.new(@repository, params, current_user, @my_module) - - @datatable_params = { - view_mode: params[:view_mode], - my_module: @my_module, - include_stock_consumption: @repository.has_stock_management? && params[:assigned].present?, - disable_stock_management: true # stock management is always disabled in MyModule context - } - - @all_rows_count = datatable_service.all_count - @columns_mappings = datatable_service.mappings - - if params[:simple_view] - repository_rows = datatable_service.repository_rows - rows_view = 'repository_rows/simple_view_index' - else - repository_rows = datatable_service.repository_rows - .preload(:repository_columns, - :created_by, - repository_cells: { value: @repository.cell_preload_includes }) - rows_view = 'repository_rows/index' - end - @repository_rows = repository_rows.page(page).per(per_page) - - render rows_view + repository_rows = Lists::RepositoryRowsService.new(@repository, params, current_user, @my_module).call + render json: repository_rows, each_serializer: Lists::RepositoryRowSerializer, user: current_user, my_module: @my_module, + meta: pagination_dict(repository_rows) + + # @draw = params[:draw].to_i + # per_page = params[:length].to_i < 1 ? Constants::REPOSITORY_DEFAULT_PAGE_SIZE : params[:length].to_i + # page = (params[:start].to_i / per_page) + 1 + # datatable_service = RepositoryDatatableService.new(@repository, params, current_user, @my_module) + + # @datatable_params = { + # view_mode: params[:view_mode], + # my_module: @my_module, + # include_stock_consumption: @repository.has_stock_management? && params[:assigned].present?, + # disable_stock_management: true # stock management is always disabled in MyModule context + # } + + # @all_rows_count = datatable_service.all_count + # @columns_mappings = datatable_service.mappings + + # if params[:simple_view] + # repository_rows = datatable_service.repository_rows + # rows_view = 'repository_rows/simple_view_index' + # else + # repository_rows = datatable_service.repository_rows + # .preload(:repository_columns, + # :created_by, + # repository_cells: { value: @repository.cell_preload_includes }) + # rows_view = 'repository_rows/index' + # end + # @repository_rows = repository_rows.page(page).per(per_page) + + # render rows_view end def create diff --git a/app/controllers/repository_columns_controller.rb b/app/controllers/repository_columns_controller.rb index 057ff09b66..30c341d8f2 100644 --- a/app/controllers/repository_columns_controller.rb +++ b/app/controllers/repository_columns_controller.rb @@ -17,6 +17,11 @@ def index } end + def index_new + columns = @repository.repository_columns + render json: columns, each_serializer: RepositoryColumnSerializer + end + def new @repository_column = RepositoryColumn.new render json: { diff --git a/app/controllers/repository_rows_controller.rb b/app/controllers/repository_rows_controller.rb index a9c8b11e14..0d365a474c 100644 --- a/app/controllers/repository_rows_controller.rb +++ b/app/controllers/repository_rows_controller.rb @@ -42,6 +42,12 @@ def index render json: { custom_error: I18n.t('repositories.show.repository_filter.errors.value_not_found') } end + def index_new + repository_rows = Lists::RepositoryRowsService.new(@repository, params, current_user).call + render json: repository_rows, each_serializer: Lists::RepositoryRowSerializer, user: current_user, + meta: pagination_dict(repository_rows) + end + def show respond_to do |format| format.html do @@ -339,7 +345,7 @@ def actions_toolbar actions: Toolbars::RepositoryRowsService.new( current_user, - repository_row_ids: params[:repository_row_ids].split(',') + repository_row_ids: JSON.parse(params[:items]).map { |i| i['id'] } ).actions } end diff --git a/app/helpers/my_modules_helper.rb b/app/helpers/my_modules_helper.rb index fecd5cb24a..b61ad09288 100644 --- a/app/helpers/my_modules_helper.rb +++ b/app/helpers/my_modules_helper.rb @@ -64,12 +64,12 @@ def grouped_by_prj_exp(my_modules) end end - def assigned_repository_full_view_table_path(my_module, repository) + def assigned_repository_full_view_table_path(my_module, repository, assigned = nil) if repository.is_a?(RepositorySnapshot) - return full_view_table_my_module_repository_snapshot_path(my_module, repository) + return full_view_table_my_module_repository_snapshot_path(my_module, repository, assigned: assigned) end - full_view_table_my_module_repository_path(my_module, repository) + full_view_table_my_module_repository_path(my_module, repository, assigned: assigned) end def assigned_repository_simple_view_index_path(my_module, repository) diff --git a/app/javascript/packs/vue/repository_table.js b/app/javascript/packs/vue/repository_table.js new file mode 100644 index 0000000000..ee8572702d --- /dev/null +++ b/app/javascript/packs/vue/repository_table.js @@ -0,0 +1,16 @@ +import { createApp } from 'vue/dist/vue.esm-bundler.js'; +import PerfectScrollbar from 'vue3-perfect-scrollbar'; +import RepositoryTable from '../../vue/repository/table.vue'; +import { mountWithTurbolinks } from './helpers/turbolinks.js'; + +window.mountRepositoryTable = (el = '#repositoryTable') => { + const app = createApp(); + app.component('RepositoryTable', RepositoryTable); + app.config.globalProperties.i18n = window.I18n; + app.use(PerfectScrollbar); + if (document.getElementById('repositoryTable') || el !== '#repositoryTable') { + mountWithTurbolinks(app, el); + } +}; + +window.mountRepositoryTable(); diff --git a/app/javascript/vue/experiments/list.vue b/app/javascript/vue/experiments/list.vue index d4b126ed88..52f7d46a48 100644 --- a/app/javascript/vue/experiments/list.vue +++ b/app/javascript/vue/experiments/list.vue @@ -157,9 +157,7 @@ export default { field: 'description', headerName: this.i18n.t('experiments.card.description'), sortable: true, - cellStyle: { 'white-space': 'normal' }, cellRenderer: DescriptionRenderer, - autoHeight: true, minWidth: 110 }); diff --git a/app/javascript/vue/repository/renderers/asset_value.vue b/app/javascript/vue/repository/renderers/asset_value.vue new file mode 100644 index 0000000000..1d0c2aeef6 --- /dev/null +++ b/app/javascript/vue/repository/renderers/asset_value.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/javascript/vue/repository/renderers/assigned.vue b/app/javascript/vue/repository/renderers/assigned.vue new file mode 100644 index 0000000000..a5c96be9a7 --- /dev/null +++ b/app/javascript/vue/repository/renderers/assigned.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/javascript/vue/repository/renderers/checklist_value.vue b/app/javascript/vue/repository/renderers/checklist_value.vue new file mode 100644 index 0000000000..5153e55dd7 --- /dev/null +++ b/app/javascript/vue/repository/renderers/checklist_value.vue @@ -0,0 +1,30 @@ + + + diff --git a/app/javascript/vue/repository/renderers/date_range_value.vue b/app/javascript/vue/repository/renderers/date_range_value.vue new file mode 100644 index 0000000000..992029ce33 --- /dev/null +++ b/app/javascript/vue/repository/renderers/date_range_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/renderers/date_time_range_value.vue b/app/javascript/vue/repository/renderers/date_time_range_value.vue new file mode 100644 index 0000000000..7b18aa5ebe --- /dev/null +++ b/app/javascript/vue/repository/renderers/date_time_range_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/renderers/date_time_value.vue b/app/javascript/vue/repository/renderers/date_time_value.vue new file mode 100644 index 0000000000..b9c148e2ad --- /dev/null +++ b/app/javascript/vue/repository/renderers/date_time_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/renderers/date_value.vue b/app/javascript/vue/repository/renderers/date_value.vue new file mode 100644 index 0000000000..324549c41d --- /dev/null +++ b/app/javascript/vue/repository/renderers/date_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/renderers/list_value.vue b/app/javascript/vue/repository/renderers/list_value.vue new file mode 100644 index 0000000000..b677553464 --- /dev/null +++ b/app/javascript/vue/repository/renderers/list_value.vue @@ -0,0 +1,51 @@ + + + diff --git a/app/javascript/vue/repository/renderers/number_value.vue b/app/javascript/vue/repository/renderers/number_value.vue new file mode 100644 index 0000000000..268c2feac2 --- /dev/null +++ b/app/javascript/vue/repository/renderers/number_value.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/javascript/vue/repository/renderers/renders_mixin.js b/app/javascript/vue/repository/renderers/renders_mixin.js new file mode 100644 index 0000000000..cc59f529e3 --- /dev/null +++ b/app/javascript/vue/repository/renderers/renders_mixin.js @@ -0,0 +1,17 @@ +import { vOnClickOutside } from '@vueuse/components'; + +export default { + props: { + params: { + required: true + } + }, + directives: { + 'click-outside': vOnClickOutside + }, + computed: { + updateUrl() { + return this.params.data.urls.update && !this.params.colDef.readOnly; + } + } +}; diff --git a/app/javascript/vue/repository/renderers/status_value.vue b/app/javascript/vue/repository/renderers/status_value.vue new file mode 100644 index 0000000000..3232eb805b --- /dev/null +++ b/app/javascript/vue/repository/renderers/status_value.vue @@ -0,0 +1,33 @@ + + + diff --git a/app/javascript/vue/repository/renderers/stock_value.vue b/app/javascript/vue/repository/renderers/stock_value.vue new file mode 100644 index 0000000000..c1a99b414e --- /dev/null +++ b/app/javascript/vue/repository/renderers/stock_value.vue @@ -0,0 +1,16 @@ + + + diff --git a/app/javascript/vue/repository/renderers/text_value.vue b/app/javascript/vue/repository/renderers/text_value.vue new file mode 100644 index 0000000000..b1e3eaf383 --- /dev/null +++ b/app/javascript/vue/repository/renderers/text_value.vue @@ -0,0 +1,85 @@ + + + diff --git a/app/javascript/vue/repository/renderers/time_range_value.vue b/app/javascript/vue/repository/renderers/time_range_value.vue new file mode 100644 index 0000000000..6c1165e7c8 --- /dev/null +++ b/app/javascript/vue/repository/renderers/time_range_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/renderers/time_value.vue b/app/javascript/vue/repository/renderers/time_value.vue new file mode 100644 index 0000000000..6d7d6ae4d7 --- /dev/null +++ b/app/javascript/vue/repository/renderers/time_value.vue @@ -0,0 +1,21 @@ + + + diff --git a/app/javascript/vue/repository/shared/date_time.vue b/app/javascript/vue/repository/shared/date_time.vue new file mode 100644 index 0000000000..ac2eefad04 --- /dev/null +++ b/app/javascript/vue/repository/shared/date_time.vue @@ -0,0 +1,28 @@ + + + diff --git a/app/javascript/vue/repository/table.vue b/app/javascript/vue/repository/table.vue new file mode 100644 index 0000000000..81dc3464ca --- /dev/null +++ b/app/javascript/vue/repository/table.vue @@ -0,0 +1,219 @@ + + + diff --git a/app/javascript/vue/shared/datatable/table.vue b/app/javascript/vue/shared/datatable/table.vue index 4c7697200e..3fd45287aa 100644 --- a/app/javascript/vue/shared/datatable/table.vue +++ b/app/javascript/vue/shared/datatable/table.vue @@ -5,6 +5,7 @@ :class="{'overflow-y-hidden pb-20': currentViewRender === 'cards'}" > `e2e-TB-row-${params.data.code || params.data.id}` }; }, diff --git a/app/javascript/vue/shared/select_dropdown.vue b/app/javascript/vue/shared/select_dropdown.vue index 2335eac527..15d6661a20 100644 --- a/app/javascript/vue/shared/select_dropdown.vue +++ b/app/javascript/vue/shared/select_dropdown.vue @@ -48,7 +48,7 @@ -