lesli_driver 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Rakefile +5 -0
- data/app/assets/config/lesli_driver_manifest.js +40 -0
- data/app/assets/images/lesli_driver/driver-logo.svg +101 -0
- data/app/assets/javascripts/lesli_driver/application.js +1 -0
- data/app/assets/stylesheets/lesli_driver/application.scss +96 -0
- data/app/controllers/lesli_driver/application_controller.rb +4 -0
- data/app/controllers/lesli_driver/dashboards_controller.rb +60 -0
- data/app/helpers/lesli_driver/application_helper.rb +4 -0
- data/app/helpers/lesli_driver/dashboards_helper.rb +4 -0
- data/app/jobs/lesli_driver/application_job.rb +4 -0
- data/app/mailers/lesli_driver/application_mailer.rb +6 -0
- data/app/models/lesli_driver/application_record.rb +5 -0
- data/app/models/lesli_driver/dashboard.rb +4 -0
- data/app/views/lesli_driver/dashboards/_dashboard.html.erb +2 -0
- data/app/views/lesli_driver/dashboards/_form.html.erb +17 -0
- data/app/views/lesli_driver/dashboards/edit.html.erb +10 -0
- data/app/views/lesli_driver/dashboards/index.html.erb +14 -0
- data/app/views/lesli_driver/dashboards/new.html.erb +9 -0
- data/app/views/lesli_driver/dashboards/show.html.erb +1 -0
- data/app/views/lesli_driver/partials/_engine-navigation.html.erb +37 -0
- data/config/routes.rb +36 -0
- data/db/migrate/20231007030328_create_lesli_driver_dashboards.rb +8 -0
- data/db/migrate/v1.0/0301000110_create_lesli_driver_accounts.rb +40 -0
- data/db/migrate/v1.0/0301100110_create_lesli_driver_calendars.rb +46 -0
- data/db/migrate/v1.0/0301110110_create_lesli_driver_events.rb +57 -0
- data/db/seed/development.rb +54 -0
- data/db/seed/production.rb +17 -0
- data/db/seed/test.rb +17 -0
- data/db/seeds.rb +25 -0
- data/db/tables/0301010210_create_lesli_driver_catalog_event_types.rb +14 -0
- data/db/tables/0301110310_create_lesli_driver_event_actions.rb +16 -0
- data/db/tables/0301110410_create_lesli_driver_event_activities.rb +15 -0
- data/db/tables/0301110510_create_lesli_driver_event_discussions.rb +17 -0
- data/db/tables/0301110610_create_lesli_driver_event_files.rb +16 -0
- data/db/tables/0301110710_create_lesli_driver_event_subscribers.rb +16 -0
- data/db/tables/0301111010_create_lesli_driver_event_attendants.rb +13 -0
- data/lib/lesli_driver/engine.rb +51 -0
- data/lib/lesli_driver/version.rb +4 -0
- data/lib/lesli_driver.rb +6 -0
- data/lib/tasks/lesli_driver_tasks.rake +4 -0
- data/lib/vue/application.js +46 -0
- data/lib/vue/apps/calendar/show.vue +34 -0
- data/lib/vue/components/agenda.vue +108 -0
- data/lib/vue/components/calendar.vue +143 -0
- data/lib/vue/components/event.vue +97 -0
- data/lib/vue/components/form.vue +143 -0
- data/lib/vue/components/guests.vue +148 -0
- data/lib/vue/stores/calendar.js +246 -0
- data/lib/vue/stores/event.js +53 -0
- data/lib/vue/stores/guests.js +213 -0
- data/license +674 -0
- data/readme.md +67 -0
- metadata +112 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateCloudDriverEventDiscussions < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :cloud_driver_event_discussions do |t|
|
4
|
+
table_base_structure = JSON.parse(File.read(Rails.root.join('db','structure','00000005_discussions.json')))
|
5
|
+
table_base_structure.each do |column|
|
6
|
+
t.send(
|
7
|
+
column["type"].parameterize.underscore.to_sym,
|
8
|
+
column["name"].parameterize.underscore.to_sym
|
9
|
+
)
|
10
|
+
end
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_reference :cloud_driver_event_discussions, :users, foreign_key: true
|
14
|
+
add_reference :cloud_driver_event_discussions, :cloud_driver_event_discussions, foreign_key: true, index: { name: "driver_event_discussions_event_discussions" }
|
15
|
+
add_reference :cloud_driver_event_discussions, :cloud_driver_events, foreign_key: true, index: { name: "driver_event_discussions_events" }
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateCloudDriverEventFiles < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
table_base_structure = JSON.parse(File.read(Rails.root.join('db','structure','00000006_files.json')))
|
4
|
+
create_table :cloud_driver_event_files do |t|
|
5
|
+
table_base_structure.each do |column|
|
6
|
+
t.send(
|
7
|
+
column["type"].parameterize.underscore.to_sym,
|
8
|
+
column["name"].parameterize.underscore.to_sym
|
9
|
+
)
|
10
|
+
end
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_reference :cloud_driver_event_files, :users, foreign_key: true
|
14
|
+
add_reference :cloud_driver_event_files, :cloud_driver_events, foreign_key: true
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateCloudDriverEventSubscribers < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
table_base_structure = JSON.parse(File.read(Rails.root.join('db','structure','00000007_subscribers.json')))
|
4
|
+
create_table :cloud_driver_event_subscribers do |t|
|
5
|
+
table_base_structure.each do |column|
|
6
|
+
t.send(
|
7
|
+
column["type"].parameterize.underscore.to_sym,
|
8
|
+
column["name"].parameterize.underscore.to_sym
|
9
|
+
)
|
10
|
+
end
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
add_reference :cloud_driver_event_subscribers, :users, foreign_key: true, index: { name: 'driver_event_subscribers_users' }
|
14
|
+
add_reference :cloud_driver_event_subscribers, :cloud_driver_events, foreign_key: true, index: { name: 'driver_event_subscribers_events' }
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateCloudDriverEventAttendants < ActiveRecord::Migration[6.0]
|
2
|
+
def change
|
3
|
+
create_table :cloud_driver_event_attendants do |t|
|
4
|
+
t.datetime :confirmed_at
|
5
|
+
|
6
|
+
# acts_as_paranoid
|
7
|
+
t.datetime :deleted_at, index: true
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_reference(:cloud_driver_event_attendants, :user, foreign_key: { to_table: :users })
|
11
|
+
add_reference(:cloud_driver_event_attendants, :event, foreign_key: { to_table: :cloud_driver_events })
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,51 @@
|
|
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.dev
|
27
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
28
|
+
|
29
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
30
|
+
// ·
|
31
|
+
=end
|
32
|
+
|
33
|
+
module LesliDriver
|
34
|
+
class Engine < ::Rails::Engine
|
35
|
+
isolate_namespace LesliDriver
|
36
|
+
|
37
|
+
initializer :lesli_driver do |app|
|
38
|
+
|
39
|
+
# register assets manifest
|
40
|
+
config.assets.precompile += %w[lesli_driver_manifest.js]
|
41
|
+
|
42
|
+
# register engine migrations path
|
43
|
+
unless app.root.to_s.match root.to_s
|
44
|
+
config.paths["db/migrate"].expanded.each do |expanded_path|
|
45
|
+
app.config.paths["db/migrate"] << expanded_path
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/lesli_driver.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
/*
|
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
|
+
// ·
|
35
|
+
import application from "Lesli/application"
|
36
|
+
|
37
|
+
|
38
|
+
// · Import apps and components
|
39
|
+
import appCalendarShow from "LesliDriver/apps/calendar/show.vue"
|
40
|
+
|
41
|
+
|
42
|
+
// ·
|
43
|
+
application("LesliDriver", [{
|
44
|
+
path: "/dashboard",
|
45
|
+
component: appCalendarShow
|
46
|
+
}])
|
@@ -0,0 +1,34 @@
|
|
1
|
+
<script setup>
|
2
|
+
/*
|
3
|
+
Copyright (c) 2023, all rights reserved.
|
4
|
+
|
5
|
+
All the information provided by this platform is protected by international laws related to
|
6
|
+
industrial property, intellectual property, copyright and relative international laws.
|
7
|
+
All intellectual or industrial property rights of the code, texts, trade mark, design,
|
8
|
+
pictures and any other information belongs to the owner of this platform.
|
9
|
+
|
10
|
+
Without the written permission of the owner, any replication, modification,
|
11
|
+
transmission, publication is strictly forbidden.
|
12
|
+
|
13
|
+
For more information read the license file including with this software.
|
14
|
+
|
15
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
16
|
+
// ·
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
// · import vue tools
|
21
|
+
import { ref, reactive, onMounted, watch, computed, inject } from "vue"
|
22
|
+
import { useRouter, useRoute } from "vue-router"
|
23
|
+
|
24
|
+
|
25
|
+
// · Import components
|
26
|
+
import componentCalendar from "LesliDriver/components/calendar.vue"
|
27
|
+
|
28
|
+
</script>
|
29
|
+
<template>
|
30
|
+
<lesli-application-container dashboard>
|
31
|
+
<component-calendar class="mt-4">
|
32
|
+
</component-calendar>
|
33
|
+
</lesli-application-container>
|
34
|
+
</template>
|
@@ -0,0 +1,108 @@
|
|
1
|
+
<script setup>
|
2
|
+
/*
|
3
|
+
Copyright (c) 2022, all rights reserved.
|
4
|
+
|
5
|
+
All the information provided by this platform is protected by international laws related to
|
6
|
+
industrial property, intellectual property, copyright and relative international laws.
|
7
|
+
All intellectual or industrial property rights of the code, texts, trade mark, design,
|
8
|
+
pictures and any other information belongs to the owner of this platform.
|
9
|
+
|
10
|
+
Without the written permission of the owner, any replication, modification,
|
11
|
+
transmission, publication is strictly forbidden.
|
12
|
+
|
13
|
+
For more information read the license file including with this software.
|
14
|
+
|
15
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
16
|
+
// ·
|
17
|
+
*/
|
18
|
+
|
19
|
+
|
20
|
+
// ·
|
21
|
+
import { onMounted, watch, ref } from "vue"
|
22
|
+
|
23
|
+
|
24
|
+
// ·
|
25
|
+
import dayjs from "dayjs"
|
26
|
+
|
27
|
+
|
28
|
+
// · import lesli stores
|
29
|
+
import { useCalendar } from 'CloudDriver/stores/calendar'
|
30
|
+
|
31
|
+
|
32
|
+
// · implement stores
|
33
|
+
const storeCalendar = useCalendar()
|
34
|
+
|
35
|
+
|
36
|
+
// ·
|
37
|
+
const agenda = ref([])
|
38
|
+
const today_iso = dayjs().format('YYYY-MM-DD')
|
39
|
+
|
40
|
+
|
41
|
+
// ·
|
42
|
+
function merge() {
|
43
|
+
|
44
|
+
let events = [
|
45
|
+
...storeCalendar.calendarData.driver_events,
|
46
|
+
...storeCalendar.calendarData.help_tickets
|
47
|
+
]
|
48
|
+
|
49
|
+
let count = 0
|
50
|
+
|
51
|
+
events = events.filter(event => {
|
52
|
+
|
53
|
+
if (count >= 6) {
|
54
|
+
return
|
55
|
+
}
|
56
|
+
|
57
|
+
let event_date = dayjs(event.date).format('YYYY-MM-DD')
|
58
|
+
|
59
|
+
if (event_date < today_iso) {
|
60
|
+
return
|
61
|
+
}
|
62
|
+
|
63
|
+
let format = "DD MMM"
|
64
|
+
|
65
|
+
event.time = event.start
|
66
|
+
|
67
|
+
if (event_date == today_iso) {
|
68
|
+
format = "HH:mm"
|
69
|
+
}
|
70
|
+
|
71
|
+
if (event.start) { event['start'] = dayjs(event.start).format(format) }
|
72
|
+
if (event.description) { event['description'] = event.description.substring(0, 40) + '...' }
|
73
|
+
|
74
|
+
event.classNames = event.classNames
|
75
|
+
|
76
|
+
count++
|
77
|
+
|
78
|
+
return event
|
79
|
+
|
80
|
+
})
|
81
|
+
|
82
|
+
events = events.sort((a,b) => a.time > b.time)
|
83
|
+
|
84
|
+
agenda.value = events
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
// ·
|
89
|
+
watch(() => storeCalendar.calendarData.driver_events, () => merge())
|
90
|
+
|
91
|
+
</script>
|
92
|
+
<template>
|
93
|
+
<div class="driver-agenda">
|
94
|
+
<h3>Upcoming events</h3>
|
95
|
+
<div
|
96
|
+
class="is-flex is-align-items-center event"
|
97
|
+
v-for="(event, index) in agenda"
|
98
|
+
:key="index">
|
99
|
+
<span class="date">
|
100
|
+
{{ event.start }}
|
101
|
+
</span>
|
102
|
+
<div :class="['description', event.classNames]">
|
103
|
+
<p>{{ event.title }}</p>
|
104
|
+
<p>{{ event.description }}</p>
|
105
|
+
</div>
|
106
|
+
</div>
|
107
|
+
</div>
|
108
|
+
</template>
|
@@ -0,0 +1,143 @@
|
|
1
|
+
<script setup>
|
2
|
+
/*
|
3
|
+
Copyright (c) 2023, all rights reserved.
|
4
|
+
|
5
|
+
All the information provided by this platform is protected by international laws related to
|
6
|
+
industrial property, intellectual property, copyright and relative international laws.
|
7
|
+
All intellectual or industrial property rights of the code, texts, trade mark, design,
|
8
|
+
pictures and any other information belongs to the owner of this platform.
|
9
|
+
|
10
|
+
Without the written permission of the owner, any replication, modification,
|
11
|
+
transmission, publication is strictly forbidden.
|
12
|
+
|
13
|
+
For more information read the license file including with this software.
|
14
|
+
|
15
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
16
|
+
*/
|
17
|
+
|
18
|
+
|
19
|
+
// · Import components, libraries and tools
|
20
|
+
import { onMounted, inject, ref } from "vue"
|
21
|
+
import { Calendar } from '@fullcalendar/core'
|
22
|
+
import dayGridPlugin from '@fullcalendar/daygrid'
|
23
|
+
import timeGridPlugin from '@fullcalendar/timegrid'
|
24
|
+
import interactionPlugin from '@fullcalendar/interaction'
|
25
|
+
import listPlugin from '@fullcalendar/list';
|
26
|
+
|
27
|
+
|
28
|
+
// ·
|
29
|
+
const date = inject("date")
|
30
|
+
|
31
|
+
const storeCalendar = ref({ calendar: null })
|
32
|
+
|
33
|
+
|
34
|
+
// ·
|
35
|
+
function initCalendar() {
|
36
|
+
storeCalendar.calendar = new Calendar(document.getElementById("driver-calendar"), {
|
37
|
+
plugins: [
|
38
|
+
dayGridPlugin,
|
39
|
+
interactionPlugin,
|
40
|
+
timeGridPlugin,
|
41
|
+
listPlugin
|
42
|
+
],
|
43
|
+
headerToolbar: false,
|
44
|
+
firstDay: 1,
|
45
|
+
locale: I18n.currentLocale(),
|
46
|
+
initialView: 'dayGridMonth',
|
47
|
+
showNonCurrentDates: true,
|
48
|
+
events: [],
|
49
|
+
eventClick: storeCalendar.onEventClick,
|
50
|
+
dateClick: storeCalendar.onDateClick,
|
51
|
+
eventContent: function (args) {
|
52
|
+
|
53
|
+
let title = document.createElement('span')
|
54
|
+
let time = document.createElement('span')
|
55
|
+
title.innerHTML = args.event.title
|
56
|
+
time.innerHTML = date.time(args.event._def.extendedProps.dateStart)
|
57
|
+
|
58
|
+
if (args.event._def.extendedProps.dateEnd) {
|
59
|
+
time.innerHTML += (" - " + date.time(args.event._def.extendedProps.dateEnd))
|
60
|
+
}
|
61
|
+
|
62
|
+
title.classList.add('event-title')
|
63
|
+
time.classList.add('event-time')
|
64
|
+
return { domNodes: [title, time] }
|
65
|
+
}
|
66
|
+
})
|
67
|
+
storeCalendar.calendar.render()
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
onMounted(() => {
|
72
|
+
let calendar = new Calendar(document.getElementById("driver-calendar"), {
|
73
|
+
plugins: [
|
74
|
+
dayGridPlugin,
|
75
|
+
interactionPlugin,
|
76
|
+
timeGridPlugin,
|
77
|
+
listPlugin
|
78
|
+
],
|
79
|
+
headerToolbar: {
|
80
|
+
left: '',
|
81
|
+
center: 'title',
|
82
|
+
right: ''
|
83
|
+
},
|
84
|
+
firstDay: 1,
|
85
|
+
initialView: 'dayGridMonth',
|
86
|
+
showNonCurrentDates: true,
|
87
|
+
dayMaxEvents: true, // allow "more" link when too many events
|
88
|
+
editable: true,
|
89
|
+
events: [{
|
90
|
+
title: 'All Day Event',
|
91
|
+
start: '2023-10-01',
|
92
|
+
classNames: "ldonis"
|
93
|
+
}, {
|
94
|
+
title: 'Long Event',
|
95
|
+
start: '2023-10-07',
|
96
|
+
end: '2023-10-10'
|
97
|
+
}, {
|
98
|
+
groupId: 999,
|
99
|
+
title: 'Repeating Event',
|
100
|
+
start: '2023-10-09T16:00:00'
|
101
|
+
}, {
|
102
|
+
groupId: 999,
|
103
|
+
title: 'Repeating Event',
|
104
|
+
start: '2023-10-16T16:00:00'
|
105
|
+
}, {
|
106
|
+
title: 'Conference',
|
107
|
+
start: '2023-10-11',
|
108
|
+
end: '2023-10-13'
|
109
|
+
}, {
|
110
|
+
title: 'Meeting',
|
111
|
+
start: '2023-10-12T10:30:00',
|
112
|
+
end: '2023-10-12T12:30:00'
|
113
|
+
}, {
|
114
|
+
title: 'Lunch',
|
115
|
+
start: '2023-10-12T12:00:00'
|
116
|
+
}, {
|
117
|
+
title: 'Meeting',
|
118
|
+
start: '2023-10-15T14:30:00'
|
119
|
+
}, {
|
120
|
+
title: 'Happy Hour',
|
121
|
+
start: '2023-10-15T17:30:00'
|
122
|
+
}, {
|
123
|
+
title: 'Dinner',
|
124
|
+
start: '2023-10-12T20:00:00'
|
125
|
+
}, {
|
126
|
+
title: 'Birthday Party',
|
127
|
+
start: '2023-10-13T07:00:00'
|
128
|
+
}, {
|
129
|
+
title: 'Click for Google',
|
130
|
+
url: 'http://google.com/',
|
131
|
+
start: '2023-10-28'
|
132
|
+
}]
|
133
|
+
});
|
134
|
+
|
135
|
+
setTimeout(() => { calendar.render(); }, 100)
|
136
|
+
|
137
|
+
})
|
138
|
+
|
139
|
+
</script>
|
140
|
+
|
141
|
+
<template>
|
142
|
+
<div id="driver-calendar"></div>
|
143
|
+
</template>
|
@@ -0,0 +1,97 @@
|
|
1
|
+
<script setup>
|
2
|
+
/*
|
3
|
+
Copyright (c) 2023, all rights reserved.
|
4
|
+
|
5
|
+
All the information provided by this platform is protected by international laws related to
|
6
|
+
industrial property, intellectual property, copyright and relative international laws.
|
7
|
+
All intellectual or industrial property rights of the code, texts, trade mark, design,
|
8
|
+
pictures and any other information belongs to the owner of this platform.
|
9
|
+
|
10
|
+
Without the written permission of the owner, any replication, modification,
|
11
|
+
transmission, publication is strictly forbidden.
|
12
|
+
|
13
|
+
For more information read the license file including with this software.
|
14
|
+
|
15
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
16
|
+
// ·
|
17
|
+
*/
|
18
|
+
|
19
|
+
// · Import components, libraries and tools
|
20
|
+
import { onMounted } from 'vue'
|
21
|
+
import ComponentDiscussions from "LesliVue/cloud-objects/discussion.vue"
|
22
|
+
import ComponentFiles from "LesliVue/cloud-objects/file.vue"
|
23
|
+
import ComponentGuests from './guests.vue'
|
24
|
+
import ComponentForm from './form.vue'
|
25
|
+
|
26
|
+
// · import lesli stores
|
27
|
+
import { useEvent } from 'CloudDriver/stores/event'
|
28
|
+
import { useCalendar } from 'CloudDriver/stores/calendar'
|
29
|
+
import { useUsers } from "LesliVue/stores/users"
|
30
|
+
|
31
|
+
// · implement stores
|
32
|
+
const storeEvent = useEvent()
|
33
|
+
const storeCalendar = useCalendar()
|
34
|
+
const storeUsers = useUsers()
|
35
|
+
|
36
|
+
onMounted(() => {
|
37
|
+
storeEvent.getOptions()
|
38
|
+
storeUsers.fetchList()
|
39
|
+
})
|
40
|
+
|
41
|
+
const translations = {
|
42
|
+
events: I18n.t('driver.events'),
|
43
|
+
core: I18n.t('core.shared'),
|
44
|
+
}
|
45
|
+
|
46
|
+
const deleteEvent = async () => {
|
47
|
+
await storeCalendar.deleteEvent()
|
48
|
+
}
|
49
|
+
|
50
|
+
</script>
|
51
|
+
|
52
|
+
<template>
|
53
|
+
|
54
|
+
<lesli-panel v-model:open="storeEvent.showModal">
|
55
|
+
<template #header>
|
56
|
+
</template>
|
57
|
+
|
58
|
+
<template #default>
|
59
|
+
<lesli-tabs v-if="storeCalendar.event.id" v-model="tab">
|
60
|
+
|
61
|
+
<lesli-tab-item :title="translations.core.view_tab_title_general_information" icon="info">
|
62
|
+
<ComponentForm />
|
63
|
+
</lesli-tab-item>
|
64
|
+
|
65
|
+
<lesli-tab-item :title="translations.core.view_btn_discussions" icon="forum">
|
66
|
+
<ComponentDiscussions cloud-module="driver" cloud-object="events"
|
67
|
+
:cloud-object-id="storeCalendar.event.id" :onlyDiscussions="true">
|
68
|
+
</ComponentDiscussions>
|
69
|
+
</lesli-tab-item>
|
70
|
+
|
71
|
+
<lesli-tab-item :title="translations.core.view_btn_files" icon="attach_file">
|
72
|
+
<ComponentFiles cloud-module="driver" cloud-object="events"
|
73
|
+
:cloud-object-id="storeCalendar.event.id"
|
74
|
+
:accepted-files="['images', 'documents', 'plaintext']">
|
75
|
+
</ComponentFiles>
|
76
|
+
</lesli-tab-item>
|
77
|
+
|
78
|
+
<lesli-tab-item :title="translations.events.view_tab_title_assignments" icon="group">
|
79
|
+
<ComponentGuests />
|
80
|
+
</lesli-tab-item>
|
81
|
+
|
82
|
+
<lesli-tab-item :title="translations.events.view_tab_title_delete_section" icon="delete">
|
83
|
+
<button @click="deleteEvent()" class="button is-fullwidth has-text-centered is-danger"
|
84
|
+
:disabled="storeEvent.submit.delete">
|
85
|
+
<span class="delete">{{ translations.core.view_btn_delete }}
|
86
|
+
</span>
|
87
|
+
{{ translations.core.view_btn_delete }}
|
88
|
+
</button>
|
89
|
+
</lesli-tab-item>
|
90
|
+
</lesli-tabs>
|
91
|
+
|
92
|
+
<ComponentForm v-else />
|
93
|
+
|
94
|
+
</template>
|
95
|
+
</lesli-panel>
|
96
|
+
|
97
|
+
</template>
|