lesli_admin 0.2.0 → 0.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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/config/lesli_admin_manifest.js +0 -1
  3. data/app/assets/javascripts/lesli_admin/application.js +362 -831
  4. data/app/assets/stylesheets/lesli_admin/application.scss +2 -1
  5. data/app/controllers/lesli_admin/accounts_controller.rb +3 -5
  6. data/app/controllers/lesli_admin/dashboard/components_controller.rb +60 -0
  7. data/app/controllers/lesli_admin/dashboards_controller.rb +26 -50
  8. data/app/models/lesli_admin/account.rb +7 -29
  9. data/app/{controllers/lesli_admin/profiles_controller.rb → models/lesli_admin/dashboard/component.rb} +13 -19
  10. data/app/models/lesli_admin/dashboard.rb +58 -0
  11. data/app/{controllers/lesli_admin/users_controller.rb → services/lesli_admin/account_service.rb} +6 -20
  12. data/app/views/lesli_admin/dashboards/edit.html.erb +29 -7
  13. data/app/views/lesli_admin/dashboards/index.html.erb +29 -11
  14. data/app/views/lesli_admin/dashboards/new.html.erb +29 -6
  15. data/app/views/lesli_admin/dashboards/show.html.erb +31 -0
  16. data/app/views/lesli_admin/partials/_engine-navigation.html.erb +0 -1
  17. data/config/locales/translations.en.yml +29 -4
  18. data/config/locales/translations.es.yml +29 -4
  19. data/config/routes.rb +46 -5
  20. data/db/migrate/0101000110_create_lesli_admin_accounts.rb +42 -0
  21. data/db/migrate/0101050110_create_lesli_admin_dashboards.rb +51 -0
  22. data/db/migrate/0101050210_create_lesli_admin_dashboard_components.rb +53 -0
  23. data/lib/lesli_admin/engine.rb +1 -0
  24. data/lib/lesli_admin/version.rb +2 -2
  25. data/lib/vue/application.js +28 -15
  26. data/lib/vue/apps/account/components/{address-form.vue → form-address.vue} +27 -42
  27. data/lib/vue/apps/account/components/form-contact.vue +122 -0
  28. data/lib/vue/apps/account/components/form-information.vue +13 -31
  29. data/lib/vue/apps/account/show.vue +14 -13
  30. data/lib/vue/apps/{users/components/integrations-information.vue → dashboards/components/lesli-version.vue} +36 -26
  31. data/lib/vue/apps/{profile/components/change-email.vue → dashboards/show.vue} +9 -6
  32. data/lib/vue/stores/translations.json +62 -10
  33. data/readme.md +3 -3
  34. metadata +30 -30
  35. data/app/assets/javascripts/lesli_admin/translations.js +0 -2291
  36. data/app/views/lesli_admin/dashboards/_dashboard.html.erb +0 -2
  37. data/app/views/lesli_admin/dashboards/_form.html.erb +0 -17
  38. data/app/views/lesli_admin/profiles/edit.html.erb +0 -10
  39. data/app/views/lesli_admin/profiles/index.html.erb +0 -14
  40. data/app/views/lesli_admin/profiles/new.html.erb +0 -9
  41. data/lib/vue/apps/account/components/contact-form.vue +0 -162
  42. data/lib/vue/apps/dashboard/show.vue +0 -31
  43. data/lib/vue/apps/profile/components/subscriptions.vue +0 -94
  44. data/lib/vue/apps/profile/show.vue +0 -148
  45. data/lib/vue/apps/users/components/information-card.vue +0 -116
  46. data/lib/vue/apps/users/components/information-form.vue +0 -177
  47. data/lib/vue/apps/users/components/management-roles.vue +0 -109
  48. data/lib/vue/apps/users/components/management-security.vue +0 -113
  49. data/lib/vue/apps/users/components/management-sessions.vue +0 -106
  50. data/lib/vue/apps/users/components/management-settings.vue +0 -94
  51. data/lib/vue/apps/users/index.vue +0 -207
  52. data/lib/vue/apps/users/new.vue +0 -181
  53. data/lib/vue/apps/users/show.vue +0 -116
  54. data/lib/vue/stores/users.js +0 -150
