lesli_admin 0.1.0 → 0.2.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/lesli_admin_manifest.js +1 -0
  3. data/app/assets/images/lesli_admin/admin-logo.svg +1 -0
  4. data/app/assets/javascripts/lesli_admin/application.js +2635 -244
  5. data/app/assets/javascripts/lesli_admin/translations.js +2291 -0
  6. data/app/assets/stylesheets/lesli_admin/application.scss +32 -0
  7. data/app/assets/stylesheets/lesli_admin/users.scss +67 -0
  8. data/app/controllers/lesli_admin/profiles_controller.rb +56 -0
  9. data/app/controllers/lesli_admin/users_controller.rb +5 -196
  10. data/app/helpers/lesli_admin/profiles_helper.rb +4 -0
  11. data/app/views/lesli_admin/profiles/edit.html.erb +10 -0
  12. data/app/views/lesli_admin/profiles/index.html.erb +14 -0
  13. data/app/views/lesli_admin/profiles/new.html.erb +9 -0
  14. data/app/views/lesli_admin/profiles/show.html.erb +1 -0
  15. data/app/views/lesli_admin/users/show.html.erb +1 -10
  16. data/config/locales/translations.en.yml +6 -0
  17. data/config/locales/translations.es.yml +6 -0
  18. data/config/routes.rb +4 -7
  19. data/lib/lesli_admin/engine.rb +31 -0
  20. data/lib/lesli_admin/version.rb +2 -1
  21. data/lib/vue/application.js +15 -98
  22. data/lib/vue/apps/account/show.vue +2 -2
  23. data/lib/vue/apps/dashboard/show.vue +6 -8
  24. data/lib/vue/apps/profile/show.vue +22 -15
  25. data/lib/vue/apps/users/components/information-card.vue +4 -7
  26. data/lib/vue/apps/users/components/information-form.vue +4 -7
  27. data/lib/vue/apps/users/index.vue +10 -4
  28. data/lib/vue/apps/users/show.vue +25 -10
  29. data/lib/vue/stores/translations.json +20 -0
  30. data/lib/vue/stores/users.js +1 -1
  31. data/readme.md +61 -18
  32. metadata +16 -14
  33. data/app/assets/stylesheets/lesli_admin/application.css +0 -15
  34. data/app/models/lesli_admin/dashboard.rb +0 -4
  35. data/app/models/lesli_admin/user.rb +0 -4
  36. data/app/services/lesli_admin/user_service.rb +0 -300
  37. data/lib/vue/stores/account.js +0 -113
  38. data/lib/vue/stores/descriptor.js +0 -116
  39. data/lib/vue/stores/descriptors.js +0 -167
  40. data/lib/vue/stores/integration.js +0 -103
  41. data/lib/vue/stores/role.js +0 -243
  42. data/lib/vue/stores/systemController.js +0 -67
  43. data/lib/vue/stores/user.js +0 -319
  44. /data/lib/vue/stores/{accountSettings.js → account_settings.js} +0 -0
