lesli_admin 0.1.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 (72) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +5 -0
  3. data/app/assets/config/lesli_admin_manifest.js +38 -0
  4. data/app/assets/javascripts/lesli_admin/application.js +3713 -0
  5. data/app/assets/stylesheets/lesli_admin/application.css +15 -0
  6. data/app/controllers/lesli_admin/accounts_controller.rb +125 -0
  7. data/app/controllers/lesli_admin/application_controller.rb +4 -0
  8. data/app/controllers/lesli_admin/dashboards_controller.rb +60 -0
  9. data/app/controllers/lesli_admin/users_controller.rb +244 -0
  10. data/app/helpers/lesli_admin/application_helper.rb +4 -0
  11. data/app/helpers/lesli_admin/dashboards_helper.rb +4 -0
  12. data/app/jobs/lesli_admin/application_job.rb +4 -0
  13. data/app/mailers/lesli_admin/application_mailer.rb +6 -0
  14. data/app/models/lesli_admin/account.rb +66 -0
  15. data/app/models/lesli_admin/application_record.rb +5 -0
  16. data/app/models/lesli_admin/dashboard.rb +4 -0
  17. data/app/models/lesli_admin/user.rb +4 -0
  18. data/app/services/lesli_admin/user_service.rb +300 -0
  19. data/app/views/layouts/lesli_admin/application.html.erb +15 -0
  20. data/app/views/lesli_admin/accounts/_account.html.erb +2 -0
  21. data/app/views/lesli_admin/accounts/_form.html.erb +17 -0
  22. data/app/views/lesli_admin/accounts/edit.html.erb +10 -0
  23. data/app/views/lesli_admin/accounts/index.html.erb +34 -0
  24. data/app/views/lesli_admin/accounts/new.html.erb +9 -0
  25. data/app/views/lesli_admin/accounts/show.html.erb +34 -0
  26. data/app/views/lesli_admin/dashboards/_dashboard.html.erb +2 -0
  27. data/app/views/lesli_admin/dashboards/_form.html.erb +17 -0
  28. data/app/views/lesli_admin/dashboards/edit.html.erb +10 -0
  29. data/app/views/lesli_admin/dashboards/index.html.erb +14 -0
  30. data/app/views/lesli_admin/dashboards/new.html.erb +9 -0
  31. data/app/views/lesli_admin/dashboards/show.html.erb +1 -0
  32. data/app/views/lesli_admin/partials/_engine-navigation.html.erb +52 -0
  33. data/app/views/lesli_admin/users/edit.html.erb +10 -0
  34. data/app/views/lesli_admin/users/index.html.erb +34 -0
  35. data/app/views/lesli_admin/users/new.html.erb +34 -0
  36. data/app/views/lesli_admin/users/show.html.erb +10 -0
  37. data/config/routes.rb +13 -0
  38. data/lib/lesli_admin/engine.rb +18 -0
  39. data/lib/lesli_admin/version.rb +3 -0
  40. data/lib/lesli_admin.rb +6 -0
  41. data/lib/tasks/lesli_admin_tasks.rake +4 -0
  42. data/lib/vue/application.js +153 -0
  43. data/lib/vue/apps/account/components/address-form.vue +134 -0
  44. data/lib/vue/apps/account/components/contact-form.vue +162 -0
  45. data/lib/vue/apps/account/components/form-information.vue +107 -0
  46. data/lib/vue/apps/account/show.vue +89 -0
  47. data/lib/vue/apps/dashboard/show.vue +33 -0
  48. data/lib/vue/apps/profile/components/change-email.vue +38 -0
  49. data/lib/vue/apps/profile/components/subscriptions.vue +94 -0
  50. data/lib/vue/apps/profile/show.vue +141 -0
  51. data/lib/vue/apps/users/components/information-card.vue +119 -0
  52. data/lib/vue/apps/users/components/information-form.vue +180 -0
  53. data/lib/vue/apps/users/components/integrations-information.vue +61 -0
  54. data/lib/vue/apps/users/components/management-roles.vue +109 -0
  55. data/lib/vue/apps/users/components/management-security.vue +113 -0
  56. data/lib/vue/apps/users/components/management-sessions.vue +106 -0
  57. data/lib/vue/apps/users/components/management-settings.vue +94 -0
  58. data/lib/vue/apps/users/index.vue +201 -0
  59. data/lib/vue/apps/users/new.vue +181 -0
  60. data/lib/vue/apps/users/show.vue +101 -0
  61. data/lib/vue/stores/account.js +113 -0
  62. data/lib/vue/stores/accountSettings.js +342 -0
  63. data/lib/vue/stores/descriptor.js +116 -0
  64. data/lib/vue/stores/descriptors.js +167 -0
  65. data/lib/vue/stores/integration.js +103 -0
  66. data/lib/vue/stores/role.js +243 -0
  67. data/lib/vue/stores/roles.js +89 -0
  68. data/lib/vue/stores/systemController.js +67 -0
  69. data/lib/vue/stores/user.js +319 -0
  70. data/lib/vue/stores/users.js +150 -0
  71. data/readme.md +28 -0
  72. metadata +130 -0