@@ -1,2 +0,0 @@
1
- <div id="<%= dom_id dashboard %>">
2
- </div>
@@ -1,17 +0,0 @@
1
- <%= form_with(model: dashboard) do |form| %>
2
- <% if dashboard.errors.any? %>
3
- <div style="color: red">
4
- <h2><%= pluralize(dashboard.errors.count, "error") %> prohibited this dashboard from being saved:</h2>
5
-
6
- <ul>
7
- <% dashboard.errors.each do |error| %>
8
- <li><%= error.full_message %></li>
9
- <% end %>
10
- </ul>
11
- </div>
12
- <% end %>
13
-
14
- <div>
15
- <%= form.submit %>
16
- </div>
17
- <% end %>
@@ -1,10 +0,0 @@
1
- <h1>Editing profile</h1>
2
-
3
- <%= render "form", profile: @profile %>
4
-
5
- <br>
6
-
7
- <div>
8
- <%= link_to "Show this profile", @profile %> |
9
- <%= link_to "Back to profiles", profiles_path %>
10
- </div>
@@ -1,14 +0,0 @@
1
- <p style="color: green"><%= notice %></p>
2
-
3
- <h1>Profiles</h1>
4
-
5
- <div id="profiles">
6
- <% @profiles.each do |profile| %>
7
- <%= render profile %>
8
- <p>
9
- <%= link_to "Show this profile", profile %>
10
- </p>
11
- <% end %>
12
- </div>
13
-
14
- <%= link_to "New profile", new_profile_path %>
@@ -1,9 +0,0 @@
1
- <h1>New profile</h1>
2
-
3
- <%= render "form", profile: @profile %>
4
-
5
- <br>
6
-
7
- <div>
8
- <%= link_to "Back to profiles", profiles_path %>
9
- </div>
@@ -1,162 +0,0 @@
1
- <script setup>
2
- /*
3
-
4
- Lesli
5
-
6
- Copyright (c) 2023, Lesli Technologies, S. A.
7
-
8
- This program is free software: you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation, either version 3 of the License, or
11
- (at your option) any later version.
12
-
13
- This program is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with this program. If not, see http://www.gnu.org/licenses/.
20
-
21
- Lesli · Your Smart Business Assistant.
22
-
23
- Made with ♥ by https://www.lesli.tech
24
- Building a better future, one line of code at a time.
25
-
26
- @contact hello@lesli.tech
27
- @website https://lesli.tech
28
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
-
30
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
- // ·
32
-
33
- */
34
-
35
-
36
- // · import vue tools
37
- import { computed } from "vue"
38
-
39
- // · import lesli stores
40
- import { useAccount } from "CloudAdmin/stores/account"
41
-
42
- // · implement stores
43
- const storeAccount = useAccount()
44
-
45
- // · translations
46
- const translations = {
47
- shared: I18n.t("core.shared"),
48
- core: {
49
- onboardings: I18n.t("core.onboardings"),
50
- accounts: I18n.t("core.accounts"),
51
- }
52
- }
53
-
54
- // . get reactive info from onboarding store
55
- const companyInfo = computed(()=> storeOnboarding.companyInfo)
56
-
57
- </script>
58
- <template>
59
- <form @submit.prevent="storeAccount.updateInfo">
60
- <div class="field">
61
- <label class="label">{{ translations.core.onboardings.view_text_email }}</label>
62
- <div class="control">
63
- <input
64
- class="input"
65
- type="text"
66
- :placeholder="translations.core.onboardings.view_placeholder_email"
67
- v-model="storeAccount.accountInfo.public_email"
68
- />
69
- </div>
70
- </div>
71
-
72
- <div class="field">
73
- <label class="label">{{translations.shared.view_text_telephone}}</label>
74
- <div class="control">
75
- <input
76
- class="input"
77
- type="text"
78
- :placeholder= "translations.core.onboardings.view_placeholder_phone"
79
- v-model="storeAccount.accountInfo.phone_number_1"
80
- />
81
- </div>
82
- </div>
83
-
84
- <p>{{translations.core.onboardings.view_title_social_profiles}}</p>
85
-
86
- <div class="field">
87
- <label class="label">{{ translations.core.accounts.column_github }}</label>
88
- <div class="control">
89
- <input
90
- class="input"
91
- type="text"
92
- :placeholder="translations.core.onboardings.view_placeholder_github"
93
- v-model="storeAccount.accountInfo.github"
94
- />
95
- </div>
96
- </div>
97
-
98
-
99
- <div class="field">
100
- <label class="label">{{ translations.core.accounts.column_twitter }}</label>
101
- <div class="control">
102
- <input
103
- class="input"
104
- type="text"
105
- :placeholder="translations.core.onboardings.view_placeholder_twitter"
106
- v-model="storeAccount.accountInfo.twitter"
107
- />
108
- </div>
109
- </div>
110
-
111
-
112
- <div class="field">
113
- <label class="label">{{ translations.core.accounts.column_youtube }}</label>
114
- <div class="control">
115
- <input
116
- class="input"
117
- type="text"
118
- :placeholder="translations.core.onboardings.view_placeholder_youtube"
119
- v-model="storeAccount.accountInfo.youtube"
120
- />
121
- </div>
122
- </div>
123
-
124
-
125
- <div class="field">
126
- <label class="label">{{ translations.core.accounts.column_linkedin }}</label>
127
- <div class="control">
128
- <input
129
- class="input"
130
- type="text"
131
- :placeholder="translations.core.onboardings.view_placeholder_linkedin"
132
- v-model="storeAccount.accountInfo.linkedin"
133
- />
134
- </div>
135
- </div>
136
-
137
-
138
- <div class="field">
139
- <label class="label">{{ translations.core.accounts.column_facebook }}</label>
140
- <div class="control">
141
- <input
142
- class="input"
143
- type="text"
144
- :placeholder="translations.core.onboardings.view_placeholder_facebook"
145
- v-model="storeAccount.accountInfo.facebook"
146
- />
147
- </div>
148
- </div>
149
-
150
- <div class="field">
151
- <div class="field-body">
152
- <div class="field">
153
- <div class="control">
154
- <lesli-button icon="save">
155
- {{ translations.shared.view_btn_save }}
156
- </lesli-button>
157
- </div>
158
- </div>
159
- </div>
160
- </div>
161
- </form>
162
- </template>
@@ -1,31 +0,0 @@
1
- <script setup>
2
-
3
- import { lesliChartLine } from "lesli-vue/components"
4
-
5
- </script>
6
- <template>
7
- <lesli-application-container>
8
- <lesli-header title="Dashboard"></lesli-header>
9
-
10
- <div class="columns">
11
- <div class="column">
12
- <lesli-application-component>
13
- <lesli-chart-line
14
- title="My daily activity graph"
15
- :series="[{ data:[4, 1, 4, 2, 5] }]"
16
- :labels="['Monday','Tuesday','Wednesday', 'Thursday', 'Friday']">
17
- </lesli-chart-line>
18
- </lesli-application-component>
19
- </div>
20
- <div class="column">
21
- <lesli-application-component>
22
- <lesli-chart-line
23
- title="My daily activity graph"
24
- :series="[{ name: 'Last week', data:[4, 1, 4, 2, 5] }, { name: 'Current week', data:[3, 2, 5, 4, 2] }]"
25
- :labels="['Monday','Tuesday','Wednesday', 'Thursday', 'Friday']">
26
- </lesli-chart-line>
27
- </lesli-application-component>
28
- </div>
29
- </div>
30
- </lesli-application-container>
31
- </template>
@@ -1,94 +0,0 @@
1
- <script setup>
2
- /*
3
-
4
- Lesli
5
-
6
- Copyright (c) 2023, Lesli Technologies, S. A.
7
-
8
- This program is free software: you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation, either version 3 of the License, or
11
- (at your option) any later version.
12
-
13
- This program is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with this program. If not, see http://www.gnu.org/licenses/.
20
-
21
- Lesli · Your Smart Business Assistant.
22
-
23
- Made with ♥ by https://www.lesli.tech
24
- Building a better future, one line of code at a time.
25
-
26
- @contact hello@lesli.tech
27
- @website https://lesli.tech
28
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
-
30
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
- // ·
32
-
33
- */
34
-
35
-
36
-
37
- // · import vue tools
38
- import { ref, reactive, onMounted, watch, computed } from "vue"
39
-
40
-
41
- // · import lesli stores
42
- import { useUser } from "LesliApp/administration/stores/user"
43
-
44
- // · implement stores
45
- const storeUser = useUser()
46
-
47
- const engine = ref({ label:"", value:"" })
48
-
49
-
50
- onMounted(() => {
51
- storeUser.getSubscriptionsOptions ()
52
- })
53
-
54
- function selectEngine(){
55
- storeUser.getSubscriptions(engine.value.value)
56
-
57
- }
58
-
59
-
60
- const translations = {
61
- users: I18n.t("core.users"),
62
- shared: I18n.t("core.shared")
63
- }
64
-
65
- const columns = [{
66
- field: 'action',
67
- label: 'action'
68
- }, {
69
- field: 'notification_type',
70
- label: 'Notification type'
71
- }, {
72
- field: 'created_at',
73
- label: 'Created at'
74
- }]
75
-
76
- </script>
77
- <template>
78
-
79
- <div class="block">
80
- <lesli-select
81
- :options="storeUser.options.engines"
82
- @change="selectEngine"
83
- v-model="engine">
84
- </lesli-select>
85
- </div>
86
- <lesli-table
87
- :columns="columns"
88
- :records="storeUser.subscriptions">
89
- </lesli-table>
90
-
91
-
92
-
93
- </template>
94
-
@@ -1,148 +0,0 @@
1
- <script setup>
2
- /*
3
-
4
- Lesli
5
-
6
- Copyright (c) 2023, Lesli Technologies, S. A.
7
-
8
- This program is free software: you can redistribute it and/or modify
9
- it under the terms of the GNU General Public License as published by
10
- the Free Software Foundation, either version 3 of the License, or
11
- (at your option) any later version.
12
-
13
- This program is distributed in the hope that it will be useful,
14
- but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- GNU General Public License for more details.
17
-
18
- You should have received a copy of the GNU General Public License
19
- along with this program. If not, see http://www.gnu.org/licenses/.
20
-
21
- Lesli · Your Smart Business Assistant.
22
-
23
- Made with ♥ by https://www.lesli.tech
24
- Building a better future, one line of code at a time.
25
-
26
- @contact hello@lesli.tech
27
- @website https://lesli.tech
28
- @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
29
-
30
- // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
31
- // ·
32
-
33
- */
34
-
35
-
36
-
37
- // · import vue tools
38
- import { ref, reactive, onMounted, watch, computed, onUnmounted } from "vue"
39
- import { useRouter, useRoute } from 'vue-router'
40
-
41
-
42
- // · import lesli stores
43
- import { useUser } from "Lesli/stores/user"
44
-
45
-
46
- // · implement stores
47
- const storeUser = useUser()
48
- const router = useRouter()
49
- const route = useRoute()
50
-
51
- // · import profile components
52
-
53
- import informationCard from "LesliAdmin/apps/users/components/information-card.vue"
54
- /*
55
- import informationForm from "CloudAdmin/apps/users/components/information-form.vue"
56
-
57
- import managementSession from "CloudAdmin/apps/users/components/management-sessions.vue"
58
- import managementSecurity from "CloudAdmin/apps/users/components/management-security.vue"
59
-
60
- import integrationsInformation from "CloudAdmin/apps/users/components/integrations-information.vue"
61
- import settings from "CloudAdmin/apps/users/components/management-settings.vue"
62
- */
63
-
64
- /*
65
- import cardInformation from "../users/components/information-card.vue"
66
- import formInformation from "../users/components/information-form.vue"
67
- import managementSession from "../users/components/management-sessions.vue"
68
- import integrationsInformation from "../users/components/integrations-information.vue"
69
- import subscriptionsComponent from "./components/subscriptions.vue"
70
- import settings from "../users/components/settings.vue"
71
- import changeEmail from "./components/change-email.vue"
72
- */
73
-
74
-
75
- // · translations
76
- const translations = {
77
- core: {
78
- roles: I18n.t("core.roles"),
79
- users: I18n.t("core.users"),
80
- shared: I18n.t("core.shared")
81
- }
82
- }
83
-
84
-
85
- // ·
86
- const tab = ref(0)
87
-
88
-
89
- // ·
90
- onMounted(() => {
91
- //storeUser.getUser()
92
- //storeUser.getOptions()
93
- })
94
-
95
- </script>
96
- <template>
97
- <lesli-application-container>
98
- {{ storeProfile.profile }}
99
- <information-card></information-card>
100
- </lesli-application-container>
101
- <!--
102
- <application-component>
103
-
104
- <lesli-tabs v-model="tab" v-if="storeUser.user.id">
105
- <lesli-tab-item icon="info_outline" :title="translations.core.users.view_tab_title_information">
106
- <information-form></information-form>
107
- </lesli-tab-item>
108
- <lesli-tab-item icon="security" :title="translations.core.users.view_tab_title_roles_and_privileges">
109
- < ! - -form-roles></form-roles - - >
110
- </lesli-tab-item>
111
- <lesli-tab-item icon="lock_outline" :title="translations.core.users.view_tab_title_security || 'Security'">
112
- <management-security></management-security>
113
- </lesli-tab-item>
114
- <lesli-tab-item icon="devices" :title="translations.core.users.view_tab_title_session || 'Sessions'" paddingless>
115
- <management-session></management-session>
116
- </lesli-tab-item>
117
- <lesli-tab-item icon="settings" :title="translations.core.users.view_tab_title_settings">
118
- < ! - - settings></settings - - >
119
- </lesli-tab-item>
120
- </lesli-tabs>
121
- </application-component>
122
-
123
- <section class="application-component">
124
- <information-card></information-card>
125
- <lesli-tabs v-if="storeUser.user.id">
126
- <lesli-tab-item :title="translations.core.users.view_tab_title_information">
127
- <information-form></information-form>
128
- </lesli-tab-item>
129
- <lesli-tab-item :title="translations.core.users.view_tab_title_subscriptions">
130
- <subscriptions-component>
131
- </subscriptions-component>
132
- </lesli-tab-item>
133
- <lesli-tab-item :title="translations.core.users.view_tab_title_security">
134
- <form-security></form-security>
135
- </lesli-tab-item>
136
- <lesli-tab-item :title="translations.core.users.view_tab_title_session_management">
137
- <management-session></management-session>
138
- </lesli-tab-item>
139
- <lesli-tab-item :title="translations.core.users.view_tab_title_settings">
140
- <settings></settings>
141
- </lesli-tab-item>
142
- <lesli-tab-item :title="translations.core.users.view_tab_title_integrations">
143
- <integrations-information></integrations-information>
144
- </lesli-tab-item>
145
- </lesli-tabs>
146
- </section>
147
- -->
148
- </template>
@@ -1,116 +0,0 @@
1
- <script setup>
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
- */
32
-
33
-
34
- // · import lesli stores
35
- import { useUser } from "Lesli/stores/user"
36
-
37
-
38
- // · implement stores
39
- const storeUser = useUser()
40
-
41
-
42
- // · translations
43
- const translations = {
44
- core: {
45
- users: I18n.t("core.users"),
46
- shared: I18n.t("core.shared"),
47
- }
48
- }
49
-
50
- </script>
51
- <template>
52
- <div class="user-information-card mb-5">
53
- <div class="media is-align-items-center">
54
- <div class="media-left">
55
- <figure class="image is-128x128">
56
- <span class="alternative-avatar">
57
- {{ storeUser.initials }}
58
- </span>
59
- </figure>
60
- </div>
61
-
62
- <div class="media-content">
63
- <div class="content mb-0">
64
- <p>
65
- <!--
66
- <strong>
67
- object_utils.translateEnum(translations.core.shared, 'column_enum_salutation', user.detail_attributes.salutation )
68
- {{ storeUser.user.detail_attributes.salutation }}
69
- </strong>
70
- -->
71
- <h5 class="title is-5 mb-0">
72
- {{ storeUser.user.first_name }}
73
- {{ storeUser.user.last_name }}
74
- </h5>
75
- <p>{{ storeUser.user.detail_attributes.title }}</p>
76
- </p>
77
- </div>
78
-
79
- <div class="level is-mobile">
80
- <div class="level-left">
81
- <a class="level-item mr-4"
82
- v-if="storeUser.user.email"
83
- :href="'mailto:'+storeUser.user.email">
84
- <span class="icon is-small mr-2">
85
- <span class="material-icons">
86
- email
87
- </span>
88
- </span>
89
- {{ storeUser.user.email }}
90
- </a>
91
- <a class="level-item mr-4"
92
- v-if="storeUser.user.telephone"
93
- :href="'tel:'+storeUser.user.telephone">
94
- <span class="icon is-small mr-2">
95
- <span class="material-icons">
96
- phone
97
- </span>
98
- </span>
99
- {{ storeUser.user.telephone }}
100
- </a>
101
-
102
- <!-- Show the max role -->
103
- <p class="level-item">
104
- <span class="icon is-small mr-2">
105
- <span class="material-icons">
106
- security
107
- </span>
108
- </span>
109
- {{ storeUser.role_names }}
110
- </p>
111
- </div>
112
- </div>
113
- </div>
114
- </div>
115
- </div>
116
- </template>