@openeventkit/event-site 2.0.89 → 2.0.91

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.89",
4
+ "version": "2.0.91",
5
5
  "author": "Tipit LLC",
6
6
  "dependencies": {
7
7
  "@mui/base": "^5.0.0-alpha.114",
@@ -43,7 +43,6 @@
43
43
  "final-form": "4.20.7",
44
44
  "font-awesome": "^4.7.0",
45
45
  "formik": "^2.2.9",
46
- "fs-extra": "^9.0.1",
47
46
  "full-schedule-widget": "3.0.3",
48
47
  "gatsby": "^5.8.1",
49
48
  "gatsby-alias-imports": "^1.0.6",
@@ -78,7 +77,6 @@
78
77
  "moment-timezone": "^0.5.31",
79
78
  "netlify-cms-app": "^2.15.72",
80
79
  "netlify-cms-lib-widgets": "^1.8.0",
81
- "node-sass-utils": "^1.1.3",
82
80
  "openstack-uicore-foundation": "4.1.65",
83
81
  "path-browserify": "^1.0.1",
84
82
  "prop-types": "^15.6.0",
@@ -116,7 +116,7 @@ const marketingPage = {
116
116
  name: "countdown",
117
117
  fields: [
118
118
  booleanField({
119
- label: "Should Display?",
119
+ label: "Display",
120
120
  name: "display",
121
121
  required: false
122
122
  }),
@@ -128,7 +128,7 @@ const marketingPage = {
128
128
  }),
129
129
  objectField({
130
130
  label: "Widgets",
131
- name: "leftColumn",
131
+ name: "widgets",
132
132
  fields: [
133
133
  objectField({
134
134
  label: "Text",
@@ -196,41 +196,52 @@ const marketingPage = {
196
196
  })
197
197
  ]
198
198
  }),
199
- numberField({
200
- label: "Redirect to Event",
201
- name: "eventRedirect",
202
- required: false,
203
- hint: "User will be redirected to this event after login"
204
- }),
205
- listField({
199
+ objectField({
206
200
  label: "Masonry",
207
201
  name: "masonry",
208
202
  fields: [
209
- stringField({
210
- label: "Placement",
211
- name: "placement",
203
+ booleanField({
204
+ label: "Display",
205
+ name: "display",
212
206
  required: false
213
207
  }),
214
- selectField({
215
- label: "Size",
216
- name: "size",
217
- options: [
218
- selectOption({
219
- label: "Single",
220
- value: 1
208
+ listField({
209
+ label: "Items",
210
+ name: "items",
211
+ fields: [
212
+ stringField({
213
+ label: "Placement",
214
+ name: "placement",
215
+ required: false
216
+ }),
217
+ selectField({
218
+ label: "Size",
219
+ name: "size",
220
+ options: [
221
+ selectOption({
222
+ label: "Single",
223
+ value: 1
224
+ }),
225
+ selectOption({
226
+ label: "Double",
227
+ value: 2
228
+ })
229
+ ]
221
230
  }),
222
- selectOption({
223
- label: "Double",
224
- value: 2
231
+ linkImagesField({
232
+ label: "Images",
233
+ name: "images",
234
+ imageRequired: true
225
235
  })
226
236
  ]
227
- }),
228
- linkImagesField({
229
- label: "Images",
230
- name: "images",
231
- imageRequired: true
232
237
  })
233
238
  ]
239
+ }),
240
+ numberField({
241
+ label: "Redirect to Event",
242
+ name: "eventRedirect",
243
+ required: false,
244
+ hint: "User will be redirected to this event after login"
234
245
  })
235
246
  ]
236
247
  };
@@ -9,29 +9,34 @@ module.exports = `
9
9
  alt: String
10
10
  link: String
11
11
  }
12
- type MarketingPageMasonry {
12
+ type MarketingPageMasonryItem {
13
+ display: Boolean
13
14
  placement: String
14
15
  size: Int
15
16
  images: [LinkImageWithAlt]
16
17
  }
17
- type MarketingPageLeftColumnTextWidget {
18
+ type MarketingPageMasonry {
18
19
  display: Boolean
19
- content: String
20
+ items: [MarketingPageMasonryItem]
20
21
  }
21
- type MarketingPageLeftColumnWidget {
22
+ type MarketingPageWidget {
22
23
  display: Boolean
23
24
  title: String
24
25
  }
25
- type MarketingPageLeftColumnImageWidget {
26
+ type MarketingPageTextWidget {
27
+ display: Boolean
28
+ content: String
29
+ }
30
+ type MarketingPageImageWidget {
26
31
  display: Boolean
27
32
  title: String
28
33
  image: ImageWithAlt
29
34
  }
30
- type MarketingPageLeftColumn {
31
- text: MarketingPageLeftColumnTextWidget
32
- schedule: MarketingPageLeftColumnWidget
33
- disqus: MarketingPageLeftColumnWidget
34
- image: MarketingPageLeftColumnImageWidget
35
+ type MarketingPageWidgets {
36
+ text: MarketingPageTextWidget
37
+ image: MarketingPageImageWidget
38
+ schedule: MarketingPageWidget
39
+ disqus: MarketingPageWidget
35
40
  }
36
41
  type MarketingPageCountdown {
37
42
  display: Boolean
@@ -57,9 +62,9 @@ module.exports = `
57
62
  }
58
63
  type MarketingPageJson implements Node {
59
64
  hero: MarketingPageHero
60
- leftColumn: MarketingPageLeftColumn
61
65
  countdown: MarketingPageCountdown
66
+ widgets: MarketingPageWidgets
67
+ masonry: MarketingPageMasonry
62
68
  eventRedirect: Int
63
- masonry: [MarketingPageMasonry]
64
69
  }
65
70
  `;
@@ -12,7 +12,7 @@ import styles from "../styles/marketing-hero.module.scss";
12
12
 
13
13
  const MarketingHeroComponent = ({
14
14
  location,
15
- marketingPageSettings,
15
+ data,
16
16
  }) => {
17
17
 
18
18
  const sliderRef = useRef(null);
@@ -32,21 +32,21 @@ const MarketingHeroComponent = ({
32
32
 
33
33
 
34
34
  const getButtons = () => {
35
- const { registerButton, loginButton } = marketingPageSettings.hero.buttons;
35
+ const {
36
+ registerButton,
37
+ loginButton
38
+ } = data?.buttons || {};
36
39
 
37
- return (
38
- <>
39
- {registerButton.display &&
40
- (
41
- <span className={styles.link}>
42
- <RegistrationLiteComponent location={location} />
43
- </span>
44
- )}
45
- {loginButton.display && (
46
- <AuthComponent location={location} />
47
- )}
48
- </>
49
- );
40
+ return <>
41
+ {registerButton?.display &&
42
+ <span className={styles.link}>
43
+ <RegistrationLiteComponent location={location} />
44
+ </span>
45
+ }
46
+ {loginButton?.display &&
47
+ <AuthComponent location={location} />
48
+ }
49
+ </>;
50
50
  };
51
51
 
52
52
  const sliderSettings = {
@@ -59,8 +59,8 @@ const MarketingHeroComponent = ({
59
59
  };
60
60
 
61
61
  let heroLeftColumnInlineStyles = {};
62
- if (marketingPageSettings.hero?.background?.src) {
63
- const imageSrc = getSrc(marketingPageSettings.hero.background.src);
62
+ if (data?.background?.src) {
63
+ const imageSrc = getSrc(data.background.src);
64
64
  heroLeftColumnInlineStyles.backgroundImage = `url(${imageSrc})`;
65
65
  }
66
66
 
@@ -73,53 +73,53 @@ const MarketingHeroComponent = ({
73
73
  >
74
74
  <div className={`${styles.heroMarketingContainer} hero-body`}>
75
75
  <div className="container">
76
- <h1 className="title">{marketingPageSettings.hero.title}</h1>
77
- <h2 className="subtitle">{marketingPageSettings.hero.subTitle}</h2>
76
+ <h1 className="title">{data?.title}</h1>
77
+ <h2 className="subtitle">{data?.subTitle}</h2>
78
78
  <div
79
79
  className={styles.date}
80
80
  style={{
81
- backgroundColor: marketingPageSettings.hero.dateLayout
81
+ backgroundColor: data?.dateLayout
82
82
  ? "var(--color_secondary)"
83
83
  : "",
84
- display: marketingPageSettings.hero.dateLayout
84
+ display: data?.dateLayout
85
85
  ? ""
86
86
  : "inline",
87
- transform: marketingPageSettings.hero.dateLayout
87
+ transform: data?.dateLayout
88
88
  ? "skew(-25deg)"
89
89
  : "skew(0deg)",
90
90
  }}
91
91
  >
92
- {marketingPageSettings.hero?.dateLayout ?
93
- <div style={{transform: "skew(25deg)"}}>{marketingPageSettings.hero?.date}</div>
92
+ {data?.dateLayout ?
93
+ <div style={{transform: "skew(25deg)"}}>{data?.date}</div>
94
94
  :
95
95
  <div style={{transform: "skew(0deg)"}}>
96
- <span>{marketingPageSettings.hero?.date}</span>
96
+ <span>{data?.date}</span>
97
97
  </div>
98
98
  }
99
99
  </div>
100
- <h4>{marketingPageSettings.hero?.time}</h4>
100
+ <h4>{data?.time}</h4>
101
101
  <div className={styles.heroButtons}>
102
102
  {getButtons()}
103
103
  </div>
104
104
  </div>
105
105
  </div>
106
106
  </div>
107
- {marketingPageSettings.hero?.images?.length > 0 &&
107
+ {data?.images?.length > 0 &&
108
108
  <div className={`${styles.rightColumn} column is-6 px-0`} id="marketing-slider" ref={sliderRef}>
109
- {marketingPageSettings.hero?.images?.length > 1 ?
110
- <Slider {...sliderSettings}>
111
- {marketingPageSettings.hero.images.map((image, index) => {
112
- const imageSrc = getSrc(image.src);
113
- return (
114
- <div key={index}>
115
- <div className={styles.imageSlider} aria-label={image.alt} style={{ backgroundImage: `url(${imageSrc})`, height: sliderHeight, marginBottom: -6 }} />
116
- </div>
117
- );
118
- })}
119
- </Slider>
120
- :
121
- <div className={styles.singleImage} aria-label={marketingPageSettings.hero.images[0].alt} style={{ backgroundImage: `url(${getSrc(marketingPageSettings.hero.images[0].src)})`}} >
122
- </div>
109
+ {data?.images?.length > 1 ?
110
+ <Slider {...sliderSettings}>
111
+ {data.images.map((image, index) => {
112
+ const imageSrc = getSrc(image.src);
113
+ return (
114
+ <div key={index}>
115
+ <div className={styles.imageSlider} aria-label={image.alt} style={{ backgroundImage: `url(${imageSrc})`, height: sliderHeight, marginBottom: -6 }} />
116
+ </div>
117
+ );
118
+ })}
119
+ </Slider>
120
+ :
121
+ <div className={styles.singleImage} aria-label={data.images[0].alt} style={{ backgroundImage: `url(${getSrc(data.images[0].src)})`}} >
122
+ </div>
123
123
  }
124
124
  </div>
125
125
  }
@@ -19,7 +19,7 @@
19
19
  "countdown": {
20
20
  "display": false
21
21
  },
22
- "leftColumn": {
22
+ "widgets": {
23
23
  "schedule": {
24
24
  "display": false
25
25
  },
@@ -30,5 +30,5 @@
30
30
  "display": false
31
31
  }
32
32
  },
33
- "masonry": []
33
+ "masonry": {}
34
34
  }
@@ -54,7 +54,7 @@ export const marketingPageQuery = graphql`
54
54
  display
55
55
  text
56
56
  }
57
- leftColumn {
57
+ widgets {
58
58
  text {
59
59
  content
60
60
  display
@@ -84,24 +84,27 @@ export const marketingPageQuery = graphql`
84
84
  display
85
85
  }
86
86
  }
87
- eventRedirect
88
87
  masonry {
89
- placement
90
- size
91
- images {
92
- src {
93
- childImageSharp {
94
- gatsbyImageData (
95
- quality: 100
96
- placeholder: BLURRED
97
- layout: FULL_WIDTH
98
- )
88
+ display
89
+ items {
90
+ placement
91
+ size
92
+ images {
93
+ src {
94
+ childImageSharp {
95
+ gatsbyImageData (
96
+ quality: 100
97
+ placeholder: BLURRED
98
+ layout: FULL_WIDTH
99
+ )
100
+ }
99
101
  }
102
+ alt
103
+ link
100
104
  }
101
- alt
102
- link
103
105
  }
104
106
  }
107
+ eventRedirect
105
108
  }
106
109
  }
107
110
  `;
@@ -35,7 +35,7 @@ const states = {
35
35
  eventState: reducers.eventReducer,
36
36
  speakerState: reducers.speakerReducer,
37
37
  sponsorState: reducers.sponsorReducer,
38
- extraQuestionsReducer: reducers.extraQuestionsReducer
38
+ extraQuestionState: reducers.extraQuestionsReducer,
39
39
  };
40
40
 
41
41
  const appendLoggedUser = ({ getState }) => (next) => (action) => {
@@ -20,6 +20,15 @@ import { PHASES } from "../utils/phasesUtils";
20
20
 
21
21
  import styles from "../styles/marketing.module.scss";
22
22
 
23
+ const sliderSettings = {
24
+ autoplay: true,
25
+ autoplaySpeed: 5000,
26
+ infinite: true,
27
+ dots: false,
28
+ slidesToShow: 1,
29
+ slidesToScroll: 1
30
+ };
31
+
23
32
  const MarketingPageTemplate = ({
24
33
  location,
25
34
  data,
@@ -30,44 +39,42 @@ const MarketingPageTemplate = ({
30
39
  }) => {
31
40
 
32
41
  const {
33
- marketingPageJson
34
- } = data;
42
+ marketingPageJson: {
43
+ hero,
44
+ countdown,
45
+ widgets,
46
+ masonry
47
+ } = {}
48
+ } = data || {};
35
49
 
36
50
  let scheduleProps = {};
37
- if (marketingPageJson.leftColumn?.schedule && isLoggedUser && summitPhase !== PHASES.BEFORE) {
51
+ if (widgets?.schedule && isLoggedUser && summitPhase !== PHASES.BEFORE) {
38
52
  scheduleProps = {
39
53
  ...scheduleProps,
40
54
  onEventClick: (ev) => navigate(`/a/event/${ev.id}`),
41
55
  }
42
56
  }
43
57
 
44
- const sliderSettings = {
45
- autoplay: true,
46
- autoplaySpeed: 5000,
47
- infinite: true,
48
- dots: false,
49
- slidesToShow: 1,
50
- slidesToScroll: 1
51
- };
58
+ const shouldRenderMasonry = masonry?.display;
52
59
 
53
60
  return (
54
61
  <Layout marketing={true} location={location}>
55
62
  <AttendanceTrackerComponent />
56
63
  <MarketingHeroComponent
57
64
  location={location}
58
- marketingPageSettings={marketingPageJson}
65
+ data={hero}
59
66
  />
60
- {summit && marketingPageJson.countdown?.display && <Countdown summit={summit} text={marketingPageJson?.countdown?.text} />}
67
+ {summit && countdown?.display && <Countdown summit={summit} text={countdown?.text} />}
61
68
  <div className="columns">
62
- <div className={`column is-half mt-3 px-6 py-6 ${styles.leftColumn}`} style={{ position: 'relative' }}>
63
- {marketingPageJson.leftColumn?.text?.content && marketingPageJson.leftColumn?.text?.display &&
69
+ <div className={`column mt-3 px-6 py-6 ${shouldRenderMasonry ? "is-half" : ""} ${styles.leftColumn ? styles.leftColumn : ""}`} style={{ position: 'relative' }}>
70
+ {widgets?.text?.display && widgets?.text?.content &&
64
71
  <Markdown>
65
- {marketingPageJson.leftColumn.text.content}
72
+ {widgets.text.content}
66
73
  </Markdown>
67
74
  }
68
- {marketingPageJson.leftColumn?.schedule?.display &&
75
+ {widgets?.schedule?.display &&
69
76
  <>
70
- <h2><b>{marketingPageJson.leftColumn.schedule.title}</b></h2>
77
+ <h2><b>{widgets.schedule.title}</b></h2>
71
78
  <LiteScheduleComponent
72
79
  {...scheduleProps}
73
80
  lastDataSync={lastDataSync}
@@ -79,28 +86,28 @@ const MarketingPageTemplate = ({
79
86
  />
80
87
  </>
81
88
  }
82
- {marketingPageJson.leftColumn?.disqus?.display &&
89
+ {widgets?.disqus?.display &&
83
90
  <>
84
- <h2><b>{marketingPageJson.leftColumn.disqus.title}</b></h2>
91
+ <h2><b>{widgets.disqus.title}</b></h2>
85
92
  <DisqusComponent page="marketing-site"/>
86
93
  </>
87
94
  }
88
- {marketingPageJson.leftColumn?.image?.display &&
89
- marketingPageJson.leftColumn?.image?.image.src &&
95
+ {widgets?.image?.display &&
96
+ widgets?.image?.image.src &&
90
97
  <>
91
- <h2><b>{marketingPageJson.leftColumn.image.title}</b></h2>
98
+ <h2><b>{widgets.image.title}</b></h2>
92
99
  <br />
93
- <GatsbyImage image={getImage(marketingPageJson.leftColumn.image.image.src)} alt={marketingPageJson.leftColumn.image.image.alt ?? ""} />
100
+ <GatsbyImage image={getImage(widgets.image.image.src)} alt={widgets.image.image.alt ?? ""} />
94
101
  </>
95
102
  }
96
103
  </div>
97
- <div className={`column is-half px-0 pb-0 ${styles.rightColumn}`}>
104
+ {shouldRenderMasonry &&
105
+ <div className={`column is-half px-0 pb-0 ${styles.rightColumn ? styles.rightColumn : ""}`}>
98
106
  <Masonry
99
107
  breakpointCols={2}
100
108
  className="my-masonry-grid"
101
109
  columnClassName="my-masonry-grid_column">
102
- { marketingPageJson.masonry &&
103
- formatMasonry(marketingPageJson.masonry).map((item, index) => {
110
+ {masonry.items && formatMasonry(masonry.items).map((item, index) => {
104
111
  if (item.images && item.images.length === 1) {
105
112
  const image = getImage(item.images[0].src);
106
113
  return (
@@ -141,6 +148,7 @@ const MarketingPageTemplate = ({
141
148
  })}
142
149
  </Masonry>
143
150
  </div>
151
+ }
144
152
  </div>
145
153
  </Layout>
146
154
  )