@@ -0,0 +1,38 @@
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
+ </script>
36
+
37
+ <template>
38
+ </template>
@@ -0,0 +1,94 @@
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
+
@@ -0,0 +1,141 @@
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 "CloudAdmin/stores/user"
44
+ import { useProfile } from "Lesli/shared/stores/profile"
45
+
46
+
47
+ // · import profile components
48
+ import informationCard from "CloudAdmin/apps/users/components/information-card.vue"
49
+ import informationForm from "CloudAdmin/apps/users/components/information-form.vue"
50
+
51
+ import managementSession from "CloudAdmin/apps/users/components/management-sessions.vue"
52
+ import managementSecurity from "CloudAdmin/apps/users/components/management-security.vue"
53
+
54
+ import integrationsInformation from "CloudAdmin/apps/users/components/integrations-information.vue"
55
+ import settings from "CloudAdmin/apps/users/components/management-settings.vue"
56
+ /*
57
+ import cardInformation from "../users/components/information-card.vue"
58
+ import formInformation from "../users/components/information-form.vue"
59
+ import managementSession from "../users/components/management-sessions.vue"
60
+ import integrationsInformation from "../users/components/integrations-information.vue"
61
+ import subscriptionsComponent from "./components/subscriptions.vue"
62
+ import settings from "../users/components/settings.vue"
63
+ import changeEmail from "./components/change-email.vue"
64
+ */
65
+
66
+
67
+ // · implement stores
68
+ const storeUser = useUser()
69
+ const router = useRouter()
70
+ const route = useRoute()
71
+
72
+
73
+ // · translations
74
+ const translations = {
75
+ core: {
76
+ roles: I18n.t("core.roles"),
77
+ users: I18n.t("core.users"),
78
+ shared: I18n.t("core.shared")
79
+ }
80
+ }
81
+
82
+
83
+ // ·
84
+ const tab = ref(0)
85
+
86
+
87
+ // ·
88
+ onMounted(() => {
89
+ storeUser.getUser()
90
+ storeUser.getOptions()
91
+ })
92
+
93
+ </script>
94
+ <template>
95
+ <application-component>
96
+ <information-card></information-card>
97
+ <lesli-tabs v-model="tab" v-if="storeUser.user.id">
98
+ <lesli-tab-item icon="info_outline" :title="translations.core.users.view_tab_title_information">
99
+ <information-form></information-form>
100
+ </lesli-tab-item>
101
+ <lesli-tab-item icon="security" :title="translations.core.users.view_tab_title_roles_and_privileges">
102
+ <!--form-roles></form-roles -->
103
+ </lesli-tab-item>
104
+ <lesli-tab-item icon="lock_outline" :title="translations.core.users.view_tab_title_security || 'Security'">
105
+ <management-security></management-security>
106
+ </lesli-tab-item>
107
+ <lesli-tab-item icon="devices" :title="translations.core.users.view_tab_title_session || 'Sessions'" paddingless>
108
+ <management-session></management-session>
109
+ </lesli-tab-item>
110
+ <lesli-tab-item icon="settings" :title="translations.core.users.view_tab_title_settings">
111
+ <!--settings></settings-->
112
+ </lesli-tab-item>
113
+ </lesli-tabs>
114
+ </application-component>
115
+ <!--
116
+ <section class="application-component">
117
+ <information-card></information-card>
118
+ <lesli-tabs v-if="storeUser.user.id">
119
+ <lesli-tab-item :title="translations.core.users.view_tab_title_information">
120
+ <information-form></information-form>
121
+ </lesli-tab-item>
122
+ <lesli-tab-item :title="translations.core.users.view_tab_title_subscriptions">
123
+ <subscriptions-component>
124
+ </subscriptions-component>
125
+ </lesli-tab-item>
126
+ <lesli-tab-item :title="translations.core.users.view_tab_title_security">
127
+ <form-security></form-security>
128
+ </lesli-tab-item>
129
+ <lesli-tab-item :title="translations.core.users.view_tab_title_session_management">
130
+ <management-session></management-session>
131
+ </lesli-tab-item>
132
+ <lesli-tab-item :title="translations.core.users.view_tab_title_settings">
133
+ <settings></settings>
134
+ </lesli-tab-item>
135
+ <lesli-tab-item :title="translations.core.users.view_tab_title_integrations">
136
+ <integrations-information></integrations-information>
137
+ </lesli-tab-item>
138
+ </lesli-tabs>
139
+ </section>
140
+ -->
141
+ </template>
@@ -0,0 +1,119 @@
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 Development Platform.
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 vue tools
35
+
36
+
37
+ // · import lesli stores
38
+ import { useUser } from "LesliApp/administration/stores/user"
39
+
40
+
41
+ // · implement stores
42
+ const storeUser = useUser()
43
+
44
+
45
+ // · translations
46
+ const translations = {
47
+ core: {
48
+ users: I18n.t("core.users"),
49
+ shared: I18n.t("core.shared"),
50
+ }
51
+ }
52
+
53
+ </script>
54
+ <template>
55
+ <div class="information-card mb-5">
56
+ <div class="media is-align-items-center">
57
+ <div class="media-left">
58
+ <figure class="image is-128x128">
59
+ <span class="alternative-avatar">
60
+ {{ storeUser.initials }}
61
+ </span>
62
+ </figure>
63
+ </div>
64
+
65
+ <div class="media-content">
66
+ <div class="content mb-0">
67
+ <p>
68
+ <!--
69
+ <strong>
70
+ object_utils.translateEnum(translations.core.shared, 'column_enum_salutation', user.detail_attributes.salutation )
71
+ {{ storeUser.user.detail_attributes.salutation }}
72
+ </strong>
73
+ -->
74
+ <h5 class="title is-5 mb-0">
75
+ {{ storeUser.user.first_name }}
76
+ {{ storeUser.user.last_name }}
77
+ </h5>
78
+ <p>{{ storeUser.user.detail_attributes.title }}</p>
79
+ </p>
80
+ </div>
81
+
82
+ <div class="level is-mobile">
83
+ <div class="level-left">
84
+ <a class="level-item mr-4"
85
+ v-if="storeUser.user.email"
86
+ :href="'mailto:'+storeUser.user.email">
87
+ <span class="icon is-small mr-2">
88
+ <span class="material-icons">
89
+ email
90
+ </span>
91
+ </span>
92
+ {{ storeUser.user.email }}
93
+ </a>
94
+ <a class="level-item mr-4"
95
+ v-if="storeUser.user.telephone"
96
+ :href="'tel:'+storeUser.user.telephone">
97
+ <span class="icon is-small mr-2">
98
+ <span class="material-icons">
99
+ phone
100
+ </span>
101
+ </span>
102
+ {{ storeUser.user.telephone }}
103
+ </a>
104
+
105
+ <!-- Show the max role -->
106
+ <p class="level-item">
107
+ <span class="icon is-small mr-2">
108
+ <span class="material-icons">
109
+ security
110
+ </span>
111
+ </span>
112
+ {{ storeUser.role_names }}
113
+ </p>
114
+ </div>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+ </template>
@@ -0,0 +1,180 @@
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 { onMounted, inject } from "vue"
39
+
40
+
41
+ // · import lesli stores
42
+ import { useUser } from "LesliApp/administration/stores/user"
43
+
44
+
45
+ // · import vue router composable
46
+ import { useRouter, useRoute } from "vue-router"
47
+
48
+
49
+ // · implement stores
50
+ const storeUser = useUser()
51
+
52
+
53
+ // · initialize/inject plugins
54
+ const router = useRouter()
55
+ const route = useRoute()
56
+ const url = inject("url")
57
+
58
+
59
+ // ·
60
+ const translations = {
61
+ users: I18n.t("core.users"),
62
+ shared: I18n.t("core.shared")
63
+ }
64
+
65
+ </script>
66
+ <template>
67
+ <form class="information" @submit.prevent="storeUser.putUser()">
68
+ <div class="field is-horizontal">
69
+ <div class="field-label">
70
+ <label class="label"> {{ translations.shared.view_text_salutation}} </label>
71
+ </div>
72
+ <div class="field-body">
73
+ <div class="field is-narrow">
74
+ <div class="control">
75
+ <label :for="salutation.value" class="radio" v-for="salutation in storeUser.options.salutations" :key="salutation">
76
+ <input name="user_salutation" type="radio" :id="salutation.value" :value="salutation.value" v-model="storeUser.user.detail_attributes.salutation" />
77
+ {{salutation.text}}
78
+ </label>
79
+ </div>
80
+ </div>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="field is-horizontal">
85
+ <div class="field-label is-normal">
86
+ <label class="label">
87
+ {{translations.shared.view_text_email}}
88
+ <span class="is-danger">*</span>
89
+ </label>
90
+ </div>
91
+ <div class="field-body">
92
+ <div class="field">
93
+ <div class="control">
94
+ <input name="user_email" v-model="storeUser.user.email" required="required" type="email" class="input">
95
+ </div>
96
+ </div>
97
+ </div>
98
+ </div>
99
+
100
+ <div class="field is-horizontal">
101
+ <div class="field-label is-normal">
102
+ <label class="label">
103
+ {{ translations.shared.view_text_first_name }}
104
+ </label>
105
+ </div>
106
+ <div class="field-body">
107
+ <div class="field">
108
+ <div class="control">
109
+ <input name="first_name" v-model="storeUser.user.first_name" type="text" class="input">
110
+ </div>
111
+ </div>
112
+ </div>
113
+ </div>
114
+
115
+ <div class="field is-horizontal">
116
+ <div class="field-label is-normal">
117
+ <label class="label"> {{ translations.shared.view_text_last_name }} </label>
118
+ </div>
119
+ <div class="field-body">
120
+ <div class="field">
121
+ <div class="control">
122
+ <input name="last_name" v-model="storeUser.user.last_name" class="input">
123
+ </div>
124
+ </div>
125
+ </div>
126
+ </div>
127
+
128
+ <div class="field is-horizontal">
129
+ <div class="field-label is-normal">
130
+ <label class="label"> {{ translations.shared.view_text_alias }} </label>
131
+ </div>
132
+ <div class="field-body">
133
+ <div class="field">
134
+ <div class="control">
135
+ <input name="user_alias" v-model="storeUser.user.alias" class="input">
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </div>
140
+
141
+ <div class="field is-horizontal">
142
+ <div class="field-label is-normal">
143
+ <label class="label"> {{ translations.shared.view_text_telephone }} </label>
144
+ </div>
145
+ <div class="field-body">
146
+ <div class="field">
147
+ <div class="control">
148
+ <input name="user_number" v-model="storeUser.user.telephone" class="input">
149
+ </div>
150
+ </div>
151
+ </div>
152
+ </div>
153
+
154
+ <div class="field is-horizontal">
155
+ <div class="field-label is-normal">
156
+ <label class="label"> {{ translations.users.view_text_title }} </label>
157
+ </div>
158
+ <div class="field-body">
159
+ <div class="field">
160
+ <div class="control">
161
+ <input name="user_title" v-model="storeUser.user.detail_attributes.title" class="input">
162
+ </div>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ <div class="field is-horizontal">
167
+ <div class="field-label is-normal">
168
+ </div>
169
+ <div class="field-body">
170
+ <div class="field">
171
+ <div class="control">
172
+ <lesli-button icon="save">
173
+ {{ translations.shared.view_btn_save }}
174
+ </lesli-button>
175
+ </div>
176
+ </div>
177
+ </div>
178
+ </div>
179
+ </form>
180
+ </template>
@@ -0,0 +1,61 @@
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 { useProfile } from "Lesli/shared/stores/profile"
37
+
38
+ const storeProfile = useProfile()
39
+
40
+ const translations = {
41
+ core: {
42
+ roles: I18n.t("core.roles"),
43
+ users: I18n.t("core.users"),
44
+ shared: I18n.t("core.shared")
45
+ }
46
+ }
47
+ </script>
48
+ <template>
49
+ <section class="application-component">
50
+ <div class="field is-horizontal">
51
+ <div class="field-label is-normal">
52
+ <label class="label">Google account</label>
53
+ </div>
54
+ <div class="field-body">
55
+ <lesli-button icon="google">
56
+ <a href="/auth/google_oauth2">Connect</a>
57
+ </lesli-button>
58
+ </div>
59
+ </div>
60
+ </section>
61
+ </template>