@ozdao/prometheus-framework 0.2.32 → 0.2.33
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/main.css +1 -1
- package/dist/prometheus-framework.cjs.js +21 -21
- package/dist/prometheus-framework.es.js +1037 -1023
- package/package.json +1 -1
- package/src/components/Countdown/Countdown.vue +75 -0
- package/src/components/EditImages/EditImages.vue +10 -2
- package/src/components/Upload/Upload.vue +32 -6
- package/src/components/UploadImage/UploadImage.vue +12 -8
- package/src/components/UploadImageMultiple/UploadImageMultiple.vue +4 -2
- package/src/modules/events/components/pages/EditEvent.vue +288 -1
- package/src/modules/events/components/pages/Event.vue +125 -46
- package/src/modules/events/components/sections/HeroEvent.vue +161 -0
- package/src/modules/events/components/sections/SectionLineup.vue +42 -0
- package/src/modules/events/components/sections/SectionMainGuest.vue +104 -0
- package/src/modules/events/components/sections/SectionPreviousEvents.vue +119 -0
- package/src/modules/events/components/sections/SectionSpecialGuests.vue +47 -0
- package/src/modules/events/controllers/events.controller.js +1 -0
- package/src/modules/events/controllers/utils/queryProcessor.js +2 -0
- package/src/modules/events/models/event.model.js +28 -0
- package/src/modules/events/store/events.js +4 -0
- package/src/modules/files/controllers/files.controller.js +3 -0
- package/src/modules/files/middlewares/server/middlewareBusboy.js +115 -100
- package/src/modules/files/routes/files.routes.js +3 -4
- package/src/modules/globals/globals.server.js +0 -1
- package/src/modules/orders/components/blocks/CardOrder.vue +5 -5
- package/src/modules/orders/components/blocks/StatusHistory.vue +84 -0
- package/src/modules/orders/components/pages/Order.vue +11 -54
- package/src/modules/orders/controllers/orders.controller.js +17 -9
- package/src/modules/orders/models/order.model.js +19 -0
- package/src/modules/orders/routes/orders.routes.js +4 -1
@@ -20,54 +20,126 @@
|
|
20
20
|
|
21
21
|
|
22
22
|
<TransitionGroup tag="ul" name="fade" class="container">
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
23
|
+
<HeroEvent
|
24
|
+
v-if="!isLoading && event && event.special"
|
25
|
+
:content="{
|
26
|
+
title: event.name,
|
27
|
+
description: event.description,
|
28
|
+
ticketLinkStripe: event.specialData.ticketLinkStripe,
|
29
|
+
subtitle: event.specialData.subtitle,
|
30
|
+
logos: event.specialData.logos,
|
31
|
+
video: event.specialData.video,
|
32
|
+
buyticket: 'Buy ticket',
|
33
|
+
booktable: 'Book table'
|
34
|
+
}"
|
35
|
+
:options="{
|
36
|
+
date: event.date.start,
|
37
|
+
price: event.specialData.ticketPrice,
|
38
|
+
}"
|
39
|
+
/>
|
40
|
+
<SectionMainGuest
|
41
|
+
v-if="!isLoading && event && event.special"
|
42
|
+
:content="{
|
43
|
+
title: event.specialData.guestTitle,
|
44
|
+
description: event.specialData.guestDescription,
|
45
|
+
socials: {
|
46
|
+
twitter: event.specialData.guestTwitter,
|
47
|
+
telegram: event.specialData.guestTelegram,
|
48
|
+
instagram: event.specialData.guestInstagram,
|
49
|
+
facebook: event.specialData.guestFacebook
|
50
|
+
},
|
51
|
+
video: event.specialData.guestVideo,
|
52
|
+
spotify: event.specialData.guestSpotify,
|
53
|
+
soundcloud: event.specialData.guestSoundcloud,
|
54
|
+
}"
|
55
|
+
/>
|
56
|
+
|
57
|
+
<section
|
58
|
+
v-if="!isLoading && event && event.special"
|
59
|
+
:style="`
|
60
|
+
background-image: url(${event.specialData.lineupBackground});
|
61
|
+
background-size: 100%; background-repeat: no-repeat;
|
62
|
+
`"
|
63
|
+
class="t-white gap-big w-100 h-max o-hidden radius-big pd-big pos-relative bg-black"
|
64
|
+
>
|
65
|
+
<h2 class="mn-b-big w-100 t-center">Event Details</h2>
|
66
|
+
<div class="gap-big mn-b-thin cols-2">
|
67
|
+
|
68
|
+
<SectionSpecialGuests
|
69
|
+
:content="{
|
70
|
+
title: 'Special Guests',
|
71
|
+
description:'Enjoy a festive dining experience at The Commune, featuring a fine selection of dishes and drinks presented on your table throughout the evening.',
|
72
|
+
guests: event.specialData.guests
|
73
|
+
}"
|
74
|
+
/>
|
75
|
+
|
76
|
+
<SectionLineUp
|
77
|
+
:content="{
|
78
|
+
title: 'Lineup',
|
79
|
+
lineup: event.specialData.lineup
|
80
|
+
}"
|
81
|
+
/>
|
82
|
+
|
83
|
+
</div>
|
84
|
+
|
85
|
+
<SectionPreviousEvents
|
86
|
+
:content="{
|
87
|
+
ticket: event.specialData.ticketImage
|
88
|
+
}"
|
89
|
+
:options="{
|
90
|
+
link: event.specialData.ticketLinkStripe
|
91
|
+
}"
|
92
|
+
/>
|
93
|
+
</section>
|
94
|
+
|
95
|
+
<CardEvent
|
96
|
+
v-if="!isLoading && event && !event.special"
|
97
|
+
@click="$router.push({name: 'Event', params: {url: event.url}})"
|
98
|
+
:event="event"
|
99
|
+
:owner="event.owner"
|
100
|
+
:user="auth.state.user._id"
|
101
|
+
:type="'normal'"
|
102
|
+
class="mn-b-medium bg-grey radius-big"
|
103
|
+
>
|
104
|
+
<ButtonJoin
|
105
|
+
v-if="auth.state.user._id"
|
106
|
+
:type="'event'"
|
107
|
+
:hasTicket="event.hasTicket"
|
108
|
+
:targetId="event._id"
|
109
|
+
:userId="auth.state.user._id"
|
110
|
+
class="mn-b-small w-100 pd-medium mn-auto"
|
111
|
+
@updateTicket="handleTicketUpdate"
|
112
|
+
/>
|
113
|
+
|
114
|
+
<section>
|
115
|
+
<component
|
116
|
+
v-if="event && event.content"
|
117
|
+
v-for="(block, index) in event.content"
|
118
|
+
:is="ComponentMap[block.type]"
|
119
|
+
:key="index"
|
120
|
+
:index="index"
|
121
|
+
:component="block"
|
122
|
+
:prop="block"
|
123
|
+
:class="block.class"
|
124
|
+
content="content"
|
125
|
+
v-bind="getBlockProps(block)"
|
126
|
+
class="mn-b-regular"
|
40
127
|
/>
|
128
|
+
</section>
|
129
|
+
|
130
|
+
</CardEvent>
|
41
131
|
|
42
|
-
<section>
|
43
|
-
<component
|
44
|
-
v-if="event && event.content"
|
45
|
-
v-for="(block, index) in event.content"
|
46
|
-
:is="ComponentMap[block.type]"
|
47
|
-
:key="index"
|
48
|
-
:index="index"
|
49
|
-
:component="block"
|
50
|
-
:prop="block"
|
51
|
-
:class="block.class"
|
52
|
-
content="content"
|
53
|
-
v-bind="getBlockProps(block)"
|
54
|
-
class="mn-b-regular"
|
55
|
-
/>
|
56
|
-
</section>
|
57
|
-
|
58
|
-
</CardEvent>
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
<Comments
|
63
|
-
v-if="!isLoading && event"
|
64
|
-
:type="'event'"
|
65
|
-
:target="event._id"
|
66
|
-
:owner="auth.state.user._id"
|
67
|
-
/>
|
68
|
-
|
69
|
-
</TransitionGroup>
|
70
132
|
|
133
|
+
|
134
|
+
<Comments
|
135
|
+
v-if="!isLoading && event && !event.special"
|
136
|
+
:type="'event'"
|
137
|
+
:target="event._id"
|
138
|
+
:owner="auth.state.user._id"
|
139
|
+
/>
|
140
|
+
|
141
|
+
</TransitionGroup>
|
142
|
+
|
71
143
|
</section>
|
72
144
|
</template>
|
73
145
|
|
@@ -76,7 +148,14 @@
|
|
76
148
|
|
77
149
|
import Loader from '@pf/src/components/Loader/Loader.vue';
|
78
150
|
import EmptyState from '@pf/src/components/EmptyState/EmptyState.vue';
|
79
|
-
|
151
|
+
|
152
|
+
import HeroEvent from '@pf/src/modules/events/components/sections/HeroEvent.vue';
|
153
|
+
import SectionMainGuest from '@pf/src/modules/events/components/sections/SectionMainGuest.vue';
|
154
|
+
import SectionSpecialGuests from '@pf/src/modules/events/components/sections/SectionSpecialGuests.vue'
|
155
|
+
import SectionLineUp from '@pf/src/modules/events/components/sections/SectionLineUp.vue';
|
156
|
+
import SectionPreviousEvents from '@pf/src/modules/events/components/sections/SectionPreviousEvents.vue';
|
157
|
+
|
158
|
+
|
80
159
|
import CardEvent from '@pf/src/modules/events/components/blocks/CardEvent.vue';
|
81
160
|
import SkeletonEvent from '@pf/src/modules/icons/skeletons/SkeletonEvent.vue'
|
82
161
|
import ButtonJoin from '@pf/src/modules/events/components/elements/ButtonJoin.vue';
|
@@ -0,0 +1,161 @@
|
|
1
|
+
<template>
|
2
|
+
<section
|
3
|
+
class="
|
4
|
+
t-white
|
5
|
+
t-center
|
6
|
+
w-100
|
7
|
+
h-100
|
8
|
+
pos-relative
|
9
|
+
gap-thin
|
10
|
+
cols-2
|
11
|
+
pos-relative
|
12
|
+
"
|
13
|
+
>
|
14
|
+
<div
|
15
|
+
style="min-height: 20rem;"
|
16
|
+
class="desktop-only radius-big o-hidden bg-black pos-relative"
|
17
|
+
>
|
18
|
+
<video
|
19
|
+
v-if="content.video"
|
20
|
+
style="object-fit: cover;"
|
21
|
+
ref="videoElement"
|
22
|
+
class="pos-absolute pos-t-0 pos-l-0 w-100 h-100"
|
23
|
+
preload autoplay muted loop playsinlineclass playsinline :src="content.video"
|
24
|
+
itemprop="video"
|
25
|
+
type="video/webm"
|
26
|
+
>
|
27
|
+
</video>
|
28
|
+
</div>
|
29
|
+
|
30
|
+
<div
|
31
|
+
class="
|
32
|
+
content-hero-refactor
|
33
|
+
radius-big
|
34
|
+
o-hidden
|
35
|
+
bg-black
|
36
|
+
pd-big mn-r-auto mn-l-auto t-white flex-h-center flex-column o-hidden flex-v-start t-left flex w-100 h-100 gap-zero">
|
37
|
+
<!-- <img src="/logo/jungle-stereo-cosmonaut.png" class="h-8r mn-b-small z-index-1"/> -->
|
38
|
+
<div class="mn-b-big z-index-1 flex-nowrap flex gap-small">
|
39
|
+
<img v-for="logo in content.logos" class="i-big" :src="logo">
|
40
|
+
</div>
|
41
|
+
|
42
|
+
<h3 class="pd-thin z-index-1 w-max br-solid br-2px br-white radius-extra mn-b-thin">
|
43
|
+
{{content?.subtitle}}
|
44
|
+
</h3>
|
45
|
+
|
46
|
+
<h1 class="z-index-1 t-main mn-b-semi">
|
47
|
+
{{content?.title}}
|
48
|
+
</h1>
|
49
|
+
|
50
|
+
<p class="z-index-1 p-big mn-b-semi">
|
51
|
+
{{content?.description}}
|
52
|
+
</p>
|
53
|
+
|
54
|
+
<p class="z-index-1 t-transp p-small mn-b-thin">
|
55
|
+
|
56
|
+
Hurry up and purchase your ticket at a special price of only <span class="bg-white t-black pd-t-nano pd-b-nano pd-r-micro pd-l-micro radius-extra">{{options?.price}} {{returnCurrency()}}</span>
|
57
|
+
</p>
|
58
|
+
|
59
|
+
|
60
|
+
<Countdown
|
61
|
+
class="z-index-1 mn-b-small w-40"
|
62
|
+
:options="props.options"
|
63
|
+
/>
|
64
|
+
<div v-if="content?.ticketLinkStripe" class="z-index-1 mn-t-medium mn-b-small flex-nowrap flex gap-thin">
|
65
|
+
<!-- <a href="#" class="pd-l-medium pd-r-medium pd-t-small pd-b-small radius-extra uppercase t-medium t-black bg-white ">
|
66
|
+
Sold Out
|
67
|
+
</a> -->
|
68
|
+
<a href="#" @click="clickBuyTicket()" class="pd-l-medium pd-r-medium pd-t-small pd-b-small radius-extra uppercase t-medium t-black bg-white ">
|
69
|
+
{{content?.buyticket}}
|
70
|
+
</a>
|
71
|
+
</div>
|
72
|
+
|
73
|
+
<video
|
74
|
+
v-if="content.video"
|
75
|
+
style="object-fit: cover; opacity: 0.2;"
|
76
|
+
ref="videoElement"
|
77
|
+
class="mobile-only pos-absolute z-index-0 pos-t-0 pos-l-0 w-100 h-100"
|
78
|
+
preload autoplay muted loop playsinlineclass playsinline :src="content.video"
|
79
|
+
itemprop="video"
|
80
|
+
type="video/webm"
|
81
|
+
>
|
82
|
+
</video>
|
83
|
+
|
84
|
+
</div>
|
85
|
+
|
86
|
+
|
87
|
+
</section>
|
88
|
+
</template>
|
89
|
+
|
90
|
+
|
91
|
+
<script setup>
|
92
|
+
import { useI18n } from 'vue-i18n'
|
93
|
+
|
94
|
+
import Countdown from "@pf/src/components/Countdown/Countdown.vue"
|
95
|
+
|
96
|
+
import { ref, onMounted } from 'vue'
|
97
|
+
const videoElement = ref(null)
|
98
|
+
|
99
|
+
var isPlaying = false;
|
100
|
+
|
101
|
+
function checkAndPlayVideo() {
|
102
|
+
// Initializing values
|
103
|
+
|
104
|
+
// On video playing toggle values
|
105
|
+
videoElement.value.onplaying = function() {
|
106
|
+
isPlaying = true;
|
107
|
+
};
|
108
|
+
|
109
|
+
// On video pause toggle values
|
110
|
+
videoElement.value.onpause = function() {
|
111
|
+
isPlaying = false;
|
112
|
+
};
|
113
|
+
}
|
114
|
+
|
115
|
+
// Play video function
|
116
|
+
async function playVid() {
|
117
|
+
if (videoElement.value.paused && !isPlaying) {
|
118
|
+
return videoElement.value.play();
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
onMounted(() => {
|
123
|
+
checkAndPlayVideo()
|
124
|
+
playVid()
|
125
|
+
})
|
126
|
+
|
127
|
+
|
128
|
+
const props = defineProps({
|
129
|
+
content: {
|
130
|
+
type: Object
|
131
|
+
},
|
132
|
+
options: {
|
133
|
+
type: Object
|
134
|
+
}
|
135
|
+
})
|
136
|
+
|
137
|
+
|
138
|
+
function clickBuyTicket () {
|
139
|
+
gtag('event', 'buy_ticket', {
|
140
|
+
'event_category': 'conversion',
|
141
|
+
'event_label': 'Buy Ticket'
|
142
|
+
});
|
143
|
+
|
144
|
+
window.open(props.content?.ticketLinkStripe);
|
145
|
+
|
146
|
+
}
|
147
|
+
</script>
|
148
|
+
|
149
|
+
<style lang="scss" scoped>
|
150
|
+
@media screen and (max-width: 1025px) {
|
151
|
+
.content-hero-refactor {
|
152
|
+
text-align: center;
|
153
|
+
}
|
154
|
+
|
155
|
+
h3, div {
|
156
|
+
margin-left: auto;
|
157
|
+
margin-right: auto;
|
158
|
+
}
|
159
|
+
}
|
160
|
+
|
161
|
+
</style>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
<template>
|
2
|
+
<div class="br-1px bg-blur-extra br-solid br-white-transp-20 radius-big o-hidden pos-relative">
|
3
|
+
<h3 class="t-center w-100 pd-small br-b br-white-transp-20 br-solid">{{content?.title || 'Event Program'}}</h3>
|
4
|
+
|
5
|
+
<div
|
6
|
+
v-if="content?.lineup"
|
7
|
+
v-for="(event, index) in content.lineup"
|
8
|
+
:class="{'br-solid br-b br-white-transp-10': index < content.lineup.length - 1}"
|
9
|
+
class="flex-column flex-h-center t-center pd-medium flex w-100 gap-zero"
|
10
|
+
>
|
11
|
+
|
12
|
+
<h5 class="t-main t-nye204 mn-b-small">
|
13
|
+
{{event.djs}}
|
14
|
+
</h5>
|
15
|
+
|
16
|
+
<h4 class="t-unna t-nye204 mn-b-thin">
|
17
|
+
{{event.name}}
|
18
|
+
</h4>
|
19
|
+
<span class="t-semi mn-b-thin mn-l-auto mn-r-auto pd-thin radius-extra br-solid br-2px br-main t-main w-max">
|
20
|
+
{{event.time}}
|
21
|
+
</span>
|
22
|
+
|
23
|
+
<p class="p-medium t-transp">
|
24
|
+
{{event.description}}
|
25
|
+
</p>
|
26
|
+
</div>
|
27
|
+
</div>
|
28
|
+
</template>
|
29
|
+
|
30
|
+
|
31
|
+
<script setup>
|
32
|
+
import { useI18n } from 'vue-i18n'
|
33
|
+
|
34
|
+
const props = defineProps({
|
35
|
+
content: {
|
36
|
+
type: Object
|
37
|
+
}
|
38
|
+
})
|
39
|
+
</script>
|
40
|
+
|
41
|
+
<style lang="scss">
|
42
|
+
</style>
|
@@ -0,0 +1,104 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
<div id="mainguest" class="o-hidden bg-black t-white pos-relative radius-big gap-zero pos-relative cols-2">
|
4
|
+
|
5
|
+
<div class="pd-big pos-relative flex-column flex w-100 h-100 gap-zero">
|
6
|
+
<Socials
|
7
|
+
:telegram="content?.socials?.telegram"
|
8
|
+
:facebook="content?.socials?.facebook"
|
9
|
+
:instagram="content?.socials?.instagram"
|
10
|
+
:twitter="content?.socials?.twitter"
|
11
|
+
class="mn-b-semi"
|
12
|
+
/>
|
13
|
+
|
14
|
+
<h2 class="mn-b-big">
|
15
|
+
{{content?.title}}
|
16
|
+
</h2>
|
17
|
+
|
18
|
+
<p class="p-medium" v-html="content?.description"/>
|
19
|
+
<slot></slot>
|
20
|
+
<iframe class="radius-big o-hidden mn-t-medium" v-if="content?.soundcloud" width="100%" height="200" scrolling="no" frameborder="no" allow="autoplay"
|
21
|
+
:src="`https://w.soundcloud.com/player/?url=https%3A//soundcloud.com/${content.soundcloud}
|
22
|
+
&color=%23ff5500&auto_play=false&hide_related=false
|
23
|
+
&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true`">
|
24
|
+
</iframe>
|
25
|
+
<iframe
|
26
|
+
v-if="content?.spotify"
|
27
|
+
:src="`https://open.spotify.com/embed/track/${content?.spotify}?utm_source=generator`"
|
28
|
+
width="100%"
|
29
|
+
height="152"
|
30
|
+
frameBorder="0"
|
31
|
+
allowfullscreen=""
|
32
|
+
allow="autoplay; clipboard-write; encrypted-media; fullscreen; picture-in-picture"
|
33
|
+
loading="lazy"
|
34
|
+
class="mn-t-big"
|
35
|
+
></iframe>
|
36
|
+
</div>
|
37
|
+
|
38
|
+
<div style="min-height: 20rem;" class="o-hidden pos-relative">
|
39
|
+
<video
|
40
|
+
:src="content?.video"
|
41
|
+
itemprop="video"
|
42
|
+
type="video/mp4"
|
43
|
+
ref="videoElement"
|
44
|
+
class="pos-absolute pos-t-0 pos-l-0 w-100 h-100 object-fit-cover"
|
45
|
+
preload autoplay muted loop playsinlineclass playsinline></video>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
</div>
|
49
|
+
</template>
|
50
|
+
|
51
|
+
|
52
|
+
<script setup>
|
53
|
+
import { useI18n } from 'vue-i18n'
|
54
|
+
|
55
|
+
import { ref, onMounted } from 'vue';
|
56
|
+
|
57
|
+
import { Socials } from '@ozdao/prometheus-framework/modules/organizations/client'
|
58
|
+
|
59
|
+
const props = defineProps({
|
60
|
+
content: {
|
61
|
+
type: Object
|
62
|
+
}
|
63
|
+
})
|
64
|
+
|
65
|
+
const videoElement = ref(null)
|
66
|
+
let isPlaying = false;
|
67
|
+
|
68
|
+
function checkAndPlayVideo() {
|
69
|
+
// Initializing values
|
70
|
+
|
71
|
+
// On video playing toggle values
|
72
|
+
videoElement.value.onplaying = function() {
|
73
|
+
isPlaying = true;
|
74
|
+
};
|
75
|
+
|
76
|
+
// On video pause toggle values
|
77
|
+
videoElement.value.onpause = function() {
|
78
|
+
isPlaying = false;
|
79
|
+
};
|
80
|
+
}
|
81
|
+
|
82
|
+
// Play video function
|
83
|
+
async function playVid() {
|
84
|
+
if (videoElement.value.paused && !isPlaying) {
|
85
|
+
return videoElement.value.play();
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
onMounted(() => {
|
90
|
+
checkAndPlayVideo()
|
91
|
+
playVid()
|
92
|
+
})
|
93
|
+
|
94
|
+
</script>
|
95
|
+
|
96
|
+
<style lang="scss">
|
97
|
+
@media screen and (max-width: 1025px) {
|
98
|
+
#mainguest {
|
99
|
+
> div:first-of-type {
|
100
|
+
order: 2;
|
101
|
+
}
|
102
|
+
}
|
103
|
+
}
|
104
|
+
</style>
|
@@ -0,0 +1,119 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
<div class="cols-2 gap-big pos-relative ">
|
4
|
+
<div class="cols-1 gap-small ">
|
5
|
+
<a v-if="options?.link" @click="clickBuyTicket()" href="#" class="bg-main flex-child-grow-1 flex-child-shrink-0 flex-child-basis-auto o-hidden radius-big pd-big flex-center flex-column flex w-100 gap-zero">
|
6
|
+
<img class="w-100" :src="content?.ticket">
|
7
|
+
|
8
|
+
<a class="t-white bg-black pd-l-medium pd-b-thin pd-t-thin pd-r-small h4 radius-extra uppercase t-nye204">
|
9
|
+
<!-- SOLD OUT -->
|
10
|
+
{{t('nye2024.buyticket')}}
|
11
|
+
</a>
|
12
|
+
|
13
|
+
</a>
|
14
|
+
|
15
|
+
<p class="pd-small radius-big bg-second flex flex-center gap-small p-medium t-medium t-white">
|
16
|
+
<span>For extra payment options contact</span>
|
17
|
+
<a class="t-black bg-white radius-extra pd-thin" href="https://t.me/thecommunebar" target="_blank">@thecommunebar</a>
|
18
|
+
</p>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
<div class="br-solid br-1px br-white-transp-10 o-hidden radius-big bg-black ">
|
22
|
+
<video style="max-height: 20rem; object-fit: cover;" ref="videoElement" class="pos-t-0 pos-l-0 w-100 h-auto" preload autoplay muted loop playsinlineclass playsinline src="/videos/nms.mp4" itemprop="video" type="video/mp4" ></video>
|
23
|
+
|
24
|
+
|
25
|
+
<div class="pd-big flex-column flex w-100 h-100 gap-zero">
|
26
|
+
<h3 class="t-unna t-nye204 mn-b-small">
|
27
|
+
{{t('nye2024.title')}}
|
28
|
+
</h3>
|
29
|
+
|
30
|
+
<p class="p-medium t-transp mn-b-big">
|
31
|
+
{{t('nye2024.description')}}
|
32
|
+
</p>
|
33
|
+
|
34
|
+
<div class="flex-nowrap flex gap-thin">
|
35
|
+
<a href="https://www.instagram.com/thecommune.phuket/" target="_blank" class="pd-l-medium pd-r-medium pd-t-small pd-b-small t-black radius-extra uppercase t-medium bg-white">
|
36
|
+
{{t('nye2024.checkinblog')}}
|
37
|
+
</a>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>
|
41
|
+
|
42
|
+
|
43
|
+
</div>
|
44
|
+
</template>
|
45
|
+
|
46
|
+
|
47
|
+
<script setup>
|
48
|
+
import { ref, onMounted } from 'vue'
|
49
|
+
import { useI18n } from 'vue-i18n'
|
50
|
+
|
51
|
+
|
52
|
+
const props = defineProps({
|
53
|
+
content: {
|
54
|
+
type: Object
|
55
|
+
},
|
56
|
+
options: {
|
57
|
+
type: Object
|
58
|
+
}
|
59
|
+
})
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
const { t } = useI18n({
|
64
|
+
messages: {
|
65
|
+
en:{
|
66
|
+
"nye2024":{
|
67
|
+
"title":"Explore our exclusive party archive",
|
68
|
+
"titleTicket":"Are you ready?",
|
69
|
+
"description":"Experience the ultimate party vibe at The Commune! Elevate your evening with distinctive and exhilarating activities, ensuring an unforgettable time. Dive into the excitement and make every moment special.",
|
70
|
+
"checkinblog":"CHECK IN INSTAGRAM",
|
71
|
+
"buyticket": "Buy Ticket Now →"
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
})
|
76
|
+
|
77
|
+
const videoElement = ref(null)
|
78
|
+
|
79
|
+
var isPlaying = false;
|
80
|
+
|
81
|
+
function checkAndPlayVideo() {
|
82
|
+
// Initializing values
|
83
|
+
|
84
|
+
// On video playing toggle values
|
85
|
+
videoElement.value.onplaying = function() {
|
86
|
+
isPlaying = true;
|
87
|
+
};
|
88
|
+
|
89
|
+
// On video pause toggle values
|
90
|
+
videoElement.value.onpause = function() {
|
91
|
+
isPlaying = false;
|
92
|
+
};
|
93
|
+
}
|
94
|
+
|
95
|
+
// Play video function
|
96
|
+
async function playVid() {
|
97
|
+
if (videoElement.value.paused && !isPlaying) {
|
98
|
+
return videoElement.value.play();
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
function clickBuyTicket () {
|
103
|
+
gtag('event', 'buy_ticket', {
|
104
|
+
'event_category': 'conversion',
|
105
|
+
'event_label': 'Buy Ticket'
|
106
|
+
});
|
107
|
+
|
108
|
+
window.open(props.options?.link);
|
109
|
+
|
110
|
+
}
|
111
|
+
|
112
|
+
onMounted(() => {
|
113
|
+
checkAndPlayVideo()
|
114
|
+
playVid()
|
115
|
+
})
|
116
|
+
</script>
|
117
|
+
|
118
|
+
<style lang="scss">
|
119
|
+
</style>
|
@@ -0,0 +1,47 @@
|
|
1
|
+
<template>
|
2
|
+
|
3
|
+
<div class="o-hidden bg-black-transp-15 bg-blur-extra t-white pos-relative radius-big gap-zero pos-relative">
|
4
|
+
<!-- <h3>Event Crew</h3> -->
|
5
|
+
<h3 class="t-center w-100 pd-small br-b br-white-transp-20 br-solid">{{content?.title}}</h3>
|
6
|
+
|
7
|
+
<div style="max-height: 100%" class="cols-1 gap-semi">
|
8
|
+
<div class="pd-medium br-solid" :class="{'br-solid br-b br-white-transp-10': index < content?.guests.length - 1}" v-for="(item, index) in content?.guests">
|
9
|
+
<div class="o-hidden mn-b-semi bg-black radius-big h-4r w-4r pos-relative">
|
10
|
+
<img class="w-100 h-100 object-fit-cover" :src='item.photo'>
|
11
|
+
</div>
|
12
|
+
|
13
|
+
<h4 class="d-block uppercase mn-b-small t-semi">{{item.name}}</h4>
|
14
|
+
<span class="t-semi mn-b-small d-block uppercase t-main">{{item.time}}</span>
|
15
|
+
|
16
|
+
<p class="t-transp mn-b-semi p-medium">{{item.description}}</p>
|
17
|
+
|
18
|
+
<Socials
|
19
|
+
v-if="item?.socials"
|
20
|
+
:telegram="item?.socials?.telegram"
|
21
|
+
:facebook="item?.socials?.facebook"
|
22
|
+
:instagram="item?.socials?.instagram"
|
23
|
+
:twitter="item?.socials?.twitter"
|
24
|
+
/>
|
25
|
+
|
26
|
+
|
27
|
+
</div>
|
28
|
+
</div>
|
29
|
+
</div>
|
30
|
+
</template>
|
31
|
+
|
32
|
+
|
33
|
+
<script setup>
|
34
|
+
import { useI18n } from 'vue-i18n'
|
35
|
+
|
36
|
+
import { Socials } from '@ozdao/prometheus-framework/modules/organizations/client'
|
37
|
+
|
38
|
+
const props = defineProps({
|
39
|
+
content: {
|
40
|
+
type: Object
|
41
|
+
}
|
42
|
+
})
|
43
|
+
|
44
|
+
</script>
|
45
|
+
|
46
|
+
<style lang="scss">
|
47
|
+
</style>
|