@openeventkit/event-site 2.0.74 → 2.0.76

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/gatsby-config.js CHANGED
@@ -22,182 +22,184 @@ catch (e) {
22
22
 
23
23
  const title = siteSettings?.siteMetadata?.title || process.env.GATSBY_METADATA_TITLE || "Event Site";
24
24
  const description = siteSettings?.siteMetadata?.description || process.env.GATSBY_METADATA_DESCRIPTION || "Event Site";
25
- const manifestFaviconSettings = siteSettings?.favicon?.asset ? {
26
- icon: `${SITE_SETTINGS_DIR_PATH}/${siteSettings.favicon.asset}`,
27
- include_favicon: true
28
- } : {};
25
+ const faviconAsset = siteSettings?.favicon?.asset;
29
26
 
30
- module.exports = {
31
- siteMetadata: {
32
- title: title,
33
- description: description
34
- },
35
- plugins: [
36
- {
37
- resolve: "gatsby-plugin-manifest",
38
- options: {
39
- name: title,
40
- short_name: title,
41
- description: description,
42
- start_url: "/",
43
- // Enables "Add to Homescreen" prompt and disables browser UI (including back button)
44
- // see https://developers.google.com/web/fundamentals/web-app-manifest/#display
45
- display: "minimal-ui",
46
- ...manifestFaviconSettings
27
+ const manifestPlugin = faviconAsset ? [
28
+ {
29
+ resolve: "gatsby-plugin-manifest",
30
+ options: {
31
+ name: title,
32
+ short_name: title,
33
+ description: description,
34
+ start_url: "/",
35
+ display: "minimal-ui",
36
+ icon: path.join(SITE_SETTINGS_DIR_PATH, faviconAsset),
37
+ include_favicon: true
38
+ }
39
+ }
40
+ ] : [];
41
+
42
+ const plugins = [
43
+ ...manifestPlugin,
44
+ {
45
+ resolve: "gatsby-alias-imports",
46
+ options: {
47
+ aliases: {
48
+ "@utils": `${__dirname}/src/utils`
47
49
  }
48
- },
49
- {
50
- resolve: "gatsby-alias-imports",
51
- options: {
52
- aliases: {
53
- "@utils": `${__dirname}/src/utils`
50
+ }
51
+ },
52
+ {
53
+ /**
54
+ * Gatsby v4 uses ES Modules for importing cssModules by default.
55
+ * Disabling this to avoid needing to update in all files and for compatibility
56
+ * with other plugins/packages that have not yet been updated.
57
+ * @see https://www.gatsbyjs.com/docs/reference/release-notes/migrating-from-v2-to-v3/#css-modules-are-imported-as-es-modules
58
+ *
59
+ * Also, since libSass was deprecated in October 2020, the Node Sass package has also been deprecated.
60
+ * As such, we have migrated from Node Sass to Dart Sass in package.json.
61
+ * @see https://www.gatsbyjs.com/plugins/gatsby-plugin-sass/#v300
62
+ * @see https://sass-lang.com/blog/libsass-is-deprecated#how-do-i-migrate
63
+ */
64
+ resolve: "gatsby-plugin-sass",
65
+ options: {
66
+ cssLoaderOptions: {
67
+ esModule: false,
68
+ modules: {
69
+ namedExport: false
54
70
  }
55
71
  }
56
- },
57
- {
58
- /**
59
- * Gatsby v4 uses ES Modules for importing cssModules by default.
60
- * Disabling this to avoid needing to update in all files and for compatibility
61
- * with other plugins/packages that have not yet been updated.
62
- * @see https://www.gatsbyjs.com/docs/reference/release-notes/migrating-from-v2-to-v3/#css-modules-are-imported-as-es-modules
63
- *
64
- * Also, since libSass was deprecated in October 2020, the Node Sass package has also been deprecated.
65
- * As such, we have migrated from Node Sass to Dart Sass in package.json.
66
- * @see https://www.gatsbyjs.com/plugins/gatsby-plugin-sass/#v300
67
- * @see https://sass-lang.com/blog/libsass-is-deprecated#how-do-i-migrate
68
- */
69
- resolve: "gatsby-plugin-sass",
70
- options: {
71
- cssLoaderOptions: {
72
- esModule: false,
73
- modules: {
74
- namedExport: false
72
+ }
73
+ },
74
+ {
75
+ // Add image assets before markdown or json files
76
+ resolve: "gatsby-source-filesystem",
77
+ options: {
78
+ path: `${__dirname}/static/img`,
79
+ name: "uploads"
80
+ }
81
+ },
82
+ {
83
+ // Add image assets before markdown or json files
84
+ resolve: "gatsby-source-filesystem",
85
+ options: {
86
+ path: `${__dirname}/src/img`,
87
+ name: "images"
88
+ }
89
+ },
90
+ {
91
+ // Add font assets before markdown or json files
92
+ resolve: "gatsby-source-filesystem",
93
+ options: {
94
+ path: `${__dirname}/static/fonts`,
95
+ name: "fonts"
96
+ }
97
+ },
98
+ {
99
+ resolve: "gatsby-source-filesystem",
100
+ options: {
101
+ path: `${__dirname}/src/pages`,
102
+ name: "pages"
103
+ }
104
+ },
105
+ {
106
+ resolve: "gatsby-source-filesystem",
107
+ options: {
108
+ path: path.resolve(CONTENT_PAGES_DIR_PATH),
109
+ name: "contentPages"
110
+ }
111
+ },
112
+ {
113
+ resolve: "gatsby-source-filesystem",
114
+ options: {
115
+ path: path.resolve(STATIC_CONTENT_DIR_PATH),
116
+ name: "content"
117
+ }
118
+ },
119
+ {
120
+ resolve: "gatsby-source-filesystem",
121
+ options: {
122
+ path: path.resolve(MARKETING_SETTINGS_FILE_PATH),
123
+ name: "marketingSettings"
124
+ }
125
+ },
126
+ "gatsby-plugin-image",
127
+ "gatsby-plugin-sharp",
128
+ "gatsby-transformer-sharp",
129
+ "gatsby-transformer-json",
130
+ {
131
+ resolve: "gatsby-transformer-remark",
132
+ options: {
133
+ plugins: [
134
+ {
135
+ resolve: "gatsby-remark-images",
136
+ options: {
137
+ // It"s important to specify the maxWidth (in pixels) of
138
+ // the content container as this plugin uses this as the
139
+ // base for generating different widths of each image.
140
+ maxWidth: 2048
75
141
  }
76
142
  }
77
- }
78
- },
79
- {
80
- // Add image assets before markdown or json files
81
- resolve: "gatsby-source-filesystem",
82
- options: {
83
- path: `${__dirname}/static/img`,
84
- name: "uploads"
85
- }
86
- },
87
- {
88
- // Add image assets before markdown or json files
89
- resolve: "gatsby-source-filesystem",
90
- options: {
91
- path: `${__dirname}/src/img`,
92
- name: "images"
93
- }
94
- },
95
- {
96
- // Add font assets before markdown or json files
97
- resolve: "gatsby-source-filesystem",
98
- options: {
99
- path: `${__dirname}/static/fonts`,
100
- name: "fonts"
101
- }
102
- },
103
- {
104
- resolve: "gatsby-source-filesystem",
105
- options: {
106
- path: `${__dirname}/src/pages`,
107
- name: "pages"
108
- }
109
- },
110
- {
111
- resolve: "gatsby-source-filesystem",
112
- options: {
113
- path: path.resolve(CONTENT_PAGES_DIR_PATH),
114
- name: "contentPages"
115
- }
116
- },
117
- {
118
- resolve: "gatsby-source-filesystem",
119
- options: {
120
- path: path.resolve(STATIC_CONTENT_DIR_PATH),
121
- name: "content"
122
- }
123
- },
124
- {
125
- resolve: "gatsby-source-filesystem",
126
- options: {
127
- path: path.resolve(MARKETING_SETTINGS_FILE_PATH),
128
- name: "marketingSettings"
129
- }
130
- },
131
- "gatsby-plugin-image",
132
- "gatsby-plugin-sharp",
133
- "gatsby-transformer-sharp",
134
- "gatsby-transformer-json",
135
- {
136
- resolve: "gatsby-transformer-remark",
137
- options: {
138
- plugins: [
139
- {
140
- resolve: "gatsby-remark-images",
141
- options: {
142
- // It"s important to specify the maxWidth (in pixels) of
143
- // the content container as this plugin uses this as the
144
- // base for generating different widths of each image.
145
- maxWidth: 2048
146
- }
147
- }
148
- ]
149
- }
150
- },
151
- {
152
- resolve: "gatsby-plugin-netlify-cms",
153
- options: {
154
- modulePath: `${__dirname}/src/cms/cms.js`,
155
- manualInit: true,
156
- enableIdentityWidget: false,
157
- customizeWebpackConfig: (config) => {
158
- const jsTestString = "\\.(js|mjs|jsx|ts|tsx)$";
159
- const jsTest = new RegExp(jsTestString);
160
- const jsRule = config.module.rules.find(
161
- (rule) => String(rule.test) === String(jsTest)
162
- );
163
- // is it running standalone? or is it running as a module/package?
164
- const standalone = __dirname === path.resolve();
165
- if (!standalone) {
166
- /**
167
- * Force transpiliation of solution js files; required for theming.
168
- * @see https://www.gatsbyjs.com/docs/how-to/custom-configuration/add-custom-webpack-config/#modifying-the-babel-loader
169
- */
170
- const solutionJsTest = new RegExp(`${__dirname}(.*)${jsTestString}`);
171
- const jsRuleInclude = jsRule.include;
172
- jsRule.include = (modulePath) => {
173
- if (solutionJsTest.test(modulePath)) return true;
174
- return jsRuleInclude(modulePath);
175
- }
176
- }
177
- config.module.rules = [
178
- ...config.module.rules.filter(
179
- (rule) => String(rule.test) !== String(jsTest)
180
- ),
181
- jsRule
182
- ];
183
- /**
184
- * Fixes Module not found: Error: Can"t resolve "path" bug.
185
- * Webpack 5 doesn"t include browser polyfills for node APIs by default anymore,
186
- * so we need to provide them ourselves.
187
- * @see https://github.com/postcss/postcss/issues/1509#issuecomment-772097567
188
- * @see https://github.com/gatsbyjs/gatsby/issues/31475
189
- * @see https://github.com/gatsbyjs/gatsby/issues/31179#issuecomment-844588682
143
+ ]
144
+ }
145
+ },
146
+ {
147
+ resolve: "gatsby-plugin-netlify-cms",
148
+ options: {
149
+ modulePath: `${__dirname}/src/cms/cms.js`,
150
+ manualInit: true,
151
+ enableIdentityWidget: false,
152
+ customizeWebpackConfig: (config) => {
153
+ const jsTestString = "\\.(js|mjs|jsx|ts|tsx)$";
154
+ const jsTest = new RegExp(jsTestString);
155
+ const jsRule = config.module.rules.find(
156
+ (rule) => String(rule.test) === String(jsTest)
157
+ );
158
+ // is it running standalone? or is it running as a module/package?
159
+ const standalone = __dirname === path.resolve();
160
+ if (!standalone) {
161
+ /**
162
+ * Force transpiliation of solution js files; required for theming.
163
+ * @see https://www.gatsbyjs.com/docs/how-to/custom-configuration/add-custom-webpack-config/#modifying-the-babel-loader
190
164
  */
191
- config.resolve = {
192
- ...config.resolve,
193
- fallback: {
194
- ...config.resolve.fallback,
195
- path: require.resolve("path-browserify")
196
- }
197
- };
165
+ const solutionJsTest = new RegExp(`${__dirname}(.*)${jsTestString}`);
166
+ const jsRuleInclude = jsRule.include;
167
+ jsRule.include = (modulePath) => {
168
+ if (solutionJsTest.test(modulePath)) return true;
169
+ return jsRuleInclude(modulePath);
170
+ }
198
171
  }
172
+ config.module.rules = [
173
+ ...config.module.rules.filter(
174
+ (rule) => String(rule.test) !== String(jsTest)
175
+ ),
176
+ jsRule
177
+ ];
178
+ /**
179
+ * Fixes Module not found: Error: Can"t resolve "path" bug.
180
+ * Webpack 5 doesn"t include browser polyfills for node APIs by default anymore,
181
+ * so we need to provide them ourselves.
182
+ * @see https://github.com/postcss/postcss/issues/1509#issuecomment-772097567
183
+ * @see https://github.com/gatsbyjs/gatsby/issues/31475
184
+ * @see https://github.com/gatsbyjs/gatsby/issues/31179#issuecomment-844588682
185
+ */
186
+ config.resolve = {
187
+ ...config.resolve,
188
+ fallback: {
189
+ ...config.resolve.fallback,
190
+ path: require.resolve("path-browserify")
191
+ }
192
+ };
199
193
  }
200
- },
201
- "gatsby-plugin-netlify", // make sure to keep it last in the array
202
- ],
203
- }
194
+ }
195
+ },
196
+ "gatsby-plugin-netlify", // make sure to keep it last in the array
197
+ ];
198
+
199
+ module.exports = {
200
+ siteMetadata: {
201
+ title,
202
+ description
203
+ },
204
+ plugins
205
+ };
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.74",
4
+ "version": "2.0.76",
5
5
  "author": "Tipit LLC",
6
6
  "dependencies": {
7
7
  "@mui/base": "^5.0.0-alpha.114",
@@ -43,7 +43,7 @@
43
43
  "font-awesome": "^4.7.0",
44
44
  "formik": "^2.2.9",
45
45
  "fs-extra": "^9.0.1",
46
- "full-schedule-widget": "3.0.2",
46
+ "full-schedule-widget": "3.0.3",
47
47
  "gatsby": "^5.8.1",
48
48
  "gatsby-alias-imports": "^1.0.6",
49
49
  "gatsby-plugin-image": "^3.8.0",
@@ -67,8 +67,8 @@
67
67
  "immutability-helper": "2.9.1",
68
68
  "immutable": "^3.7.6",
69
69
  "jsdom": "^16.2.2",
70
- "lite-schedule-widget": "3.0.2",
71
- "live-event-widget": "4.0.1",
70
+ "lite-schedule-widget": "3.0.3",
71
+ "live-event-widget": "4.0.2",
72
72
  "lodash": "^4.17.19",
73
73
  "lz-string": "^1.4.4",
74
74
  "markdown-it": "^12.0.0",
@@ -116,14 +116,14 @@
116
116
  "slick-carousel": "^1.8.1",
117
117
  "smoothscroll-polyfill": "^0.4.4",
118
118
  "socket.io-client": "^4.5.2",
119
- "speakers-widget": "4.0.0",
119
+ "speakers-widget": "4.0.1",
120
120
  "stream-browserify": "^3.0.0",
121
121
  "stream-chat": "^2.7.2",
122
122
  "stream-chat-react": "3.1.7",
123
123
  "summit-registration-lite": "5.0.13",
124
124
  "superagent": "8.0.9",
125
125
  "sweetalert2": "^9.17.0",
126
- "upcoming-events-widget": "3.0.4",
126
+ "upcoming-events-widget": "3.0.5",
127
127
  "urijs": "^1.19.2",
128
128
  "use-fit-text": "^2.4.0",
129
129
  "uuid": "^7.0.0",
@@ -15,7 +15,7 @@ export const fetchEventById = async (summitId, eventId, accessToken = null) => {
15
15
  }
16
16
 
17
17
  apiUrl.addQuery('expand', 'slides, links, videos, media_uploads, type, track, track.allowed_access_levels, location, location.venue, location.floor, speakers, moderator, sponsors, current_attendance, groups, rsvp_template, tags');
18
-
18
+ apiUrl.addQuery('evict_cache', 1);
19
19
  return fetch(apiUrl.toString(), {
20
20
  method: 'GET'
21
21
  }).then(async (response) => {
@@ -45,6 +45,8 @@ export const fetchLocationById = async(summitId, locationId, expand, accessToken
45
45
  if(expand)
46
46
  apiUrl.addQuery('expand', expand);
47
47
 
48
+ apiUrl.addQuery('evict_cache', 1);
49
+
48
50
  return fetch(apiUrl.toString(), {
49
51
  method: 'GET'
50
52
  }).then(async (response) => {
@@ -67,10 +69,12 @@ export const fetchSpeakerById = async(summitId, speakerId, accessToken = null) =
67
69
  let apiUrl = URI(`${process.env.GATSBY_SUMMIT_API_BASE_URL}/api/public/v1/summits/${summitId}/speakers/${speakerId}`);
68
70
 
69
71
  if(accessToken){
70
- apiUrl = URI(`${process.env.GATSBY_SUMMIT_API_BASE_URL}/api/v1/summits/${summitId}/speaker/${speakerId}`);
72
+ apiUrl = URI(`${process.env.GATSBY_SUMMIT_API_BASE_URL}/api/v1/summits/${summitId}/speakers/${speakerId}`);
71
73
  apiUrl.addQuery('access_token', accessToken);
72
74
  }
73
75
 
76
+ apiUrl.addQuery('evict_cache', 1);
77
+
74
78
  return fetch(apiUrl.toString(), {
75
79
  method: 'GET'
76
80
  }).then(async (response) => {
@@ -92,6 +96,7 @@ export const fetchSummitById = async(summitId, accessToken = null) => {
92
96
 
93
97
  apiUrl.addQuery('expand', 'event_types,tracks,track_groups,presentation_levels,locations.rooms,locations.floors,order_extra_questions.values,schedule_settings,schedule_settings.filters,schedule_settings.pre_filters');
94
98
  apiUrl.addQuery('t', Date.now());
99
+ apiUrl.addQuery('evict_cache', 1);
95
100
 
96
101
  return fetch(apiUrl.toString(), {
97
102
  method: 'GET'
@@ -101,4 +106,4 @@ export const fetchSummitById = async(summitId, accessToken = null) => {
101
106
  }
102
107
  return null;
103
108
  });
104
- }
109
+ }
@@ -35,14 +35,19 @@ const siteSettings = {
35
35
  name: "siteMetadata",
36
36
  fields: [
37
37
  stringField({
38
- label: "title",
38
+ label: "Title",
39
39
  name: "title",
40
40
  required: false
41
41
  }),
42
42
  textField({
43
- label: "description",
43
+ label: "Description",
44
44
  name: "description",
45
45
  required: false
46
+ }),
47
+ imageField({
48
+ label: "Image",
49
+ name: "image",
50
+ required: false
46
51
  })
47
52
  ]
48
53
  }),
@@ -3,6 +3,7 @@ module.exports = `
3
3
  type SiteMetadata {
4
4
  title: String
5
5
  description: String
6
+ image: File @fileByRelativePath
6
7
  }
7
8
  type Favicon {
8
9
  asset: File @fileByRelativePath
@@ -1,40 +1,54 @@
1
1
  import * as React from "react";
2
- import useSiteMetadata from "@utils/useSiteMetadata";
3
- import { withPrefix } from "gatsby";
2
+ import PropTypes from "prop-types";
3
+ import useSiteSettings from "@utils/useSiteSettings";
4
+ import { Helmet } from "react-helmet";
4
5
  import { getSrc } from "gatsby-plugin-image";
6
+ import { getUrl } from "@utils/urlFormating";
5
7
 
6
- const Seo = ({
7
- title,
8
- description,
9
- pathname,
10
- children
11
- }) => {
8
+ const Seo = ({ title, description, location, children }) => {
12
9
  const {
13
- title: defaultTitle,
14
- description: defaultDescription,
15
- } = useSiteMetadata();
10
+ siteMetadata: {
11
+ title: siteTitle,
12
+ description: defaultDescription,
13
+ image
14
+ }
15
+ } = useSiteSettings();
16
+ const host = typeof window !== "undefined" ? window.location.host : null;
17
+ const scheme = typeof window !== "undefined" ? window.location.protocol.replace(":", "") : "https";
18
+ const { pathname } = location;
16
19
  const seo = {
17
- title: title ? `${defaultTitle} - ${title}` : defaultTitle,
20
+ title: title ? `${siteTitle} - ${title}` : siteTitle,
18
21
  description: description || defaultDescription,
19
- url: `${withPrefix(pathname || "/")}`
20
- }
22
+ url: getUrl(scheme, host, pathname),
23
+ image: host && image ? getUrl(scheme, host, getSrc(image)) : null,
24
+ };
21
25
  return (
22
- <>
23
- <title>{seo.title}</title>
24
- <meta name="description" content={seo.description} />
25
- <meta name="twitter:card" content="summary" />
26
- <meta name="twitter:title" content={seo.title} />
27
- <meta name="twitter:url" content={seo.url} />
28
- <meta name="twitter:description" content={seo.description} />
29
- <meta name="description" content={seo.description} />
30
- <meta name="theme-color" content="#fff" />
31
- <meta property="og:type" content="business.business" />
32
- <meta property="og:title" content={seo.title} />
33
- <meta property="og:url" content={seo.url} />
34
- }
26
+ <Helmet>
27
+ {seo.title && <title>{seo.title}</title>}
28
+ {seo.description && <meta name="description" content={seo.description} />}
29
+ {seo.url && <meta property="og:url" content={seo.url} />}
30
+ <meta property="og:type" content="website" />
31
+ {seo.title && <meta property="og:title" content={seo.title} />}
32
+ {seo.description && <meta property="og:description" content={seo.description} />}
33
+ {seo.image && <meta property="og:image" content={seo.image} />}
34
+ {seo.image && <meta name="twitter:card" content="summary_large_image" />}
35
+ {host && <meta property="twitter:domain" content={host} />}
36
+ {seo.url && <meta property="twitter:url" content={seo.url} />}
37
+ {seo.title && <meta name="twitter:title" content={seo.title} />}
38
+ {seo.description && <meta name="twitter:description" content={seo.description} />}
39
+ {seo.image && <meta name="twitter:image" content={seo.image} />}
35
40
  {children}
36
- </>
37
- )
41
+ </Helmet>
42
+ );
43
+ };
44
+
45
+ Seo.propTypes = {
46
+ title: PropTypes.string,
47
+ description: PropTypes.string,
48
+ location: PropTypes.shape({
49
+ pathname: PropTypes.string.isRequired
50
+ }).isRequired,
51
+ children: PropTypes.node
38
52
  };
39
53
 
40
54
  export default Seo;
@@ -91,6 +91,6 @@ export const Head = ({
91
91
  }) => (
92
92
  <Seo
93
93
  title={titleFromPathname(location.pathname)}
94
- pathname={location.pathname}
94
+ location={location}
95
95
  />
96
96
  );
@@ -74,6 +74,6 @@ export const Head = ({
74
74
  }) => (
75
75
  <Seo
76
76
  title={"Lobby"}
77
- pathname={location.pathname}
77
+ location={location}
78
78
  />
79
79
  );
@@ -71,6 +71,6 @@ export const Head = ({
71
71
  }) => (
72
72
  <Seo
73
73
  title={"Expo Hall"}
74
- pathname={location.pathname}
74
+ location={location}
75
75
  />
76
76
  );
@@ -139,4 +139,7 @@ const mapStateToProps = ({
139
139
  export default connect(mapStateToProps, {
140
140
  })(withFeedsWorker(withRealTimeUpdates(MarketingPage)));
141
141
 
142
- export const Head = () => <Seo />;
142
+ export const Head = ({
143
+ location
144
+ }) => <Seo location={location} />;
145
+
@@ -87,6 +87,6 @@ export const Head = ({
87
87
  }) => (
88
88
  <Seo
89
89
  title={titleFromPathname(location.pathname)}
90
- pathname={location.pathname}
90
+ location={location}
91
91
  />
92
92
  );
@@ -191,8 +191,8 @@ export const EventPageTemplate = class extends React.Component {
191
191
  </div>
192
192
  )}
193
193
  <UpcomingEventsComponent
194
- key={`event_page_upcomming_event_${lastDataSync}`}
195
194
  id={`event_page_upcomming_event_${lastDataSync}`}
195
+ lastDataSync={lastDataSync}
196
196
  trackId={event.track ? event.track.id : null}
197
197
  eventCount={3}
198
198
  title={
@@ -76,7 +76,7 @@ export const LobbyPageTemplate = class extends React.Component {
76
76
  <h2><b>Today</b></h2>
77
77
  <LiveEventWidgetComponent
78
78
  id={`lobby_page_live_event_${lastDataSync}`}
79
- key={`lobby_page_live_event_${lastDataSync}`}
79
+ lastDataSync={lastDataSync}
80
80
  onlyPresentations={true}
81
81
  featuredEventId={liveNowFeaturedEventId}
82
82
  onEventClick={(ev) => this.onEventChange(ev)}
@@ -91,7 +91,7 @@ export const LobbyPageTemplate = class extends React.Component {
91
91
  />
92
92
  <UpcomingEventsComponent
93
93
  id={`lobby_page_upcomming_events_${lastDataSync}`}
94
- key={`lobby_page_upcomming_events_${lastDataSync}`}
94
+ lastDataSync={lastDataSync}
95
95
  title="Up Next"
96
96
  eventCount={4}
97
97
  renderEventLink={(event) => <Link to={`/a/event/${event.id}`}>{event.title}</Link>}
@@ -102,7 +102,7 @@ export const LobbyPageTemplate = class extends React.Component {
102
102
  <SpeakersWidgetComponent
103
103
  title="Today's Speakers"
104
104
  id={`home_page_today_speakers_${lastDataSync}`}
105
- key={`home_page_today_speakers_${lastDataSync}`}
105
+ lastDataSync={lastDataSync}
106
106
  bigPics={true}
107
107
  />
108
108
  }
@@ -110,7 +110,7 @@ export const LobbyPageTemplate = class extends React.Component {
110
110
  <SpeakersWidgetComponent
111
111
  title="Featured Speakers"
112
112
  id={`lobby_page_featured_speakers_${lastDataSync}`}
113
- key={`lobby_page_featured_speakers_${lastDataSync}`}
113
+ lastDataSync={lastDataSync}
114
114
  bigPics={false}
115
115
  featured={true}
116
116
  date={null}
@@ -124,7 +124,7 @@ export const LobbyPageTemplate = class extends React.Component {
124
124
  <AttendeesWidget user={user}/>
125
125
  <LiteScheduleComponent
126
126
  id={`lobby_page_lite_schedule_${lastDataSync}`}
127
- key={`lobby_page_lite_schedule_${lastDataSync}`}
127
+ lastDataSync={lastDataSync}
128
128
  onEventClick={(ev) => this.onEventChange(ev)}
129
129
  onViewAllEventsClick={() => this.onViewAllMyEventsClick()}
130
130
  title="My Schedule"
@@ -70,7 +70,7 @@ const MarketingPageTemplate = ({
70
70
  <h2><b>{marketingPageJson.leftColumn.schedule.title}</b></h2>
71
71
  <LiteScheduleComponent
72
72
  {...scheduleProps}
73
- key={`marketing_lite_schedule_${lastDataSync}`}
73
+ lastDataSync={lastDataSync}
74
74
  id={`marketing_lite_schedule_${lastDataSync}`}
75
75
  page="marketing-site"
76
76
  showAllEvents={true}
@@ -91,9 +91,7 @@ const SchedulePage = ({ summit, scheduleState, summitPhase, isLoggedUser, locati
91
91
  <div className={`container ${styles.container}`}>
92
92
  <div className={`${styles.wrapper} ${showFilters ? styles.showFilters : ""}`}>
93
93
  <div className={styles.scheduleWrapper}>
94
- <FullSchedule {...schedProps}
95
- key={`fullschedule_${lastDataSync}`}
96
- />
94
+ <FullSchedule {...schedProps} lastDataSync={lastDataSync} />
97
95
  </div>
98
96
  <div ref={filtersWrapperRef} className={styles.filterWrapper}>
99
97
  <ScheduleFilters {...filterProps} />
@@ -21,7 +21,7 @@ import { getEnvVariable, LIVE_EVENT_THUMBNAIL_GIF_CAPTURE_STARTS } from "../util
21
21
  import styles from '../styles/sponsor-page.module.scss'
22
22
  import SponsorNavigation from '../components/SponsorNavigation'
23
23
 
24
- const SponsorPageTemplate = ({ sponsorId, sponsors, scanBadge, eventId }) => {
24
+ const SponsorPageTemplate = ({ sponsorId, sponsors, scanBadge, eventId, lastDataSync }) => {
25
25
 
26
26
  const [sponsorLoading, setSponsorLoading] = useState(true);
27
27
  const [sponsor, setSponsor] = useState(null)
@@ -104,6 +104,7 @@ const SponsorPageTemplate = ({ sponsorId, sponsors, scanBadge, eventId }) => {
104
104
  }
105
105
  {liveEventWidget &&
106
106
  <LiveEventWidgetComponent
107
+ lastDataSync={lastDataSync}
107
108
  onEventClick={(ev) => onEventChange(ev)}
108
109
  onlyPresentations={true}
109
110
  sponsorId={sponsor?.company.id}
@@ -115,6 +116,7 @@ const SponsorPageTemplate = ({ sponsorId, sponsors, scanBadge, eventId }) => {
115
116
  {scheduleWidget &&
116
117
  <UpcomingEventsComponent
117
118
  eventCount={3}
119
+ lastDataSync={lastDataSync}
118
120
  sponsorId={sponsor?.company.id}
119
121
  renderEventLink={(event) => <Link to={`/a/event/${event.id}`}>{event.title}</Link>}
120
122
  allEventsLink={<Link to={`/a/schedule#company=${encodeURIComponent(sponsor?.name)}`}>View all <span className="sr-only">events</span></Link>}
@@ -184,10 +186,11 @@ SponsorPageTemplate.propTypes = {
184
186
  sponsorId: PropTypes.string,
185
187
  };
186
188
 
187
- const mapStateToProps = ({ userState, sponsorState, summitState }) => ({
189
+ const mapStateToProps = ({ userState, sponsorState, summitState, settingState }) => ({
188
190
  user: userState,
189
191
  sponsors: sponsorState.sponsors,
190
- summit: summitState.summit
192
+ summit: summitState.summit,
193
+ lastDataSync: settingState.lastDataSync
191
194
  });
192
195
 
193
196
  export default connect(mapStateToProps, { scanBadge })(SponsorPage);
@@ -1,3 +1,10 @@
1
+
2
+ export const getUrl = (scheme, host, pathname) => {
3
+ if (!host) return null;
4
+ const domain = `${scheme}://${host}`;
5
+ return `${domain}${pathname ?? "/"}`;
6
+ };
7
+
1
8
  export const getSponsorURL = (id, name) => {
2
9
  let formattedName = name.toLowerCase().replace(/\s/g, '-');
3
10
  return `${id}-${formattedName}`;
@@ -6,6 +6,17 @@ import {
6
6
  const siteSettingsQuery = graphql`
7
7
  query {
8
8
  siteSettingsJson {
9
+ siteMetadata {
10
+ title,
11
+ description,
12
+ image {
13
+ childImageSharp {
14
+ gatsbyImageData (
15
+ quality: 100
16
+ )
17
+ }
18
+ }
19
+ }
9
20
  widgets {
10
21
  chat {
11
22
  enabled