@icvdeveloper/common-module 1.4.14 → 2.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 (189) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/module.d.mts +1051 -2
  3. package/dist/module.d.ts +1051 -2
  4. package/dist/module.json +1 -1
  5. package/dist/module.mjs +29 -15
  6. package/dist/runtime/@types/components.d.ts +22 -0
  7. package/dist/runtime/@types/configVariables.d.ts +6 -0
  8. package/dist/runtime/analytics.d.ts +1 -6
  9. package/dist/runtime/assets/scss/_agenda.css +1 -0
  10. package/dist/runtime/assets/scss/_animations.css +1 -0
  11. package/dist/runtime/assets/scss/_container_variants.css +1 -0
  12. package/dist/runtime/assets/scss/_custom.css +3 -0
  13. package/dist/runtime/assets/scss/_forms.css +1 -0
  14. package/dist/runtime/assets/scss/_header.css +0 -0
  15. package/dist/runtime/assets/scss/_index_production.css +1 -0
  16. package/dist/runtime/assets/scss/_transitions.css +1 -0
  17. package/dist/runtime/assets/scss/_variables.css +1 -0
  18. package/dist/runtime/assets/scss/_variables2.css +0 -0
  19. package/dist/runtime/assets/scss/_webcast.css +1 -0
  20. package/dist/runtime/assets/scss/index.css +1 -705
  21. package/dist/runtime/assets/svg/icon-minus.svg +6 -0
  22. package/dist/runtime/assets/svg/icon-video.svg +6 -0
  23. package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
  24. package/dist/runtime/components/affiliates/AffiliatePage.vue +329 -159
  25. package/dist/runtime/components/agenda/AgendaList.vue +18 -14
  26. package/dist/runtime/components/agenda/AgendaTabbed.vue +60 -54
  27. package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +8 -3
  28. package/dist/runtime/components/agenda/components/Calendar.vue +23 -18
  29. package/dist/runtime/components/agenda/components/Favorite.vue +46 -0
  30. package/dist/runtime/components/agenda/components/InfoLink.vue +15 -5
  31. package/dist/runtime/components/agenda/components/PlayIcon.vue +3 -5
  32. package/dist/runtime/components/agenda/components/PresentationLink.vue +37 -19
  33. package/dist/runtime/components/agenda/components/Sponsor.vue +31 -24
  34. package/dist/runtime/components/auth/PasswordReset.vue +20 -5
  35. package/dist/runtime/components/auth/Registration.vue +14 -4
  36. package/dist/runtime/components/auth/Ucc.vue +44 -27
  37. package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
  38. package/dist/runtime/components/chat/ChatCreateConversation.vue +199 -0
  39. package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +154 -0
  40. package/dist/runtime/components/chat/ChatHeader.vue +97 -0
  41. package/dist/runtime/components/chat/ChatMessage.vue +40 -0
  42. package/dist/runtime/components/chat/ChatShowConversation.vue +76 -0
  43. package/dist/runtime/components/chat/ChatWidget.vue +40 -0
  44. package/dist/runtime/components/chat/ChatWindow.vue +154 -0
  45. package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
  46. package/dist/runtime/components/chat/MessageInput.vue +27 -0
  47. package/dist/runtime/components/chat/SearchInput.vue +32 -0
  48. package/dist/runtime/components/core/Accordion.vue +12 -12
  49. package/dist/runtime/components/core/AttendeeList.vue +31 -36
  50. package/dist/runtime/components/core/CountdownTimer.vue +68 -52
  51. package/dist/runtime/components/core/DynamicHtml.vue.d.ts +6 -9
  52. package/dist/runtime/components/core/Modal.vue +24 -22
  53. package/dist/runtime/components/core/ModalButton.vue +43 -0
  54. package/dist/runtime/components/core/Navbar.vue +33 -21
  55. package/dist/runtime/components/core/Navigation.vue +286 -0
  56. package/dist/runtime/components/core/SvgIcon.vue +34 -1
  57. package/dist/runtime/components/core/VButton.vue +35 -0
  58. package/dist/runtime/components/core/ZoomModal.vue +9 -3
  59. package/dist/runtime/components/events/EventHeader.vue +14 -4
  60. package/dist/runtime/components/events/ListEvents.vue +21 -22
  61. package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
  62. package/dist/runtime/components/forms/ErrorField.vue +11 -2
  63. package/dist/runtime/components/forms/Message.vue +1 -1
  64. package/dist/runtime/components/forms/RadioGroup.vue +50 -0
  65. package/dist/runtime/components/forms/SearchInput.vue +8 -2
  66. package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
  67. package/dist/runtime/components/forms/SupportForm.vue +22 -11
  68. package/dist/runtime/components/forms/SwitchInput.vue +50 -30
  69. package/dist/runtime/components/forms/TextArea.vue +1 -1
  70. package/dist/runtime/components/forms/TextInput.vue +1 -1
  71. package/dist/runtime/components/layouts/Accordion.vue +11 -6
  72. package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +24 -5
  73. package/dist/runtime/components/media/ArchiveVideoPlayer.vue +19 -23
  74. package/dist/runtime/components/media/PlayerAndContentContainer.vue +4 -1
  75. package/dist/runtime/components/media/WebcastVideoPlayer.vue +6 -18
  76. package/dist/runtime/components/media/components/AgendaPanel.vue +7 -6
  77. package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +17 -15
  78. package/dist/runtime/components/media/components/CeCreditNotification.vue +8 -8
  79. package/dist/runtime/components/media/components/ContentArea.vue +59 -18
  80. package/dist/runtime/components/media/components/ContentTabs.vue +40 -28
  81. package/dist/runtime/components/media/components/DocumentsPanel.vue +19 -17
  82. package/dist/runtime/components/media/components/MediaContainer.vue +11 -13
  83. package/dist/runtime/components/media/components/OverviewPanel.vue +5 -2
  84. package/dist/runtime/components/media/components/PresentersPanel.vue +74 -55
  85. package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
  86. package/dist/runtime/components/media/components/SponsorsPanel.vue +13 -12
  87. package/dist/runtime/components/presenters/PresenterListing.vue +33 -25
  88. package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
  89. package/dist/runtime/components/presenters/Presenters.vue +139 -0
  90. package/dist/runtime/components/profile/Profile.vue +10 -6
  91. package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
  92. package/dist/runtime/components/profile/components/SidebarNavItem.vue +2 -4
  93. package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
  94. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
  95. package/dist/runtime/components/profile/tabs/ProfileImage.vue +7 -6
  96. package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +102 -0
  97. package/dist/runtime/components/registration/PaymentForm.vue +136 -0
  98. package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
  99. package/dist/runtime/components/registration/RegistrationGroupSelect.vue +146 -0
  100. package/dist/runtime/components/registration/StripePaymentForm.vue +121 -0
  101. package/dist/runtime/components/support/FAQAccordion.vue +8 -7
  102. package/dist/runtime/composables/useAdobeLaunch.d.ts +2 -7
  103. package/dist/runtime/composables/useAdobeLaunch.mjs +2 -2
  104. package/dist/runtime/composables/useAgenda.d.ts +13 -1
  105. package/dist/runtime/composables/useAgenda.mjs +125 -25
  106. package/dist/runtime/composables/useApi.d.ts +1 -1
  107. package/dist/runtime/composables/useAuth.d.ts +1 -1
  108. package/dist/runtime/composables/useAuth.mjs +1 -1
  109. package/dist/runtime/composables/useClassBinding.d.ts +3 -1
  110. package/dist/runtime/composables/useConferenceHelpers.d.ts +7 -3
  111. package/dist/runtime/composables/useConferenceHelpers.mjs +26 -15
  112. package/dist/runtime/composables/useEventHooks.d.ts +29 -0
  113. package/dist/runtime/composables/useEventHooks.mjs +21 -0
  114. package/dist/runtime/composables/useEvents.d.ts +17 -1
  115. package/dist/runtime/composables/useEvents.mjs +35 -9
  116. package/dist/runtime/composables/useLogin.mjs +9 -5
  117. package/dist/runtime/composables/useNavigation.d.ts +1 -1
  118. package/dist/runtime/composables/useNavigation.mjs +4 -2
  119. package/dist/runtime/composables/usePresentation.d.ts +2 -2
  120. package/dist/runtime/composables/usePresentation.mjs +8 -7
  121. package/dist/runtime/composables/usePresenter.d.ts +2 -2
  122. package/dist/runtime/composables/usePresenters.d.ts +2 -2
  123. package/dist/runtime/composables/usePusher.d.ts +4 -0
  124. package/dist/runtime/composables/usePusher.mjs +38 -26
  125. package/dist/runtime/composables/useScripts.mjs +1 -1
  126. package/dist/runtime/composables/useStream.d.ts +2 -3
  127. package/dist/runtime/composables/useStream.mjs +8 -2
  128. package/dist/runtime/composables/useUcc.d.ts +1 -1
  129. package/dist/runtime/composables/useUcc.mjs +29 -23
  130. package/dist/runtime/enums/general.d.ts +4 -1
  131. package/dist/runtime/enums/general.mjs +4 -1
  132. package/dist/runtime/models/adobeLaunch.d.ts +6 -0
  133. package/dist/runtime/models/adobeLaunch.mjs +0 -0
  134. package/dist/runtime/models/analytics.d.ts +6 -0
  135. package/dist/runtime/models/analytics.mjs +0 -0
  136. package/dist/runtime/models/attendeeList.d.ts +1 -1
  137. package/dist/runtime/models/conference.d.ts +122 -91
  138. package/dist/runtime/models/conversation.d.ts +11 -13
  139. package/dist/runtime/models/document.d.ts +5 -5
  140. package/dist/runtime/models/globalConfig.d.ts +9 -3
  141. package/dist/runtime/models/group.d.ts +38 -8
  142. package/dist/runtime/models/icons.d.ts +8 -1
  143. package/dist/runtime/models/index.d.ts +20 -0
  144. package/dist/runtime/models/index.mjs +20 -0
  145. package/dist/runtime/models/link.d.ts +4 -4
  146. package/dist/runtime/models/loginParams.d.ts +5 -0
  147. package/dist/runtime/models/loginParams.mjs +0 -0
  148. package/dist/runtime/models/navigationConfig.d.ts +7 -7
  149. package/dist/runtime/models/pagination.d.ts +11 -11
  150. package/dist/runtime/models/portal.d.ts +15 -10
  151. package/dist/runtime/models/templateConfig.d.ts +13 -7
  152. package/dist/runtime/models/ucc.d.ts +22 -0
  153. package/dist/runtime/models/ucc.mjs +0 -0
  154. package/dist/runtime/models/user.d.ts +25 -12
  155. package/dist/runtime/models/vButton.d.ts +7 -0
  156. package/dist/runtime/models/vButton.mjs +0 -0
  157. package/dist/runtime/models/video.d.ts +5 -4
  158. package/dist/runtime/models/virtualPagesConfig.d.ts +223 -0
  159. package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
  160. package/dist/runtime/plugin.mjs +18 -9
  161. package/dist/runtime/store/affiliates.d.ts +4 -1
  162. package/dist/runtime/store/affiliates.mjs +38 -0
  163. package/dist/runtime/store/attendeeList.d.ts +1 -1
  164. package/dist/runtime/store/auth.d.ts +3 -7
  165. package/dist/runtime/store/auth.mjs +6 -0
  166. package/dist/runtime/store/conferences.d.ts +3 -1
  167. package/dist/runtime/store/conferences.mjs +14 -9
  168. package/dist/runtime/store/conversations.d.ts +78 -10
  169. package/dist/runtime/store/conversations.mjs +255 -22
  170. package/dist/runtime/store/modalPlayerConfig.d.ts +27 -0
  171. package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
  172. package/dist/runtime/store/navigationConfig.d.ts +1 -1
  173. package/dist/runtime/store/presentations.d.ts +2 -2
  174. package/dist/runtime/store/templateConfigs.d.ts +7 -6
  175. package/dist/runtime/store/templateConfigs.mjs +7 -6
  176. package/dist/runtime/store/user.mjs +0 -1
  177. package/dist/runtime/v3plusCommonPlugin.d.ts +1 -1
  178. package/dist/types.d.mts +3 -2
  179. package/dist/types.d.ts +3 -2
  180. package/package.json +12 -9
  181. package/dist/runtime/components/media/components/JsonApi.vue +0 -33
  182. package/dist/runtime/components/media/components/JsonApi.vue.d.ts +0 -16
  183. package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
  184. package/dist/runtime/components/media/components/WindowContent.vue +0 -118
  185. package/dist/runtime/components/media/components/WindowContent.vue.d.ts +0 -50
  186. package/dist/runtime/components/media/components/WindowSlide.vue +0 -92
  187. package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +0 -36
  188. package/dist/runtime/models/authUser.d.ts +0 -16
  189. /package/dist/runtime/{models/authUser.mjs → assets/scss/_footer.css} +0 -0
