cm-admin 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22c229302e864612a0df2da35d51c384510fed62e4fd791e154537d2dccd7584
4
- data.tar.gz: 3f7a97d73f9107a9a203b9ca8418bdfc33ced87d34c52d50ce998a38c50afd77
3
+ metadata.gz: 2f2cbd6a0eb88a1b484b7dd22581707ba8ace583b855e7d8fddc70a7f707c982
4
+ data.tar.gz: 3e16b540f328160794ee09d1f2851bd9b017265a033806c56f76902eb8060cb1
5
5
  SHA512:
6
- metadata.gz: 46524b7ea8d7c189c3c08e54d457ec69839e72acdb66304b9485413a3b629b1e2d81b1a0a3d296b505030b17d7f4e5be0a9bbf0f3c5d759a66758b51095b94e7
7
- data.tar.gz: ee892966943c3407da7e26918c6ba4f6943174094c9a4b915c63d5874397c1a349c69607289953995f71acf242d64315e3c0ff33c53ec364a5447a0ad6c1ae10
6
+ metadata.gz: f75af6089fa15c0d7e3e9d914a3aa2c2c2248b9ae45bc833238677de6c82761717beca49515f0ade78890e9495f1c714e80e9de4c9abb116b6c62f576fba8cc8
7
+ data.tar.gz: d22b094320cd0a841675b222c20529dc6ab6eb0e136afd73a31ac0bd877714c01cd135a2ac0dd68ee47dbbb0a997877a2f3eb5a9db18e6ff7d7984ac25c4a768
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cm-admin (4.3.0)
4
+ cm-admin (4.4.0)
5
5
  caxlsx_rails
6
6
  cocoon (~> 1.2.15)
7
7
  csv (>= 3.3.0)
@@ -9,4 +9,4 @@ import "./form_validation.js";
9
9
  import "./quick_search.js";
10
10
  import "./custom.js";
11
11
  import "./kanban.js";
12
- import "./custom_action";
12
+ import "./custom_action";
@@ -1,4 +1,5 @@
1
1
  import * as bootstrap from "bootstrap";
2
+ import { initializeComponents } from "./initialize_components";
2
3
  window.bootstrap = bootstrap;
3
4
 
4
5
  export function handleFetchModalClick() {
@@ -21,6 +22,7 @@ export function handleFetchModalClick() {
21
22
  modalContainer.children().first()
22
23
  );
23
24
  actionModal.show();
25
+ initializeComponents();
24
26
  },
