@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.
- package/CHANGELOG.md +4 -0
- package/dist/module.d.mts +1051 -2
- package/dist/module.d.ts +1051 -2
- package/dist/module.json +1 -1
- package/dist/module.mjs +29 -15
- package/dist/runtime/@types/components.d.ts +22 -0
- package/dist/runtime/@types/configVariables.d.ts +6 -0
- package/dist/runtime/analytics.d.ts +1 -6
- package/dist/runtime/assets/scss/_agenda.css +1 -0
- package/dist/runtime/assets/scss/_animations.css +1 -0
- package/dist/runtime/assets/scss/_container_variants.css +1 -0
- package/dist/runtime/assets/scss/_custom.css +3 -0
- package/dist/runtime/assets/scss/_forms.css +1 -0
- package/dist/runtime/assets/scss/_header.css +0 -0
- package/dist/runtime/assets/scss/_index_production.css +1 -0
- package/dist/runtime/assets/scss/_transitions.css +1 -0
- package/dist/runtime/assets/scss/_variables.css +1 -0
- package/dist/runtime/assets/scss/_variables2.css +0 -0
- package/dist/runtime/assets/scss/_webcast.css +1 -0
- package/dist/runtime/assets/scss/index.css +1 -705
- package/dist/runtime/assets/svg/icon-minus.svg +6 -0
- package/dist/runtime/assets/svg/icon-video.svg +6 -0
- package/dist/runtime/components/affiliates/AffiliateModal.vue +66 -0
- package/dist/runtime/components/affiliates/AffiliatePage.vue +329 -159
- package/dist/runtime/components/agenda/AgendaList.vue +18 -14
- package/dist/runtime/components/agenda/AgendaTabbed.vue +60 -54
- package/dist/runtime/components/agenda/components/AgendaListAccordion.vue +8 -3
- package/dist/runtime/components/agenda/components/Calendar.vue +23 -18
- package/dist/runtime/components/agenda/components/Favorite.vue +46 -0
- package/dist/runtime/components/agenda/components/InfoLink.vue +15 -5
- package/dist/runtime/components/agenda/components/PlayIcon.vue +3 -5
- package/dist/runtime/components/agenda/components/PresentationLink.vue +37 -19
- package/dist/runtime/components/agenda/components/Sponsor.vue +31 -24
- package/dist/runtime/components/auth/PasswordReset.vue +20 -5
- package/dist/runtime/components/auth/Registration.vue +14 -4
- package/dist/runtime/components/auth/Ucc.vue +44 -27
- package/dist/runtime/components/chat/ChatConversationList.vue +108 -0
- package/dist/runtime/components/chat/ChatCreateConversation.vue +199 -0
- package/dist/runtime/components/chat/ChatCreateGroupConversation.vue +154 -0
- package/dist/runtime/components/chat/ChatHeader.vue +97 -0
- package/dist/runtime/components/chat/ChatMessage.vue +40 -0
- package/dist/runtime/components/chat/ChatShowConversation.vue +76 -0
- package/dist/runtime/components/chat/ChatWidget.vue +40 -0
- package/dist/runtime/components/chat/ChatWindow.vue +154 -0
- package/dist/runtime/components/chat/ChatWindow.vue.d.ts +6 -0
- package/dist/runtime/components/chat/MessageInput.vue +27 -0
- package/dist/runtime/components/chat/SearchInput.vue +32 -0
- package/dist/runtime/components/core/Accordion.vue +12 -12
- package/dist/runtime/components/core/AttendeeList.vue +31 -36
- package/dist/runtime/components/core/CountdownTimer.vue +68 -52
- package/dist/runtime/components/core/DynamicHtml.vue.d.ts +6 -9
- package/dist/runtime/components/core/Modal.vue +24 -22
- package/dist/runtime/components/core/ModalButton.vue +43 -0
- package/dist/runtime/components/core/Navbar.vue +33 -21
- package/dist/runtime/components/core/Navigation.vue +286 -0
- package/dist/runtime/components/core/SvgIcon.vue +34 -1
- package/dist/runtime/components/core/VButton.vue +35 -0
- package/dist/runtime/components/core/ZoomModal.vue +9 -3
- package/dist/runtime/components/events/EventHeader.vue +14 -4
- package/dist/runtime/components/events/ListEvents.vue +21 -22
- package/dist/runtime/components/forms/CheckboxGroup.vue +46 -0
- package/dist/runtime/components/forms/ErrorField.vue +11 -2
- package/dist/runtime/components/forms/Message.vue +1 -1
- package/dist/runtime/components/forms/RadioGroup.vue +50 -0
- package/dist/runtime/components/forms/SearchInput.vue +8 -2
- package/dist/runtime/components/forms/SelectDropDown.vue +47 -0
- package/dist/runtime/components/forms/SupportForm.vue +22 -11
- package/dist/runtime/components/forms/SwitchInput.vue +50 -30
- package/dist/runtime/components/forms/TextArea.vue +1 -1
- package/dist/runtime/components/forms/TextInput.vue +1 -1
- package/dist/runtime/components/layouts/Accordion.vue +11 -6
- package/dist/runtime/components/media/ArchivePlayerAndContentContainer.vue +24 -5
- package/dist/runtime/components/media/ArchiveVideoPlayer.vue +19 -23
- package/dist/runtime/components/media/PlayerAndContentContainer.vue +4 -1
- package/dist/runtime/components/media/WebcastVideoPlayer.vue +6 -18
- package/dist/runtime/components/media/components/AgendaPanel.vue +7 -6
- package/dist/runtime/components/media/components/ArchiveMediaContainer.vue +17 -15
- package/dist/runtime/components/media/components/CeCreditNotification.vue +8 -8
- package/dist/runtime/components/media/components/ContentArea.vue +59 -18
- package/dist/runtime/components/media/components/ContentTabs.vue +40 -28
- package/dist/runtime/components/media/components/DocumentsPanel.vue +19 -17
- package/dist/runtime/components/media/components/MediaContainer.vue +11 -13
- package/dist/runtime/components/media/components/OverviewPanel.vue +5 -2
- package/dist/runtime/components/media/components/PresentersPanel.vue +74 -55
- package/dist/runtime/components/media/components/SessionReporting.vue +5 -4
- package/dist/runtime/components/media/components/SponsorsPanel.vue +13 -12
- package/dist/runtime/components/presenters/PresenterListing.vue +33 -25
- package/dist/runtime/components/presenters/PresenterModal.vue +26 -21
- package/dist/runtime/components/presenters/Presenters.vue +139 -0
- package/dist/runtime/components/profile/Profile.vue +10 -6
- package/dist/runtime/components/profile/components/Sidebar.vue +1 -1
- package/dist/runtime/components/profile/components/SidebarNavItem.vue +2 -4
- package/dist/runtime/components/profile/tabs/Favorites.vue +5 -4
- package/dist/runtime/components/profile/tabs/GeneralInformation.vue +26 -16
- package/dist/runtime/components/profile/tabs/ProfileImage.vue +7 -6
- package/dist/runtime/components/registration/AlreadyRegisteredModal.vue +102 -0
- package/dist/runtime/components/registration/PaymentForm.vue +136 -0
- package/dist/runtime/components/registration/RegistrationForm.vue +417 -0
- package/dist/runtime/components/registration/RegistrationGroupSelect.vue +146 -0
- package/dist/runtime/components/registration/StripePaymentForm.vue +121 -0
- package/dist/runtime/components/support/FAQAccordion.vue +8 -7
- package/dist/runtime/composables/useAdobeLaunch.d.ts +2 -7
- package/dist/runtime/composables/useAdobeLaunch.mjs +2 -2
- package/dist/runtime/composables/useAgenda.d.ts +13 -1
- package/dist/runtime/composables/useAgenda.mjs +125 -25
- package/dist/runtime/composables/useApi.d.ts +1 -1
- package/dist/runtime/composables/useAuth.d.ts +1 -1
- package/dist/runtime/composables/useAuth.mjs +1 -1
- package/dist/runtime/composables/useClassBinding.d.ts +3 -1
- package/dist/runtime/composables/useConferenceHelpers.d.ts +7 -3
- package/dist/runtime/composables/useConferenceHelpers.mjs +26 -15
- package/dist/runtime/composables/useEventHooks.d.ts +29 -0
- package/dist/runtime/composables/useEventHooks.mjs +21 -0
- package/dist/runtime/composables/useEvents.d.ts +17 -1
- package/dist/runtime/composables/useEvents.mjs +35 -9
- package/dist/runtime/composables/useLogin.mjs +9 -5
- package/dist/runtime/composables/useNavigation.d.ts +1 -1
- package/dist/runtime/composables/useNavigation.mjs +4 -2
- package/dist/runtime/composables/usePresentation.d.ts +2 -2
- package/dist/runtime/composables/usePresentation.mjs +8 -7
- package/dist/runtime/composables/usePresenter.d.ts +2 -2
- package/dist/runtime/composables/usePresenters.d.ts +2 -2
- package/dist/runtime/composables/usePusher.d.ts +4 -0
- package/dist/runtime/composables/usePusher.mjs +38 -26
- package/dist/runtime/composables/useScripts.mjs +1 -1
- package/dist/runtime/composables/useStream.d.ts +2 -3
- package/dist/runtime/composables/useStream.mjs +8 -2
- package/dist/runtime/composables/useUcc.d.ts +1 -1
- package/dist/runtime/composables/useUcc.mjs +29 -23
- package/dist/runtime/enums/general.d.ts +4 -1
- package/dist/runtime/enums/general.mjs +4 -1
- package/dist/runtime/models/adobeLaunch.d.ts +6 -0
- package/dist/runtime/models/adobeLaunch.mjs +0 -0
- package/dist/runtime/models/analytics.d.ts +6 -0
- package/dist/runtime/models/analytics.mjs +0 -0
- package/dist/runtime/models/attendeeList.d.ts +1 -1
- package/dist/runtime/models/conference.d.ts +122 -91
- package/dist/runtime/models/conversation.d.ts +11 -13
- package/dist/runtime/models/document.d.ts +5 -5
- package/dist/runtime/models/globalConfig.d.ts +9 -3
- package/dist/runtime/models/group.d.ts +38 -8
- package/dist/runtime/models/icons.d.ts +8 -1
- package/dist/runtime/models/index.d.ts +20 -0
- package/dist/runtime/models/index.mjs +20 -0
- package/dist/runtime/models/link.d.ts +4 -4
- package/dist/runtime/models/loginParams.d.ts +5 -0
- package/dist/runtime/models/loginParams.mjs +0 -0
- package/dist/runtime/models/navigationConfig.d.ts +7 -7
- package/dist/runtime/models/pagination.d.ts +11 -11
- package/dist/runtime/models/portal.d.ts +15 -10
- package/dist/runtime/models/templateConfig.d.ts +13 -7
- package/dist/runtime/models/ucc.d.ts +22 -0
- package/dist/runtime/models/ucc.mjs +0 -0
- package/dist/runtime/models/user.d.ts +25 -12
- package/dist/runtime/models/vButton.d.ts +7 -0
- package/dist/runtime/models/vButton.mjs +0 -0
- package/dist/runtime/models/video.d.ts +5 -4
- package/dist/runtime/models/virtualPagesConfig.d.ts +223 -0
- package/dist/runtime/models/virtualPagesConfig.mjs +0 -0
- package/dist/runtime/plugin.mjs +18 -9
- package/dist/runtime/store/affiliates.d.ts +4 -1
- package/dist/runtime/store/affiliates.mjs +38 -0
- package/dist/runtime/store/attendeeList.d.ts +1 -1
- package/dist/runtime/store/auth.d.ts +3 -7
- package/dist/runtime/store/auth.mjs +6 -0
- package/dist/runtime/store/conferences.d.ts +3 -1
- package/dist/runtime/store/conferences.mjs +14 -9
- package/dist/runtime/store/conversations.d.ts +78 -10
- package/dist/runtime/store/conversations.mjs +255 -22
- package/dist/runtime/store/modalPlayerConfig.d.ts +27 -0
- package/dist/runtime/store/modalPlayerConfig.mjs +58 -0
- package/dist/runtime/store/navigationConfig.d.ts +1 -1
- package/dist/runtime/store/presentations.d.ts +2 -2
- package/dist/runtime/store/templateConfigs.d.ts +7 -6
- package/dist/runtime/store/templateConfigs.mjs +7 -6
- package/dist/runtime/store/user.mjs +0 -1
- package/dist/runtime/v3plusCommonPlugin.d.ts +1 -1
- package/dist/types.d.mts +3 -2
- package/dist/types.d.ts +3 -2
- package/package.json +12 -9
- package/dist/runtime/components/media/components/JsonApi.vue +0 -33
- package/dist/runtime/components/media/components/JsonApi.vue.d.ts +0 -16
- package/dist/runtime/components/media/components/PresentersPanel.vue.d.ts +0 -32
- package/dist/runtime/components/media/components/WindowContent.vue +0 -118
- package/dist/runtime/components/media/components/WindowContent.vue.d.ts +0 -50
- package/dist/runtime/components/media/components/WindowSlide.vue +0 -92
- package/dist/runtime/components/media/components/WindowSlide.vue.d.ts +0 -36
- package/dist/runtime/models/authUser.d.ts +0 -16
- /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
|
|
90
|
-
:class-object="classObject.components
|
|
92
|
+
:class="classBinding(classObject.components?.svgIcon, 'container', '')"
|
|
93
|
+
:class-object="classObject.components?.svgIcon"
|
|
91
94
|
@click="modalVisible = true"
|
|
92
|
-
|
|
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
|
|
112
|
+
classBinding(classObject.components?.presenterListing, 'container', '')
|
|
109
113
|
"
|
|
110
|
-
:class-object="classObject.components
|
|
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
|
|
118
|
-
:class-object="classObject.components
|
|
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
|
|
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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 }}
|
|
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
|
|
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
|
|
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"
|
|
@@ -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
|
|
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 {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
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,
|
|
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 =
|
|
42
|
-
title: user.value
|
|
43
|
-
name: user.value
|
|
44
|
-
company: user.value
|
|
45
|
-
linkedin_url: user.value
|
|
46
|
-
twitter_url: user.value
|
|
47
|
-
video_chat: user.value
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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>
|