pg_rails 7.6.38 → 7.6.40
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 +4 -4
- data/pg_associable/app/javascript/modal_controller.js +3 -0
- data/pg_engine/app/views/pg_engine/base/index.html.slim +3 -0
- data/pg_engine/app/views/users/accounts/index.html.slim +1 -0
- data/pg_engine/lib/pg_engine/utils/pg_logger.rb +1 -1
- data/pg_layout/app/assets/stylesheets/sidebar.scss +19 -4
- data/pg_layout/app/lib/navbar.rb +20 -11
- data/pg_layout/app/views/layouts/pg_layout/containerized.html.slim +3 -1
- data/pg_layout/app/views/pg_layout/_sidebar.html.slim +20 -2
- data/pg_layout/app/views/pg_layout/_sidebar_mobile.html.slim +21 -2
- data/pg_rails/lib/version.rb +1 -1
- data/pg_scaffold/lib/generators/pg_rails/system_spec/templates/system_spec.rb +6 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf260a16e98842bebe950a0d4c3253d6c63f2690a922ec767c04d8a99ae7a0f7
|
4
|
+
data.tar.gz: 57dfdff6f3042539d11089edccf7fa32df6c38f86d151256a1536f5efe6d073b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6fa99a2c8881e8f615839ce690c7cb9bf1d3c3ed3cf31f5490641bc253bd2de7b8826ee7c9c2374716dc8b85653db0d066d5bf5dcd4739d41bac81ff2938fbc
|
7
|
+
data.tar.gz: 65c53c5d31a893c6700347d16f9e3b2146a82b21ca2b5905fc214ab551ff844c9b9880118f59a1adc030cd8636fffd44908c5032482e28e3c1501dc14041af9e
|
@@ -39,14 +39,17 @@ export default class extends Controller {
|
|
39
39
|
|
40
40
|
this.element.addEventListener('pg:record-updated', (ev) => {
|
41
41
|
if (ev.data.dataset.inline) {
|
42
|
+
// Is an inline edit submit
|
42
43
|
this.reloadTop()
|
43
44
|
ev.stopPropagation()
|
44
45
|
} else {
|
45
46
|
if (ev.data.dataset.reload) {
|
47
|
+
// Must reload modal. Ie: on discard/undiscard
|
46
48
|
this.reload()
|
47
49
|
this.reloadTop()
|
48
50
|
ev.stopPropagation()
|
49
51
|
} else {
|
52
|
+
// Is a traditional form submit
|
50
53
|
this.back(ev)
|
51
54
|
}
|
52
55
|
}
|
@@ -30,6 +30,9 @@
|
|
30
30
|
i.bi.bi-pencil.lh-1
|
31
31
|
= t('pg_engine.base.index.bulk_edit.link', model: clase_modelo)
|
32
32
|
|
33
|
+
/ if turbo stream? && Current.account.present?
|
34
|
+
/ = turbo_stream_from Current.account, @clase_modelo.model_name.plural
|
35
|
+
|
33
36
|
- if action_name == 'archived'
|
34
37
|
.text-center.p-3.text-warning-emphasis.border-bottom
|
35
38
|
div
|
@@ -55,7 +55,7 @@ module PgEngine
|
|
55
55
|
def notify_all(mensaje, type)
|
56
56
|
send_to_logger(mensaje, type)
|
57
57
|
send_to_rollbar(mensaje, type)
|
58
|
-
send_to_stdout(mensaje, type) if ENV.fetch('LOG_TO_STDOUT', nil)
|
58
|
+
send_to_stdout(mensaje, type) if ENV.fetch('LOG_TO_STDOUT', nil) || (Rails.env.test? && type == :debug)
|
59
59
|
save_internal(mensaje, type) if Rails.env.test?
|
60
60
|
nil
|
61
61
|
end
|
@@ -47,10 +47,25 @@ $chevron-color: 200,200,200,.5;
|
|
47
47
|
// background-color: #d2f4ea;
|
48
48
|
}
|
49
49
|
|
50
|
-
.
|
50
|
+
.navbar__nav-button.active {
|
51
51
|
--bs-link-color-rgb: white!important;
|
52
52
|
background-color: tint-color($primary, 17%);
|
53
53
|
}
|
54
|
+
|
55
|
+
.navbar__nav-button[aria-expanded=true] {
|
56
|
+
font-weight: bold;
|
57
|
+
background-color: tint-color($primary, 5%);
|
58
|
+
}
|
59
|
+
|
60
|
+
// Child entries
|
61
|
+
#sidebar, .offcanvas {
|
62
|
+
.collapse-inner {
|
63
|
+
background-color: tint-color($primary, 5%);
|
64
|
+
padding-bottom: 0.1em;
|
65
|
+
padding-top: 0.1em;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
54
69
|
// Los small-items están deprecados
|
55
70
|
#sidebar {
|
56
71
|
&.opened {
|
@@ -100,7 +115,7 @@ $chevron-color: 200,200,200,.5;
|
|
100
115
|
}
|
101
116
|
}
|
102
117
|
|
103
|
-
.
|
118
|
+
.navbar__nav-button {
|
104
119
|
padding: 0.4em 1.7em;
|
105
120
|
width: 100%;
|
106
121
|
text-align: right;
|
@@ -109,11 +124,11 @@ $chevron-color: 200,200,200,.5;
|
|
109
124
|
.offcanvas-body {
|
110
125
|
padding: 0!important;
|
111
126
|
}
|
112
|
-
.
|
127
|
+
.navbar__nav-button:hover {
|
113
128
|
background-color: tint-color($primary, 20%);
|
114
129
|
}
|
115
130
|
|
116
|
-
.offcanvas .
|
131
|
+
.offcanvas .navbar__nav-button {
|
117
132
|
padding: 0.7em 1.7em;
|
118
133
|
text-align: right;
|
119
134
|
}
|
data/pg_layout/app/lib/navbar.rb
CHANGED
@@ -43,31 +43,40 @@ class Navbar
|
|
43
43
|
bar_data = @yaml_data[key]
|
44
44
|
return [] if bar_data.blank?
|
45
45
|
|
46
|
-
# rubocop:disable Security/Eval
|
47
46
|
# rubocop:disable Style/MultilineBlockChain:
|
48
47
|
orig_idx = 0
|
49
48
|
bar_data.map do |item|
|
50
49
|
orig_idx += 1
|
51
|
-
|
52
|
-
title: item['name'],
|
53
|
-
attributes: item['attributes']&.html_safe,
|
54
|
-
path: eval(item['path']),
|
55
|
-
show: item['policy'] ? eval(item['policy']) : true,
|
56
|
-
priority: item['priority'] || 999_999,
|
57
|
-
orig_idx:
|
58
|
-
}
|
50
|
+
evaluate_node(item, orig_idx)
|
59
51
|
end.sort_by { |a| [a[:priority], a[:orig_idx]] }
|
60
|
-
# rubocop:enable Security/Eval
|
61
52
|
# rubocop:enable Style/MultilineBlockChain:
|
62
53
|
end
|
63
54
|
|
55
|
+
def evaluate_node(item, orig_idx = nil)
|
56
|
+
# rubocop:disable Security/Eval
|
57
|
+
aux = {
|
58
|
+
title: item['name'],
|
59
|
+
attributes: item['attributes']&.html_safe,
|
60
|
+
path: item['path'].present? ? eval(item['path']) : nil,
|
61
|
+
show: item['policy'] ? eval(item['policy']) : true,
|
62
|
+
priority: item['priority'] || 999_999,
|
63
|
+
orig_idx:
|
64
|
+
}
|
65
|
+
# rubocop:enable Security/Eval
|
66
|
+
|
67
|
+
if item[:children].present?
|
68
|
+
aux[:children] = item[:children].map { |it| evaluate_node(it) }
|
69
|
+
end
|
70
|
+
|
71
|
+
aux
|
72
|
+
end
|
73
|
+
|
64
74
|
def all_children_hidden?(entry)
|
65
75
|
entry[:children].all? { |child| child[:show] == false }
|
66
76
|
end
|
67
77
|
|
68
78
|
def any_children_active?(entry, request)
|
69
79
|
entry[:children].any? { |child| active_entry?(child, request) }
|
70
|
-
true
|
71
80
|
# TODO: quitar
|
72
81
|
end
|
73
82
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
- content_for :content do
|
2
2
|
- klass = modal_targeted? ? '' : (yield(:container_class).presence || 'container-fluid')
|
3
|
-
|
3
|
+
- padding_top_class = yield(:padding_top_class).presence || 'pt-3'
|
4
|
+
|
5
|
+
div class="#{padding_top_class} #{klass}" style=yield(:container_style)
|
4
6
|
= content_for?(:containerized_content) ? yield(:containerized_content) : yield
|
5
7
|
|
6
8
|
= render template: 'layouts/pg_layout/base'
|
@@ -5,6 +5,24 @@ div id="sidebar" class="#{@navbar_opened_class} flex-shrink-0 d-none d-#{@breakp
|
|
5
5
|
ul.list-unstyled.ps-0.mt-5
|
6
6
|
- @navbar.sidebar.each do |entry|
|
7
7
|
- next if @navbar.hide_entry?(entry)
|
8
|
+
- active = @navbar.active_entry?(entry, request)
|
8
9
|
li.mb-1
|
9
|
-
|
10
|
-
= entry[:
|
10
|
+
- if entry[:children].present?
|
11
|
+
- entry_id = "nav-entry-#{entry[:orig_idx]}"
|
12
|
+
a class="d-inline-flex text-decoration-none navbar__nav-button #{ active ? '' : 'collapsed'} #{entry[:attributes]}" data-bs-toggle="collapse" href="##{entry_id}" role="button" aria-expanded="#{ active ? 'true' : 'false'}" aria-controls=entry_id
|
13
|
+
= entry[:title]
|
14
|
+
- if active
|
15
|
+
span.bi.bi-chevron-down.ms-1.align-text-bottom style="font-size: 0.7em"
|
16
|
+
- else
|
17
|
+
span.bi.bi-chevron-right.ms-1.align-text-bottom style="font-size: 0.7em"
|
18
|
+
|
19
|
+
.collapse data-turbo-temporary=('true' unless active) class="#{ 'show' if active}" id=entry_id
|
20
|
+
.collapse-inner
|
21
|
+
- entry[:children].each do |child|
|
22
|
+
- next if @navbar.hide_entry?(child)
|
23
|
+
.mb-1
|
24
|
+
a href=child[:path] class="d-inline-flex text-decoration-none navbar__nav-button #{@navbar.active_entry?(child, request) ? 'active' : ''} #{child[:attributes]}"
|
25
|
+
= child[:title]
|
26
|
+
- else
|
27
|
+
a href=entry[:path] class="d-inline-flex text-decoration-none navbar__nav-button #{active ? 'active' : ''} #{entry[:attributes]}"
|
28
|
+
= entry[:title]
|
@@ -9,9 +9,28 @@
|
|
9
9
|
ul.list-unstyled.mt-4
|
10
10
|
- @navbar.sidebar.each do |entry|
|
11
11
|
- next if @navbar.hide_entry?(entry)
|
12
|
+
- active = @navbar.active_entry?(entry, request)
|
12
13
|
li
|
13
|
-
|
14
|
-
= entry[:
|
14
|
+
- if entry[:children].present?
|
15
|
+
- entry_id = "nav-entry-#{entry[:orig_idx]}"
|
16
|
+
|
17
|
+
a class="d-inline-flex text-decoration-none navbar__nav-button text-light #{ active ? '' : 'collapsed'} #{entry[:attributes]}" data-bs-toggle="collapse" href="##{entry_id}" role="button" aria-expanded="#{ active ? 'true' : 'false'}" aria-controls=entry_id
|
18
|
+
= entry[:title]
|
19
|
+
- if active
|
20
|
+
span.bi.bi-chevron-down.ms-1.align-text-bottom style="font-size: 0.7em"
|
21
|
+
- else
|
22
|
+
span.bi.bi-chevron-right.ms-1.align-text-bottom style="font-size: 0.7em"
|
23
|
+
|
24
|
+
.collapse data-turbo-temporary=('true' unless active) class="#{ 'show' if active}" id=entry_id
|
25
|
+
.collapse-inner
|
26
|
+
- entry[:children].each do |child|
|
27
|
+
- next if @navbar.hide_entry?(child)
|
28
|
+
.mb-1
|
29
|
+
a href=child[:path] class="d-inline-flex text-decoration-none navbar__nav-button text-light #{@navbar.active_entry?(child, request) ? 'active' : ''} #{child[:attributes]}"
|
30
|
+
= child[:title]
|
31
|
+
- else
|
32
|
+
a href=entry[:path] class="navbar__nav-button pe-4 text-light #{active ? 'active' : ''} #{entry[:attributes]}"
|
33
|
+
= entry[:title]
|
15
34
|
css:
|
16
35
|
.offcanvas a { text-decoration: none; }
|
17
36
|
.offcanvas li { xmargin-top: 0.75em; }
|
data/pg_rails/lib/version.rb
CHANGED
@@ -8,12 +8,15 @@ require 'rails_helper'
|
|
8
8
|
#
|
9
9
|
# DRIVER=selenium BROWSER=firefox rspec
|
10
10
|
describe '<%= name %>' do
|
11
|
+
# include ActionView::RecordIdentifier
|
12
|
+
|
11
13
|
subject(:visitar) do
|
12
|
-
|
14
|
+
path = tpath("/u/t/some_tenanted_path", query_string: false)
|
15
|
+
visit path
|
13
16
|
end
|
14
17
|
|
15
|
-
let(:logged_user) { create :user }
|
16
|
-
let(:account) { ActsAsTenant.current_tenant }
|
18
|
+
let(:logged_user) { create :user, :owner }
|
19
|
+
# let(:account) { ActsAsTenant.current_tenant }
|
17
20
|
|
18
21
|
before do
|
19
22
|
login_as logged_user
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.6.
|
4
|
+
version: 7.6.40
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martín Rosso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-04-
|
11
|
+
date: 2025-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|