@treely/strapi-slices 7.3.0 → 7.4.1

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/README.md CHANGED
@@ -39,7 +39,8 @@ npm run build
39
39
  npm pack
40
40
  ```
41
41
 
42
- Go to the project which uses the strapi-slices package and remove the `node_modules` and the `.next` folder before installing the package there:
42
+ Go to the project which uses the strapi-slices package and remove the
43
+ `node_modules` and the `.next` folder before installing the package there:
43
44
 
44
45
  ```bash
45
46
  cd ../path/to/your/project
@@ -17,10 +17,10 @@ export declare enum EventType {
17
17
  interface StrapiEvent {
18
18
  title: string;
19
19
  description: string;
20
- button: StrapiLink;
20
+ button?: StrapiLink;
21
21
  buttonVariant?: 'outline' | 'ghost' | 'link' | 'solid' | 'outlineWhite';
22
22
  recommended?: boolean;
23
- speakers: {
23
+ speakers?: {
24
24
  id: number;
25
25
  name: string;
26
26
  image: StrapiImage;
@@ -6061,7 +6061,7 @@ var EventCard = function EventCard(_ref) {
6061
6061
  justifyContent: mobile ? undefined : 'space-between',
6062
6062
  flexDir: mobile ? 'column-reverse' : 'row',
6063
6063
  gap: mobile ? '4' : '0'
6064
- }, React__default.default.createElement(boemly.Flex, {
6064
+ }, event.button && React__default.default.createElement(boemly.Flex, {
6065
6065
  width: mobile ? 'full' : 'auto'
6066
6066
  }, React__default.default.createElement(StrapiLinkButton, {
6067
6067
  key: event.button.id,
@@ -6072,7 +6072,7 @@ var EventCard = function EventCard(_ref) {
6072
6072
  size: "10"
6073
6073
  }),
6074
6074
  width: "full"
6075
- })), React__default.default.createElement(boemly.Flex, {
6075
+ })), event.speakers && event.speakers.length > 0 && React__default.default.createElement(boemly.Flex, {
6076
6076
  flexDir: "row",
6077
6077
  gap: "2"
6078
6078
  }, event.speakers.map(function (speaker) {
@@ -6155,6 +6155,12 @@ var Events = function Events(_ref) {
6155
6155
  var _useState3 = React.useState([Sort.NEWEST_FIRST]),
6156
6156
  sort = _useState3[0],
6157
6157
  setSort = _useState3[1];
6158
+ var _useState4 = React.useState([]),
6159
+ allEventTypeOptions = _useState4[0],
6160
+ setAllEventTypeOptions = _useState4[1];
6161
+ var _useState5 = React.useState([]),
6162
+ allLanguageOptions = _useState5[0],
6163
+ setAllLanguageOptions = _useState5[1];
6158
6164
  var now = new Date().toISOString();
6159
6165
  var buildEventsUrl = function buildEventsUrl(index, batchSize, startFilter) {
6160
6166
  var url = new URL("/treely-events", STRAPI_URI);
@@ -6168,10 +6174,14 @@ var Events = function Events(_ref) {
6168
6174
  } else {
6169
6175
  url.searchParams.append('sort', 'start:desc');
6170
6176
  }
6171
- if (languageFilter.length || eventTypeFilter.length) {
6172
- [].concat(languageFilter, eventTypeFilter).forEach(function (filter, i) {
6173
- var filterKey = i < languageFilter.length ? 'languages' : 'eventTypes';
6174
- url.searchParams.append("filters[$and][" + i + "][" + filterKey + "][" + filterKey.slice(0, -1) + "]", filter);
6177
+ if (eventTypeFilter.length) {
6178
+ eventTypeFilter.forEach(function (filter, i) {
6179
+ url.searchParams.append("filters[$or][" + i + "][eventTypes][eventType]", filter);
6180
+ });
6181
+ }
6182
+ if (languageFilter.length) {
6183
+ languageFilter.forEach(function (filter, i) {
6184
+ url.searchParams.append("filters[$or][" + (eventTypeFilter.length + i) + "][languages][language]", filter);
6175
6185
  });
6176
6186
  }
6177
6187
  return "/treely-events" + url.search;
@@ -6217,38 +6227,66 @@ var Events = function Events(_ref) {
6217
6227
  var pastEvents = React.useMemo(function () {
6218
6228
  return processEvents(pastData);
6219
6229
  }, [pastData]);
6220
- var combinedEvents = React.useMemo(function () {
6221
- return upcomingEvents.concat(pastEvents);
6222
- }, [upcomingEvents, pastEvents]);
6223
- var getOptions = function getOptions(items, key, selectedFilters) {
6224
- var uniqueValues = new Set();
6225
- var options = items.flatMap(function (card) {
6226
- return card.attributes[key].map(function (item) {
6227
- return {
6228
- value: item[key.slice(0, -1)],
6229
- label: item[key.slice(0, -1)]
6230
- };
6231
- });
6232
- }).filter(function (option) {
6233
- if (uniqueValues.has(option.value)) return false;
6234
- uniqueValues.add(option.value);
6235
- return true;
6236
- });
6237
- return options.concat(selectedFilters.filter(function (selected) {
6238
- return !uniqueValues.has(selected);
6239
- }).map(function (selected) {
6240
- return {
6241
- value: selected,
6242
- label: selected
6243
- };
6244
- }));
6245
- };
6246
- var eventTypeOptions = React.useMemo(function () {
6247
- return getOptions(combinedEvents, 'eventTypes', eventTypeFilter);
6248
- }, [combinedEvents]);
6249
- var languageOptions = React.useMemo(function () {
6250
- return getOptions(combinedEvents, 'languages', languageFilter);
6251
- }, [combinedEvents]);
6230
+ // Function to fetch all possible options
6231
+ var fetchAllOptions = React.useCallback( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
6232
+ var url, response, data, events, allEventTypes, allLanguages;
6233
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
6234
+ while (1) switch (_context.prev = _context.next) {
6235
+ case 0:
6236
+ url = new URL("/treely-events", STRAPI_URI);
6237
+ url.searchParams.append('locale', locale);
6238
+ url.searchParams.append('populate', 'deep,6');
6239
+ _context.next = 5;
6240
+ return fetch(STRAPI_URI + "/api/treely-events" + url.search);
6241
+ case 5:
6242
+ response = _context.sent;
6243
+ _context.next = 8;
6244
+ return response.json();
6245
+ case 8:
6246
+ data = _context.sent;
6247
+ events = (data == null ? void 0 : data.data) || []; // Extract all event types
6248
+ allEventTypes = new Set();
6249
+ events.forEach(function (event) {
6250
+ var _event$attributes;
6251
+ if (event != null && (_event$attributes = event.attributes) != null && _event$attributes.eventTypes) {
6252
+ event.attributes.eventTypes.forEach(function (item) {
6253
+ allEventTypes.add(item.eventType);
6254
+ });
6255
+ }
6256
+ });
6257
+ // Extract all languages
6258
+ allLanguages = new Set();
6259
+ events.forEach(function (event) {
6260
+ var _event$attributes2;
6261
+ if (event != null && (_event$attributes2 = event.attributes) != null && _event$attributes2.languages) {
6262
+ event.attributes.languages.forEach(function (item) {
6263
+ allLanguages.add(item.language);
6264
+ });
6265
+ }
6266
+ });
6267
+ // Update state with all options
6268
+ setAllEventTypeOptions(Array.from(allEventTypes).map(function (value) {
6269
+ return {
6270
+ value: value,
6271
+ label: value
6272
+ };
6273
+ }));
6274
+ setAllLanguageOptions(Array.from(allLanguages).map(function (value) {
6275
+ return {
6276
+ value: value,
6277
+ label: value
6278
+ };
6279
+ }));
6280
+ case 16:
6281
+ case "end":
6282
+ return _context.stop();
6283
+ }
6284
+ }, _callee);
6285
+ })), [locale]);
6286
+ // Fetch all options when component mounts
6287
+ React.useEffect(function () {
6288
+ fetchAllOptions();
6289
+ }, [fetchAllOptions]);
6252
6290
  var removeFilter = function removeFilter(filterType, valueToRemove) {
6253
6291
  if (filterType === 'eventTypes') {
6254
6292
  setEventTypeFilter(function (prev) {
@@ -6269,7 +6307,13 @@ var Events = function Events(_ref) {
6269
6307
  }, [eventTypeFilter, languageFilter, sort]);
6270
6308
  return React__default.default.createElement(boemly.DefaultSectionContainer, null, React__default.default.createElement(boemly.Wrapper, null, slice.upcomingTitle ? React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.DefaultSectionHeader, {
6271
6309
  title: slice.upcomingTitle,
6272
- text: slice.upcomingDescription
6310
+ text: slice.upcomingDescription,
6311
+ titleProps: {
6312
+ maxW: '3xl'
6313
+ },
6314
+ textProps: {
6315
+ maxW: '3xl'
6316
+ }
6273
6317
  }), React__default.default.createElement(boemly.Spacer, {
6274
6318
  h: "10"
6275
6319
  })) : React__default.default.createElement(React__default.default.Fragment, null), slice.filterSearch && (upcomingEvents || pastEvents) ? React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Flex, {
@@ -6300,7 +6344,7 @@ var Events = function Events(_ref) {
6300
6344
  searchPlaceholder: formatMessage({
6301
6345
  id: 'sections.events.eventsFilter.searchPlaceholder'
6302
6346
  }),
6303
- options: eventTypeOptions,
6347
+ options: allEventTypeOptions,
6304
6348
  value: eventTypeFilter != null ? eventTypeFilter : [],
6305
6349
  onChange: function onChange(selected) {
6306
6350
  setEventTypeFilter(selected);
@@ -6319,7 +6363,7 @@ var Events = function Events(_ref) {
6319
6363
  searchPlaceholder: formatMessage({
6320
6364
  id: 'sections.events.eventsFilter.searchPlaceholder'
6321
6365
  }),
6322
- options: languageOptions,
6366
+ options: allLanguageOptions,
6323
6367
  value: languageFilter != null ? languageFilter : [],
6324
6368
  onChange: function onChange(selected) {
6325
6369
  setLanguageFilter(selected);
@@ -6330,7 +6374,7 @@ var Events = function Events(_ref) {
6330
6374
  minHeight: "6",
6331
6375
  gap: "2"
6332
6376
  }, eventTypeFilter.map(function (eventType) {
6333
- var event = eventTypeOptions.find(function (option) {
6377
+ var event = allEventTypeOptions.find(function (option) {
6334
6378
  return option.value === eventType;
6335
6379
  });
6336
6380
  return React__default.default.createElement(boemly.BoemlyTag, {
@@ -6341,7 +6385,7 @@ var Events = function Events(_ref) {
6341
6385
  }
6342
6386
  }, event == null ? void 0 : event.label);
6343
6387
  }), languageFilter.map(function (singleLanguage) {
6344
- var language = languageOptions.find(function (option) {
6388
+ var language = allLanguageOptions.find(function (option) {
6345
6389
  return option.value === singleLanguage;
6346
6390
  });
6347
6391
  return React__default.default.createElement(boemly.BoemlyTag, {
@@ -6396,7 +6440,7 @@ var Events = function Events(_ref) {
6396
6440
  return React__default.default.createElement(boemly.Box, {
6397
6441
  key: event.id,
6398
6442
  width: "full",
6399
- height: ['full', null, null, 'xl']
6443
+ height: "full"
6400
6444
  }, React__default.default.createElement(EventCard, {
6401
6445
  event: event.attributes
6402
6446
  }));
@@ -6417,7 +6461,13 @@ var Events = function Events(_ref) {
6417
6461
  pt: ['8', null, null, '24']
6418
6462
  }, React__default.default.createElement(boemly.Wrapper, null, React__default.default.createElement(boemly.DefaultSectionHeader, {
6419
6463
  title: slice.pastTitle,
6420
- text: slice.pastDescription
6464
+ text: slice.pastDescription,
6465
+ titleProps: {
6466
+ maxW: '3xl'
6467
+ },
6468
+ textProps: {
6469
+ maxW: '3xl'
6470
+ }
6421
6471
  }), React__default.default.createElement(boemly.Spacer, {
6422
6472
  h: "10"
6423
6473
  }), (!pastEvents || pastEvents.length === 0) && !isLoadingPast ? React__default.default.createElement(React__default.default.Fragment, null, React__default.default.createElement(boemly.Center, null, formatMessage({
@@ -6436,7 +6486,7 @@ var Events = function Events(_ref) {
6436
6486
  }, pastEvents.map(function (event) {
6437
6487
  return React__default.default.createElement(boemly.Box, {
6438
6488
  key: event.id,
6439
- height: ['full', null, null, 'xl'],
6489
+ height: "full",
6440
6490
  width: "full"
6441
6491
  }, React__default.default.createElement(EventCard, {
6442
6492
  event: event.attributes