@icvdeveloper/common-module 1.4.14 → 2.0.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.
- package/CHANGELOG.md +2 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +10 -0
- package/dist/runtime/@types/components.d.ts +22 -0
- package/dist/runtime/@types/configVariables.d.ts +6 -0
- package/dist/runtime/analytics.d.ts +1 -1
- package/dist/runtime/assets/scss/index.css +0 -705
- package/dist/runtime/assets/svg/icon-minus.svg +6 -0
- package/dist/runtime/assets/svg/icon-video.svg +6 -0
- package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
- package/dist/runtime/components/affiliates/AffiliatePage.vue +337 -132
- package/dist/runtime/components/agenda/AgendaTabbed.vue +43 -34
- package/dist/runtime/components/agenda/components/Calendar.vue +8 -3
- package/dist/runtime/components/agenda/components/Favorite.vue +44 -0
- package/dist/runtime/components/agenda/components/PlayIcon.vue +1 -1
- package/dist/runtime/components/agenda/components/PresentationLink.vue +26 -15
- package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
- package/dist/runtime/components/chat/ChatCreateConversation.vue +205 -0
- package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +159 -0
- package/dist/runtime/components/chat/ChatHeader.vue +98 -0
- package/dist/runtime/components/chat/ChatMessage.vue +40 -0
- package/dist/runtime/components/chat/ChatShowConversation.vue +77 -0
- package/dist/runtime/components/chat/ChatWidget.vue +65 -0
- package/dist/runtime/components/chat/ChatWindow.vue +211 -0
- package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
- package/dist/runtime/components/chat/MessageInput.vue +30 -0
- package/dist/runtime/components/chat/SearchInput.vue +32 -0
- package/dist/runtime/components/core/Accordion.vue +1 -1
- package/dist/runtime/components/core/AttendeeList.vue +25 -16
- package/dist/runtime/components/core/CountdownTimer.vue +1 -1
- package/dist/runtime/components/core/Modal.vue +21 -13
- package/dist/runtime/components/core/ModalButton.vue +43 -0
- package/dist/runtime/components/core/Navbar.vue +3 -3
- package/dist/runtime/components/core/Navigation.vue +293 -0
- package/dist/runtime/components/core/SvgIcon.vue +31 -1
- package/dist/runtime/components/core/VButton.vue +41 -0
- package/dist/runtime/components/core/ZoomModal.vue +1 -1
- package/dist/runtime/components/events/ListEvents.vue +3 -4
- package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
- package/dist/runtime/components/forms/ErrorField.vue +11 -2
- package/dist/runtime/components/forms/RadioGroup.vue +50 -0
- package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
- package/dist/runtime/components/forms/SupportForm.vue +6 -6
- package/dist/runtime/components/layouts/Accordion.vue +2 -2
- package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +20 -4
- package/dist/runtime/components/media/ArchiveVideoPlayer.vue +14 -6
- package/dist/runtime/components/media/WebcastVideoPlayer.vue +1 -1
- package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +8 -8
- package/dist/runtime/components/media/components/CeCreditNotification.vue +2 -2
- package/dist/runtime/components/media/components/ContentArea.vue +51 -14
- package/dist/runtime/components/media/components/ContentTabs.vue +2 -2
- package/dist/runtime/components/media/components/DocumentsPanel.vue +2 -2
- package/dist/runtime/components/media/components/MediaContainer.vue +3 -7
- package/dist/runtime/components/media/components/PresentersPanel.vue +69 -50
- package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
- package/dist/runtime/components/media/components/SponsorsPanel.vue +3 -3
- package/dist/runtime/components/presenters/PresenterListing.vue +30 -20
- package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
- package/dist/runtime/components/presenters/Presenters.vue +139 -0
- package/dist/runtime/components/profile/Profile.vue +10 -6
- package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
- package/dist/runtime/components/profile/components/SidebarNavItem.vue +1 -1
- package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
- package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
- package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +99 -0
- package/dist/runtime/components/registration/PaymentForm.vue +136 -0
- package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
- package/dist/runtime/components/registration/RegistrationGroupSelect.vue +142 -0
- package/dist/runtime/components/registration/StripePaymentForm.vue +141 -0
- package/dist/runtime/composables/useAgenda.d.ts +12 -0
- package/dist/runtime/composables/useAgenda.mjs +101 -10
- package/dist/runtime/composables/useAuth.mjs +1 -1
- package/dist/runtime/composables/useConferenceHelpers.d.ts +5 -1
- package/dist/runtime/composables/useConferenceHelpers.mjs +15 -1
- package/dist/runtime/composables/useEventHooks.d.ts +26 -0
- package/dist/runtime/composables/useEventHooks.mjs +21 -0
- package/dist/runtime/composables/useEvents.d.ts +17 -1
- package/dist/runtime/composables/useEvents.mjs +29 -1
- package/dist/runtime/composables/useLogin.mjs +7 -3
- package/dist/runtime/composables/usePresentation.mjs +1 -1
- package/dist/runtime/composables/usePusher.d.ts +4 -0
- package/dist/runtime/composables/usePusher.mjs +38 -26
- package/dist/runtime/composables/useStream.mjs +7 -1
- package/dist/runtime/enums/general.d.ts +4 -1
- package/dist/runtime/enums/general.mjs +4 -1
- package/dist/runtime/models/authUser.d.ts +1 -0
- package/dist/runtime/models/conference.d.ts +14 -0
- package/dist/runtime/models/conversation.d.ts +2 -4
- package/dist/runtime/models/globalConfig.d.ts +6 -2
- package/dist/runtime/models/group.d.ts +32 -2
- package/dist/runtime/models/icons.d.ts +7 -0
- package/dist/runtime/models/templateConfig.d.ts +6 -0
- package/dist/runtime/models/user.d.ts +1 -0
- package/dist/runtime/models/virtualPagesConfig.d.ts +335 -0
- package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
- package/dist/runtime/plugin.mjs +6 -0
- package/dist/runtime/store/affiliates.d.ts +3 -0
- package/dist/runtime/store/affiliates.mjs +38 -0
- package/dist/runtime/store/auth.mjs +6 -0
- package/dist/runtime/store/conferences.d.ts +3 -1
- package/dist/runtime/store/conferences.mjs +7 -2
- package/dist/runtime/store/conversations.d.ts +4040 -10
- package/dist/runtime/store/conversations.mjs +255 -22
- package/dist/runtime/store/modalPlayerConfig.d.ts +498 -0
- package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
- package/dist/runtime/store/templateConfigs.d.ts +3 -2
- package/dist/runtime/store/templateConfigs.mjs +2 -1
- package/package.json +5 -2
- package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { ref, toRefs } from "vue";
|
|
2
|
+
import { computed, ref, toRefs } from "vue";
|
|
3
3
|
import { storeToRefs } from "pinia";
|
|
4
|
+
import { find } from "lodash-es";
|
|
4
5
|
import { useEvents } from "../../composables/useEvents";
|
|
5
6
|
import { useClassBinding } from "../../composables/useClassBinding";
|
|
6
|
-
import type { Conference, Presentation } from "../../models/conference";
|
|
7
|
-
import { SelectedContent } from "../../enums/general";
|
|
8
7
|
import { usePresentationsStore } from "../../store/presentations";
|
|
8
|
+
import { SelectedContent } from "../../enums/general";
|
|
9
|
+
import type { Conference, Presentation, Sponsor } from "../../models/conference";
|
|
9
10
|
import type {
|
|
10
11
|
PlayerAndContentClassObj,
|
|
11
12
|
PlayerAndContentCompObj,
|
|
@@ -50,6 +51,20 @@ const { classBinding } = useClassBinding();
|
|
|
50
51
|
const { getSponsors } = useEvents();
|
|
51
52
|
|
|
52
53
|
const { selectedContent } = storeToRefs(usePresentationsStore());
|
|
54
|
+
|
|
55
|
+
// computed
|
|
56
|
+
const hasSponsors = computed((): boolean => {
|
|
57
|
+
// return if there are any matching sponsors that have images to display here
|
|
58
|
+
const hasImage: Sponsor | undefined = find(
|
|
59
|
+
getSponsors(conference.value.affiliates),
|
|
60
|
+
function(o: Sponsor) { return o.photo != null && o.photo.length > 0 }
|
|
61
|
+
)
|
|
62
|
+
return hasImage != undefined;
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
const getSponsorsResult = computed((): Sponsor[] => {
|
|
66
|
+
return getSponsors(conference.value.affiliates);
|
|
67
|
+
});
|
|
53
68
|
</script>
|
|
54
69
|
|
|
55
70
|
<template>
|
|
@@ -99,7 +114,7 @@ const { selectedContent } = storeToRefs(usePresentationsStore());
|
|
|
99
114
|
classBinding(
|
|
100
115
|
classObject,
|
|
101
116
|
'withTabsChild',
|
|
102
|
-
|
|
117
|
+
`flex-1 grid grid-cols-7 ${hasSponsors ? 'grid-rows-2' : 'grid-rows-1'} gap-y-4`
|
|
103
118
|
)
|
|
104
119
|
"
|
|
105
120
|
>
|
|
@@ -133,6 +148,7 @@ const { selectedContent } = storeToRefs(usePresentationsStore());
|
|
|
133
148
|
/>
|
|
134
149
|
<!-- sponsor -->
|
|
135
150
|
<figure
|
|
151
|
+
v-if="hasSponsors"
|
|
136
152
|
class="col-span-7 md:col-start-5 md:col-span-3 lg:col-start-6 lg:col-span-6 row-span-1 flex flex-col p-6 text-center"
|
|
137
153
|
>
|
|
138
154
|
<template
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { toRefs, computed, watch, onMounted, nextTick } from "vue";
|
|
3
|
-
import { onBeforeRouteLeave } from "vue-router";
|
|
2
|
+
import { toRefs, computed, watch, onMounted, onUnmounted, nextTick } from "vue";
|
|
4
3
|
import { get } from "lodash-es";
|
|
4
|
+
import { useClassBinding } from "../../composables/useClassBinding";
|
|
5
|
+
import {
|
|
6
|
+
modalClosedEventHook
|
|
7
|
+
} from "../../composables/useEventHooks";
|
|
5
8
|
import type { Presentation, PlayerObj } from "../../models/conference";
|
|
6
9
|
import type { WebcastPlayerClassObj } from "../../@types/components";
|
|
7
|
-
import { useClassBinding } from "../../composables/useClassBinding";
|
|
8
10
|
|
|
9
11
|
type Props = {
|
|
10
12
|
presentation: Presentation;
|
|
@@ -35,9 +37,15 @@ let icvPlayerObj: PlayerObj = {
|
|
|
35
37
|
};
|
|
36
38
|
let timeInterval: NodeJS.Timer | null = null;
|
|
37
39
|
|
|
40
|
+
modalClosedEventHook.on(() => {
|
|
41
|
+
console.log('modal closed');
|
|
42
|
+
cleanup();
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
|
|
38
46
|
// emits
|
|
39
47
|
const emit = defineEmits<{
|
|
40
|
-
(event: "time", value:
|
|
48
|
+
(event: "time", value: number): void;
|
|
41
49
|
}>();
|
|
42
50
|
|
|
43
51
|
// computed
|
|
@@ -120,7 +128,7 @@ const cleanup = () => {
|
|
|
120
128
|
|
|
121
129
|
// watchers
|
|
122
130
|
watch(
|
|
123
|
-
presentation,
|
|
131
|
+
presentation.value,
|
|
124
132
|
(_oldPresentation: Presentation, _newPresentation: Presentation) => {
|
|
125
133
|
if (_oldPresentation.type !== _newPresentation.type) {
|
|
126
134
|
setupMediaPlayer();
|
|
@@ -145,7 +153,7 @@ onMounted(() => {
|
|
|
145
153
|
};
|
|
146
154
|
});
|
|
147
155
|
|
|
148
|
-
|
|
156
|
+
onUnmounted(() => {
|
|
149
157
|
cleanup();
|
|
150
158
|
});
|
|
151
159
|
</script>
|
|
@@ -37,7 +37,7 @@ const { pagesConfigValue } = storeToRefs(useTemplateConfigsStore());
|
|
|
37
37
|
const emit = defineEmits(["previewEnded"]);
|
|
38
38
|
|
|
39
39
|
// data
|
|
40
|
-
|
|
40
|
+
const playing = ref<boolean>(true);
|
|
41
41
|
|
|
42
42
|
// computed
|
|
43
43
|
const isPreview = computed((): boolean => {
|
|
@@ -46,31 +46,31 @@ const isPreview = computed((): boolean => {
|
|
|
46
46
|
false
|
|
47
47
|
);
|
|
48
48
|
// @todo add check against conference-level portal configs
|
|
49
|
-
// || pagesConfigValue.value("archive_player.preview_enabled", false);
|
|
50
49
|
return !isLoggedIn && previewEnabled;
|
|
51
50
|
});
|
|
52
51
|
|
|
53
52
|
const previewDuration = computed((): number => {
|
|
54
53
|
return pagesConfigValue.value("archive_player.preview_duration", 60);
|
|
55
54
|
// @todo add check against conference-level portal configs
|
|
56
|
-
// || pagesConfigValue.value("archive_player.preview_duration", 60);
|
|
57
55
|
});
|
|
58
56
|
|
|
59
57
|
// methods
|
|
60
|
-
const firePreviewEnded = () => {
|
|
58
|
+
const firePreviewEnded = (): void => {
|
|
61
59
|
playing.value = false;
|
|
62
60
|
if (ref.mediaPlayer) {
|
|
63
61
|
ref.mediaPlayer.stop();
|
|
64
62
|
// @todo ensure emit will suffice
|
|
65
63
|
// previewEnded = true;
|
|
66
64
|
}
|
|
65
|
+
console.log('firePreviewEnded')
|
|
67
66
|
emit("previewEnded");
|
|
68
67
|
};
|
|
69
68
|
|
|
70
|
-
const checkTime = (_time:
|
|
69
|
+
const checkTime = (_time: number): void => {
|
|
71
70
|
// @todo set current time for chapter timings only
|
|
72
71
|
// setCurrentTime(_time);
|
|
73
|
-
if (isPreview && _time >= previewDuration.value) {
|
|
72
|
+
if (isPreview.value && _time >= previewDuration.value) {
|
|
73
|
+
console.log('checkTime calling firePreviewEnded')
|
|
74
74
|
firePreviewEnded();
|
|
75
75
|
}
|
|
76
76
|
};
|
|
@@ -82,9 +82,9 @@ const checkTime = (_time: Number) => {
|
|
|
82
82
|
ref="mediaPlayer"
|
|
83
83
|
:presentation="presentation"
|
|
84
84
|
:playing="playing"
|
|
85
|
-
:class-object="classObject
|
|
85
|
+
:class-object="classObject?.components?.webcastPlayer"
|
|
86
86
|
@time="checkTime"
|
|
87
|
-
|
|
87
|
+
/>
|
|
88
88
|
</div>
|
|
89
89
|
</template>
|
|
90
90
|
|
|
@@ -36,7 +36,7 @@ const countdownLoopId = ref<any>(null);
|
|
|
36
36
|
// computed
|
|
37
37
|
const timeRemainingClass = computed(() => {
|
|
38
38
|
if (displayFor.value > 10) {
|
|
39
|
-
return "font-bold text-green-
|
|
39
|
+
return "font-bold text-green-600";
|
|
40
40
|
}
|
|
41
41
|
return "font-bold text-red";
|
|
42
42
|
});
|
|
@@ -105,7 +105,7 @@ onMounted(() => {
|
|
|
105
105
|
classBinding(
|
|
106
106
|
classObject,
|
|
107
107
|
'container',
|
|
108
|
-
'flex bg-yellow-
|
|
108
|
+
'flex bg-yellow-100 shadow text-gray-700 py-6 px-10'
|
|
109
109
|
)
|
|
110
110
|
"
|
|
111
111
|
>
|
|
@@ -48,7 +48,7 @@ const { classBinding } = useClassBinding();
|
|
|
48
48
|
const { pagesConfigValue } = storeToRefs(useTemplateConfigsStore());
|
|
49
49
|
|
|
50
50
|
// reactive data
|
|
51
|
-
|
|
51
|
+
const sponsors = ref<Array<Sponsor>>([]);
|
|
52
52
|
|
|
53
53
|
// computed
|
|
54
54
|
const trackEmbedHtml = computed((): string | null => {
|
|
@@ -56,7 +56,8 @@ const trackEmbedHtml = computed((): string | null => {
|
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
// methods
|
|
59
|
-
|
|
59
|
+
|
|
60
|
+
const getFeaturedSponsors = (): void => {
|
|
60
61
|
const featuredSponsorLevel = get(
|
|
61
62
|
pagesConfigValue,
|
|
62
63
|
"webcast.featured_sponsor_level.value",
|
|
@@ -69,7 +70,7 @@ const getFeaturedSponsors = () => {
|
|
|
69
70
|
return response.json();
|
|
70
71
|
})
|
|
71
72
|
.then((data) => {
|
|
72
|
-
sponsors = filter(data, { role: "sponsor" });
|
|
73
|
+
sponsors.value = filter(data, { role: "sponsor" });
|
|
73
74
|
});
|
|
74
75
|
}
|
|
75
76
|
};
|
|
@@ -83,29 +84,65 @@ onMounted(() => {
|
|
|
83
84
|
<template>
|
|
84
85
|
<div :class="classBinding(classObject, 'container', 'flex flex-col')">
|
|
85
86
|
<CommonComponentsOverviewPanel
|
|
86
|
-
v-if="selectedContent.type ==
|
|
87
|
+
v-if="selectedContent.type == SelectedContent.OVERVIEW"
|
|
87
88
|
:class="
|
|
88
89
|
classBinding(
|
|
89
|
-
classObject.components
|
|
90
|
+
classObject.components?.overviewPanel,
|
|
90
91
|
'container',
|
|
91
92
|
'overflow-y-scroll no-scrollbar h-full'
|
|
92
93
|
)
|
|
93
94
|
"
|
|
94
95
|
:presentation="presentation"
|
|
95
|
-
:class-object="classObject.components
|
|
96
|
-
|
|
96
|
+
:class-object="classObject.components?.overviewPanel"
|
|
97
|
+
/>
|
|
97
98
|
<CommonComponentsAgendaPanel
|
|
98
|
-
v-if="selectedContent.type ==
|
|
99
|
+
v-if="selectedContent.type == SelectedContent.AGENDA"
|
|
99
100
|
:class="
|
|
100
101
|
classBinding(
|
|
101
|
-
classObject.components
|
|
102
|
+
classObject.components?.agendaPanel,
|
|
102
103
|
'container',
|
|
103
104
|
'overflow-y-scroll no-scrollbar h-full'
|
|
104
105
|
)
|
|
105
106
|
"
|
|
106
107
|
:conference="webcastConference"
|
|
107
|
-
:class-object="classObject.components
|
|
108
|
-
|
|
108
|
+
:class-object="classObject.components?.agendaPanel"
|
|
109
|
+
/>
|
|
110
|
+
<CommonComponentsPresentersPanel
|
|
111
|
+
v-if="selectedContent.type == SelectedContent.PRESENTERS"
|
|
112
|
+
:class="
|
|
113
|
+
classBinding(
|
|
114
|
+
classObject.components?.agendaPanel,
|
|
115
|
+
'container',
|
|
116
|
+
'overflow-y-scroll no-scrollbar h-full'
|
|
117
|
+
)
|
|
118
|
+
"
|
|
119
|
+
:presentation="presentation"
|
|
120
|
+
:class-object="classObject.components?.agendaPanel"
|
|
121
|
+
/>
|
|
122
|
+
<CommonComponentsDocumentsPanel
|
|
123
|
+
v-if="selectedContent.type == SelectedContent.DOCUMENTS"
|
|
124
|
+
:class="
|
|
125
|
+
classBinding(
|
|
126
|
+
classObject.components?.agendaPanel,
|
|
127
|
+
'container',
|
|
128
|
+
'overflow-y-scroll no-scrollbar h-full'
|
|
129
|
+
)
|
|
130
|
+
"
|
|
131
|
+
:presentation="presentation"
|
|
132
|
+
:class-object="classObject.components?.agendaPanel"
|
|
133
|
+
/>
|
|
134
|
+
<CommonComponentsSponsorsPanel
|
|
135
|
+
v-if="selectedContent.type == SelectedContent.SPONSORS"
|
|
136
|
+
:class="
|
|
137
|
+
classBinding(
|
|
138
|
+
classObject.components?.agendaPanel,
|
|
139
|
+
'container',
|
|
140
|
+
'overflow-y-scroll no-scrollbar h-full'
|
|
141
|
+
)
|
|
142
|
+
"
|
|
143
|
+
:presentation="presentation"
|
|
144
|
+
:class-object="classObject.components?.agendaPanel"
|
|
145
|
+
/>
|
|
109
146
|
<span
|
|
110
147
|
v-if="selectedContent.type == 'html'"
|
|
111
148
|
:class="
|
|
@@ -116,8 +153,8 @@ onMounted(() => {
|
|
|
116
153
|
)
|
|
117
154
|
"
|
|
118
155
|
v-html="selectedContent.content"
|
|
119
|
-
|
|
120
|
-
<template v-if="selectedContent.type ==
|
|
156
|
+
/>
|
|
157
|
+
<template v-if="selectedContent.type == SelectedContent.TRACK_HTML">
|
|
121
158
|
<span
|
|
122
159
|
v-if="trackEmbedHtml != null"
|
|
123
160
|
:class="
|
|
@@ -128,7 +165,7 @@ onMounted(() => {
|
|
|
128
165
|
)
|
|
129
166
|
"
|
|
130
167
|
v-html="trackEmbedHtml"
|
|
131
|
-
|
|
168
|
+
/>
|
|
132
169
|
<div
|
|
133
170
|
v-if="trackEmbedHtml === null"
|
|
134
171
|
:class="
|
|
@@ -93,7 +93,7 @@ onMounted(() => {
|
|
|
93
93
|
classBinding(
|
|
94
94
|
classObject,
|
|
95
95
|
'tabList',
|
|
96
|
-
'
|
|
96
|
+
'flex flex-row flex-wrap justify-start'
|
|
97
97
|
)
|
|
98
98
|
"
|
|
99
99
|
>
|
|
@@ -170,7 +170,7 @@ onMounted(() => {
|
|
|
170
170
|
classBinding(
|
|
171
171
|
classObject,
|
|
172
172
|
'mobileTabList',
|
|
173
|
-
'flex-col self-center
|
|
173
|
+
'flex-col self-center mx-auto'
|
|
174
174
|
)
|
|
175
175
|
"
|
|
176
176
|
>
|
|
@@ -44,7 +44,7 @@ const documentArray = computed((): Array<Document> | null => {
|
|
|
44
44
|
)
|
|
45
45
|
"
|
|
46
46
|
>
|
|
47
|
-
<ul :class="classBinding(classObject, 'documentList', '
|
|
47
|
+
<ul :class="classBinding(classObject, 'documentList', '')">
|
|
48
48
|
<li
|
|
49
49
|
v-for="(document, index) in documentArray"
|
|
50
50
|
:key="index"
|
|
@@ -66,7 +66,7 @@ const documentArray = computed((): Array<Document> | null => {
|
|
|
66
66
|
classBinding(
|
|
67
67
|
classObject,
|
|
68
68
|
'elementLink',
|
|
69
|
-
'
|
|
69
|
+
'font-semibold text-sm md:text-base'
|
|
70
70
|
)
|
|
71
71
|
"
|
|
72
72
|
target="_blank"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { ref, toRefs } from "vue";
|
|
2
|
+
import { inject, ref, toRefs } from "vue";
|
|
3
3
|
import type { Conference, Presentation } from "../../../models/conference";
|
|
4
4
|
import type {
|
|
5
5
|
MediaContainerClassObj,
|
|
@@ -37,10 +37,6 @@ const emit = defineEmits<{
|
|
|
37
37
|
(event: string, value: Presentation): void;
|
|
38
38
|
}>();
|
|
39
39
|
|
|
40
|
-
console.log(
|
|
41
|
-
config.public.awsDefaultRegion + ", " + config.public.resourcePrefix
|
|
42
|
-
);
|
|
43
|
-
|
|
44
40
|
const { currentStreamData, currentPresentation } = useStream(
|
|
45
41
|
config.public.awsDefaultRegion,
|
|
46
42
|
config.public.resourcePrefix,
|
|
@@ -55,8 +51,8 @@ const { currentStreamData, currentPresentation } = useStream(
|
|
|
55
51
|
ref="mediaPlayer"
|
|
56
52
|
:stream="currentStreamData"
|
|
57
53
|
:presentation="currentPresentation"
|
|
58
|
-
:class-object="classObject
|
|
59
|
-
|
|
54
|
+
:class-object="classObject?.components?.webcastPlayer"
|
|
55
|
+
/>
|
|
60
56
|
</div>
|
|
61
57
|
</template>
|
|
62
58
|
|
|
@@ -1,57 +1,76 @@
|
|
|
1
|
-
<
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { ref, toRefs, computed, provide } from "vue";
|
|
3
|
+
import { sortBy } from "lodash-es";
|
|
4
|
+
import { Position } from "../../../enums/general";
|
|
5
|
+
import type {
|
|
6
|
+
Presentation,
|
|
7
|
+
Presenter,
|
|
8
|
+
PresenterWithPivot,
|
|
9
|
+
} from "../../../models/conference";
|
|
10
|
+
|
|
11
|
+
type Props = {
|
|
12
|
+
presentation: Presentation;
|
|
13
|
+
itemWidth?: string;
|
|
14
|
+
layoutFormat?: string;
|
|
15
|
+
isCompact?: boolean;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
19
|
+
itemWidth: "120",
|
|
20
|
+
layoutFormat: "grid",
|
|
21
|
+
isCompact: true,
|
|
22
|
+
});
|
|
15
23
|
|
|
16
|
-
|
|
17
|
-
import PresentersDetail from '@/components/presenters/PresentersDetail';
|
|
24
|
+
const { presentation, itemWidth, layoutFormat, isCompact } = toRefs(props);
|
|
18
25
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
provide() {
|
|
38
|
-
return {
|
|
39
|
-
itemWidth: this.itemWidth,
|
|
40
|
-
imageStyle: this.imageStyle,
|
|
26
|
+
// provided values
|
|
27
|
+
provide("itemWidth", "120");
|
|
28
|
+
|
|
29
|
+
// comnputed
|
|
30
|
+
const presenterArray = computed((): Presenter[] => {
|
|
31
|
+
let returnArray: Presenter[] = [];
|
|
32
|
+
if(presentation.value?.presenters && presentation.value.presenters.length) {
|
|
33
|
+
returnArray = sortBy(
|
|
34
|
+
presentation.value.presenters,
|
|
35
|
+
// TODO - ensure that the presentation includes presenter order.
|
|
36
|
+
// previously, this was retrieved from $parent.currentPresentation
|
|
37
|
+
// function (presenter: PresenterWithPivot) {
|
|
38
|
+
// return presenter.pivot.order;
|
|
39
|
+
// }
|
|
40
|
+
(presenter: Presenter) => {
|
|
41
|
+
return presenter.last_name;
|
|
42
|
+
}
|
|
43
|
+
);
|
|
41
44
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
presenterLevelArray() {
|
|
45
|
-
let returnArray = [];
|
|
46
|
-
returnArray['presenters_all'] = { 'presenters': _.sortBy(this.$parent.currentPresentation.presenters, function (presenter) {
|
|
47
|
-
return presenter.pivot.order;
|
|
48
|
-
}) };
|
|
49
|
-
return returnArray;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
};
|
|
45
|
+
return returnArray;
|
|
46
|
+
});
|
|
53
47
|
</script>
|
|
54
48
|
|
|
49
|
+
<template>
|
|
50
|
+
<div>
|
|
51
|
+
<template v-if="presenterArray && presenterArray.length > 0">
|
|
52
|
+
<CommonPresenterListing
|
|
53
|
+
v-for="(presenter, index) in presenterArray"
|
|
54
|
+
:key="index"
|
|
55
|
+
:presenter="presenter"
|
|
56
|
+
:is-small-grouped-track="isCompact"
|
|
57
|
+
:show-bio="false"
|
|
58
|
+
:enable-bio="false"
|
|
59
|
+
:bio-link-on-name="false"
|
|
60
|
+
:image-position="Position.LEFT"
|
|
61
|
+
/>
|
|
62
|
+
</template>
|
|
63
|
+
<div
|
|
64
|
+
v-else
|
|
65
|
+
class="text-grey-800 px-2 py-4"
|
|
66
|
+
>
|
|
67
|
+
<p class="text-base leading-normal font-light">
|
|
68
|
+
There are no presenters associated with this presentation.
|
|
69
|
+
</p>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</template>
|
|
73
|
+
|
|
55
74
|
<style scoped>
|
|
56
75
|
.presenter-grid {
|
|
57
76
|
display: grid;
|
|
@@ -62,4 +81,4 @@ export default {
|
|
|
62
81
|
align-items: center;
|
|
63
82
|
align-self: center;
|
|
64
83
|
}
|
|
65
|
-
</style>
|
|
84
|
+
</style>
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { toRefs, watch, onMounted } from "vue";
|
|
3
|
-
import { onBeforeRouteLeave } from "vue-router";
|
|
2
|
+
import { toRefs, watch, onMounted, onUnmounted } from "vue";
|
|
4
3
|
import { useApi } from "../../../composables/useApi";
|
|
5
4
|
import { useCookie } from "#app";
|
|
6
5
|
// data
|
|
@@ -94,8 +93,10 @@ const initSessionLoop = () => {
|
|
|
94
93
|
};
|
|
95
94
|
|
|
96
95
|
// watchers
|
|
97
|
-
watch(loggableId, (_newId
|
|
96
|
+
watch(loggableId, (_newId, _oldId) => {
|
|
97
|
+
if (_newId != _oldId) {
|
|
98
98
|
updateSession();
|
|
99
|
+
}
|
|
99
100
|
});
|
|
100
101
|
|
|
101
102
|
// mounted
|
|
@@ -104,7 +105,7 @@ onMounted(() => {
|
|
|
104
105
|
initSessionLoop();
|
|
105
106
|
});
|
|
106
107
|
|
|
107
|
-
|
|
108
|
+
onUnmounted(() => {
|
|
108
109
|
clearInterval(sessionLoopId);
|
|
109
110
|
});
|
|
110
111
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts" setup>
|
|
2
|
-
import { toRefs } from "vue";
|
|
2
|
+
import { ref, toRefs } from "vue";
|
|
3
3
|
import type { Presentation, Sponsor } from "../../../models/conference";
|
|
4
4
|
import type { SponsorsPanelClassObj } from "../../../@types/components";
|
|
5
5
|
import { useClassBinding } from "../../../composables/useClassBinding";
|
|
@@ -40,7 +40,7 @@ const sponsorsArray = ref<Array<Sponsor> | undefined>(
|
|
|
40
40
|
// TODO: presentation.tracks too likely to be undefined to reliably set on mount
|
|
41
41
|
const trackSponsorsArray = ref<Array<Sponsor> | undefined>([]);
|
|
42
42
|
|
|
43
|
-
watch(presentation, (_newPresentation: Presentation) => {
|
|
43
|
+
watch(presentation.value, (_newPresentation: Presentation) => {
|
|
44
44
|
if (_newPresentation.sponsors) {
|
|
45
45
|
sponsorsArray.value = _newPresentation.sponsors;
|
|
46
46
|
}
|
|
@@ -61,7 +61,7 @@ watch(presentation, (_newPresentation: Presentation) => {
|
|
|
61
61
|
'text-grey-800 px-4 py-4 mb-4'
|
|
62
62
|
),
|
|
63
63
|
trackSponsorsArray != undefined && trackSponsorsArray.length > 0
|
|
64
|
-
? 'border-b border-
|
|
64
|
+
? 'border-b border-gray-400'
|
|
65
65
|
: '',
|
|
66
66
|
]"
|
|
67
67
|
>
|