25
27
  error: function (error) {
26
28
  console.error("Error:", error);
@@ -0,0 +1,31 @@
1
+ import LocalTime from "./local-time"
2
+ import * as bootstrap from "bootstrap";
3
+ window.bootstrap = bootstrap;
4
+
5
+
6
+ export function initializeComponents() {
7
+ $(".select-2").select2({
8
+ theme: "bootstrap-5",
9
+ });
10
+ flatpickr("[data-behaviour='date-only']", {
11
+ dateFormat: "d-m-Y",
12
+ });
13
+ flatpickr("[data-behaviour='date-time']", {
14
+ enableTime: true,
15
+ });
16
+ flatpickr("[data-behaviour='filter'][data-filter-type='date']", {
17
+ mode: "range",
18
+ });
19
+ var el = document.getElementsByClassName("columns-list");
20
+ if (el[0]) {
21
+ Sortable.create(el[0], {
22
+ handle: ".dragger",
23
+ animation: 150,
24
+ });
25
+ }
26
+
27
+ var headerElemHeight = $(".page-top-bar").height() + 64;
28
+ var calculatedHeight = "calc(100vh - " + headerElemHeight + "px" + ")";
29
+ $(".table-wrapper").css("maxHeight", calculatedHeight);
30
+ LocalTime.start();
31
+ }
@@ -1,5 +1,6 @@
1
1
  // This file is shared between rails 6 and 7 version
2
- import LocalTime from "./local-time";
2
+ import { initializeComponents } from "./initialize_components";
3
+
3
4
 
4
5
  $(document).on(
5
6
  "keypress keyup blur",
@@ -41,11 +42,13 @@ $(document).on("mouseleave", ".row-action-cell", function () {
41
42
  });
42
43
 
43
44
  $(document).on("click", '[data-behaviour="offcanvas"]', function (e) {
45
+ e.preventDefault();
44
46
  const drawerFetchUrl = $(this).attr("data-drawer-fetch-url");
45
47
  const drawerContainer = $("[data-behaviour='cm-drawer-container']");
46
48
 
47
49
  if (!drawerFetchUrl || !drawerContainer) return;
48
50
 
51
+
49
52
  $.ajax({
50
53
  url: drawerFetchUrl,
51
54
  method: "GET",
@@ -64,7 +67,7 @@ $(document).on("click", '[data-behaviour="offcanvas"]', function (e) {
64
67
  handleDrawerFormSubmission(drawerForm);
65
68
  },
66
69
  error: function (error) {
67
- console.error("Error:", error);
70
+ console.log("Error:", error);
68
71
  },
69
72
  });
70
73
  });
@@ -227,29 +230,4 @@ var replaceAccordionTitle = function (element) {
227
230
  initializeComponents();
228
231
  };
229
232
 
230
- export function initializeComponents() {
231
- $(".select-2").select2({
232
- theme: "bootstrap-5",
233
- });
234
- flatpickr("[data-behaviour='date-only']", {
235
- dateFormat: "d-m-Y",
236
- });
237
- flatpickr("[data-behaviour='date-time']", {
238
- enableTime: true,
239
- });
240
- flatpickr("[data-behaviour='filter'][data-filter-type='date']", {
241
- mode: "range",
242
- });
243
- var el = document.getElementsByClassName("columns-list");
244
- if (el[0]) {
245
- Sortable.create(el[0], {
246
- handle: ".dragger",
247
- animation: 150,
248
- });
249
- }
250
233
 
251
- var headerElemHeight = $(".page-top-bar").height() + 64;
252
- var calculatedHeight = "calc(100vh - " + headerElemHeight + "px" + ")";
253
- $(".table-wrapper").css("maxHeight", calculatedHeight);
254
- LocalTime.start();
255
- }
@@ -15,16 +15,24 @@ module CmAdmin
15
15
  records = "CmAdmin::#{@model.name}PolicyIndexScope".constantize.new(Current.user, @model.name.constantize).resolve
16
16
  records = records.includes(@current_action.eager_load_associations) if @current_action.eager_load_associations.present?
17
17
  records = apply_scopes(records)
18
- @ar_object = if %w[table card].include?(params[:view_type]) || %i[table card].include?(@current_action.view_type)
19
- filter_by(params, records, filter_params: @model.filter_params(params))
20
- elsif (request.xhr? && params[:view_type] == 'kanban') || @current_action.view_type == :kanban
18
+ @ar_object = if params[:view_type] == 'kanban' || @current_action.view_type == :kanban
21
19
  kanban_filter_by(params, records, @model.filter_params(params))
22
20
  else
23
21
  filter_by(params, records, filter_params: @model.filter_params(params))
24
22
  end
25
23
  respond_to do |format|
26
- if request.xhr? && (params[:view_type] == 'kanban' || @current_action.view_type == :kanban)
27
- format.json { render json: @ar_object }
24
+ if params[:view_type] == 'kanban' || @current_action.view_type == :kanban
25
+ if request.xhr?
26
+ format.json { render json: @ar_object }
27
+ else
28
+ format.html { render '/cm_admin/main/' + action_name }
29
+ end
30
+ elsif params[:view_type] == 'card' || @current_action.view_type == :card
31
+ if request.xhr?
32
+ format.html { render partial: "/cm_admin/#{@model.name.underscore}/card" }
33
+ else
34
+ format.html { render '/cm_admin/main/' + action_name }
35
+ end
28
36
  elsif request.xhr?
29
37
  format.html { render partial: '/cm_admin/main/table' }
30
38
  else
@@ -224,10 +232,18 @@ module CmAdmin
224
232
  @model = Model.find_by({ name: controller_name.classify })
225
233
  return if @model.blank?
226
234
 
227
- action_page_title = CmAdmin::Models::Action.find_by(@model, name: 'new').page_title
228
- drawer_title = action_page_title.presence || "New #{@model&.formatted_name}"
229
- @ar_object = @model.ar_model.new
230
- render partial: 'layouts/drawer', locals: { drawer_title:, from_field_id: params[:from_field_id] }
235
+ if params[:action_name] == 'show'
236
+ @action = CmAdmin::Models::Action.find_by(@model, name: 'show')
237
+ scoped_model = "CmAdmin::#{@model.name}Policy::ShowScope".constantize.new(Current.user, @model.name.constantize).resolve
238
+ @ar_object = fetch_ar_object(scoped_model, params[:ar_object_id])
239
+ @alerts = @model.alerts
240
+ render partial: 'layouts/drawer_show'
241
+ else
242
+ action_page_title = CmAdmin::Models::Action.find_by(@model, name: 'new').page_title
243
+ drawer_title = action_page_title.presence || "New #{@model&.formatted_name}"
244
+ @ar_object = @model.ar_model.new
245
+ render partial: 'layouts/drawer_form', locals: { drawer_title:, from_field_id: params[:from_field_id] }
246
+ end
231
247
  end
232
248
 
233
249
  def get_nested_table_fields(fields)
@@ -1,5 +1,5 @@
1
1
  .kanban-container
2
- - column_names = @ar_object.data.keys
2
+ - column_names = @model.ar_model.send(params[:kanban_column_name]&.pluralize || @current_action.kanban_attr[:column_name].pluralize).keys
3
3
  = hidden_field_tag :kanban_column_names, column_names
4
4
  - column_names.each do |column_name|
5
5
  .kanban-list class="#{column_name}"
@@ -11,7 +11,7 @@
11
11
 
12
12
  .pagination-bar.kanban-pagination
13
13
  .btn.btn-primary.kanban-show-more data-page=1 Show more
14
- = render partial: 'cm_admin/main/show_as_drawer'
14
+ / = render partial: 'cm_admin/main/show_as_drawer'
15
15
 
16
16
  = export_modal(@model)
17
17
  = manage_column_pop_up(@model)
@@ -1,5 +1,6 @@
1
1
  .show-page__header.page-top-bar
2
- == render 'cm_admin/main/top_navbar'
2
+ - if defined?(via_xhr) && via_xhr == false
3
+ == render 'cm_admin/main/top_navbar'
3
4
  == render 'cm_admin/main/tabs', via_xhr: defined?(via_xhr) ? via_xhr : false
4
5
  .show-page__inner
5
6
  - unless @alerts.empty?
@@ -43,6 +43,8 @@
43
43
  td.text-ellipsis data-field-type="#{column.field_type || 'string'}"
44
44
  - if index == 0 && is_show_action_available(@model, ar_object) && !([:link, :custom, :attachment, :drawer, :image].include?(column.field_type))
45
45
  = link_to ar_object.send(column.field_name), cm_admin.send("cm_show_#{ar_object.model_name.singular}_path", ar_object)
46
+ / - drawer_fetch_url = "#{CmAdmin::Engine.mount_path}/#{@model.name.tableize}/fetch_drawer?ar_object_id=#{ar_object.id}&action_name=show"
47
+ / = link_to ar_object.send(column.field_name), '', data: { behaviour: "offcanvas", drawer_fetch_url: drawer_fetch_url, id: ar_object.id, action_name: 'show' }
46
48
  - else
47
49
  = show_field_value(ar_object, column)
48
50
  - if column.field_type == :drawer
@@ -1,4 +1,6 @@
1
- = hidden_field_tag :view_type, (@current_action.view_type || params[:view_type])
1
+
2
+ = hidden_field_tag :view_type, (params[:view_type] || @current_action.view_type)
3
+ .drawer-container data-behaviour="cm-drawer-container"
2
4
  .cm-index-page.cm-page-container
3
5
  .sticky-container.page-top-bar
4
6
  == render 'cm_admin/main/top_navbar'
@@ -13,9 +15,13 @@
13
15
  .cm-index-page__table-container
14
16
  - if @action.partial
15
17
  == render @action.partial
16
- - elsif params[:view_type] == 'table' || @current_action.view_type == :table
17
- == render 'cm_admin/main/table'
18
- - elsif params[:view_type] == 'card' || @current_action.view_type == :card
19
- == render "cm_admin/#{@model.name.underscore}/card"
20
18
  - elsif params[:view_type] == 'kanban' || @current_action.view_type == :kanban
21
19
  == render 'cm_admin/main/kanban'
20
+ - elsif params[:view_type] == 'card' || @current_action.view_type == :card
21
+ == render "cm_admin/#{@model.name.underscore}/card"
22
+ - elsif params[:view_type] == 'table' || @current_action.view_type == :table
23
+ == render 'cm_admin/main/table'
24
+
25
+ = column_pop_up(@model)
26
+ = manage_column_pop_up(@model)
27
+
@@ -1,2 +1,2 @@
1
1
  .show-page
2
- = render partial: 'cm_admin/main/show_content', via_xhr: false
2
+ = render partial: 'cm_admin/main/show_content', locals: { via_xhr: false }
@@ -0,0 +1,9 @@
1
+ .offcanvas.cm-drawer tabindex="-1" id="cm-drawer" aria-labelledby="offcanvasExampleLabel" data-behavior="cm-drawer" data-from-field-id="#{params[:from_field_id]}"
2
+ .drawer-btn-group
3
+ button.drawer-nav-btn type="button" data-bs-dismiss="offcanvas" aria-label="Close"
4
+ i.fa-solid.fa-x
5
+ .offcanvas-header
6
+ h4 = @action.page_title.present? ? @ar_object.send(@action.page_title) : ''
7
+ .offcanvas-body
8
+ .show-page
9
+ = render partial: 'cm_admin/main/show_content', via_xhr: true
@@ -69,5 +69,4 @@ html
69
69
  div data-behaviour="flash-container"
70
70
  = render 'layouts/cm_flash_message'
71
71
  div data-behaviour="export-modal-container"
72
- - unless (@current_action&.view_type == :kanban || params[:view_type] == 'kanban')
73
- = render 'layouts/custom_action_modals'
72
+ = render 'layouts/custom_action_modals'
@@ -1,3 +1,3 @@
1
1
  module CmAdmin
2
- VERSION = '4.3.0'
2
+ VERSION = '4.4.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cm-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael
@@ -14,7 +14,7 @@ authors:
14
14
  autorequire:
15
15
  bindir: exe
16
16
  cert_chain: []
17
- date: 2024-12-18 00:00:00.000000000 Z
17
+ date: 2024-12-24 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: caxlsx_rails
@@ -213,6 +213,7 @@ files:
213
213
  - app/assets/javascripts/cm_admin/exports.js
214
214
  - app/assets/javascripts/cm_admin/filters.js
215
215
  - app/assets/javascripts/cm_admin/form_validation.js
216
+ - app/assets/javascripts/cm_admin/initialize_components.js
216
217
  - app/assets/javascripts/cm_admin/kanban.js
217
218
  - app/assets/javascripts/cm_admin/local-time.js
218
219
  - app/assets/javascripts/cm_admin/quick_search.js
@@ -410,7 +411,8 @@ files:
410
411
  - app/views/layouts/_custom_action_modal.html.slim
411
412
  - app/views/layouts/_custom_action_modals.html.slim
412
413
  - app/views/layouts/_destroy_action_modal.html.slim
413
- - app/views/layouts/_drawer.html.slim
414
+ - app/views/layouts/_drawer_form.html.slim
415
+ - app/views/layouts/_drawer_show.html.slim
414
416
  - app/views/layouts/_left_sidebar_nav.html.slim
415
417
  - app/views/layouts/_quick_links.html.slim
416
418
  - app/views/layouts/cm_admin.html.slim