@@ -1,300 +0,0 @@
1
- =begin
2
-
3
- Lesli
4
-
5
- Copyright (c) 2023, Lesli Technologies, S. A.
6
-
7
- This program is free software: you can redistribute it and/or modify
8
- it under the terms of the GNU General Public License as published by
9
- the Free Software Foundation, either version 3 of the License, or
10
- (at your option) any later version.
11
-
12
- This program is distributed in the hope that it will be useful,
13
- but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- GNU General Public License for more details.
16
-
17
- You should have received a copy of the GNU General Public License
18
- along with this program. If not, see http://www.gnu.org/licenses/.
19
-
20
- Lesli · Ruby on Rails SaaS Development Framework.
21
-
22
- Made with ♥ by https://www.lesli.tech
23
- Building a better future, one line of code at a time.
24
-
25
- @contact hello@lesli.tech
26
- @website https://www.lesli.tech
27
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
-
29
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
- // ·
31
- =end
32
-
33
- module LesliAdmin
34
- class UserService < Lesli::ApplicationLesliService
35
-
36
-
37
- # Return a list of users that belongs to the account of the current_user
38
- # this list is meant to be used in selectors, autocomplets, etc
39
- def list query=nil, params=nil
40
- #users = current_user.account.users
41
- users = Lesli::Account.first.users
42
-
43
- if params[:role].present?
44
- # add simple quotes to the roles so the sql can manage the query
45
- roles = params[:role].split(",").map { |role| "'#{role}'" }.join(", ")
46
- users = users.joins("
47
- inner join (
48
- select
49
- ur.users_id, string_agg(r.\"name\", ', ') role_names
50
- from user_roles ur
51
- join roles r
52
- on r.id = ur.role_id
53
- and r.name in ( #{ roles } )
54
- where ur.deleted_at is null
55
- group by ur.users_id
56
- ) roles on roles.users_id = users.id
57
- ")
58
- end
59
-
60
- users.order(name: :asc).select(
61
- :id,
62
- :email,
63
- "CONCAT_WS(' ', first_name, last_name) as name",
64
- :alias
65
- ).as_json
66
- end
67
-
68
-
69
- # @return [Array] Paginated index of users.
70
- # @description Return a paginated array of users, used mostly in frontend views
71
- # TODO: Implement pg_search
72
- def index query, params
73
-
74
- # sql string to join to user_roles and get all the roles assigned to a user
75
- sql_string_for_user_roles = "left join (
76
- select
77
- ur.user_id, string_agg(r.\"name\", ', ') rolenames
78
- from user_roles ur
79
- join roles r
80
- on r.id = ur.role_id
81
- where ur.deleted_at is null
82
- group by ur.user_id
83
- ) roles on roles.user_id = users.id"
84
-
85
- # sql string to joing to user_sessions and get all the active sessions of a user
86
- sql_string_for_user_sessions = "left join (
87
- select
88
- max(last_used_at) as last_action_performed_at,
89
- user_id
90
- from user_sessions us
91
- where us.deleted_at is null
92
- group by(us.user_id)
93
- ) sessions on sessions.user_id = users.id"
94
-
95
- #users = current_user.account.users
96
- users = Lesli::Account.first.users
97
- #.joins(sql_string_for_user_roles)
98
- #.joins(sql_string_for_user_sessions)
99
- users = users.page(query[:pagination][:page])
100
- .per(query[:pagination][:perPage])
101
- .order("#{query[:order][:by]} #{query[:order][:dir]} NULLS LAST")
102
-
103
- users.select(
104
- :id,
105
- "CONCAT(COALESCE(first_name, ''), ' ', COALESCE(last_name, '')) as name",
106
- :email,
107
- :active,
108
- #:rolenames,
109
- #Date2.new.date_time.db_column("current_sign_in_at"),
110
- #Date2.new.date_time.db_column("last_action_performed_at")
111
- )
112
-
113
- end
114
-
115
-
116
- # Creates a query that selects all user information from several tables if CloudLock is present
117
- def show
118
-
119
- user = resource
120
-
121
- return {
122
- id: user[:id],
123
- email: user[:email],
124
- alias: user[:alias],
125
- active: user[:active],
126
- full_name: user.full_name,
127
- salutation: user[:salutation],
128
- first_name: user[:first_name],
129
- last_name: user[:last_name],
130
- telephone: user[:telephone],
131
-
132
- locale: user.settings.select(:value).find_by(:name => "locale"),
133
-
134
- roles: user.roles.map { |r| { id: r[:id], name: r[:name], permission_level: r[:object_level_permission]} },
135
-
136
- mfa_enabled: user.mfa_settings[:enabled],
137
- mfa_method: user.mfa_settings[:method],
138
-
139
- created_at: user[:created_at],
140
- updated_at: user[:updated_at],
141
-
142
- detail_attributes: {
143
- title: user.detail[:title],
144
- address: user.detail[:address],
145
- work_city: user.detail[:work_city],
146
- work_region: user.detail[:work_region],
147
- work_address: user.detail[:work_address]
148
- }
149
- }
150
- end
151
-
152
- def create user_params
153
-
154
- # check if request has an email to create the user
155
- if user_params[:email].blank?
156
- self.error(I18n.t("core.users.messages_danger_not_valid_email_found"))
157
- end
158
-
159
-
160
- # register the new user
161
- user = User.new({
162
- :active => true,
163
- :email => user_params[:email],
164
- :alias => user_params[:alias] || "",
165
- :first_name => user_params[:first_name] || "",
166
- :last_name => user_params[:last_name] || "",
167
- :telephone => user_params[:telephone] || "",
168
- #:detail_attributes => user_params[:detail_attributes] || {}
169
- })
170
-
171
-
172
-
173
- # assign a random password
174
- user.password = Devise.friendly_token
175
-
176
- # enrol user to my own account
177
- user.account = current_user.account
178
-
179
- # users created through the administration area does not need to confirm their accounts
180
- # instead we send a password reset link, so they can have access to the platform
181
- #user.confirm
182
-
183
- if user.save
184
-
185
- # if a role is provided to assign to the new user
186
- # unless user_params[:roles_id].blank?
187
- # # check if current user can work with the sent role
188
- # if current_user.can_work_with_role?(user_params[:roles_id])
189
- # # Search the role assigned
190
- # role = current_user.account.roles.find_by(id: user_params[:roles_id])
191
- # # assign role to the new user
192
- # user.user_roles.create({ role: role })
193
- # end
194
- # end
195
-
196
- # role validation - if new user does not have any role assigned
197
- # if user.roles.blank?
198
-
199
- # default_role_id = current_user.account.settings.find_by(:name => "default_role_id")&.value
200
- # owner_role_id = current_user.account.roles.find_by(:name => "owner").id
201
- # if default_role_id.present? && default_role_id != owner_role_id
202
- # # assign default role
203
- # user.user_roles.create({ role: current_user.account.roles.find_by(:id => default_role_id)})
204
-
205
- # else
206
- # # assign limited role
207
- # user.user_roles.create({ role: current_user.account.roles.find_by(:name => "limited") })
208
- # end
209
- # end
210
-
211
- # saving logs with information about the creation of the user
212
- # user.logs.create({ title: "user_created_at", description: Date2.new.date_time.to_s })
213
- # user.logs.create({ title: "user_created_by", description: current_user.email })
214
- # user.logs.create({ title: "user_created_with_role", description: user.user_roles.first.role.name + " " + user.user_roles.first.role.id.to_s})
215
- # User.log_activity_create(current_user, user)
216
-
217
- self.resource = user
218
-
219
- begin
220
- # users created through the administration area does not need to confirm their accounts
221
- # instead we send a password reset link, so they can have access to the platform
222
- #UserMailer.with(user: user).invitation_instructions.deliver_now
223
- rescue => exception
224
- #Honeybadger.notify(exception)
225
- #user.logs.create({ title: "user_creation_email_failed ", description: exception.message })
226
- end
227
-
228
- else
229
- self.error(user.errors.full_messages.to_sentence)
230
- end
231
-
232
- self
233
-
234
- end
235
-
236
- def update params
237
-
238
- old_attributes = resource.detail.attributes.merge({
239
- active: resource.active
240
- })
241
-
242
- if resource.update(params)
243
- new_attributes = resource.detail.attributes.merge({
244
- active: resource.active
245
- })
246
-
247
- resource.log_activity_update(current_user, resource, old_attributes, new_attributes)
248
- else
249
- self.error(resource.errors.full_messages.to_sentence)
250
- end
251
-
252
- self
253
- end
254
-
255
-
256
- # force the user to change the password (at next login)
257
- def request_password
258
-
259
- # expire password
260
- resource.set_password_as_expired
261
-
262
- resource.logs.create({ title: "request_password", description: "by_user: " + current_user.email })
263
- end
264
-
265
-
266
- # generate a random password for the user
267
- def password_reset
268
-
269
- # generate random password
270
- pass = resource.password_reset
271
-
272
- resource.logs.create({ title: "password_reset", description: "by_user: " + current_user.email })
273
-
274
- pass
275
- end
276
-
277
- def logout
278
- # delete user active sessions
279
- resource.sessions.destroy_all
280
-
281
- resource.logs.create({ title: "close_sessions", description: "by_user: " + current_user.email })
282
- end
283
-
284
- def revoke_access
285
-
286
- # delete user active sessions
287
- self.logout
288
-
289
- # add delete date to the last active session
290
- resource.revoke_access
291
-
292
- resource.logs.create({ title: "revoke_access", description: "by_user: " + current_user.email })
293
- end
294
-
295
- def find id
296
- #super(current_user.account.users.joins(:detail).find_by(id: id))
297
- super(current_user.account.users.find_by(id: id))
298
- end
299
- end
300
- end
@@ -1,113 +0,0 @@
1
- /*
2
- Lesli
3
-
4
- Copyright (c) 2023, Lesli Technologies, S. A.
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see http://www.gnu.org/licenses/.
18
-
19
- Lesli · Ruby on Rails SaaS Development Framework.
20
-
21
- Made with ♥ by https://www.lesli.tech
22
- Building a better future, one line of code at a time.
23
-
24
- @contact hello@lesli.tech
25
- @website https://www.lesli.tech
26
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
27
-
28
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
29
- // ·
30
- */
31
-
32
-
33
- // ·
34
- import { defineStore } from "pinia";
35
-
36
-
37
- // ·
38
- export const useAccount = defineStore("account", {
39
- state: () => {
40
- return {
41
- accountInfo: {},
42
- options: {
43
- countries: [],
44
- regions: [],
45
- time_zones: []
46
- }
47
- }
48
- },
49
- actions: {
50
-
51
- fetch (){
52
- this.loading = true
53
- this.http.get(this.url.admin("account")).then(result => {
54
- this.accountInfo = result
55
- delete this.accountInfo.created_at
56
- delete this.accountInfo.updated_at
57
- delete this.accountInfo.phone_number_2
58
- delete this.accountInfo.phone_number_3
59
- delete this.accountInfo.phone_number_4
60
- }).catch(error => {
61
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
62
- }).finally(() => {
63
- this.loading = false
64
- })
65
- },
66
-
67
- update() {
68
- this.submitting_form = true
69
- this.http.patch(this.url.admin("account"), {
70
- account: this.accountInfo
71
- }).then(result => {
72
- this.msg.success(I18n.t("core.users.messages_success_operation"))
73
- }).catch(error => {
74
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
75
- }).finally(() => {
76
- this.fetch()
77
- })
78
- },
79
- getOptions (){
80
- this.loading = true
81
- this.http.get(this.url.admin("account/options")).then(result => {
82
- this.options.countries = result.countries.map((country)=> {
83
- return {
84
- label: country.name,
85
- value: country.id
86
- }
87
- } )
88
- this.options.regions = result.regions.map((region)=> {
89
- return {
90
- label: region.value,
91
- value: region.key
92
- }
93
- } )
94
- }).catch(error => {
95
- this.msg.danger(this.translations.core.shared.messages_danger_internal_error)
96
- }).finally(() => {
97
- this.loading = false
98
- })
99
- // Get options for time zone selection
100
- this.http.get(this.url.admin("account/settings/options")).then(result => {
101
- this.options.time_zones = result.time_zones.map((time_zone)=> {
102
- return {
103
- label: time_zone.text,
104
- value: time_zone.value
105
- }
106
- } )
107
- }).catch(error => {
108
- this.msg.danger(this.translations.core.shared.messages_danger_internal_error)
109
- })
110
- }
111
-
112
- },
113
- });
@@ -1,116 +0,0 @@
1
- /*
2
- Lesli
3
-
4
- Copyright (c) 2023, Lesli Technologies, S. A.
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see http://www.gnu.org/licenses/.
18
-
19
- All the information provided by this platform is protected by international laws related to
20
- industrial property, intellectual property, copyright and relative international laws.
21
- All intellectual or industrial property rights of the code, texts, trade mark, design,
22
- pictures and any other information belongs to the owner of this platform.
23
-
24
- Made with ♥ by https://www.lesli.tech
25
- Building a better future, one line of code at a time.
26
-
27
- @contact hello@lesli.tech
28
- @website https://www.lesli.tech
29
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
30
-
31
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
32
- // ·
33
- */
34
-
35
-
36
- // ·
37
- import { defineStore } from "pinia"
38
-
39
-
40
- // ·
41
- export const useDescriptor = defineStore("administration.descriptor", {
42
- state: () => {
43
- return {
44
- list: [],
45
- descriptor: {},
46
- privileges: [],
47
- privilegesLoading: false
48
- }
49
- },
50
- actions: {
51
-
52
- fetchDescriptor(id) {
53
- if (this.descriptor.id != null) {
54
- return
55
- }
56
-
57
- this.getDescriptor(id)
58
- },
59
-
60
- getDescriptor(id) {
61
- this.http.get(this.url.admin("descriptors/:id", id)).then(result => {
62
- this.descriptor = result
63
- this.getDescriptorPrivileges()
64
- }).catch(error => {
65
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
66
- }).finally(() => {
67
-
68
- })
69
- },
70
-
71
- resetDescriptor() {
72
- this.descriptor = {}
73
- this.privileges = []
74
- },
75
-
76
- getDescriptorPrivileges() {
77
- this.privilegesLoading = true
78
- this.http.get(this.url.admin("descriptors/:id/privileges", this.descriptor.id)).then(result => {
79
- this.privileges = result
80
- }).catch(error => {
81
- console.log(error)
82
- }).finally(() => {
83
- this.privilegesLoading = false
84
- })
85
- },
86
-
87
- // Add privilege to descriptor
88
- postDescriptorPrivilege(action) {
89
-
90
- this.http.post(this.url.admin("descriptors/:id/privileges", this.descriptor.id), {
91
- descriptor_privilege: {
92
- //controller_id: action.controller_id,
93
- action_id: action.action_id
94
- }
95
- }).then(result => {
96
- console.log(result)
97
- }).catch(error => {
98
- console.log(error)
99
- })
100
- },
101
-
102
-
103
- // Add privilege to descriptor
104
- deleteDescriptorPrivilege(action) {
105
- console.log(action)
106
- this.http.delete(this.url.admin("descriptors/:descriptorId/privileges/:descriptorPrivilegeId", {
107
- descriptorId: this.descriptor.id,
108
- descriptorPrivilegeId: action.descriptor_privilege_id
109
- })).then(result => {
110
- console.log(result)
111
- }).catch(error => {
112
- console.log(error)
113
- })
114
- }
115
- }
116
- })
@@ -1,167 +0,0 @@
1
- /*
2
- Lesli
3
-
4
- Copyright (c) 2023, Lesli Technologies, S. A.
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see http://www.gnu.org/licenses/.
18
-
19
- Lesli · Ruby on Rails SaaS development platform.
20
-
21
- Made with ♥ by https://www.lesli.tech
22
- Building a better future, one line of code at a time.
23
-
24
- @contact hello@lesli.tech
25
- @website https://www.lesli.tech
26
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
27
-
28
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
29
- // ·
30
- */
31
-
32
-
33
- // ·
34
- import { defineStore } from "pinia"
35
-
36
-
37
- // ·
38
- export const useDescriptors = defineStore("administration.descriptors", {
39
- state: () => {
40
- return {
41
- list: [],
42
- descriptor: {},
43
- index: {
44
- loading: false,
45
- pagination: {},
46
- records: []
47
- }
48
- }
49
- },
50
- actions: {
51
-
52
- fetchDescriptors() {
53
- if (this.index.records.length > 0) {
54
- return
55
- }
56
-
57
- this.getDescriptors()
58
- },
59
-
60
- getDescriptors() {
61
- this.index.loading = true
62
- this.http.get(this.url.admin("descriptors")).then(result => {
63
- this.index.pagination = result.pagination
64
- this.index.records = result.records
65
- }).catch(error => {
66
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
67
- }).finally(() => {
68
- this.index.loading = false
69
- })
70
- },
71
-
72
- postDescriptor() {
73
- this.loading = true
74
- this.http.post(this.url.admin("descriptors"), { descriptor: this.descriptor }).then(result => {
75
- this.descriptor.id = result.id
76
- this.msg.success(I18n.t("core.users.messages_success_operation"))
77
- this.loading = false
78
- }).catch(error => {
79
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
80
- })
81
- },
82
-
83
- resetDescriptor() {
84
- this.descriptor = {}
85
- this.privileges = []
86
- },
87
-
88
- paginateIndex(page) {
89
- console.log("store page: ", page)
90
- this.index.pagination.page = page
91
- //this.fetch(this.url.admin("descriptors").paginate(this.pagination.page))
92
- },
93
-
94
- /*
95
- fetchDescriptorList() {
96
- this.http.get(this.url.admin("descriptors/list")).then(result => {
97
- this.list = result.map(descriptor => {
98
- descriptor.active = false
99
- return descriptor
100
- })
101
- })
102
- },
103
-
104
- /**
105
- * @description This action is used to reset descriptor object
106
- * /
107
-
108
-
109
- /**
110
- * @description This action is used to create a descriptor
111
- * /
112
-
113
-
114
- /**
115
- * @description This action is used to update a descriptor
116
- * /
117
- updateDescriptor(){
118
- this.loading = true
119
- this.http.put(this.url.admin("descriptors/:id", this.descriptor.id), { descriptor: this.descriptor }).then(result => {
120
- this.msg.success(I18n.t("core.users.messages_success_operation"))
121
- this.loading = false
122
- }).catch(error => {
123
- this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
124
- })
125
-
126
- },
127
- /**
128
- * @description This action is used to sort the results
129
- * /
130
- sortIndex(column, direction) {
131
- this.fetch(this.url.admin("descriptors").order(column, direction))
132
- },
133
- /**
134
- * @description This action is used to search
135
- * @param {string} search_string
136
- * /
137
- search(search_string) {
138
- this.fetch(this.url.admin("descriptors").search(search_string))
139
- },
140
- /**
141
- * @description This action is used to paginate index
142
- * @param {string} page actual page
143
- * /
144
- paginateIndex(page) {
145
- this.pagination.page = page
146
- this.fetch(this.url.admin("descriptors").paginate(this.pagination.page))
147
- },
148
- /**
149
- * @description This action is used to get descriptors as options
150
- * /
151
- getDescriptorsOptions(){
152
- this.loading = true
153
- this.descriptors_options = []
154
- this.http.get(this.url.admin("descriptors/list")).then(result => {
155
- result.forEach((descriptor)=>{
156
- this.descriptors_options.push({
157
- label: descriptor.name,
158
- value: descriptor.id
159
- })
160
- })
161
-
162
- this.loading = false
163
- })
164
- },
165
- */
166
- }
167
- })