@treely/strapi-slices 7.3.0 → 7.4.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/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) {
@@ -6300,7 +6338,7 @@ var Events = function Events(_ref) {
6300
6338
  searchPlaceholder: formatMessage({
6301
6339
  id: 'sections.events.eventsFilter.searchPlaceholder'
6302
6340
  }),
6303
- options: eventTypeOptions,
6341
+ options: allEventTypeOptions,
6304
6342
  value: eventTypeFilter != null ? eventTypeFilter : [],
6305
6343
  onChange: function onChange(selected) {
6306
6344
  setEventTypeFilter(selected);
@@ -6319,7 +6357,7 @@ var Events = function Events(_ref) {
6319
6357
  searchPlaceholder: formatMessage({
6320
6358
  id: 'sections.events.eventsFilter.searchPlaceholder'
6321
6359
  }),
6322
- options: languageOptions,
6360
+ options: allLanguageOptions,
6323
6361
  value: languageFilter != null ? languageFilter : [],
6324
6362
  onChange: function onChange(selected) {
6325
6363
  setLanguageFilter(selected);
@@ -6330,7 +6368,7 @@ var Events = function Events(_ref) {
6330
6368
  minHeight: "6",
6331
6369
  gap: "2"
6332
6370
  }, eventTypeFilter.map(function (eventType) {
6333
- var event = eventTypeOptions.find(function (option) {
6371
+ var event = allEventTypeOptions.find(function (option) {
6334
6372
  return option.value === eventType;
6335
6373
  });
6336
6374
  return React__default.default.createElement(boemly.BoemlyTag, {
@@ -6341,7 +6379,7 @@ var Events = function Events(_ref) {
6341
6379
  }
6342
6380
  }, event == null ? void 0 : event.label);
6343
6381
  }), languageFilter.map(function (singleLanguage) {
6344
- var language = languageOptions.find(function (option) {
6382
+ var language = allLanguageOptions.find(function (option) {
6345
6383
  return option.value === singleLanguage;
6346
6384
  });
6347
6385
  return React__default.default.createElement(boemly.BoemlyTag, {