@icvdeveloper/common-module 1.4.13 → 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.
Files changed (109) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +10 -0
  4. package/dist/runtime/@types/components.d.ts +22 -0
  5. package/dist/runtime/@types/configVariables.d.ts +6 -0
  6. package/dist/runtime/analytics.d.ts +1 -1
  7. package/dist/runtime/assets/scss/index.css +0 -705
  8. package/dist/runtime/assets/svg/icon-minus.svg +6 -0
  9. package/dist/runtime/assets/svg/icon-video.svg +6 -0
  10. package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
  11. package/dist/runtime/components/affiliates/AffiliatePage.vue +337 -132
  12. package/dist/runtime/components/agenda/AgendaTabbed.vue +43 -34
  13. package/dist/runtime/components/agenda/components/Calendar.vue +8 -3
  14. package/dist/runtime/components/agenda/components/Favorite.vue +44 -0
  15. package/dist/runtime/components/agenda/components/PlayIcon.vue +1 -1
  16. package/dist/runtime/components/agenda/components/PresentationLink.vue +26 -15
  17. package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
  18. package/dist/runtime/components/chat/ChatCreateConversation.vue +205 -0
  19. package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +159 -0
  20. package/dist/runtime/components/chat/ChatHeader.vue +98 -0
  21. package/dist/runtime/components/chat/ChatMessage.vue +40 -0
  22. package/dist/runtime/components/chat/ChatShowConversation.vue +77 -0
  23. package/dist/runtime/components/chat/ChatWidget.vue +65 -0
  24. package/dist/runtime/components/chat/ChatWindow.vue +211 -0
  25. package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
  26. package/dist/runtime/components/chat/MessageInput.vue +30 -0
  27. package/dist/runtime/components/chat/SearchInput.vue +32 -0
  28. package/dist/runtime/components/core/Accordion.vue +1 -1
  29. package/dist/runtime/components/core/AttendeeList.vue +25 -16
  30. package/dist/runtime/components/core/CountdownTimer.vue +1 -1
  31. package/dist/runtime/components/core/Modal.vue +21 -13
  32. package/dist/runtime/components/core/ModalButton.vue +43 -0
  33. package/dist/runtime/components/core/Navbar.vue +3 -3
  34. package/dist/runtime/components/core/Navigation.vue +293 -0
  35. package/dist/runtime/components/core/SvgIcon.vue +31 -1
  36. package/dist/runtime/components/core/VButton.vue +41 -0
  37. package/dist/runtime/components/core/ZoomModal.vue +1 -1
  38. package/dist/runtime/components/events/ListEvents.vue +3 -4
  39. package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
  40. package/dist/runtime/components/forms/ErrorField.vue +11 -2
  41. package/dist/runtime/components/forms/RadioGroup.vue +50 -0
  42. package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
  43. package/dist/runtime/components/forms/SupportForm.vue +6 -6
  44. package/dist/runtime/components/layouts/Accordion.vue +2 -2
  45. package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +20 -4
  46. package/dist/runtime/components/media/ArchiveVideoPlayer.vue +14 -6
  47. package/dist/runtime/components/media/WebcastVideoPlayer.vue +1 -1
  48. package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +8 -8
  49. package/dist/runtime/components/media/components/CeCreditNotification.vue +2 -2
  50. package/dist/runtime/components/media/components/ContentArea.vue +51 -14
  51. package/dist/runtime/components/media/components/ContentTabs.vue +2 -2
  52. package/dist/runtime/components/media/components/DocumentsPanel.vue +2 -2
  53. package/dist/runtime/components/media/components/MediaContainer.vue +3 -7
  54. package/dist/runtime/components/media/components/PresentersPanel.vue +69 -50
  55. package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
  56. package/dist/runtime/components/media/components/SponsorsPanel.vue +3 -3
  57. package/dist/runtime/components/presenters/PresenterListing.vue +30 -20
  58. package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
  59. package/dist/runtime/components/presenters/Presenters.vue +139 -0
  60. package/dist/runtime/components/profile/Profile.vue +10 -6
  61. package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
  62. package/dist/runtime/components/profile/components/SidebarNavItem.vue +1 -1
  63. package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
  64. package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
  65. package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +99 -0
  66. package/dist/runtime/components/registration/PaymentForm.vue +136 -0
  67. package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
  68. package/dist/runtime/components/registration/RegistrationGroupSelect.vue +142 -0
  69. package/dist/runtime/components/registration/StripePaymentForm.vue +141 -0
  70. package/dist/runtime/composables/useAgenda.d.ts +12 -0
  71. package/dist/runtime/composables/useAgenda.mjs +101 -10
  72. package/dist/runtime/composables/useAuth.mjs +1 -1
  73. package/dist/runtime/composables/useConferenceHelpers.d.ts +5 -1
  74. package/dist/runtime/composables/useConferenceHelpers.mjs +15 -1
  75. package/dist/runtime/composables/useEventHooks.d.ts +26 -0
  76. package/dist/runtime/composables/useEventHooks.mjs +21 -0
  77. package/dist/runtime/composables/useEvents.d.ts +17 -1
  78. package/dist/runtime/composables/useEvents.mjs +29 -1
  79. package/dist/runtime/composables/useLogin.mjs +7 -3
  80. package/dist/runtime/composables/usePresentation.mjs +1 -1
  81. package/dist/runtime/composables/usePusher.d.ts +4 -0
  82. package/dist/runtime/composables/usePusher.mjs +38 -26
  83. package/dist/runtime/composables/useStream.mjs +7 -1
  84. package/dist/runtime/enums/general.d.ts +4 -1
  85. package/dist/runtime/enums/general.mjs +4 -1
  86. package/dist/runtime/models/authUser.d.ts +1 -0
  87. package/dist/runtime/models/conference.d.ts +14 -0
  88. package/dist/runtime/models/conversation.d.ts +2 -4
  89. package/dist/runtime/models/globalConfig.d.ts +6 -2
  90. package/dist/runtime/models/group.d.ts +32 -2
  91. package/dist/runtime/models/icons.d.ts +7 -0
  92. package/dist/runtime/models/templateConfig.d.ts +6 -0
  93. package/dist/runtime/models/user.d.ts +1 -0
  94. package/dist/runtime/models/virtualPagesConfig.d.ts +335 -0
  95. package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
  96. package/dist/runtime/plugin.mjs +11 -1
  97. package/dist/runtime/store/affiliates.d.ts +3 -0
  98. package/dist/runtime/store/affiliates.mjs +38 -0
  99. package/dist/runtime/store/auth.mjs +6 -0
  100. package/dist/runtime/store/conferences.d.ts +3 -1
  101. package/dist/runtime/store/conferences.mjs +7 -2
  102. package/dist/runtime/store/conversations.d.ts +4040 -10
  103. package/dist/runtime/store/conversations.mjs +255 -22
  104. package/dist/runtime/store/modalPlayerConfig.d.ts +498 -0
  105. package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
  106. package/dist/runtime/store/templateConfigs.d.ts +3 -2
  107. package/dist/runtime/store/templateConfigs.mjs +2 -1
  108. package/package.json +5 -2
  109. 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
