@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
@@ -16,6 +16,7 @@ import { Position } from "../../enums/general";
16
16
 
17
17
  type Props = {
18
18
  presenter: Presenter;
19
+ showImg?: boolean;
19
20
  enableBio?: boolean;
20
21
  showBio?: boolean;
21
22
  isSmallGroupedTrack?: boolean;
@@ -29,6 +30,7 @@ type Props = {
29
30
 
30
31
  const props = withDefaults(defineProps<Props>(), {
31
32
  useIcon: true,
33
+ showImg: true,
32
34
  enableBio: true,
33
35
  showBio: false,
34
36
  isSmallGroupedTrack: false,
@@ -53,6 +55,7 @@ const props = withDefaults(defineProps<Props>(), {
53
55
 
54
56
  const {
55
57
  presenter,
58
+ showImg,
56
59
  useIcon,
57
60
  enableBio,
58
61
  showBio,
@@ -86,15 +89,16 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
86
89
  <CommonSvgIcon
87
90
  icon="info"
88
91
  :greyscale="isGrayScale"
89
- :class="classBinding(classObject.components.svgIcon, 'container', '')"
90
- :class-object="classObject.components.svgIcon"
92
+ :class="classBinding(classObject.components?.svgIcon, 'container', '')"
93
+ :class-object="classObject.components?.svgIcon"
91
94
  @click="modalVisible = true"
92
- ></CommonSvgIcon>
95
+ />
93
96
  </div>
94
97
 
95
98
  <CommonPresenterListing
96
99
  v-else
97
100
  :presenter="presenter"
101
+ :show-img="showImg"
98
102
  :enable-bio="enableBio"
99
103
  :show-bio="showBio"
100
104
  :is-small-grouped-track="isSmallGroupedTrack"
@@ -105,44 +109,43 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
105
109
  text-class="font-bold text-base"
106
110
  link-class="agenda-presenter-color"
107
111
  :class="
108
- classBinding(classObject.components.presenterListing, 'container', '')
112
+ classBinding(classObject.components?.presenterListing, 'container', '')
109
113
  "
110
- :class-object="classObject.components.presenterListing"
114
+ :class-object="classObject.components?.presenterListing"
111
115
  @clicked="modalVisible = true"
112
- >
113
- </CommonPresenterListing>
116
+ />
114
117
 
115
118
  <CommonModal
116
119
  :visible="modalVisible"
117
- :class="classBinding(classObject.components.modal, 'container', '')"
118
- :class-object="classObject.components.modal"
120
+ :class="classBinding(classObject.components?.modal, 'container', '')"
121
+ :class-object="classObject.components?.modal"
119
122
  @trigger="modalVisible = false"
120
123
  >
121
124
  <template #modal-title>
122
125
  <div
123
126
  :class="
124
127
  classBinding(
125
- classObject.components.modalContent,
128
+ classObject.components?.modalContent,
126
129
  'modalTitle',
127
- 'flex flex-col lg:flex-row w-full pb-8 mb-8 border-b border-solid border-grey-light'
130
+ 'flex flex-col lg:flex-row w-full pb-8 mb-8 border-b border-solid border-gray-400'
128
131
  )
129
132
  "
130
133
  >
131
134
  <div
132
135
  :class="
133
136
  classBinding(
134
- classObject.components.modalContent,
137
+ classObject.components?.modalContent,
135
138
  'modalImagePositionContainer',
136
139
  'flex-1 mb-6 lg:mb-0 lg:flex-initial flex justify-center'
137
140
  )
138
141
  "
139
142
  >
140
143
  <div
141
- v-if="presenter.photo"
144
+ v-if="showImg && presenter.photo"
142
145
  :style="presenterImageStyle"
143
146
  :class="
144
147
  classBinding(
145
- classObject.components.modalContent,
148
+ classObject.components?.modalContent,
146
149
  'modalImageContainer',
147
150
  'border-white border-2 shadow-md bg-white'
148
151
  )
@@ -158,13 +161,13 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
158
161
  )
159
162
  "
160
163
  :style="itemWidthStyle"
161
- />
164
+ >
162
165
  </div>
163
166
  </div>
164
167
  <div
165
168
  :class="
166
169
  classBinding(
167
- classObject.components.modalContent,
170
+ classObject.components?.modalContent,
168
171
  'modalTextPositionContainer',
169
172
  'flex-1 pl-4 text-center lg:text-left flex'
170
173
  )
@@ -173,7 +176,7 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
173
176
  <div
174
177
  :class="
175
178
  classBinding(
176
- classObject.components.modalContent,
179
+ classObject.components?.modalContent,
177
180
  'modalTextContainer',
178
181
  'flex-1 self-center'
179
182
  )
@@ -182,7 +185,7 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
182
185
  <h1
183
186
  :class="
184
187
  classBinding(
185
- classObject.components.modalContent,
188
+ classObject.components?.modalContent,
186
189
  'modalName',
187
190
  'flex-1 font-light mb-0 body-color-4 presenter-name-color'
188
191
  )
@@ -193,13 +196,15 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
193
196
  <p
194
197
  :class="
195
198
  classBinding(
196
- classObject.components.modalContent,
199
+ classObject.components?.modalContent,
197
200
  'modalTitleCompany',
198
201
  'flex-1 font-normal text-base pt-2 leading-tight mb-0 body-color-5 presenter-title-color'
199
202
  )
200
203
  "
201
204
  >
202
- {{ presenter.title }}<br />{{ presenter.company }}
205
+ {{ presenter.title }}
206
+ <br>
207
+ {{ presenter.company }}
203
208
  </p>
204
209
  </div>
205
210
  </div>
@@ -209,7 +214,7 @@ const { fullName, presenterImageStyle, itemWidthStyle, isGrayScale } =
209
214
  <p
210
215
  :class="
211
216
  classBinding(
212
- classObject.components.modalContent,
217
+ classObject?.components?.modalContent,
213
218
  'modalBio',
214
219
  'font-normal text-center lg:text-left'
215
220
  )
@@ -0,0 +1,139 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs, computed } from 'vue';
3
+ import { sortBy, get } from 'lodash-es';
4
+ import type { Presenter, PresenterWithPivot } from '../../models/conference';
5
+ import type { PresenterPageConfigs } from '../../models/pagesConfig';
6
+
7
+ // TODO - define presentersByLevel and presenterConfig type
8
+ // TODO - create a helper function that formats Presenter[] to { 'presenters_all': Presenter[] }
9
+ // prior to passing into this component, so that this component can always expect the same type
10
+ type Props = {
11
+ presenters: { [key: string]: Presenter[] };
12
+ presFormat?: string;
13
+ showLevels?: boolean;
14
+ isCompact?: boolean;
15
+ isCentered?: boolean;
16
+ presenterConfig?: PresenterPageConfigs;
17
+ };
18
+
19
+ const props = withDefaults(defineProps<Props>(), {
20
+ presFormat: "grid",
21
+ showLevels: false,
22
+ isCompact: false,
23
+ isCentered: false,
24
+ presenterConfig: () => {
25
+ return {} as PresenterPageConfigs;
26
+ },
27
+ });
28
+
29
+ const {
30
+ presenters,
31
+ presFormat,
32
+ showLevels,
33
+ isCompact,
34
+ isCentered,
35
+ presenterConfig,
36
+ } = toRefs(props);
37
+
38
+ // computed
39
+ const presenterContainerClass = computed((): string => {
40
+ let classString: string;
41
+
42
+ switch (presFormat.value) {
43
+ case 'grid':
44
+ classString = 'flex flex-1 container mx-auto flex-wrap justify-center';
45
+ classString += isCompact.value ? ' pt-6' : ' pt-10';
46
+ break;
47
+ case 'vertical':
48
+ classString = 'flex flex-1 container mx-auto flex-col pt-10 px-12';
49
+ break;
50
+ default:
51
+ classString = 'flex flex-1 container mx-auto flex-col pt-10 px-12';
52
+ }
53
+ return classString;
54
+ });
55
+
56
+ // methods
57
+ const getPresenterLevelEnabled = (_level: number): boolean => {
58
+ // for levels 1-11
59
+ const _slug: string = `presenter_${_level}_alias`;
60
+ const configValue: boolean =
61
+ presenterConfig.value?.[_slug as keyof PresenterPageConfigs]?.value?.enabled ?? true;
62
+ return configValue;
63
+ };
64
+
65
+ const getPresenterLevelTitle = (_level: number): string => {
66
+ // for levels 1-11
67
+ const _slug: string = `presenter_${_level}_alias`;
68
+ const labelValue: string = presenterConfig.value?.[_slug as keyof PresenterPageConfigs]?.value?.label ?? '';
69
+ if (labelValue.length) {
70
+ // toggle-plus-label -> label
71
+ return labelValue;
72
+ } else if (getPresenterLevelEnabled(_level)) {
73
+ // toggle-plus-label -> enabled with no label
74
+ return '';
75
+ } else {
76
+ // legacy text field value
77
+ return presenterConfig.value?.[_slug as keyof PresenterPageConfigs]?.value as string ?? '';
78
+ }
79
+ };
80
+
81
+ const getSortedPresenters = (_level: number) => {
82
+ const _slug: string = (_level == 0) ? 'presenters_all' : `presenters_level_${_level}`;
83
+ const sortedPresenters = (presenters.value?.[_slug]) ? presenters.value[_slug] : [];
84
+ sortedPresenters.forEach((pres: PresenterWithPivot) => {
85
+ if (pres?.pivot?.role && get(pres, 'pivot.role') != undefined && !pres?.role) {
86
+ pres.role = pres.pivot.role;
87
+ }
88
+ if (pres?.pivot?.role && get(pres, 'pivot.order') != undefined && !pres?.order) {
89
+ pres.order = pres.pivot.order;
90
+ }
91
+ });
92
+ console.log(sortedPresenters);
93
+ return (!sortedPresenters) ? [] : sortBy(sortedPresenters.slice(), ['role', 'order', 'last_name', 'first_name']);
94
+ };
95
+ </script>
96
+
97
+ <template>
98
+ <div class="my-10">
99
+ <div v-if="showLevels">
100
+ <!-- eslint-disable vue/no-use-v-if-with-v-for -->
101
+ <template v-for="n in 11">
102
+ <div
103
+ v-if="
104
+ getPresenterLevelEnabled(n) && getSortedPresenters(n).length > 0
105
+ "
106
+ :key="n"
107
+ >
108
+ <h1 class="text-center section-header py-6">
109
+ {{ getPresenterLevelTitle(n) }}
110
+ </h1>
111
+ <div :class="presenterContainerClass">
112
+ <template
113
+ v-for="presenter in getSortedPresenters(n)"
114
+ :key="presenter.id"
115
+ >
116
+ <CommonPresenterListing
117
+ :presenter="presenter"
118
+ />
119
+ </template>
120
+ </div>
121
+ </div>
122
+ </template>
123
+ </div>
124
+ <div v-else>
125
+ <div :class="presenterContainerClass">
126
+ <template
127
+ v-for="presenter in getSortedPresenters(0)"
128
+ :key="presenter.id"
129
+ >
130
+ <CommonPresenterListing
131
+ :presenter="presenter"
132
+ />
133
+ </template>
134
+ </div>
135
+ </div>
136
+ </div>
137
+ </template>
138
+
139
+ <style></style>
@@ -1,5 +1,5 @@
1
1
  <script lang="ts" setup>
2
- import { toRefs, reactive, ref, computed } from "vue";
2
+ import { toRefs, reactive, ref, shallowRef, computed } from "vue";
3
3
  import { find } from "lodash-es";
4
4
  import { storeToRefs } from "pinia";
5
5
  import { useAuthStore } from "../../store/auth";
@@ -65,25 +65,26 @@ const props = withDefaults(defineProps<Props>(), {
65
65
  // data
66
66
  const { visible, showFavorites, classObject } = toRefs(props);
67
67
  const { user } = storeToRefs(useAuthStore());
68
+ // shallowRef eliminates 'Vue received a Component which was made a reactive object' memory warning
68
69
  const tabs = reactive<Tab[]>([
69
70
  {
70
71
  id: 1,
71
72
  name: "General Information",
72
- component: TabGeneralInformation,
73
+ component: shallowRef(TabGeneralInformation),
73
74
  shouldShow: true,
74
75
  selected: true,
75
76
  },
76
77
  {
77
78
  id: 2,
78
79
  name: "Profile Image",
79
- component: TabProfileImage,
80
+ component: shallowRef(TabProfileImage),
80
81
  shouldShow: true,
81
82
  selected: false,
82
83
  },
83
84
  {
84
85
  id: 3,
85
86
  name: "Favorites",
86
- component: TabFavorites,
87
+ component: shallowRef(TabFavorites),
87
88
  shouldShow: showFavorites.value,
88
89
  selected: false,
89
90
  },
@@ -161,7 +162,10 @@ const tabClassObj = computed<{}>(() => {
161
162
  :class-object="classObject.components?.modal"
162
163
  @trigger="closeModal"
163
164
  >
164
- <template #modal-body>
165
+ <template
166
+ v-if="user != null"
167
+ #modal-body
168
+ >
165
169
  <div :class="classBinding(classObject, 'container', 'p-2')">
166
170
  <div
167
171
  :class="
@@ -212,7 +216,7 @@ const tabClassObj = computed<{}>(() => {
212
216
  </h2>
213
217
 
214
218
  <component
215
- :is="selectedTab.component"
219
+ :is="{...selectedTab.component}"
216
220
  v-if="selectedTab.component && selectedTab.shouldShow"
217
221
  :class-object="tabClassObj"
218
222
  :user="user"
@@ -49,7 +49,7 @@ const { classBinding } = useClassBinding();
49
49
  classBinding(
50
50
  classObject,
51
51
  'slotContainer',
52
- 'flex-grow md:block pb-0 md:pb-4 md:overflow-y-auto'
52
+ 'grow md:block pb-0 md:pb-4 md:overflow-y-auto'
53
53
  )
54
54
  "
55
55
  >
@@ -40,7 +40,7 @@ const onClick = () => {
40
40
  classBinding(
41
41
  classObject,
42
42
  'link',
43
- 'sidebar-nav-item block px-4 py-2 mt-2 mx-1 text-black text-sm no-underline font-semibold rounded-lg cursor-pointer hover:bg-gray-500 focus:text-white hover:text-white focus:bg-gray-500 focus:outline-none focus:shadow-outline'
43
+ 'sidebar-nav-item block px-4 py-2 mt-2 mx-1 text-black text-sm font-semibold rounded-lg cursor-pointer hover:bg-gray-500 focus:text-white hover:text-white focus:bg-gray-500 focus:outline-none focus:ring'
44
44
  ),
45
45
  ]"
46
46
  @click="onClick"
@@ -50,7 +50,5 @@ const onClick = () => {
50
50
  </template>
51
51
 
52
52
  <style scoped>
53
- .active {
54
- @apply bg-gray-500 text-white;
55
- }
53
+ .active{@apply bg-gray-500 text-white}
56
54
  </style>
@@ -1,8 +1,9 @@
1
1
  <script lang="ts" setup>
2
- import { storeToRefs } from "pinia";
3
- import { useAuthStore } from "../../../store/auth";
4
- import { useClassBinding } from "../../../composables/useClassBinding";
5
- import type { FavoritesClassObj } from "../../../@types/components";
2
+ import { toRefs } from 'vue';
3
+ import { storeToRefs } from 'pinia';
4
+ import { useAuthStore } from '../../../store/auth';
5
+ import { useClassBinding } from '../../../composables/useClassBinding';
6
+ import type { FavoritesClassObj } from '../../../@types/components';
6
7
 
7
8
  type Props = {
8
9
  classObject?: FavoritesClassObj;
@@ -1,6 +1,6 @@
1
1
  <script lang="ts" setup>
2
2
  import { storeToRefs } from "pinia";
3
- import { ref, reactive } from "vue";
3
+ import { ref, toRefs } from "vue";
4
4
  import { useAuthStore } from "../../../store/auth";
5
5
  import type {
6
6
  GenInfoClassObj,
@@ -15,6 +15,15 @@ type Props = {
15
15
  classObject?: GenInfoClassObj;
16
16
  };
17
17
 
18
+ type GeneralInformationForm = {
19
+ title: string;
20
+ name: string;
21
+ company: string;
22
+ linkedin_url: string;
23
+ twitter_url: string;
24
+ video_chat: boolean;
25
+ }
26
+
18
27
  const props = withDefaults(defineProps<Props>(), {
19
28
  classObject: () => {
20
29
  return {
@@ -38,14 +47,15 @@ const { classBinding } = useClassBinding();
38
47
  const { classObject } = toRefs(props);
39
48
 
40
49
  const { user } = storeToRefs(useAuthStore());
41
- const formData = reactive({
42
- title: user.value.title,
43
- name: user.value.name,
44
- company: user.value.company,
45
- linkedin_url: user.value.linkedin_url,
46
- twitter_url: user.value.twitter_url,
47
- video_chat: user.value.video_chat ?? false,
50
+ const formData = ref<GeneralInformationForm>({
51
+ title: user.value?.title ?? '',
52
+ name: user.value?.name ?? '',
53
+ company: user.value?.company ?? '',
54
+ linkedin_url: user.value?.linkedin_url ?? '',
55
+ twitter_url: user.value?.twitter_url ?? '',
56
+ video_chat: user.value?.video_chat ?? false
48
57
  });
58
+
49
59
  const errors = ref<[]>([]);
50
60
  const wasSaved = ref<boolean>(false);
51
61
 
@@ -53,13 +63,13 @@ const wasSaved = ref<boolean>(false);
53
63
  const { update } = useAuthStore();
54
64
 
55
65
  const toggleChat = (value: boolean) => {
56
- formData.video_chat = value;
66
+ formData.value.video_chat = value;
57
67
  };
58
68
 
59
69
  const handleForm = () => {
60
70
  errors.value = [];
61
71
 
62
- update(formData)
72
+ update(formData.value)
63
73
  .then(() => {
64
74
  wasSaved.value = true;
65
75
  })
@@ -105,7 +115,7 @@ const handleForm = () => {
105
115
  classBinding(
106
116
  classObject.components?.textInput,
107
117
  'container',
108
- 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:shadow-outline'
118
+ 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:ring'
109
119
  )
110
120
  "
111
121
  type="text"
@@ -130,7 +140,7 @@ const handleForm = () => {
130
140
  classBinding(
131
141
  classObject.components?.textInput,
132
142
  'container',
133
- 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:shadow-outline'
143
+ 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:ring'
134
144
  )
135
145
  "
136
146
  type="text"
@@ -155,7 +165,7 @@ const handleForm = () => {
155
165
  classBinding(
156
166
  classObject.components?.textInput,
157
167
  'container',
158
- 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:shadow-outline'
168
+ 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:ring'
159
169
  )
160
170
  "
161
171
  type="text"
@@ -180,7 +190,7 @@ const handleForm = () => {
180
190
  classBinding(
181
191
  classObject.components?.textInput,
182
192
  'container',
183
- 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:shadow-outline'
193
+ 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:ring'
184
194
  )
185
195
  "
186
196
  type="text"
@@ -205,7 +215,7 @@ const handleForm = () => {
205
215
  classBinding(
206
216
  classObject.components?.textInput,
207
217
  'container',
208
- 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:shadow-outline'
218
+ 'shadow appearance-none border rounded w-full py-2 px-3 text-grey-700 leading-tight focus:outline-none focus:ring'
209
219
  )
210
220
  "
211
221
  type="text"
@@ -235,7 +245,7 @@ const handleForm = () => {
235
245
  classBinding(
236
246
  classObject,
237
247
  'submitButton',
238
- 'bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline'
248
+ 'bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded focus:outline-none focus:ring'
239
249
  )
240
250
  "
241
251
  type="button"
@@ -74,7 +74,7 @@ const onFileChanged = (e) => {
74
74
  :src="user.profile_image"
75
75
  :class="classBinding(classObject, 'image', 'w-100 h-100')"
76
76
  alt=""
77
- />
77
+ >
78
78
 
79
79
  <div
80
80
  :class="
@@ -108,12 +108,13 @@ const onFileChanged = (e) => {
108
108
  viewBox="0 0 24 24"
109
109
  xmlns="http://www.w3.org/2000/svg"
110
110
  >
111
- <path d="M0 0h24v24H0z" fill="none" />
111
+ <path
112
+ d="M0 0h24v24H0z"
113
+ fill="none"
114
+ />
112
115
  <path d="M9 16h6v-6h4l-7-7-7 7h4zm-4 2h14v2H5z" />
113
116
  </svg>
114
- <span :class="classBinding(classObject, 'buttonText', 'ml-2')"
115
- >Change Profile Image</span
116
- >
117
+ <span :class="classBinding(classObject, 'buttonText', 'ml-2')">Change Profile Image</span>
117
118
  </label>
118
119
  <input
119
120
  id="inputImg"
@@ -121,7 +122,7 @@ const onFileChanged = (e) => {
121
122
  type="file"
122
123
  accept="image/*"
123
124
  @change="onFileChanged"
124
- />
125
+ >
125
126
  </div>
126
127
  </div>
127
128
  </template>
@@ -0,0 +1,102 @@
1
+ <script lang="ts" setup>
2
+ import { toRefs } from 'vue';
3
+ import { storeToRefs } from 'pinia';
4
+ import { DateTime } from 'luxon';
5
+ import { useUserStore } from '../../store/user';
6
+ import { useConferencesStore } from '../../store';
7
+ import { useEvents } from '../../composables/useEvents';
8
+ import type { Conference } from '../../models/conference';
9
+ import { useConferenceHelpers } from '../../composables';
10
+
11
+ type Props = {
12
+ conference: Conference,
13
+ group: any,
14
+ show?: boolean
15
+ }
16
+
17
+ const props = withDefaults(defineProps<Props>(), {
18
+ show: false
19
+ });
20
+
21
+ const { conference, group, show } = toRefs(props);
22
+
23
+ const { currentUser } = storeToRefs(useUserStore());
24
+
25
+ const { getConferenceStatusLabel } = useConferenceHelpers(conference);
26
+
27
+ // emits
28
+ const emit = defineEmits<{
29
+ (event: "close"): void;
30
+ }>();
31
+
32
+ // computed
33
+ const registeredConferences = (): Conference[] => {
34
+ return useConferencesStore().getRegisteredConferences();
35
+ };
36
+
37
+ // methods
38
+ const formatDateTime = (_value: string, _format: string = 'LLL') => {
39
+ return DateTime.fromISO(_value).toFormat(_format);
40
+ };
41
+ </script>
42
+
43
+ <template>
44
+ <CommonModal
45
+ v-if="show"
46
+ @click="emit('close')"
47
+ @trigger="emit('close')"
48
+ >
49
+ <template #modal-title>
50
+ <h3>You're already registered for this event.</h3>
51
+ </template>
52
+
53
+ <template #modal-body>
54
+ <div class="pt-5">
55
+ <p class="mb-0">
56
+ {{ currentUser.name }}
57
+ </p>
58
+ <p class="mb-0">
59
+ Thank you for registering for the:
60
+ </p>
61
+ <h4>{{ group.name }}</h4>
62
+
63
+ <p class="mb-1 mt-3">
64
+ You are registered into these Events. Click to go to any live or archived event.
65
+ </p>
66
+
67
+ <div class="py-5 border border-gray-600">
68
+ <div
69
+ v-for="(conf, index) in registeredConferences()"
70
+ id="list-striped"
71
+ :key="index"
72
+ class="py-2 px-3 flex justify-between"
73
+ @click="useEvents().getEventPage(conf)"
74
+ >
75
+ <div>
76
+ {{ conf.name }}
77
+ </div>
78
+ <div>
79
+ {{ formatDateTime(conf.start_date as string, 'MMMM Do') }} <span>{{ getConferenceStatusLabel(conf) }}</span>
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </template>
85
+ </CommonModal>
86
+ </template>
87
+
88
+
89
+ <style lang="postcss">
90
+ #list-striped {
91
+
92
+ cursor: pointer;
93
+
94
+ &:nth-of-type(odd) {
95
+ background-color: rgb(240 ,240, 240);
96
+ }
97
+
98
+ &:hover {
99
+ background-color: rgb(230 ,230, 230);
100
+ }
101
+ }
102
+ </style>