@openeventkit/event-site 2.0.47 → 2.0.49

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@openeventkit/event-site",
3
3
  "description": "Event Site",
4
- "version": "2.0.47",
4
+ "version": "2.0.49",
5
5
  "author": "Tipit LLC",
6
6
  "dependencies": {
7
7
  "@mui/base": "^5.0.0-alpha.114",
@@ -42,7 +42,7 @@
42
42
  "font-awesome": "^4.7.0",
43
43
  "formik": "^2.2.9",
44
44
  "fs-extra": "^9.0.1",
45
- "full-schedule-widget": "3.0.1",
45
+ "full-schedule-widget": "3.0.2",
46
46
  "gatsby": "^5.8.1",
47
47
  "gatsby-alias-imports": "^1.0.6",
48
48
  "gatsby-plugin-image": "^3.8.0",
@@ -117,7 +117,7 @@
117
117
  "stream-browserify": "^3.0.0",
118
118
  "stream-chat": "^2.7.2",
119
119
  "stream-chat-react": "3.1.7",
120
- "summit-registration-lite": "5.0.5",
120
+ "summit-registration-lite": "5.0.6",
121
121
  "superagent": "8.0.9",
122
122
  "sweetalert2": "^9.17.0",
123
123
  "upcoming-events-widget": "3.0.4",
@@ -28,6 +28,7 @@ const FullSchedule = ({
28
28
  }) => {
29
29
  const { getSettingByKey } = useMarketingSettings();
30
30
  const defaultImage = getSettingByKey(MARKETING_SETTINGS_KEYS.schedultDefaultImage);
31
+ const summitLogoPrint = getSettingByKey(MARKETING_SETTINGS_KEYS.fullScheduleSummitLogoPrint);
31
32
  const componentProps = {
32
33
  title: "Schedule",
33
34
  summit,
@@ -35,6 +36,7 @@ const FullSchedule = ({
35
36
  userProfile,
36
37
  withThumbs: false,
37
38
  defaultImage: defaultImage,
39
+ summitLogoPrint: summitLogoPrint ? summitLogoPrint : null,
38
40
  showSendEmail: false,
39
41
  onStartChat: null,
40
42
  shareLink: getShareLink(filters, view),
@@ -9,7 +9,7 @@ const HeroComponent = ({ title, subtitle, event, redirectTo, options = {} }) =>
9
9
  }, [redirectTo]);
10
10
 
11
11
  return (
12
- <section className={`hero is-fullheight ${event ? 'talk__break' : ''}`}>
12
+ <section className={`hero ${event ? 'talk__break' : 'is-fullheight'}`}>
13
13
  <div className="hero-body hero-component">
14
14
  <div className={`${event ? '' : 'container has-text-centered'}`}>
15
15
  <h1 className="title">{title}</h1>
@@ -111,7 +111,6 @@ const RegistrationLiteComponent = ({
111
111
 
112
112
  const inPersonDisclaimer = getSettingByKey(MARKETING_SETTINGS_KEYS.registrationInPersonDisclaimer);
113
113
  const allowPromoCodes = !!Number(getSettingByKey(MARKETING_SETTINGS_KEYS.regLiteAllowPromoCodes));
114
- const companyInputPlaceholder = getSettingByKey(MARKETING_SETTINGS_KEYS.regLiteCompanyInputPlaceholder);
115
114
  const companyDDLPlaceholder = getSettingByKey(MARKETING_SETTINGS_KEYS.regLiteCompanyDDLPlaceholder);
116
115
  const initialOrderComplete1stParagraph = getSettingByKey(MARKETING_SETTINGS_KEYS.regLiteInitialOrderComplete1stParagraph)
117
116
  const initialOrderComplete2ndParagraph = getSettingByKey(MARKETING_SETTINGS_KEYS.regLiteInitialOrderComplete2ndParagraph)
@@ -178,7 +177,6 @@ const RegistrationLiteComponent = ({
178
177
  });
179
178
  },
180
179
  allowPromoCodes: allowPromoCodes,
181
- companyInputPlaceholder: companyInputPlaceholder,
182
180
  companyDDLPlaceholder: companyDDLPlaceholder,
183
181
  supportEmail: getEnvVariable(SUPPORT_EMAIL),
184
182
  initialOrderComplete1stParagraph: initialOrderComplete1stParagraph,
@@ -6,7 +6,6 @@ import { AjaxLoader } from "openstack-uicore-foundation/lib/components";
6
6
  import { getUserOrders } from '../store/actions/order-actions';
7
7
  import { getUserTickets } from '../store/actions/ticket-actions';
8
8
  import { OrderList } from './OrderList/OrderList';
9
- import { OrderListContextProvider } from './OrderList/OrderList.helpers';
10
9
  import { TicketList } from './TicketList/TicketList';
11
10
 
12
11
  export const MyOrdersTickets = ({ className }) => {
@@ -63,10 +62,8 @@ export const MyOrdersTickets = ({ className }) => {
63
62
  )}
64
63
 
65
64
  <div className={classNames('my-orders-tickets', className)}>
66
- {hasOrders && (
67
- <OrderListContextProvider>
68
- <OrderList />
69
- </OrderListContextProvider>
65
+ {hasOrders && (
66
+ <OrderList />
70
67
  )}
71
68
 
72
69
  {(hasOrders && hasTickets) && (
@@ -1,5 +1,5 @@
1
1
  import React, { useEffect, useRef } from "react"
2
- import { useDispatch } from "react-redux";
2
+ import { useDispatch, useSelector } from "react-redux";
3
3
  import { useTranslation } from "react-i18next";
4
4
  import classNames from 'classnames';
5
5
  import { getNow } from "../../store/actions/timer-actions";
@@ -11,7 +11,7 @@ import {
11
11
  getSummitFormattedDate,
12
12
  formatCurrency
13
13
  } from "../../util";
14
- import { useOrderListContext } from "../OrderList/OrderList.helpers";
14
+ import { setActiveOrderId } from "../../store/actions/order-actions";
15
15
 
16
16
  import './order-details.scss';
17
17
 
@@ -20,16 +20,21 @@ export const OrderDetails = ({ order, summit, className }) => {
20
20
 
21
21
  const { t } = useTranslation();
22
22
  const dispatch = useDispatch();
23
- const { state, actions } = useOrderListContext();
23
+
24
+ const {
25
+ activeOrderId
26
+ } = useSelector(state => state.orderState || {});
24
27
 
25
28
  const isSummitPast = checkSummitPast(summit, dispatch(getNow()));
26
29
  const statusData = getOrderStatusData(order, isSummitPast);
27
- const isActive = state.activeOrderId === order.id;
30
+ const isActive = activeOrderId === order.id;
31
+
32
+ const handleSetOrderActive = (orderId) => dispatch(setActiveOrderId( orderId ));
28
33
 
29
34
  const handleClick = (event) => {
30
- if (isActive) return actions.setActiveOrderId(null);
35
+ if (isActive) return handleSetOrderActive(null);
31
36
 
32
- actions.setActiveOrderId(order.id);
37
+ handleSetOrderActive(order.id);
33
38
 
34
39
  setTimeout(() => {
35
40
  const offset = getDocumentOffset(elementRef.current);
@@ -42,7 +47,7 @@ export const OrderDetails = ({ order, summit, className }) => {
42
47
  };
43
48
 
44
49
  // Clear active order on unmount (i.e., when page pagination changes)
45
- useEffect(() => () => actions.setActiveOrderId(null), []);
50
+ useEffect(() => () => setActiveOrderId(null), []);
46
51
 
47
52
  return (
48
53
  <div
@@ -6,7 +6,6 @@ import classNames from 'classnames';
6
6
  import { getUserOrders } from "../../store/actions/order-actions";
7
7
  import { getTicketsByOrder } from "../../store/actions/ticket-actions";
8
8
  import { OrderListItem } from './OrderListItem';
9
- import { useOrderListContext } from "./OrderList.helpers";
10
9
 
11
10
  import './order-list.scss';
12
11
 
@@ -19,6 +18,7 @@ export const OrderList = ({ className }) => {
19
18
  current_page: currentPage,
20
19
  last_page: lastPage,
21
20
  per_page: perPage,
21
+ activeOrderId,
22
22
  total
23
23
  } = useSelector(state => state.orderState || {});
24
24
 
@@ -28,8 +28,6 @@ export const OrderList = ({ className }) => {
28
28
  }
29
29
  } = useSelector(state => state.ticketState || {});
30
30
 
31
- const { state : { activeOrderId } } = useOrderListContext();
32
-
33
31
  const handlePageChange = (page) => dispatch(getUserOrders({ page, perPage }));
34
32
 
35
33
  const handleTicketPageChange = (orderId, page) => dispatch(getTicketsByOrder({ orderId, page }));
@@ -5,21 +5,24 @@ import { OrderDetails } from '../OrderDetails/OrderDetails';
5
5
  import { OrderSummary } from '../OrderSummary/OrderSummary';
6
6
  import { OrderTicketList } from '../OrderTicketList/OrderTicketList';
7
7
  import { OrderOptions } from "../OrderOptions/OrderOptions";
8
- import { useOrderListContext } from "./OrderList.helpers";
9
8
  import Pager from "../../../Pager";
10
9
 
11
10
  export const OrderListItem = ({ order, className, changeTicketsPage }) => {
12
11
  const summit = useSelector(state => state.summitState.summit);
13
- const { state } = useOrderListContext();
14
12
 
15
13
  const {
16
14
  orderTickets: {
17
15
  total, per_page, current_page, last_page, tickets
18
16
  },
19
- loading
17
+ loading,
20
18
  } = useSelector(state => state.ticketState || {});
21
19
 
22
- const isActive = state.activeOrderId === order.id;
20
+ const {
21
+ activeOrderId,
22
+ isOrderLoading
23
+ } = useSelector(state => state.orderState || {});
24
+
25
+ const isActive = activeOrderId === order.id;
23
26
 
24
27
  return (
25
28
  <li className={classNames('order-list__item', { 'order-list__item--active': isActive }, className)}>
@@ -27,7 +30,7 @@ export const OrderListItem = ({ order, className, changeTicketsPage }) => {
27
30
  <div className="col-md-8">
28
31
  <OrderDetails order={order} summit={summit} />
29
32
 
30
- {isActive && tickets.length > 0 && (
33
+ {!isOrderLoading && isActive && tickets.length > 0 && (
31
34
  <>
32
35
  <OrderSummary type="mobile" order={order} summit={summit} tickets={tickets}/>
33
36
 
@@ -23,6 +23,7 @@ import history from '../history';
23
23
 
24
24
  export const GET_USER_ORDERS = 'GET_ORDERS';
25
25
  export const REFUND_ORDER = 'REFUND_ORDER';
26
+ export const SET_ACTIVE_ORDER_ID = 'SET_ACTIVE_ORDER_ID';
26
27
 
27
28
  export const getUserOrders = ({ page = 1, perPage = 5 }) => async (dispatch, getState, { getAccessToken, apiBaseUrl, loginUrl }) => {
28
29
  const { summitState: { summit } } = getState();
@@ -81,4 +82,8 @@ export const cancelOrder = ({ order }) => async (dispatch, getState, { getAccess
81
82
  dispatch(stopLoading());
82
83
  return e;
83
84
  });
84
- };
85
+ };
86
+
87
+ export const setActiveOrderId = (orderId) => async (dispatch, getState) => {
88
+ return dispatch(createAction(SET_ACTIVE_ORDER_ID)(orderId));
89
+ }
@@ -35,6 +35,7 @@ export const REMOVE_TICKET_ATTENDEE = 'REMOVE_TICKET_ATTENDEE';
35
35
  export const REFUND_TICKET = 'REFUND_TICKET';
36
36
  export const RESEND_NOTIFICATION = 'RESEND_NOTIFICATION';
37
37
  export const GET_TICKETS_BY_ORDER = 'GET_TICKETS_BY_ORDER';
38
+ export const GET_TICKETS_BY_ORDER_ERROR = 'GET_TICKETS_BY_ORDER_ERROR';
38
39
  export const GET_ORDER_TICKET_DETAILS = 'GET_ORDER_TICKET_DETAILS';
39
40
  export const GET_TICKET_DETAILS = 'GET_TICKET_DETAILS';
40
41
 
@@ -148,12 +149,12 @@ export const getTicketById = ({order, ticket}) => async (dispatch, getState, { g
148
149
 
149
150
  export const getTicketsByOrder = ({ orderId, page = 1, perPage = 5 }) => async (dispatch, getState, { getAccessToken, apiBaseUrl, loginUrl }) => {
150
151
 
152
+ dispatch(startLoading());
153
+
151
154
  const accessToken = await getAccessToken().catch(_ => history.replace(loginUrl));
152
155
 
153
156
  if (!accessToken) return;
154
157
 
155
- dispatch(startLoading());
156
-
157
158
  const params = {
158
159
  access_token: accessToken,
159
160
  expand: 'refund_requests, owner, owner.extra_questions, badge, badge.features',
@@ -171,6 +172,7 @@ export const getTicketsByOrder = ({ orderId, page = 1, perPage = 5 }) => async (
171
172
  dispatch(stopLoading());
172
173
  }).catch(e => {
173
174
  dispatch(stopLoading());
175
+ dispatch(createAction(GET_TICKETS_BY_ORDER_ERROR));
174
176
  return (e);
175
177
  });
176
178
  }
@@ -17,8 +17,10 @@ import { RESET_STATE } from "../actions/base-actions";
17
17
 
18
18
  import {
19
19
  GET_USER_ORDERS,
20
+ SET_ACTIVE_ORDER_ID,
20
21
  REFUND_ORDER,
21
22
  } from "../actions/order-actions";
23
+ import { GET_TICKETS_BY_ORDER, GET_TICKETS_BY_ORDER_ERROR } from "../actions/ticket-actions";
22
24
 
23
25
  const DEFAULT_ENTITY = {
24
26
  first_name: '',
@@ -47,6 +49,8 @@ const DEFAULT_STATE = {
47
49
  stripeForm: false,
48
50
  loaded: false,
49
51
  loading: false,
52
+ activeOrderId: null,
53
+ isOrderLoading: false,
50
54
  current_page: 1,
51
55
  last_page: 1,
52
56
  per_page: 5,
@@ -69,6 +73,13 @@ const orderReducer = (state = DEFAULT_STATE, action) => {
69
73
  case STOP_LOADING:
70
74
  return { ...state, loading: false };
71
75
  break;
76
+ case SET_ACTIVE_ORDER_ID:
77
+ return { ...state, activeOrderId: payload, isOrderLoading: true };
78
+ break;
79
+ case GET_TICKETS_BY_ORDER_ERROR:
80
+ case GET_TICKETS_BY_ORDER:
81
+ return { ...state, isOrderLoading: false };
82
+ break;
72
83
  case GET_USER_ORDERS:
73
84
  let { data, current_page, total, last_page } = payload.response;
74
85
  return { ...state, memberOrders: data, current_page, total, last_page };
@@ -1 +1 @@
1
- {"widgets":{"chat":{"showQA":false,"showHelp":false,"defaultScope":"page"},"schedule":{"allowClick":true}},"favicons":{"favicon180":"/img/favicon.png","favicon32":"/img/favicon.png","favicon16":"/img/favicon.png"},"staticJsonFilesBuildTime":[{"file":"src/data/summit.json","build_time":1692900122710},{"file":"src/data/events.json","build_time":1692900127255},{"file":"src/data/events.idx.json","build_time":1692900127260},{"file":"src/data/speakers.json","build_time":1692900131183},{"file":"src/data/speakers.idx.json","build_time":1692900131185},{"file":"src/content/sponsors.json","build_time":1692900134268},{"file":"src/data/voteable-presentations.json","build_time":1692900134602}],"lastBuild":1692900134603}
1
+ {"widgets":{"chat":{"showQA":false,"showHelp":false,"defaultScope":"page"},"schedule":{"allowClick":true}},"favicons":{"favicon180":"/img/favicon.png","favicon32":"/img/favicon.png","favicon16":"/img/favicon.png"},"staticJsonFilesBuildTime":[{"file":"src/data/summit.json","build_time":1692922259099},{"file":"src/data/events.json","build_time":1692922264079},{"file":"src/data/events.idx.json","build_time":1692922264084},{"file":"src/data/speakers.json","build_time":1692922268263},{"file":"src/data/speakers.idx.json","build_time":1692922268264},{"file":"src/content/sponsors.json","build_time":1692922271753},{"file":"src/data/voteable-presentations.json","build_time":1692922272661}],"lastBuild":1692922272663}
@@ -241,9 +241,8 @@ h2 {
241
241
 
242
242
  &__break {
243
243
  background-color: var(--color_secondary);
244
- min-height: 92vh !important;
245
244
  width: 100%;
246
- padding: 0 3rem;
245
+ aspect-ratio: auto 16 / 9;
247
246
 
248
247
  h1,
249
248
  h2 {
@@ -306,6 +305,10 @@ h2 {
306
305
  align-items: flex-end;
307
306
  }
308
307
 
308
+ .hero-body {
309
+ align-items: center;
310
+ display: flex;
311
+ }
309
312
  }
310
313
 
311
314
  .join-zoom-container {
@@ -504,12 +507,6 @@ div.event-feedback-container {
504
507
  }
505
508
  }
506
509
 
507
- .talk {
508
- &__break {
509
- height: auto;
510
- }
511
- }
512
-
513
510
  .join-zoom-container {
514
511
  flex-direction: column;
515
512
  height: 100px;
@@ -563,14 +560,6 @@ div.event-feedback-container {
563
560
  }
564
561
  }
565
562
 
566
- @media (min-width: 1921px) {
567
- .talk {
568
- &__break {
569
- min-height: 100vh !important;
570
- }
571
- }
572
- }
573
-
574
563
  /* extra questions */
575
564
  [id^="chl_wrapper"] {
576
565
  .checkboxes-div {
@@ -103,17 +103,7 @@ export const EventPageTemplate = class extends React.Component {
103
103
  return (
104
104
  <React.Fragment>
105
105
  {/* <EventHeroComponent /> */}
106
- <section
107
- className="section px-0 py-0"
108
- style={{
109
- marginBottom:
110
- event.class_name !== "Presentation" ||
111
- currentPhase < PHASES.DURING ||
112
- !event.streaming_url
113
- ? "-3rem"
114
- : "",
115
- }}
116
- >
106
+ <section className="section px-0 py-0">
117
107
  <div className="columns is-gapless">
118
108
  {this.canRenderVideo(currentPhase) ? (
119
109
  <div className="column is-three-quarters px-0 py-0">
@@ -435,7 +435,7 @@ export const FullProfilePageTemplate = ({ user, getIDPProfile, updateProfile, up
435
435
  <br />
436
436
  <label className={styles.checkbox}>
437
437
  <input type="checkbox" checked={allowChatWithMe} onChange={e => setAllowChatWithMe(e.target.checked)} />
438
- Allow people to chat with me ?
438
+ Allow people to chat with me?
439
439
  </label>
440
440
  <div className={`columns is-mobile ${styles.buttons}`}>
441
441
  <div className={`column is-half`}>
@@ -7,10 +7,10 @@ export const MARKETING_SETTINGS_KEYS = {
7
7
  disqusExcludeTracks: "disqus_exclude_tracks",
8
8
  registrationInPersonDisclaimer: "registration_in_person_disclaimer",
9
9
  scheduleDefaultImage: "schedule_default_image",
10
+ fullScheduleSummitLogoPrint: "FULL_SCHEDULE_SUMMIT_LOGO_PRINT",
10
11
  summitDeltaStartTime: "summit_delta_start_time",
11
12
  activityCtaText: "ACTIVITY_CTA_TEXT",
12
13
  regLiteAllowPromoCodes: "REG_LITE_ALLOW_PROMO_CODES",
13
- regLiteCompanyInputPlaceholder: "REG_LITE_COMPANY_INPUT_PLACEHOLDER",
14
14
  regLiteCompanyDDLPlaceholder: "REG_LITE_COMPANY_DDL_PLACEHOLDER",
15
15
  regLiteInitialOrderComplete1stParagraph: "REG_LITE_INITIAL_ORDER_COMPLETE_STEP_1ST_PARAGRAPH",
16
16
  regLiteInitialOrderComplete2ndParagraph: "REG_LITE_INITIAL_ORDER_COMPLETE_STEP_2ND_PARAGRAPH",
@@ -21,12 +21,15 @@ export const MARKETING_SETTINGS_KEYS = {
21
21
  regLiteNoAllowedTicketsMessage: "REG_LITE_NO_ALLOWED_TICKETS_MESSAGE",
22
22
  }
23
23
 
24
+ const FileType = 'FILE';
24
25
  const marketingSettingsQuery = graphql`
25
26
  query {
26
27
  allMarketingSettingsJson {
27
28
  nodes {
28
29
  key
30
+ type
29
31
  value
32
+ file
30
33
  }
31
34
  }
32
35
  }
@@ -34,8 +37,11 @@ const marketingSettingsQuery = graphql`
34
37
 
35
38
  const useMarketingSettings = () => {
36
39
  const { allMarketingSettingsJson } = useStaticQuery(marketingSettingsQuery);
37
- const getSettingByKey = (key) =>
38
- allMarketingSettingsJson.nodes.find(setting => setting.key === key)?.value;
40
+ const getSettingByKey = (key) => {
41
+ const node = allMarketingSettingsJson.nodes.find(setting => setting.key === key);
42
+ if(!node) return null;
43
+ return node.type === FileType ? node?.file : node?.value;
44
+ }
39
45
  return { getSettingByKey };
40
46
  };
41
47
 
@@ -1,36 +0,0 @@
1
- import React, { createContext, useContext, useReducer } from "react";
2
- import { createReducer } from '../../util/helpers/createReducer';
3
-
4
- const initialState = {
5
- activeOrderId: null,
6
- };
7
-
8
- const actions = ({ state, dispatch }) => ({
9
- setActiveOrderId: (orderId) => dispatch({ type: 'setActiveOrderId', payload: orderId }),
10
- });
11
-
12
- const actionHandlers = {
13
- setActiveOrderId: (state, orderId) => ({ ...state, activeOrderId: orderId })
14
- };
15
-
16
- const reducer = createReducer({ actionHandlers });
17
-
18
- export const OrderListContext = createContext(null);
19
-
20
- export const OrderListContextProvider = ({ children }) => {
21
- const [state, dispatch] = useReducer(reducer, {}, () => initialState);
22
-
23
- return (
24
- <OrderListContext.Provider value={{ state, dispatch }}>
25
- {children}
26
- </OrderListContext.Provider>
27
- )
28
- };
29
-
30
- export const useOrderListContext = () => {
31
- const context = useContext(OrderListContext);
32
-
33
- if (!context) throw new Error('useOrderListContext must be used within a OrderListContextProvider');
34
-
35
- return { ...context, actions: actions(context) };
36
- };
@@ -1,38 +0,0 @@
1
- import React, { createContext, useContext, useReducer } from 'react';
2
- import { createReducer } from '../util/helpers/createReducer';
3
-
4
- const initialState = {
5
- orders: []
6
- };
7
-
8
- const actions = ({ state, dispatch }) => ({
9
- setOrders: (orders) => dispatch({ type: 'setOrders', payload: orders }),
10
- setLoading: (loading) => dispatch({ type: 'setLoading', payload: loading })
11
- });
12
-
13
- const actionHandlers = {
14
- setOrders: (state, orders) => ({ ...state, orders }),
15
- setLoading: (state, loading) => ({ ...state, loading })
16
- };
17
-
18
- const reducer = createReducer({ actionHandlers });
19
-
20
- export const OrdersTicketsContext = createContext(null);
21
-
22
- export const OrdersTicketsProvider = ({ children }) => {
23
- const [state, dispatch] = useReducer(reducer, {}, () => initialState);
24
-
25
- return (
26
- <OrdersTicketsContext.Provider value={{ state, dispatch }}>
27
- {children}
28
- </OrdersTicketsContext.Provider>
29
- );
30
- };
31
-
32
- export const useOrdersTicketsContext = () => {
33
- const context = useContext(OrdersTicketsContext);
34
-
35
- if (!context) throw new Error('useOrdersTicketsContext must be used within a OrdersTicketsProvider');
36
-
37
- return { ...context, actions: actions(context) };
38
- };