lesli_admin 0.2.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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>