cm-admin 0.6.3 → 0.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/app/assets/stylesheets/cm_admin/base/table.scss +7 -7
- data/app/assets/stylesheets/cm_admin/components/_status-tag.scss +3 -17
- data/app/javascript/packs/cm_admin/scaffolds.js +8 -5
- data/app/views/cm_admin/main/_associated_table.html.slim +29 -24
- data/app/views/cm_admin/main/_table.html.slim +15 -8
- data/app/views/cm_admin/main/show.html.slim +9 -6
- data/app/views/layouts/{_flash_message.html.slim → _cm_flash_message.html.slim} +1 -1
- data/app/views/layouts/cm_admin.html.slim +1 -4
- data/lib/cm_admin/model.rb +12 -5
- data/lib/cm_admin/models/action.rb +2 -1
- data/lib/cm_admin/models/column.rb +2 -1
- data/lib/cm_admin/models/dsl_method.rb +2 -2
- data/lib/cm_admin/models/field.rb +6 -1
- data/lib/cm_admin/version.rb +1 -1
- data/lib/cm_admin/view_helpers/field_display_helper.rb +2 -1
- data/lib/cm_admin/view_helpers/form_field_helper.rb +8 -8
- data/lib/generators/cm_admin/install_generator.rb +1 -1
- data/lib/generators/cm_admin/policy_generator.rb +2 -0
- data/lib/generators/cm_admin/templates/cm_admin_initializer.rb +1 -1
- data/lib/generators/cm_admin/templates/policy.rb +1 -1
- data/package.json +1 -1
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- data/yarn.lock +4 -4
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0644c45e1ae1e807b94e66341d607778f8ca9fbe456a1d741d34db0cf5489550
|
4
|
+
data.tar.gz: 3cb2975b1c28a7cf6e150c16bb4e235750e02fb2ce39df110a4b2bb0b17f6a7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 412c8867112a3241b3e71b9049473f437bcc99950cf9c286495d5bd85b25459446a3465d150703cf4056c49daadfa1dd556eb0172e873cab2d665090c9d9c66c
|
7
|
+
data.tar.gz: ec362ed640f95dd335b653d6040c904d40b53fb941eeb7f0eeefe94bf3d38910fdbdf5a00fb68b5b303ab15b578b680d0ed79cd764748813ef70b3556d138666
|
data/Gemfile.lock
CHANGED
@@ -18,7 +18,6 @@
|
|
18
18
|
|
19
19
|
&__table-container {
|
20
20
|
padding: 20px;
|
21
|
-
height: 100%;
|
22
21
|
}
|
23
22
|
|
24
23
|
.admin-table {
|
@@ -77,13 +76,14 @@
|
|
77
76
|
overflow: auto;
|
78
77
|
margin-top: 40px;
|
79
78
|
margin-bottom: 50px;
|
80
|
-
height:
|
79
|
+
height: calc(100vh - 365px);
|
81
80
|
.cm-table {
|
82
81
|
table-layout: fixed;
|
83
82
|
position: relative;
|
84
83
|
min-width: fit-content;
|
85
84
|
border-collapse: collapse;
|
86
85
|
border: 1px solid $grey-lighter-clr;
|
86
|
+
border-top-width: 0;
|
87
87
|
border-radius: $radius-8;
|
88
88
|
&__header {
|
89
89
|
.header-row {
|
@@ -91,6 +91,7 @@
|
|
91
91
|
width: 100%;
|
92
92
|
position: relative;
|
93
93
|
box-shadow: inset 0px -1px 0px rgba(148, 151, 155, 0.15);
|
94
|
+
border-top: 1px solid $grey-lighter-clr;
|
94
95
|
th {
|
95
96
|
@include font($size: $t6-text, $color: $ink-lighter-clr, $weight: bold);
|
96
97
|
text-transform: uppercase;
|
@@ -129,7 +130,7 @@
|
|
129
130
|
// height: 335px;
|
130
131
|
display: block;
|
131
132
|
position: relative;
|
132
|
-
width: 100%;
|
133
|
+
width: 100%;
|
133
134
|
.body-row {
|
134
135
|
border-bottom: 1.21px solid rgb(240, 239, 239);
|
135
136
|
td:nth-child(2){
|
@@ -138,7 +139,7 @@
|
|
138
139
|
z-index: 2;
|
139
140
|
background-color: #fff;
|
140
141
|
}
|
141
|
-
|
142
|
+
|
142
143
|
&:nth-last-child(1) {
|
143
144
|
box-shadow: none;
|
144
145
|
}
|
@@ -190,7 +191,6 @@
|
|
190
191
|
justify-content: center;
|
191
192
|
height: 100%;
|
192
193
|
.popup-card {
|
193
|
-
width:fit-content;
|
194
194
|
.popup-option {
|
195
195
|
a {
|
196
196
|
font-weight: 500;
|
@@ -210,8 +210,8 @@
|
|
210
210
|
}
|
211
211
|
}
|
212
212
|
.cm-table > thead {
|
213
|
-
position:sticky;
|
214
|
-
top:0;
|
213
|
+
position: sticky;
|
214
|
+
top: 0;
|
215
215
|
background-color: #fff;
|
216
216
|
z-index: 3;
|
217
217
|
}
|
@@ -4,26 +4,12 @@
|
|
4
4
|
font-size: $t4-text;
|
5
5
|
line-height: 22px;
|
6
6
|
padding: 4px;
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
}
|
11
|
-
&.default-1 {
|
7
|
+
color: $primary-text-clr;
|
8
|
+
background: $grey-lighter-clr;
|
9
|
+
&.success {
|
12
10
|
color: $green-regular-clr;
|
13
11
|
background: $green-lightest-clr;
|
14
12
|
}
|
15
|
-
&.default-2 {
|
16
|
-
color: $yellow-regular-clr;
|
17
|
-
background: $yellow-lightest-clr;
|
18
|
-
}
|
19
|
-
&.default-3 {
|
20
|
-
color: $red-regular-clr;
|
21
|
-
background: $red-lightest-clr;
|
22
|
-
}
|
23
|
-
&.default-4 {
|
24
|
-
color: $blue-regular-clr;
|
25
|
-
background: $blue-lightest-clr;
|
26
|
-
}
|
27
13
|
}
|
28
14
|
|
29
15
|
.filter-chip {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
$(document).
|
1
|
+
$(document).on('turbolinks:load', function () {
|
2
2
|
$('.select-2').select2();
|
3
3
|
flatpickr("[data-behaviour='date-only']", {})
|
4
4
|
flatpickr("[data-behaviour='date-time']", {
|
@@ -7,10 +7,13 @@ $(document).ready(function(e) {
|
|
7
7
|
flatpickr("[data-behaviour='filter'][data-filter-type='date']", {
|
8
8
|
mode: 'range'
|
9
9
|
})
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
var el = document.getElementsByClassName('columns-list')
|
11
|
+
if(el[0]) {
|
12
|
+
Sortable.create(el[0],{
|
13
|
+
handle: '.dragger',
|
14
|
+
animation: 150
|
15
|
+
});
|
16
|
+
}
|
14
17
|
});
|
15
18
|
|
16
19
|
$(document).on("keypress keyup blur", "[data-behaviour='decimal-only'], [data-behaviour='filter'][data-filter-type='range']", function (e) {
|
@@ -12,38 +12,43 @@
|
|
12
12
|
table.cm-table
|
13
13
|
thead.cm-table__header
|
14
14
|
tr.header-row
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
// To be added once bulk-select is finalized
|
16
|
+
/ th.check-box-space
|
17
|
+
/ span
|
18
|
+
/ input.cm-checkbox type="checkbox"
|
18
19
|
- @model.available_fields[@action.name.to_sym].each do |column|
|
19
20
|
th = column.header
|
20
21
|
tbody.cm-table__body
|
21
22
|
- @associated_ar_object.data.each do |ar_object|
|
22
23
|
tr.body-row
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
// To be added once bulk-select is finalized
|
25
|
+
/ td.check-box-space
|
26
|
+
/ span
|
27
|
+
/ input.cm-checkbox type="checkbox"
|
26
28
|
- @model.available_fields[@action.name.to_sym].each do |column|
|
27
29
|
td
|
28
30
|
span class="#{column.cm_css_class} text-ellipsis" = show_field_value(ar_object, column)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
-
|
46
|
-
|
31
|
+
- associated_model_actions = @associated_model && @associated_model.available_actions.select{|act| act if act.route_type == 'member'}
|
32
|
+
- if associated_model_actions.present?
|
33
|
+
td.row-action-cell
|
34
|
+
.row-action-tool
|
35
|
+
button.secondary-btn.tool-btn type="button"
|
36
|
+
span
|
37
|
+
i.fa.fa-bars.bolder
|
38
|
+
span
|
39
|
+
i.fa.fa-angle-down
|
40
|
+
.popup-card.table-export-popup.hidden
|
41
|
+
// To be added once the associated model has edit actions
|
42
|
+
/ .popup-option
|
43
|
+
/ a href="#{page_url('edit', ar_object)}"
|
44
|
+
/ | Edit
|
45
|
+
- associated_model_actions.each do |custom_action|
|
46
|
+
- if custom_action.display_if.call(ar_object)
|
47
|
+
.popup-option
|
48
|
+
- if custom_action.display_type == :button
|
49
|
+
= link_to custom_action.name.titleize, custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb
|
50
|
+
- elsif custom_action.display_type == :modal
|
51
|
+
= link_to custom_action.name.titleize, '', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal-#{ar_object.id.to_s}" }
|
47
52
|
|
48
53
|
.cm-pagination
|
49
54
|
.cm-pagination__lhs Showing #{@associated_ar_object.pagy.from} to #{@associated_ar_object.pagy.to} out of #{@associated_ar_object.pagy.count}
|
@@ -11,17 +11,18 @@
|
|
11
11
|
table.cm-table
|
12
12
|
thead.cm-table__header
|
13
13
|
tr.header-row
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
// Select all checkbox feature to be added later
|
15
|
+
/ th.check-box-space
|
16
|
+
/ span
|
17
|
+
/ input.cm-checkbox type="checkbox"
|
17
18
|
- @model.available_fields[:index].each do |column|
|
18
19
|
th = column.header
|
19
20
|
tbody.cm-table__body
|
20
21
|
- @ar_object.data.each do |ar_object|
|
21
22
|
tr.body-row
|
22
|
-
td.check-box-space
|
23
|
-
|
24
|
-
|
23
|
+
/ td.check-box-space
|
24
|
+
/ span
|
25
|
+
/ input.cm-checkbox type="checkbox"
|
25
26
|
- @model.available_fields[:index].each_with_index do |column, index|
|
26
27
|
td.text-ellipsis
|
27
28
|
span class="#{column.field_type.to_s} #{column.cm_css_class} "
|
@@ -45,12 +46,18 @@
|
|
45
46
|
.popup-card.table-export-popup.hidden
|
46
47
|
- if edit_action.any? && policy([:cm_admin, @model.name.classify.constantize]).edit?
|
47
48
|
= link_to "#{page_url('edit', ar_object)}" do
|
48
|
-
.popup-option
|
49
|
+
.popup-option
|
50
|
+
span
|
51
|
+
i.fa.fa-edit
|
52
|
+
| Edit
|
49
53
|
- custom_actions.each do |custom_action|
|
50
54
|
- if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
|
51
55
|
- if custom_action.display_if.call(ar_object)
|
52
56
|
= link_to cm_admin.send("#{@model.name.downcase}_index_path") + '/' + custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb do
|
53
|
-
.popup-option
|
57
|
+
.popup-option
|
58
|
+
span
|
59
|
+
i class="#{custom_action.icon_name}"
|
60
|
+
= custom_action.name.titleize
|
54
61
|
|
55
62
|
.cm-pagination
|
56
63
|
.cm-pagination__lhs Showing #{@ar_object.pagy.from} to #{@ar_object.pagy.to} out of #{@ar_object.pagy.count}
|
@@ -4,9 +4,12 @@
|
|
4
4
|
== render 'cm_admin/main/top_navbar'
|
5
5
|
== render 'cm_admin/main/tabs'
|
6
6
|
.show-page__inner.scrollable
|
7
|
-
- @
|
8
|
-
.
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
- if @action.partial
|
8
|
+
== render @action.partial
|
9
|
+
- else
|
10
|
+
- @model.available_fields[:show].each do |section|
|
11
|
+
.info-section
|
12
|
+
p.section-heading = section.section_name
|
13
|
+
.paper
|
14
|
+
- section.available_section_fields.each do |field|
|
15
|
+
= show_field(@ar_object, field)
|
@@ -15,9 +15,6 @@ html
|
|
15
15
|
script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"
|
16
16
|
script src="https://raw.githack.com/SortableJS/Sortable/master/Sortable.js"
|
17
17
|
body
|
18
|
-
- flash.each do |type, msg|
|
19
|
-
.alert class="alert-#{type}"
|
20
|
-
= msg
|
21
18
|
.cm-admin
|
22
19
|
= render 'layouts/left_sidebar_nav'
|
23
20
|
.panel-area
|
@@ -41,6 +38,6 @@ html
|
|
41
38
|
= yield
|
42
39
|
- else
|
43
40
|
= yield
|
44
|
-
= render 'layouts/
|
41
|
+
= render 'layouts/cm_flash_message'
|
45
42
|
= render 'layouts/custom_action_modals'
|
46
43
|
|
data/lib/cm_admin/model.rb
CHANGED
@@ -139,10 +139,15 @@ module CmAdmin
|
|
139
139
|
format.html { render '/cm_admin/main/'+action_name }
|
140
140
|
end
|
141
141
|
elsif %w(create update destroy).include?(action_name)
|
142
|
+
if %w(create update).include?(action_name)
|
143
|
+
redirect_url = CmAdmin::Engine.mount_path + "/#{@model.name.underscore.pluralize}/#{@ar_object.id}"
|
144
|
+
else
|
145
|
+
redirect_url = CmAdmin::Engine.mount_path + "/#{@model.name.underscore.pluralize}"
|
146
|
+
end
|
142
147
|
if @ar_object.save
|
143
|
-
format.html { redirect_to
|
148
|
+
format.html { redirect_to redirect_url, notice: "#{action_name.titleize} #{@ar_object.class.name.downcase} is successful" }
|
144
149
|
else
|
145
|
-
format.html { render '/cm_admin/main/new' }
|
150
|
+
format.html { render '/cm_admin/main/new', notice: "#{action_name.titleize} #{@ar_object.class.name.downcase} is unsuccessful" }
|
146
151
|
end
|
147
152
|
elsif action.action_type == :custom
|
148
153
|
if action.child_records
|
@@ -151,11 +156,13 @@ module CmAdmin
|
|
151
156
|
data = @action.parent == "index" ? @ar_object.data : @ar_object
|
152
157
|
format.html { render action.partial }
|
153
158
|
else
|
154
|
-
|
159
|
+
ar_object = @action.code_block.call(@ar_object)
|
160
|
+
if ar_object.errors.empty?
|
155
161
|
redirect_url = @model.current_action.redirection_url || @action.redirection_url || request.referrer || "/cm_admin/#{@model.ar_model.table_name}/#{@ar_object.id}"
|
156
|
-
format.html { redirect_to redirect_url }
|
162
|
+
format.html { redirect_to redirect_url, notice: "#{@action.name.titleize} is successful" }
|
157
163
|
else
|
158
|
-
|
164
|
+
error_messages = ar_object.errors.full_messages.map{|error_message| "<li>#{error_message}</li>"}.join
|
165
|
+
format.html { redirect_to request.referrer, alert: "<b>#{@action.name.titleize} is unsuccessful</b><br /><ul>#{error_messages}</ul>" }
|
159
166
|
end
|
160
167
|
end
|
161
168
|
elsif action.layout.present?
|
@@ -6,7 +6,7 @@ module CmAdmin
|
|
6
6
|
include Actions::Blocks
|
7
7
|
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
8
8
|
:child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
|
9
|
-
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column
|
9
|
+
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column, :icon_name
|
10
10
|
|
11
11
|
VALID_SORT_DIRECTION = Set[:asc, :desc].freeze
|
12
12
|
|
@@ -34,6 +34,7 @@ module CmAdmin
|
|
34
34
|
self.action_type = :default
|
35
35
|
self.sort_column = :created_at
|
36
36
|
self.sort_direction = :desc
|
37
|
+
self.icon_name = 'fa fa-th-large'
|
37
38
|
end
|
38
39
|
|
39
40
|
def set_values(page_title, page_description, partial)
|
@@ -2,7 +2,7 @@ module CmAdmin
|
|
2
2
|
module Models
|
3
3
|
class Column
|
4
4
|
attr_accessor :field_name, :field_type, :header, :format, :prefix, :suffix, :exportable, :round,
|
5
|
-
:cm_css_class, :link, :url, :custom_method, :helper_method, :managable, :lockable, :drawer_partial
|
5
|
+
:cm_css_class, :link, :url, :custom_method, :helper_method, :managable, :lockable, :drawer_partial, :tag_class
|
6
6
|
|
7
7
|
def initialize(field_name, attributes = {})
|
8
8
|
@field_name = field_name
|
@@ -24,6 +24,7 @@ module CmAdmin
|
|
24
24
|
self.exportable = true
|
25
25
|
self.managable = true
|
26
26
|
self.lockable = false
|
27
|
+
self.tag_class = {}
|
27
28
|
end
|
28
29
|
|
29
30
|
#formatting value for different data types
|
@@ -115,11 +115,11 @@ module CmAdmin
|
|
115
115
|
# end
|
116
116
|
# end
|
117
117
|
# end
|
118
|
-
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
118
|
+
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, icon_name: 'fa fa-th-large', &block)
|
119
119
|
action = CmAdmin::Models::CustomAction.new(
|
120
120
|
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
121
121
|
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
122
|
-
action_type: :custom, route_type: route_type, &block)
|
122
|
+
action_type: :custom, route_type: route_type, icon_name: icon_name, &block)
|
123
123
|
@available_actions << action
|
124
124
|
# self.class.class_eval(&block)
|
125
125
|
end
|
@@ -3,14 +3,19 @@ module CmAdmin
|
|
3
3
|
class Field
|
4
4
|
|
5
5
|
attr_accessor :field_name, :label, :header, :field_type, :format, :precision,
|
6
|
-
:helper_method, :preview, :custom_link, :precision, :prefix, :suffix
|
6
|
+
:helper_method, :preview, :custom_link, :precision, :prefix, :suffix, :tag_class
|
7
7
|
|
8
8
|
def initialize(field_name, attributes = {})
|
9
9
|
@field_name = field_name
|
10
|
+
set_default_values
|
10
11
|
attributes.each do |key, value|
|
11
12
|
self.send("#{key.to_s}=", value)
|
12
13
|
end
|
13
14
|
end
|
15
|
+
|
16
|
+
def set_default_values
|
17
|
+
self.tag_class = {}
|
18
|
+
end
|
14
19
|
end
|
15
20
|
end
|
16
21
|
end
|
data/lib/cm_admin/version.rb
CHANGED
@@ -51,7 +51,8 @@ module CmAdmin
|
|
51
51
|
when :enum
|
52
52
|
ar_object.send(field.field_name).to_s.titleize
|
53
53
|
when :tag
|
54
|
-
|
54
|
+
tag_class = field.tag_class.dig("#{ar_object.send(field.field_name.to_s)}".to_sym).to_s
|
55
|
+
content_tag :span, class: "status-tag #{tag_class}" do
|
55
56
|
ar_object.send(field.field_name).to_s.upcase
|
56
57
|
end
|
57
58
|
when :attachment
|
@@ -5,21 +5,21 @@ module CmAdmin
|
|
5
5
|
value = field.custom_value || f.object.send(field.field_name)
|
6
6
|
case field.input_type
|
7
7
|
when :integer
|
8
|
-
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, data: {behaviour: 'integer-only'}
|
8
|
+
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.humanize.downcase}", data: { behaviour: 'integer-only' }
|
9
9
|
when :decimal
|
10
|
-
return f.number_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, data: {behaviour: 'decimal-only'}
|
10
|
+
return f.number_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}", data: { behaviour: 'decimal-only' }
|
11
11
|
when :string
|
12
|
-
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value
|
12
|
+
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}"
|
13
13
|
when :single_select
|
14
|
-
return f.select field.field_name, options_for_select(field.collection || []), {}, class: 'normal-input select-2', disabled: field.disabled
|
14
|
+
return f.select field.field_name, options_for_select((field.collection || []), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: 'normal-input select-2', disabled: field.disabled
|
15
15
|
when :multi_select
|
16
|
-
return f.select field.field_name, options_for_select(field.collection || []), {}, class: 'normal-input select-2', disabled: field.disabled, multiple: true
|
16
|
+
return f.select field.field_name, options_for_select((field.collection || []), value), {include_blank: "Select #{field.field_name.to_s.downcase.gsub('_', ' ')}"}, class: 'normal-input select-2', disabled: field.disabled, multiple: true
|
17
17
|
when :date
|
18
|
-
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, data: {behaviour: 'date-only'}
|
18
|
+
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}", data: { behaviour: 'date-only' }
|
19
19
|
when :date_time
|
20
|
-
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, data: {behaviour: 'date-time'}
|
20
|
+
return f.text_field field.field_name, class: 'normal-input', disabled: field.disabled, value: value, placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}", data: { behaviour: 'date-time' }
|
21
21
|
when :text
|
22
|
-
return f.text_area field.field_name, class: 'normal-input'
|
22
|
+
return f.text_area field.field_name, class: 'normal-input', placeholder: "Enter #{field.field_name.to_s.downcase.gsub('_', ' ')}"
|
23
23
|
when :single_file_upload
|
24
24
|
return f.file_field field.field_name, class: 'normal-input'
|
25
25
|
when :multi_file_upload
|
@@ -6,7 +6,7 @@ module CmAdmin
|
|
6
6
|
source_root File.expand_path('templates', __dir__)
|
7
7
|
|
8
8
|
def copy_initializer
|
9
|
-
copy_file 'cm_admin_initializer.rb', 'config/initializers/
|
9
|
+
copy_file 'cm_admin_initializer.rb', 'config/initializers/zcm_admin.rb'
|
10
10
|
copy_file 'custom.js', 'app/assets/javascripts/cm_admin/custom.js'
|
11
11
|
copy_file 'custom.css', 'app/assets/stylesheets/cm_admin/custom.css'
|
12
12
|
copy_file 'application_policy.rb', 'app/policies/application_policy.rb'
|
@@ -6,6 +6,8 @@ module CmAdmin
|
|
6
6
|
source_root File.expand_path('templates', __dir__)
|
7
7
|
|
8
8
|
def copy_policy_files
|
9
|
+
cm_model = CmAdmin::Model.find_by({name: file_name})
|
10
|
+
raise "cm_admin is not defined inside #{file_name} model" unless cm_model.present?
|
9
11
|
template "policy.rb", "app/policies/cm_admin/#{file_name}_policy.rb"
|
10
12
|
end
|
11
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class CmAdmin::<%= class_name %>Policy < ApplicationPolicy
|
2
|
-
<%- available_action_names = (
|
2
|
+
<%- available_action_names = (cm_model.available_actions.map{|action| action.name}.uniq - ['custom_action', 'new', 'edit']) %>
|
3
3
|
<%- available_action_names.each do |action_name| %>
|
4
4
|
def <%= action_name %>?
|
5
5
|
<%= CmAdmin.authorized_roles.map {|role| "@user.#{role}" }.join(' && ') %>
|
data/package.json
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
d5850cd60f91abe79ff8a84a45a9e24c75cb0e4b
|
data/yarn.lock
CHANGED
@@ -4199,10 +4199,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
|
|
4199
4199
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
4200
4200
|
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
4201
4201
|
|
4202
|
-
moment@^2.29.
|
4203
|
-
version "2.29.
|
4204
|
-
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.
|
4205
|
-
integrity sha512-
|
4202
|
+
moment@^2.29.2, moment@^2.9.0:
|
4203
|
+
version "2.29.2"
|
4204
|
+
resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.2.tgz#00910c60b20843bcba52d37d58c628b47b1f20e4"
|
4205
|
+
integrity sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==
|
4206
4206
|
|
4207
4207
|
move-concurrently@^1.0.1:
|
4208
4208
|
version "1.0.1"
|
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: 0.6.
|
4
|
+
version: 0.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sajinmp
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-05-03 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pagy
|
@@ -171,8 +171,8 @@ files:
|
|
171
171
|
- app/views/cm_admin/static/dashboard.html.slim
|
172
172
|
- app/views/cm_admin/static/error_401.html.slim
|
173
173
|
- app/views/cm_admin/static/error_403.html.slim
|
174
|
+
- app/views/layouts/_cm_flash_message.html.slim
|
174
175
|
- app/views/layouts/_custom_action_modals.html.slim
|
175
|
-
- app/views/layouts/_flash_message.html.slim
|
176
176
|
- app/views/layouts/_left_sidebar_nav.html.slim
|
177
177
|
- app/views/layouts/_quick_links.html.slim
|
178
178
|
- app/views/layouts/cm_admin.html.slim
|