- 'flex-1 grid grid-cols-7 grid-rows-2 gap-y-4'
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: Number): void;
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
- onBeforeRouteLeave(() => {
156
+ onUnmounted(() => {
149
157
  cleanup();
150
158
  });
151
159
  </script>
@@ -73,7 +73,7 @@ const playStream = () => {
73
73
 
74
74
  // watchers
75
75
  watch(
76
- presentation,
76
+ presentation.value,
77
77
  (_oldPresentation: Presentation, _newPresentation: Presentation) => {
78
78
  if (_oldPresentation.type !== _newPresentation.type) {
79
79
  setupMediaPlayer();
@@ -37,7 +37,7 @@ const { pagesConfigValue } = storeToRefs(useTemplateConfigsStore());
37
37
  const emit = defineEmits(["previewEnded"]);
38
38
 
39
39
  // data
40
- let playing = ref<boolean>(true);
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: Number) => {
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.components.webcastPlayer"
85
+ :class-object="classObject?.components?.webcastPlayer"
86
86
  @time="checkTime"
87
- ></CommonArchiveVideoPlayer>
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-dark";
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-lightest shadow text-grey-darker py-6 px-10'
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
- let sponsors = ref<Array<Sponsor>>([]);
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
- const getFeaturedSponsors = () => {
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 == 'overview'"
87
+ v-if="selectedContent.type == SelectedContent.OVERVIEW"
87
88
  :class="
88
89
  classBinding(
89
- classObject.components.overviewPanel,
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.overviewPanel"
96
- ></CommonComponentsOverviewPanel>
96
+ :class-object="classObject.components?.overviewPanel"
97
+ />
97
98
  <CommonComponentsAgendaPanel
98
- v-if="selectedContent.type == 'agenda'"
99
+ v-if="selectedContent.type == SelectedContent.AGENDA"
99
100
  :class="
100
101
  classBinding(
101
- classObject.components.agendaPanel,
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.agendaPanel"
108
- ></CommonComponentsAgendaPanel>
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
- ></span>
120
- <template v-if="selectedContent.type == 'track_html'">
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
- ></span>
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
- 'list-reset flex flex-row flex-wrap justify-start'
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 list-reset mx-auto'
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', 'list-reset')">
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
- 'no-underline font-semibold text-sm md:text-base'
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.components.webcastPlayer"
59
- ></CommonWebcastVideoPlayer>
54
+ :class-object="classObject?.components?.webcastPlayer"
55
+ />
60
56
  </div>
61
57
  </template>
62
58
 
@@ -1,57 +1,76 @@
1
- <template>
2
- <span v-if="presenterLevelArray['presenters_all'].presenters.length > 0">
3
- <presenters-detail
4
- :presenters-by-level="presenterLevelArray"
5
- :pres-format="layoutFormat"
6
- :item-width="itemWidth"
7
- :show-levels="false"
8
- :is-compact="isCompact"
9
- ></presenters-detail>
10
- </span>
11
- <div v-else class="text-grey-800 px-2 py-4">
12
- <p class="text-base leading-normal font-light">There are no presenters associated with this presentation.</p>
13
- </div>
14
- </template>
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
- <script>
17
- import PresentersDetail from '@/components/presenters/PresentersDetail';
24
+ const { presentation, itemWidth, layoutFormat, isCompact } = toRefs(props);
18
25
 
19
- export default {
20
- props: {
21
- itemWidth: {
22
- type: String,
23
- default: '120'
24
- },
25
- layoutFormat: {
26
- type: String,
27
- default: 'PresenterItemGrid'
28
- },
29
- isCompact: {
30
- default: true,
31
- type: Boolean
32
- }
33
- },
34
- components: {
35
- PresentersDetail
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
- computed: {
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: number, _oldId: number) => {
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
- onBeforeRouteLeave(() => {
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-light-grey'
64
+ ? 'border-b border-gray-400'
65
65
  : '',
66
66
  ]"
67
67
  >