@@ -0,0 +1,121 @@
1
+ <script lang="ts" setup>
2
+ import { ref, toRefs, unref, computed, onBeforeMount } from 'vue';
3
+ import { StripeElements, StripeElement } from 'vue-stripe-js'
4
+ import { loadStripe } from '@stripe/stripe-js'
5
+
6
+ type Props = {
7
+ stripeKey: string;
8
+ price: number;
9
+ errors?: Object;
10
+ };
11
+
12
+ const props = withDefaults(defineProps<Props>(), {
13
+ errors: () => {
14
+ return {};
15
+ }
16
+ });
17
+
18
+ const { stripeKey, price, errors } = toRefs(props);
19
+
20
+ const stripeLoaded = ref<boolean>(false);
21
+ const instanceOptions = ref({
22
+ // https://stripe.com/docs/js/initializing#init_stripe_js-options
23
+ })
24
+ const elementsOptions = ref({
25
+ // https://stripe.com/docs/js/elements_object/create#stripe_elements-options
26
+ })
27
+ const cardOptions = ref({
28
+ // https://stripe.com/docs/stripe.js#element-options
29
+ value: {
30
+ // postalCode: '12345',
31
+ },
32
+ });
33
+
34
+ // ref from StripeElement.vue
35
+ const card = ref();
36
+ // ref from StripeElements.vue
37
+ const elms = ref();
38
+
39
+ const emit = defineEmits<{
40
+ (event: "tokenGenerated", value: string): void;
41
+ (event: "onError"): void;
42
+ }>();
43
+
44
+ // computed
45
+ const totalFormatted = computed((): string => {
46
+ return new Intl.NumberFormat('en-US', {
47
+ style: 'currency',
48
+ currency: 'USD',
49
+ minimumFractionDigits: 2
50
+ })
51
+ .format(price.value / 100);
52
+ });
53
+
54
+ // methods
55
+ const payWithStripe = (): void => {
56
+ // Get stripe element
57
+ const cardElement = card.value.stripeElement;
58
+
59
+ // Access instance methods, e.g. createToken()
60
+ // TODO - correctly type result if possible
61
+ elms.value.instance.createToken(cardElement).then((result: object) => {
62
+ // Handle result.error or result.token
63
+ if (result?.token) {
64
+ emit('tokenGenerated', result.token.id);
65
+ } else {
66
+ emit('onError');
67
+ }
68
+ })
69
+ };
70
+
71
+ defineExpose({
72
+ payWithStripe
73
+ });
74
+
75
+ onBeforeMount(() => {
76
+ const stripePromise = loadStripe(unref(stripeKey));
77
+ stripePromise.then((): void => {
78
+ stripeLoaded.value = true;
79
+ })
80
+ });
81
+ </script>
82
+
83
+ <template>
84
+ <div class="border border-gray-200 rounded p-4">
85
+ <div class="py-3 mb-4 px-3 flex bg-gray-400 rounded text-white font-semibold">
86
+ <div class="flex-1">
87
+ Payment Information
88
+ </div>
89
+ <div class="flex-1 text-right">
90
+ {{ totalFormatted }}
91
+ </div>
92
+ </div>
93
+
94
+ <p
95
+ v-if="errors.payment"
96
+ class="text-red-600 my-3"
97
+ >
98
+ {{ errors.payment[0] }}
99
+ </p>
100
+
101
+ <!-- TODO - incorporate instance in v-slot -->
102
+ <StripeElements
103
+ v-if="stripeLoaded"
104
+ v-slot="{ elements }"
105
+ ref="elms"
106
+ :stripe-key="stripeKey"
107
+ :instance-options="instanceOptions"
108
+ :elements-options="elementsOptions"
109
+ >
110
+ <StripeElement
111
+ ref="card"
112
+ :elements="elements"
113
+ :options="cardOptions"
114
+ />
115
+ </StripeElements>
116
+ </div>
117
+ </template>
118
+
119
+ <style>
120
+ .StripeElement{background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 3px 0 #e6ebf1;box-sizing:border-box;height:40px;padding:10px 12px;transition:box-shadow .15s ease}.StripeElement--focus{box-shadow:0 1px 3px 0 #cfd7df}.StripeElement--invalid{border-color:#fa755a}.StripeElement--webkit-autofill{background-color:#fefde5!important}
121
+ </style>
@@ -74,9 +74,7 @@ const { classBinding } = useClassBinding();
74
74
  :class-object="classObject.components?.accordion"
75
75
  >
76
76
  <template #question>
77
- <span class="font-bold"
78
- >Q: Have you run the pre-event streaming test?</span
79
- >
77
+ <span class="font-bold">Q: Have you run the pre-event streaming test?</span>
80
78
  </template>
81
79
  <template #answer>
82
80
  <p>
@@ -92,7 +90,10 @@ const { classBinding } = useClassBinding();
92
90
  </p>
93
91
  </template>
94
92
  </CommonAccordion>
95
- <template v-for="(question, index) in questionArray" :key="index">
93
+ <template
94
+ v-for="(question, index) in questionArray"
95
+ :key="index"
96
+ >
96
97
  <CommonAccordion
97
98
  :class="
98
99
  classBinding(classObject.components?.accordion, 'container', '')
@@ -120,11 +121,11 @@ const { classBinding } = useClassBinding();
120
121
  <template #answer>
121
122
  <div>
122
123
  <div v-if="showForm">
123
- <span class="font-bold">Support Form</span><br />You can email
124
+ <span class="font-bold">Support Form</span><br>You can email
124
125
  support using the support form below.
125
126
  </div>
126
127
  <div v-else>
127
- <span class="font-bold">Support Email</span><br />You can email
128
+ <span class="font-bold">Support Email</span><br>You can email
128
129
  support at
129
130
  <a href="mailto:support@rubiconportals.com">support@rubiconportals.com</a>.
130
131
  </div>
@@ -134,7 +135,7 @@ const { classBinding } = useClassBinding();
134
135
  </div>
135
136
  During the webcast, live support will also be available to
136
137
  assist.You may request live support by
137
- <a
138
+ <a
138
139
  :href="liveSupportUrl"
139
140
  target="_blank"
140
141
  >clicking here</a>.
@@ -1,7 +1,2 @@
1
- export type adobeLaunchFunctions = {
2
- /**
3
- * load script
4
- */
5
- loadAdobeLaunch: () => void;
6
- };
7
- export declare const useAdobeLaunch: () => adobeLaunchFunctions;
1
+ import type { AdobeLaunchFunctions } from '../models/adobeLaunch';
2
+ export declare const useAdobeLaunch: () => AdobeLaunchFunctions;
@@ -5,8 +5,8 @@ export const useAdobeLaunch = () => {
5
5
  const router = useRouter();
6
6
  const portalStore = usePortalStore();
7
7
  const loadAdobeLaunch = () => {
8
- if (portalStore.data.adobe_launch_url) {
9
- let adtm = document.createElement("script");
8
+ if (portalStore.data?.adobe_launch_url) {
9
+ const adtm = document.createElement("script");
10
10
  adtm.setAttribute("src", portalStore.data.adobe_launch_url);
11
11
  document.head.appendChild(adtm);
12
12
  adtm.onload = () => {
@@ -1,4 +1,4 @@
1
- import { Ref, ComputedRef } from "nuxt/dist/app/compat/capi";
1
+ import type { Ref, ComputedRef } from "vue";
2
2
  import type { Conference, Day, Presentation, Presenter, Sponsor, Track, TrackGroup } from "../models/conference";
3
3
  export type UseAgendaMethods = {
4
4
  /**
@@ -81,5 +81,17 @@ export type UseAgendaMethods = {
81
81
  * show presenter description
82
82
  */
83
83
  showPresenterDescription: (presenter: Presenter, presentation: Presentation) => void;
84
+ /**
85
+ * emits handles player behavior for virtual template
86
+ */
87
+ playPresentation: (_track: Track, _presentation: Presentation, _conference: Conference, _isActiveAgenda: boolean, _isVirtual?: boolean) => void | null;
88
+ /**
89
+ * update the selectedPresentation
90
+ */
91
+ updateSelectedPresentation: (_conference: Conference) => void;
92
+ /**
93
+ * Save the current live Presentation for this Conference in store
94
+ */
95
+ setLivePresentations: (_event?: any) => void;
84
96
  };
85
97
  export declare const useAgenda: (conference: Ref<Conference>) => UseAgendaMethods;
@@ -1,31 +1,45 @@
1
1
  import { get, remove, cloneDeep, intersectionBy, pullAllBy } from "lodash-es";
2
2
  import { ref, computed, onBeforeMount } from "vue";
3
+ import { useRoute } from "vue-router";
3
4
  import { storeToRefs } from "pinia";
4
5
  import { DateTime } from "luxon";
5
6
  import { useTemplateConfigsStore } from "../store/index.mjs";
6
7
  import { useAuthStore } from "../store/auth.mjs";
8
+ import { useConferencesStore } from "../store/index.mjs";
7
9
  import { useAffiliatesStore } from "../store/affiliates.mjs";
10
+ import { usePlayerConfigStore } from "../store/modalPlayerConfig.mjs";
11
+ import {
12
+ commitLivePresentationsEventHook,
13
+ setIsPlayerVisibleEventHook,
14
+ setPlayerPresentationEventHook,
15
+ setPlayerConferenceEventHook
16
+ } from "../composables/useEventHooks.mjs";
8
17
  export const useAgenda = (conference) => {
9
18
  const { setConferenceConfig, pagesConfigValue } = useTemplateConfigsStore();
19
+ console.log("setting conference config");
10
20
  setConferenceConfig(conference.value);
11
21
  const affiliateStore = useAffiliatesStore();
22
+ const route = useRoute();
12
23
  const { isLoggedIn } = storeToRefs(useAuthStore());
24
+ const { currentConference } = storeToRefs(useConferencesStore());
25
+ const { playerPresentation, livePresentations } = storeToRefs(usePlayerConfigStore());
13
26
  const selectedDay = ref(null);
14
27
  const allowAgendaFullAccess = pagesConfigValue("agenda.agendas_full_access", false);
15
28
  const displayTrackGroups = pagesConfigValue("agenda.group_tracks", "None");
16
29
  const selectedPresenter = ref(null);
17
30
  const days = computed(() => {
18
31
  const data = conference.value.days;
32
+ if (data == void 0) return [];
19
33
  if (isLoggedIn.value && !allowAgendaFullAccess) {
20
34
  remove(data, ["access", false]);
21
35
  }
22
36
  return data;
23
37
  });
24
38
  const enabledSponsors = computed(() => {
25
- return affiliateStore.getConferenceAffiliates(conference.value.id);
39
+ return affiliateStore.getConferenceAffiliates(conference.value?.id);
26
40
  });
27
41
  const horizontalTrackGroups = computed(() => {
28
- return displayTrackGroups === "Horizonal";
42
+ return displayTrackGroups === "Horizontal";
29
43
  });
30
44
  const setSelectedDay = (day) => {
31
45
  selectedDay.value = day;
@@ -37,8 +51,8 @@ export const useAgenda = (conference) => {
37
51
  return get(day, "sponsors.length", 0) > 0 && pagesConfigValue("agenda.sponsors");
38
52
  };
39
53
  const getCombinedTrackList = (day) => {
40
- const trackGroups = cloneDeep(day.track_groups ?? {});
41
- const tracks = cloneDeep(day.tracks ?? {});
54
+ const trackGroups = cloneDeep(day.track_groups ?? []);
55
+ const tracks = cloneDeep(day.tracks ?? []);
42
56
  if (isLoggedIn.value && !allowAgendaFullAccess) {
43
57
  remove(tracks, ["access", false]);
44
58
  }
@@ -48,15 +62,19 @@ export const useAgenda = (conference) => {
48
62
  });
49
63
  return tracks;
50
64
  }
51
- let duplicateTracks = [];
65
+ let duplicateTracks;
52
66
  trackGroups.forEach((trackGroup) => {
53
- duplicateTracks = intersectionBy(tracks, trackGroup.tracks, "id");
67
+ if (trackGroup.tracks != void 0) {
68
+ duplicateTracks = intersectionBy(tracks, trackGroup.tracks, "id");
69
+ }
54
70
  pullAllBy(tracks, duplicateTracks, "id");
55
71
  if (isLoggedIn.value && !allowAgendaFullAccess) {
56
- remove(trackGroup.tracks, ["access", false]);
72
+ if (trackGroup.tracks != void 0) {
73
+ remove(trackGroup.tracks, ["access", false]);
74
+ }
57
75
  }
58
- trackGroup.tracks.sort((trackA, trackB) => {
59
- return DateTime.fromSQL(trackA.date).diff(DateTime.fromSQL(trackB.date)).milliseconds;
76
+ trackGroup.tracks?.sort((trackA, trackB) => {
77
+ return DateTime.fromSQL(trackA?.date).diff(DateTime.fromSQL(trackB.date)).milliseconds;
60
78
  });
61
79
  trackGroup.type = "track_group";
62
80
  });
@@ -69,10 +87,15 @@ export const useAgenda = (conference) => {
69
87
  });
70
88
  return combinedArray;
71
89
  };
90
+ const isGroupedTrack = (track) => {
91
+ return track.type === "track_group" && horizontalTrackGroups.value;
92
+ };
72
93
  const hasPresentations = (track) => {
73
- if (track.type === "track_group") {
94
+ if (isGroupedTrack(track)) {
74
95
  for (let i = 0; i < get(track, "tracks.length", 0); i++) {
75
- if (get(track.tracks[i], "presentations.length", 0) > 0) {
96
+ const currentTrack = track;
97
+ const tracks = currentTrack.tracks;
98
+ if (get(tracks[i], "presentations.length", 0) > 0) {
76
99
  return true;
77
100
  }
78
101
  }
@@ -81,9 +104,6 @@ export const useAgenda = (conference) => {
81
104
  return get(track, "presentations.length", 0) > 0;
82
105
  }
83
106
  };
84
- const isGroupedTrack = (track) => {
85
- return track.type === "track_group" && horizontalTrackGroups.value === true;
86
- };
87
107
  const isSmallGroupedTrack = (track) => {
88
108
  if (isGroupedTrack(track)) {
89
109
  if (get(track, "tracks.length", 0) > 1) {
@@ -93,7 +113,7 @@ export const useAgenda = (conference) => {
93
113
  return false;
94
114
  };
95
115
  const getTracks = (track) => {
96
- if (track.type === "track_group") {
116
+ if (isGroupedTrack(track)) {
97
117
  return track.tracks;
98
118
  } else {
99
119
  return [track];
@@ -128,14 +148,6 @@ export const useAgenda = (conference) => {
128
148
  }
129
149
  return classes;
130
150
  };
131
- onBeforeMount(() => {
132
- if (!conference.value.hasOwnProperty("affiliates")) {
133
- affiliateStore.getAffiliates(conference.value.id);
134
- }
135
- if (selectedDay.value === null) {
136
- selectedDay.value = conference.value.days[0];
137
- }
138
- });
139
151
  const showInfoLink = () => {
140
152
  return pagesConfigValue("agenda.session_desc_link") !== "none";
141
153
  };
@@ -146,12 +158,96 @@ export const useAgenda = (conference) => {
146
158
  return pagesConfigValue("agenda.use_presenter_modal");
147
159
  };
148
160
  const showPresenterDescription = (presenter, presentation) => {
149
- if (selectedPresenter.value.presentationId === presentation.id && selectedPresenter.value.id === presenter.id) {
161
+ if (selectedPresenter.value?.presentationId === presentation.id && selectedPresenter.value?.id === presenter.id) {
150
162
  selectedPresenter.value = null;
151
163
  } else {
152
164
  selectedPresenter.value = presenter;
153
165
  }
154
166
  };
167
+ const getPresentationPlayerType = (_presentation) => {
168
+ let playerType = _presentation.video_url || _presentation.type == "embed" ? "archive" : "live";
169
+ if (_presentation.external_type == "iframe") {
170
+ playerType = "iframe";
171
+ }
172
+ return playerType;
173
+ };
174
+ const playPresentation = (_track, _presentation, _conference, _isActiveAgenda, _isVirtual = false) => {
175
+ if (!_isVirtual) {
176
+ return null;
177
+ } else if (_presentation.type == "link" && _presentation.external_type != "iframe") {
178
+ openExternalLink(_presentation);
179
+ } else if ((route.name == "agenda-id" || _isActiveAgenda) && (_conference.state == "live" || _conference.state == "mixed") || _conference.state == "archive") {
180
+ const pres = _presentation;
181
+ pres.track = { "channel": _track.channel };
182
+ pres.access = _track.access;
183
+ setPlayerPresentationEventHook.trigger({
184
+ "player_type": getPresentationPlayerType(_presentation),
185
+ "data": pres
186
+ });
187
+ console.log({
188
+ "player_type": getPresentationPlayerType(_presentation),
189
+ "data": pres
190
+ });
191
+ setPlayerConferenceEventHook.trigger(_conference);
192
+ setIsPlayerVisibleEventHook.trigger(true);
193
+ } else {
194
+ return null;
195
+ }
196
+ };
197
+ const openExternalLink = (_presentation) => {
198
+ let ext_type = get(_presentation, "external_type", "new_window");
199
+ if (ext_type === null) {
200
+ ext_type = "new_window";
201
+ }
202
+ const tempUrl = _presentation.video_url;
203
+ const url = tempUrl;
204
+ return ext_type === "new_window" ? window.open(url, "_blank") : window.open(url, "_self");
205
+ };
206
+ const updateSelectedPresentation = (_conference) => {
207
+ const oldSelectedPres = playerPresentation.value.data;
208
+ _conference?.days?.some((day) => {
209
+ day?.tracks?.some((track) => {
210
+ track?.presentations?.some((pres) => {
211
+ if (pres.id == oldSelectedPres.id && (day.access || track.access)) {
212
+ const _pres = Object.assign({}, pres);
213
+ _pres.access = true;
214
+ setPlayerPresentationEventHook.trigger({
215
+ "player_type": getPresentationPlayerType(_pres),
216
+ "data": _pres
217
+ });
218
+ return true;
219
+ }
220
+ });
221
+ });
222
+ });
223
+ };
224
+ const setLivePresentations = (_event = {}) => {
225
+ const tempPres = Object.assign({}, livePresentations.value);
226
+ if (Object.keys(_event).length) {
227
+ _event.presentation.is_live ? tempPres[_event.track.id] = _event.presentation.id : delete tempPres[_event.track.id];
228
+ commitLivePresentationsEventHook.trigger(tempPres);
229
+ } else if (!Object.keys(livePresentations.value).length) {
230
+ currentConference.value?.days?.forEach((day) => {
231
+ day?.tracks?.forEach((track) => {
232
+ track?.presentations?.forEach((presentation) => {
233
+ if (presentation.is_live) {
234
+ tempPres[track.id] = presentation.id;
235
+ }
236
+ });
237
+ });
238
+ });
239
+ commitLivePresentationsEventHook.trigger(tempPres);
240
+ }
241
+ };
242
+ onBeforeMount(() => {
243
+ if (!Object.prototype.hasOwnProperty.call(conference.value, "affiliates")) {
244
+ affiliateStore.getAffiliates(conference.value.id);
245
+ }
246
+ if (selectedDay.value === null) {
247
+ const days2 = conference.value.days;
248
+ selectedDay.value = days2[0];
249
+ }
250
+ });
155
251
  return {
156
252
  days,
157
253
  enabledSponsors,
@@ -159,6 +255,7 @@ export const useAgenda = (conference) => {
159
255
  displayTrackGroups,
160
256
  horizontalTrackGroups,
161
257
  selectedPresenter,
258
+ allowAgendaFullAccess,
162
259
  setSelectedDay,
163
260
  showTabDates,
164
261
  shouldShowSponsors,
@@ -171,6 +268,9 @@ export const useAgenda = (conference) => {
171
268
  showInfoLink,
172
269
  useAccordion,
173
270
  usePresenterModal,
174
- showPresenterDescription
271
+ showPresenterDescription,
272
+ playPresentation,
273
+ updateSelectedPresentation,
274
+ setLivePresentations
175
275
  };
176
276
  };
@@ -1 +1 @@
1
- export declare const useApi: (withoutAuth?: boolean) => any;
1
+ export declare const useApi: (withoutAuth?: boolean) => typeof $fetch;
@@ -1,4 +1,4 @@
1
- import { ComputedRef } from "vue";
1
+ import type { ComputedRef } from 'vue';
2
2
  export type UseAuthMethods = {
3
3
  isLoginDisabled: ComputedRef<boolean>;
4
4
  };
@@ -3,7 +3,7 @@ import { useTemplateConfigsStore } from "../store/templateConfigs.mjs";
3
3
  export const useAuth = () => {
4
4
  const { globalConfigValue } = useTemplateConfigsStore();
5
5
  const isLoginDisabled = computed(() => {
6
- return !globalConfigValue("login_disabled") || globalConfigValue("login_process") === "disabled";
6
+ return globalConfigValue("login_disabled") || globalConfigValue("login_process") === "disabled";
7
7
  });
8
8
  return {
9
9
  isLoginDisabled
@@ -1,4 +1,6 @@
1
1
  export type UseClassBindingMethods = {
2
- classBinding(_classObject: {} | undefined, _element: string, _defaults: string): string;
2
+ classBinding(_classObject: {
3
+ [key: string]: string;
4
+ } | undefined, _element: string, _defaults: string): string;
3
5
  };
4
6
  export declare const useClassBinding: () => UseClassBindingMethods;
@@ -1,5 +1,5 @@
1
- import { Ref } from "vue";
2
- import type { Conference } from "../models/conference";
1
+ import type { Ref } from 'vue';
2
+ import type { Conference } from '../models/conference';
3
3
  export type UseConferenceHelpersMethods = {
4
4
  /**
5
5
  * Determine if conference is a single day event
@@ -20,7 +20,7 @@ export type UseConferenceHelpersMethods = {
20
20
  /**
21
21
  * Get conference webcast url
22
22
  */
23
- getConferenceWebcastUrl: (_conference?: Conference) => string;
23
+ getConferenceWebcastUrl: (_conference: Conference, skipAgenda?: boolean) => string;
24
24
  /**
25
25
  * Get timezone display
26
26
  */
@@ -69,5 +69,9 @@ export type UseConferenceHelpersMethods = {
69
69
  * conference is Archived
70
70
  */
71
71
  conferenceIsArchived: (_conference?: Conference) => boolean;
72
+ /**
73
+ * string description of conference state
74
+ */
75
+ getConferenceStatusLabel: (_conference: Conference) => string;
72
76
  };
73
77
  export declare const useConferenceHelpers: (conference: Ref<Conference | null>) => UseConferenceHelpersMethods;
@@ -48,11 +48,11 @@ export const useConferenceHelpers = (conference) => {
48
48
  };
49
49
  const hasAccessToEvent = (_conference) => {
50
50
  const _selectedConference = _getSelectedConference(_conference);
51
- let hasAccess = find(
51
+ const hasAccess = find(
52
52
  get(user, "value.conferences", []),
53
53
  { id: _selectedConference.id }
54
54
  );
55
- return isLoggedIn && (_selectedConference.access || hasAccess);
55
+ return isLoggedIn.value && (_selectedConference.access || hasAccess);
56
56
  };
57
57
  const showConferenceWebcastButton = (_conference) => {
58
58
  const _selectedConference = _getSelectedConference(_conference);
@@ -78,14 +78,15 @@ export const useConferenceHelpers = (conference) => {
78
78
  const getTimezoneDisplay = (sqlDate, timezone, showTwoCharTz) => {
79
79
  let tz = "";
80
80
  if (pagesConfigValue.value("main.use_event_text_tz")) {
81
- let threeCharTz = DateTime.fromSQL(
81
+ const threeCharTz = DateTime.fromSQL(
82
82
  sqlDate,
83
83
  { zone: timezone }
84
84
  ).toLocal().offsetNameShort;
85
+ if (threeCharTz == null) return "";
85
86
  tz = threeCharTz;
86
87
  if (showTwoCharTz) {
87
88
  if (threeCharTz.length >= 3 && threeCharTz.length <= 4 && (threeCharTz.charAt(threeCharTz.length - 2) == "S" || threeCharTz.charAt(threeCharTz.length - 2) == "D")) {
88
- let twoCharTz = threeCharTz.substring(0, threeCharTz.length - 2) + threeCharTz.charAt(threeCharTz.length - 1);
89
+ const twoCharTz = threeCharTz.substring(0, threeCharTz.length - 2) + threeCharTz.charAt(threeCharTz.length - 1);
89
90
  tz = twoCharTz;
90
91
  }
91
92
  }
@@ -140,10 +141,9 @@ export const useConferenceHelpers = (conference) => {
140
141
  };
141
142
  const showViewArchiveButton = (_conference) => {
142
143
  const _selectedConference = _getSelectedConference(_conference);
143
- if (_selectedConference.state !== "archive")
144
- return false;
144
+ if (_selectedConference.state !== "archive") return false;
145
145
  if (route.name === "index") {
146
- return isLoggedIn && _selectedConference.access;
146
+ return isLoggedIn.value && _selectedConference.access;
147
147
  } else {
148
148
  return _selectedConference.access || _selectedConference.agenda_enabled || pagesConfigValue.value("archive_player.preview_enabled", false);
149
149
  }
@@ -202,7 +202,7 @@ export const useConferenceHelpers = (conference) => {
202
202
  const getConferenceRegUrl = (_conference, _registerPath) => {
203
203
  const _selectedConference = _getSelectedConference(_conference);
204
204
  if (globalConfigValue.value("townhall_registration_enabled", false)) {
205
- if (_selectedConference.id === currentConference.value.id) {
205
+ if (_selectedConference.id === currentConference.value?.id) {
206
206
  return "/";
207
207
  } else if (_selectedConference.state === "live" || _selectedConference.state === "mixed") {
208
208
  return `/upcoming-events/${_selectedConference.id}`;
@@ -214,13 +214,10 @@ export const useConferenceHelpers = (conference) => {
214
214
  _selectedConference,
215
215
  "conference_external_reg_url"
216
216
  );
217
- if (confExternalUrl)
218
- return confExternalUrl;
217
+ if (confExternalUrl) return confExternalUrl;
219
218
  const portalExternalUrl = globalConfigValue.value("external_reg_url");
220
- if (portalExternalUrl)
221
- return portalExternalUrl;
222
- if (_registerPath)
223
- return _registerPath + _selectedConference.id;
219
+ if (portalExternalUrl) return portalExternalUrl;
220
+ if (_registerPath) return _registerPath + _selectedConference.id;
224
221
  return `/registration/options/${_selectedConference.id}`;
225
222
  };
226
223
  const getConferenceRegText = (_conference) => {
@@ -255,6 +252,19 @@ export const useConferenceHelpers = (conference) => {
255
252
  const _selectedConference = _getSelectedConference(_conference);
256
253
  return _selectedConference.state === ConferenceState.ARCHIVED;
257
254
  };
255
+ const getConferenceStatusLabel = (_conference) => {
256
+ switch (_conference.state) {
257
+ case "archive":
258
+ return "Archive";
259
+ case "upcoming":
260
+ return "Upcoming";
261
+ case "mixed":
262
+ return "Live";
263
+ case "live":
264
+ return "Live";
265
+ }
266
+ return "Archive";
267
+ };
258
268
  return {
259
269
  isSingleDayEvent,
260
270
  hasAccessToEvent,
@@ -272,6 +282,7 @@ export const useConferenceHelpers = (conference) => {
272
282
  showConferenceViewButton,
273
283
  conferenceIsLiveOrMixed,
274
284
  conferenceIsMixed,
275
- conferenceIsArchived
285
+ conferenceIsArchived,
286
+ getConferenceStatusLabel
276
287
  };
277
288
  };
@@ -0,0 +1,29 @@
1
+ import type { ContentData } from '../models/vButton';
2
+ import type { Conversation } from '../models/conversation';
3
+ import type { User } from '../models/user';
4
+ export type UserSearchParams = {
5
+ value?: string;
6
+ iterate?: boolean;
7
+ };
8
+ export declare const loginEventHook: import("@vueuse/shared").EventHook<boolean>;
9
+ export declare const loggedOutEventHook: import("@vueuse/shared").EventHook<any>;
10
+ export declare const modalClosedEventHook: import("@vueuse/shared").EventHook<any>;
11
+ export declare const commitLivePresentationsEventHook: import("@vueuse/shared").EventHook<{
12
+ [index: number]: number;
13
+ }>;
14
+ export declare const setIsPlayerVisibleEventHook: import("@vueuse/shared").EventHook<boolean>;
15
+ export declare const setIsProfileVisibleEventHook: import("@vueuse/shared").EventHook<boolean>;
16
+ export declare const setPlayerPresentationEventHook: import("@vueuse/shared").EventHook<any>;
17
+ export declare const setPlayerConferenceEventHook: import("@vueuse/shared").EventHook<any>;
18
+ export declare const createVideoChatAffiliateEventHook: import("@vueuse/shared").EventHook<any>;
19
+ export declare const createVideoChatEventHook: import("@vueuse/shared").EventHook<any>;
20
+ export declare const modalContentEventHook: import("@vueuse/shared").EventHook<ContentData>;
21
+ export declare const hideConversationEventHook: import("@vueuse/shared").EventHook<Conversation>;
22
+ export declare const chatSearchEventHook: import("@vueuse/shared").EventHook<UserSearchParams>;
23
+ export declare const clearConversationEventHook: import("@vueuse/shared").EventHook<Conversation>;
24
+ export declare const createConversationEventHook: import("@vueuse/shared").EventHook<User[]>;
25
+ export declare const chatLoadUsersEventHook: import("@vueuse/shared").EventHook<any>;
26
+ export declare const chatUsersLoadedEventHook: import("@vueuse/shared").EventHook<any>;
27
+ export declare const sendMessageEventHook: import("@vueuse/shared").EventHook<string>;
28
+ export declare const setSelectedConversationEventHook: import("@vueuse/shared").EventHook<Conversation>;
29
+ export declare const toggleChatWindowEventHook: import("@vueuse/shared").EventHook<boolean>;
@@ -0,0 +1,21 @@
1
+ import { createEventHook } from "@vueuse/core";
2
+ export const loginEventHook = createEventHook();
3
+ export const loggedOutEventHook = createEventHook();
4
+ export const modalClosedEventHook = createEventHook();
5
+ export const commitLivePresentationsEventHook = createEventHook();
6
+ export const setIsPlayerVisibleEventHook = createEventHook();
7
+ export const setIsProfileVisibleEventHook = createEventHook();
8
+ export const setPlayerPresentationEventHook = createEventHook();
9
+ export const setPlayerConferenceEventHook = createEventHook();
10
+ export const createVideoChatAffiliateEventHook = createEventHook();
11
+ export const createVideoChatEventHook = createEventHook();
12
+ export const modalContentEventHook = createEventHook();
13
+ export const hideConversationEventHook = createEventHook();
14
+ export const chatSearchEventHook = createEventHook();
15
+ export const clearConversationEventHook = createEventHook();
16
+ export const createConversationEventHook = createEventHook();
17
+ export const chatLoadUsersEventHook = createEventHook();
18
+ export const chatUsersLoadedEventHook = createEventHook();
19
+ export const sendMessageEventHook = createEventHook();
20
+ export const setSelectedConversationEventHook = createEventHook();
21
+ export const toggleChatWindowEventHook = createEventHook();