@selfcommunity/react-ui 0.7.50-events.56 → 0.7.50-events.57

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.
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
1
  import { SCEventType } from '@selfcommunity/types';
2
+ import React from 'react';
3
+ import { SCEventTemplateType } from '../../types/event';
3
4
  import { WidgetProps } from '../Widget';
4
5
  import { EventSkeletonProps } from './Skeleton';
5
- import { SCEventTemplateType } from '../../types/event';
6
6
  export interface EventProps extends WidgetProps {
7
7
  /**
8
8
  * Event Object
@@ -2,22 +2,22 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
- const styles_1 = require("@mui/material/styles");
6
5
  const material_1 = require("@mui/material");
7
- const types_1 = require("@selfcommunity/types");
6
+ const styles_1 = require("@mui/material/styles");
7
+ const system_1 = require("@mui/system");
8
8
  const react_core_1 = require("@selfcommunity/react-core");
9
- const react_intl_1 = require("react-intl");
9
+ const types_1 = require("@selfcommunity/types");
10
10
  const classnames_1 = tslib_1.__importDefault(require("classnames"));
11
- const system_1 = require("@mui/system");
11
+ const react_intl_1 = require("react-intl");
12
12
  const BaseItem_1 = tslib_1.__importDefault(require("../../shared/BaseItem"));
13
- const Widget_1 = tslib_1.__importDefault(require("../Widget"));
14
- const constants_1 = require("./constants");
15
- const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
16
13
  const Calendar_1 = tslib_1.__importDefault(require("../../shared/Calendar"));
17
14
  const EventInfoDetails_1 = tslib_1.__importDefault(require("../../shared/EventInfoDetails"));
18
- const User_1 = tslib_1.__importDefault(require("../User"));
19
- const EventPartecipantsButton_1 = tslib_1.__importDefault(require("../EventPartecipantsButton"));
20
15
  const event_1 = require("../../types/event");
16
+ const EventPartecipantsButton_1 = tslib_1.__importDefault(require("../EventPartecipantsButton"));
17
+ const User_1 = tslib_1.__importDefault(require("../User"));
18
+ const Widget_1 = tslib_1.__importDefault(require("../Widget"));
19
+ const constants_1 = require("./constants");
20
+ const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
21
21
  const classes = {
22
22
  root: `${constants_1.PREFIX}-root`,
23
23
  detailRoot: `${constants_1.PREFIX}-detail-root`,
@@ -119,13 +119,13 @@ function Event(inProps) {
119
119
  */
120
120
  let contentObj;
121
121
  if (template === event_1.SCEventTemplateType.DETAIL) {
122
- contentObj = ((0, jsx_runtime_1.jsxs)(DetailRoot, Object.assign({ className: classes.detailRoot }, { children: [(0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: classes.detailImageWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.CardMedia, { component: "img", image: scEvent.image_big, alt: scEvent.name, className: classes.detailImage }), (0, jsx_runtime_1.jsx)(Calendar_1.default, { day: new Date(scEvent.start_date).getDate() })] })), (0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.detailContent }, { children: [(0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.detailNameWrapper }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h3", className: classes.detailName }, { children: scEvent.name })) })), (0, jsx_runtime_1.jsx)(EventInfoDetails_1.default, { event: scEvent }), !hideEventPlanner && ((0, jsx_runtime_1.jsx)(User_1.default, { user: scEvent.managed_by, elevation: 0, secondary: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "caption" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.myEventsWidget.planner", defaultMessage: "ui.myEventsWidget.planner" }) })), actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), className: classes.detailUser })), !hideEventParticipants && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Divider, { className: classes.detailFirstDivider }), (0, jsx_runtime_1.jsx)(EventPartecipantsButton_1.default, { event: scEvent, eventId: scEvent.id })] })), (0, jsx_runtime_1.jsx)(material_1.Divider, { className: classes.detailSecondDivider })] })), actions !== null && actions !== void 0 ? actions : ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.detailActions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ size: "small", variant: "outlined", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
122
+ contentObj = ((0, jsx_runtime_1.jsxs)(DetailRoot, Object.assign({ className: classes.detailRoot }, { children: [(0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: classes.detailImageWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.CardMedia, { component: "img", image: scEvent.image_medium, alt: scEvent.name, className: classes.detailImage }), (0, jsx_runtime_1.jsx)(Calendar_1.default, { day: new Date(scEvent.start_date).getDate() })] })), (0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.detailContent }, { children: [(0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.detailNameWrapper }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h3", className: classes.detailName }, { children: scEvent.name })) })), (0, jsx_runtime_1.jsx)(EventInfoDetails_1.default, { event: scEvent }), !hideEventPlanner && ((0, jsx_runtime_1.jsx)(User_1.default, { user: scEvent.managed_by, elevation: 0, secondary: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "caption" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.myEventsWidget.planner", defaultMessage: "ui.myEventsWidget.planner" }) })), actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), className: classes.detailUser })), !hideEventParticipants && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Divider, { className: classes.detailFirstDivider }), (0, jsx_runtime_1.jsx)(EventPartecipantsButton_1.default, { event: scEvent, eventId: scEvent.id })] })), (0, jsx_runtime_1.jsx)(material_1.Divider, { className: classes.detailSecondDivider })] })), actions !== null && actions !== void 0 ? actions : ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.detailActions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ size: "small", variant: "outlined", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
123
123
  }
124
124
  else if (template === event_1.SCEventTemplateType.PREVIEW) {
125
125
  contentObj = ((0, jsx_runtime_1.jsxs)(PreviewRoot, Object.assign({ className: classes.previewRoot }, { children: [(0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ position: "relative", className: classes.previewImageWrapper }, { children: (0, jsx_runtime_1.jsx)(material_1.CardMedia, { component: "img", height: "100px", image: scEvent.image_medium, alt: scEvent.name, className: classes.previewImage }) })), (0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.previewContent }, { children: [(0, jsx_runtime_1.jsx)(EventInfoDetails_1.default, { event: scEvent, hidePrivacyIcon: true, hasLocationInfo: false, beforePrivacyInfo: (0, jsx_runtime_1.jsx)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.previewNameWrapper }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h5", className: classes.previewName }, { children: scEvent.name })) })) }), !hideEventParticipants && (0, jsx_runtime_1.jsx)(EventPartecipantsButton_1.default, { event: scEvent })] })), actions !== null && actions !== void 0 ? actions : ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.previewActions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ size: "small", variant: "outlined", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
126
126
  }
127
127
  else {
128
- contentObj = ((0, jsx_runtime_1.jsx)(SnippetRoot, { elevation: 0, square: true, disableTypography: true, className: classes.snippetRoot, image: (0, jsx_runtime_1.jsx)(material_1.Avatar, { variant: "square", alt: scEvent.name, src: scEvent.image_small, className: classes.snippetAvatar }), primary: (0, jsx_runtime_1.jsxs)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.snippetPrimary }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: "span" }, { children: `${intl.formatDate(scEvent.start_date, {
128
+ contentObj = ((0, jsx_runtime_1.jsx)(SnippetRoot, { elevation: 0, square: true, disableTypography: true, className: classes.snippetRoot, image: (0, jsx_runtime_1.jsx)(material_1.Avatar, { variant: "square", alt: scEvent.name, src: scEvent.image_medium, className: classes.snippetAvatar }), primary: (0, jsx_runtime_1.jsxs)(react_core_1.Link, Object.assign({ to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.snippetPrimary }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ component: "span" }, { children: `${intl.formatDate(scEvent.start_date, {
129
129
  weekday: 'long',
130
130
  month: 'long',
131
131
  day: 'numeric'
@@ -0,0 +1,8 @@
1
+ import { Dispatch, HTMLAttributes, SetStateAction } from 'react';
2
+ export interface ArrowProps {
3
+ type: 'prev' | 'next';
4
+ currentItem: number;
5
+ setCurrentItem: Dispatch<SetStateAction<number>>;
6
+ className?: HTMLAttributes<HTMLButtonElement>['className'];
7
+ }
8
+ export default function Arrow(props: ArrowProps): JSX.Element;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const material_1 = require("@mui/material");
5
+ const react_1 = require("react");
6
+ const react_2 = require("swiper/react");
7
+ function Arrow(props) {
8
+ const { type, currentItem, setCurrentItem, className } = props;
9
+ // STATE
10
+ const [itemsLength, setItemsLength] = (0, react_1.useState)(0);
11
+ // HOOKS
12
+ const swiper = (0, react_2.useSwiper)();
13
+ (0, react_1.useEffect)(() => {
14
+ setItemsLength(swiper.slides.length);
15
+ }, []);
16
+ const handleChange = (0, react_1.useCallback)((type) => {
17
+ if (type === 'prev') {
18
+ swiper.slidePrev();
19
+ }
20
+ else {
21
+ swiper.slideNext();
22
+ }
23
+ setCurrentItem(swiper.snapIndex);
24
+ }, [type]);
25
+ if (type === 'prev') {
26
+ return (currentItem > 0 && ((0, jsx_runtime_1.jsx)(material_1.IconButton, Object.assign({ className: className, size: "medium", onClick: () => handleChange('prev') }, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "chevron_left" }) }))));
27
+ }
28
+ return (currentItem < itemsLength - 1 && ((0, jsx_runtime_1.jsx)(material_1.IconButton, Object.assign({ className: className, size: "medium", onClick: () => handleChange('next') }, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "chevron_right" }) }))));
29
+ }
30
+ exports.default = Arrow;
@@ -6,15 +6,15 @@ const material_1 = require("@mui/material");
6
6
  const system_1 = require("@mui/system");
7
7
  require("swiper/css");
8
8
  const react_1 = require("swiper/react");
9
+ const event_1 = require("../../types/event");
10
+ const Event_1 = require("../Event");
9
11
  const Widget_1 = tslib_1.__importDefault(require("../Widget"));
10
12
  const constants_1 = require("./constants");
11
- const Event_1 = require("../Event");
12
- const event_1 = require("../../types/event");
13
13
  const classes = {
14
14
  root: `${constants_1.PREFIX}-skeleton-root`,
15
15
  content: `${constants_1.PREFIX}-content`,
16
16
  title: `${constants_1.PREFIX}-title`,
17
- swiper: `${constants_1.PREFIX}-swiper`,
17
+ swiperSlide: `${constants_1.PREFIX}-swiper-slide`,
18
18
  actions: `${constants_1.PREFIX}-actions`
19
19
  };
20
20
  const Root = (0, system_1.styled)(Widget_1.default, {
@@ -23,6 +23,6 @@ const Root = (0, system_1.styled)(Widget_1.default, {
23
23
  overridesResolver: (_props, styles) => styles.skeletonRoot
24
24
  })(() => ({}));
25
25
  function SuggestedEventsWidgetSkeleton() {
26
- return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: classes.root }, { children: [(0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.content }, { children: [(0, jsx_runtime_1.jsx)(material_1.Skeleton, { className: classes.title, animation: "wave", width: "141px", height: "23px" }), (0, jsx_runtime_1.jsx)(react_1.Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto" }, { children: [1, 2, 3, 4, 5, 6, 7].map((_element, i) => ((0, jsx_runtime_1.jsx)(react_1.SwiperSlide, Object.assign({ className: classes.swiper }, { children: (0, jsx_runtime_1.jsx)(Event_1.EventSkeleton, { template: event_1.SCEventTemplateType.PREVIEW, variant: "outlined", actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}) }) }), i))) }))] })), (0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "52px", height: "20px" }) }))] })));
26
+ return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: classes.root }, { children: [(0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.content }, { children: [(0, jsx_runtime_1.jsx)(material_1.Skeleton, { className: classes.title, animation: "wave", width: "141px", height: "23px" }), (0, jsx_runtime_1.jsx)(react_1.Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto" }, { children: [1, 2, 3, 4, 5, 6, 7].map((_element, i) => ((0, jsx_runtime_1.jsx)(react_1.SwiperSlide, Object.assign({ className: classes.swiperSlide }, { children: (0, jsx_runtime_1.jsx)(Event_1.EventSkeleton, { template: event_1.SCEventTemplateType.PREVIEW, variant: "outlined", actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}) }) }), i))) }))] })), (0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "52px", height: "20px" }) }))] })));
27
27
  }
28
28
  exports.default = SuggestedEventsWidgetSkeleton;
@@ -1,4 +1,3 @@
1
- import 'swiper/css';
2
1
  import { WidgetProps } from '../Widget';
3
2
  export interface SuggestedEventsWidgetProps extends WidgetProps {
4
3
  /**
@@ -9,21 +9,25 @@ const react_core_1 = require("@selfcommunity/react-core");
9
9
  const utils_1 = require("@selfcommunity/utils");
10
10
  const react_1 = require("react");
11
11
  const react_intl_1 = require("react-intl");
12
- require("swiper/css");
12
+ const modules_1 = require("swiper/modules");
13
13
  const react_2 = require("swiper/react");
14
14
  const Errors_1 = require("../../constants/Errors");
15
15
  const Pagination_1 = require("../../constants/Pagination");
16
16
  const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
17
+ const event_1 = require("../../types/event");
18
+ const Event_1 = tslib_1.__importDefault(require("../Event"));
17
19
  const Widget_1 = tslib_1.__importDefault(require("../Widget"));
20
+ const Arrow_1 = tslib_1.__importDefault(require("./Arrow"));
18
21
  const constants_1 = require("./constants");
19
22
  const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
20
- const event_1 = require("../../types/event");
21
- const Event_1 = tslib_1.__importDefault(require("../Event"));
22
23
  const classes = {
23
24
  root: `${constants_1.PREFIX}-root`,
24
25
  content: `${constants_1.PREFIX}-content`,
25
26
  title: `${constants_1.PREFIX}-title`,
26
27
  swiper: `${constants_1.PREFIX}-swiper`,
28
+ swiperSlide: `${constants_1.PREFIX}-swiper-slide`,
29
+ swiperPrevArrow: `${constants_1.PREFIX}-swiper-prev-arrow`,
30
+ swiperNextArrow: `${constants_1.PREFIX}-swiper-next-arrow`,
27
31
  event: `${constants_1.PREFIX}-event`,
28
32
  actions: `${constants_1.PREFIX}-actions`,
29
33
  actionButton: `${constants_1.PREFIX}-action-button`
@@ -43,6 +47,8 @@ function SuggestedEventsWidget(inProps) {
43
47
  // STATE
44
48
  const [eventsData, setEventsData] = (0, react_1.useState)(null);
45
49
  const [loading, setLoading] = (0, react_1.useState)(true);
50
+ const [showSkeleton, setShowSkeleton] = (0, react_1.useState)(false);
51
+ const [currentItem, setCurrentItem] = (0, react_1.useState)(0);
46
52
  // CONTEXT
47
53
  const scRoutingContext = (0, react_core_1.useSCRouting)();
48
54
  (0, react_1.useEffect)(() => {
@@ -56,13 +62,17 @@ function SuggestedEventsWidget(inProps) {
56
62
  });
57
63
  }, []);
58
64
  const handleReachEnd = (0, react_1.useCallback)(() => {
59
- if (eventsData.count > eventsData.results.length) {
65
+ if (eventsData.count > eventsData.results.length && eventsData.next) {
66
+ setShowSkeleton(true);
60
67
  api_services_1.http
61
68
  .request({
62
69
  url: eventsData.next,
63
70
  method: api_services_1.Endpoints.GetEventSuggestedUsers.method
64
71
  })
65
- .then((res) => console.log('*** res ***', res))
72
+ .then((res) => {
73
+ setEventsData(res.data);
74
+ setShowSkeleton(false);
75
+ })
66
76
  .catch((error) => {
67
77
  utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
68
78
  });
@@ -75,6 +85,6 @@ function SuggestedEventsWidget(inProps) {
75
85
  if (!eventsData) {
76
86
  return (0, jsx_runtime_1.jsx)(HiddenPlaceholder_1.default, {});
77
87
  }
78
- return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: classes.root }, rest, { children: [(0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.content }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h5", className: classes.title }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.suggestedEventsWidget.title", defaultMessage: "ui.suggestedEventsWidget.title" }) })), (0, jsx_runtime_1.jsx)(react_2.Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto", onReachEnd: handleReachEnd }, { children: eventsData === null || eventsData === void 0 ? void 0 : eventsData.results.map((event, i) => ((0, jsx_runtime_1.jsx)(react_2.SwiperSlide, Object.assign({ className: classes.swiper }, { children: (0, jsx_runtime_1.jsx)(Event_1.default, { event: event, template: event_1.SCEventTemplateType.PREVIEW, actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), variant: "outlined", className: classes.event }) }), i))) }))] })), (0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, {}), className: classes.actionButton }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "caption" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.suggestedEventsWidget.showAll", defaultMessage: "ui.suggestedEventsWidget.showAll" }) })) })) }))] })));
88
+ return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: classes.root }, rest, { children: [(0, jsx_runtime_1.jsxs)(material_1.CardContent, Object.assign({ className: classes.content }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h5", className: classes.title }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.suggestedEventsWidget.title", defaultMessage: "ui.suggestedEventsWidget.title" }) })), (0, jsx_runtime_1.jsxs)(react_2.Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto", grabCursor: true, modules: [modules_1.Navigation], onReachEnd: handleReachEnd, className: classes.swiper }, { children: [(showSkeleton ? [...eventsData.results, undefined] : eventsData.results).map((event, i) => ((0, jsx_runtime_1.jsx)(react_2.SwiperSlide, Object.assign({ className: classes.swiperSlide }, { children: (0, jsx_runtime_1.jsx)(Event_1.default, { event: event, template: event_1.SCEventTemplateType.PREVIEW, actions: (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {}), variant: "outlined", className: classes.event }) }), i))), (0, jsx_runtime_1.jsx)(Arrow_1.default, { className: classes.swiperPrevArrow, type: "prev", currentItem: currentItem, setCurrentItem: setCurrentItem }), (0, jsx_runtime_1.jsx)(Arrow_1.default, { className: classes.swiperNextArrow, type: "next", currentItem: currentItem, setCurrentItem: setCurrentItem })] }))] })), (0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENTS_SUGGESTED_ROUTE_NAME, {}), className: classes.actionButton }, { children: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "caption" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.suggestedEventsWidget.showAll", defaultMessage: "ui.suggestedEventsWidget.showAll" }) })) })) }))] })));
79
89
  }
80
90
  exports.default = SuggestedEventsWidget;
@@ -1,4 +1,5 @@
1
+ import Arrow, { ArrowProps } from './Arrow';
1
2
  import SuggestedEventsWidgetSkeleton from './Skeleton';
2
3
  import SuggestedEventsWidget, { SuggestedEventsWidgetProps } from './SuggestedEventsWidget';
3
4
  export default SuggestedEventsWidget;
4
- export { SuggestedEventsWidgetSkeleton, type SuggestedEventsWidgetProps };
5
+ export { Arrow, SuggestedEventsWidgetSkeleton, type ArrowProps, type SuggestedEventsWidgetProps };
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SuggestedEventsWidgetSkeleton = void 0;
3
+ exports.SuggestedEventsWidgetSkeleton = exports.Arrow = void 0;
4
4
  const tslib_1 = require("tslib");
5
+ const Arrow_1 = tslib_1.__importDefault(require("./Arrow"));
6
+ exports.Arrow = Arrow_1.default;
5
7
  const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
6
8
  exports.SuggestedEventsWidgetSkeleton = Skeleton_1.default;
7
9
  const SuggestedEventsWidget_1 = tslib_1.__importDefault(require("./SuggestedEventsWidget"));
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
1
  import { SCEventType } from '@selfcommunity/types';
2
+ import React from 'react';
3
+ import { SCEventTemplateType } from '../../types/event';
3
4
  import { WidgetProps } from '../Widget';
4
5
  import { EventSkeletonProps } from './Skeleton';
5
- import { SCEventTemplateType } from '../../types/event';
6
6
  export interface EventProps extends WidgetProps {
7
7
  /**
8
8
  * Event Object
@@ -1,21 +1,21 @@
1
1
  import { __rest } from "tslib";
2
2
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
- import { styled } from '@mui/material/styles';
4
3
  import { Avatar, Box, Button, CardActions, CardContent, CardMedia, Divider, Typography } from '@mui/material';
5
- import { SCEventLocationType } from '@selfcommunity/types';
4
+ import { styled } from '@mui/material/styles';
5
+ import { useThemeProps } from '@mui/system';
6
6
  import { Link, SCRoutes, useSCFetchEvent, useSCRouting } from '@selfcommunity/react-core';
7
- import { FormattedMessage, useIntl } from 'react-intl';
7
+ import { SCEventLocationType } from '@selfcommunity/types';
8
8
  import classNames from 'classnames';
9
- import { useThemeProps } from '@mui/system';
9
+ import { FormattedMessage, useIntl } from 'react-intl';
10
10
  import BaseItem from '../../shared/BaseItem';
11
- import Widget from '../Widget';
12
- import { PREFIX } from './constants';
13
- import EventSkeleton from './Skeleton';
14
11
  import Calendar from '../../shared/Calendar';
15
12
  import EventInfoDetails from '../../shared/EventInfoDetails';
16
- import User from '../User';
17
- import EventPartecipantsButton from '../EventPartecipantsButton';
18
13
  import { SCEventTemplateType } from '../../types/event';
14
+ import EventPartecipantsButton from '../EventPartecipantsButton';
15
+ import User from '../User';
16
+ import Widget from '../Widget';
17
+ import { PREFIX } from './constants';
18
+ import EventSkeleton from './Skeleton';
19
19
  const classes = {
20
20
  root: `${PREFIX}-root`,
21
21
  detailRoot: `${PREFIX}-detail-root`,
@@ -117,13 +117,13 @@ export default function Event(inProps) {
117
117
  */
118
118
  let contentObj;
119
119
  if (template === SCEventTemplateType.DETAIL) {
120
- contentObj = (_jsxs(DetailRoot, Object.assign({ className: classes.detailRoot }, { children: [_jsxs(Box, Object.assign({ className: classes.detailImageWrapper }, { children: [_jsx(CardMedia, { component: "img", image: scEvent.image_big, alt: scEvent.name, className: classes.detailImage }), _jsx(Calendar, { day: new Date(scEvent.start_date).getDate() })] })), _jsxs(CardContent, Object.assign({ className: classes.detailContent }, { children: [_jsx(Link, Object.assign({ to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.detailNameWrapper }, { children: _jsx(Typography, Object.assign({ variant: "h3", className: classes.detailName }, { children: scEvent.name })) })), _jsx(EventInfoDetails, { event: scEvent }), !hideEventPlanner && (_jsx(User, { user: scEvent.managed_by, elevation: 0, secondary: _jsx(Typography, Object.assign({ variant: "caption" }, { children: _jsx(FormattedMessage, { id: "ui.myEventsWidget.planner", defaultMessage: "ui.myEventsWidget.planner" }) })), actions: _jsx(_Fragment, {}), className: classes.detailUser })), !hideEventParticipants && (_jsxs(_Fragment, { children: [_jsx(Divider, { className: classes.detailFirstDivider }), _jsx(EventPartecipantsButton, { event: scEvent, eventId: scEvent.id })] })), _jsx(Divider, { className: classes.detailSecondDivider })] })), actions !== null && actions !== void 0 ? actions : (_jsx(CardActions, Object.assign({ className: classes.detailActions }, { children: _jsx(Button, Object.assign({ size: "small", variant: "outlined", component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: _jsx(FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
120
+ contentObj = (_jsxs(DetailRoot, Object.assign({ className: classes.detailRoot }, { children: [_jsxs(Box, Object.assign({ className: classes.detailImageWrapper }, { children: [_jsx(CardMedia, { component: "img", image: scEvent.image_medium, alt: scEvent.name, className: classes.detailImage }), _jsx(Calendar, { day: new Date(scEvent.start_date).getDate() })] })), _jsxs(CardContent, Object.assign({ className: classes.detailContent }, { children: [_jsx(Link, Object.assign({ to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.detailNameWrapper }, { children: _jsx(Typography, Object.assign({ variant: "h3", className: classes.detailName }, { children: scEvent.name })) })), _jsx(EventInfoDetails, { event: scEvent }), !hideEventPlanner && (_jsx(User, { user: scEvent.managed_by, elevation: 0, secondary: _jsx(Typography, Object.assign({ variant: "caption" }, { children: _jsx(FormattedMessage, { id: "ui.myEventsWidget.planner", defaultMessage: "ui.myEventsWidget.planner" }) })), actions: _jsx(_Fragment, {}), className: classes.detailUser })), !hideEventParticipants && (_jsxs(_Fragment, { children: [_jsx(Divider, { className: classes.detailFirstDivider }), _jsx(EventPartecipantsButton, { event: scEvent, eventId: scEvent.id })] })), _jsx(Divider, { className: classes.detailSecondDivider })] })), actions !== null && actions !== void 0 ? actions : (_jsx(CardActions, Object.assign({ className: classes.detailActions }, { children: _jsx(Button, Object.assign({ size: "small", variant: "outlined", component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: _jsx(FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
121
121
  }
122
122
  else if (template === SCEventTemplateType.PREVIEW) {
123
123
  contentObj = (_jsxs(PreviewRoot, Object.assign({ className: classes.previewRoot }, { children: [_jsx(Box, Object.assign({ position: "relative", className: classes.previewImageWrapper }, { children: _jsx(CardMedia, { component: "img", height: "100px", image: scEvent.image_medium, alt: scEvent.name, className: classes.previewImage }) })), _jsxs(CardContent, Object.assign({ className: classes.previewContent }, { children: [_jsx(EventInfoDetails, { event: scEvent, hidePrivacyIcon: true, hasLocationInfo: false, beforePrivacyInfo: _jsx(Link, Object.assign({ to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.previewNameWrapper }, { children: _jsx(Typography, Object.assign({ variant: "h5", className: classes.previewName }, { children: scEvent.name })) })) }), !hideEventParticipants && _jsx(EventPartecipantsButton, { event: scEvent })] })), actions !== null && actions !== void 0 ? actions : (_jsx(CardActions, Object.assign({ className: classes.previewActions }, { children: _jsx(Button, Object.assign({ size: "small", variant: "outlined", component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent) }, { children: _jsx(FormattedMessage, { defaultMessage: "ui.event.see", id: "ui.event.see" }) })) })))] })));
124
124
  }
125
125
  else {
126
- contentObj = (_jsx(SnippetRoot, { elevation: 0, square: true, disableTypography: true, className: classes.snippetRoot, image: _jsx(Avatar, { variant: "square", alt: scEvent.name, src: scEvent.image_small, className: classes.snippetAvatar }), primary: _jsxs(Link, Object.assign({ to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.snippetPrimary }, { children: [_jsx(Typography, Object.assign({ component: "span" }, { children: `${intl.formatDate(scEvent.start_date, {
126
+ contentObj = (_jsx(SnippetRoot, { elevation: 0, square: true, disableTypography: true, className: classes.snippetRoot, image: _jsx(Avatar, { variant: "square", alt: scEvent.name, src: scEvent.image_medium, className: classes.snippetAvatar }), primary: _jsxs(Link, Object.assign({ to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, scEvent), className: classes.snippetPrimary }, { children: [_jsx(Typography, Object.assign({ component: "span" }, { children: `${intl.formatDate(scEvent.start_date, {
127
127
  weekday: 'long',
128
128
  month: 'long',
129
129
  day: 'numeric'
@@ -0,0 +1,8 @@
1
+ import { Dispatch, HTMLAttributes, SetStateAction } from 'react';
2
+ export interface ArrowProps {
3
+ type: 'prev' | 'next';
4
+ currentItem: number;
5
+ setCurrentItem: Dispatch<SetStateAction<number>>;
6
+ className?: HTMLAttributes<HTMLButtonElement>['className'];
7
+ }
8
+ export default function Arrow(props: ArrowProps): JSX.Element;
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Icon, IconButton } from '@mui/material';
3
+ import { useCallback, useEffect, useState } from 'react';
4
+ import { useSwiper } from 'swiper/react';
5
+ export default function Arrow(props) {
6
+ const { type, currentItem, setCurrentItem, className } = props;
7
+ // STATE
8
+ const [itemsLength, setItemsLength] = useState(0);
9
+ // HOOKS
10
+ const swiper = useSwiper();
11
+ useEffect(() => {
12
+ setItemsLength(swiper.slides.length);
13
+ }, []);
14
+ const handleChange = useCallback((type) => {
15
+ if (type === 'prev') {
16
+ swiper.slidePrev();
17
+ }
18
+ else {
19
+ swiper.slideNext();
20
+ }
21
+ setCurrentItem(swiper.snapIndex);
22
+ }, [type]);
23
+ if (type === 'prev') {
24
+ return (currentItem > 0 && (_jsx(IconButton, Object.assign({ className: className, size: "medium", onClick: () => handleChange('prev') }, { children: _jsx(Icon, { children: "chevron_left" }) }))));
25
+ }
26
+ return (currentItem < itemsLength - 1 && (_jsx(IconButton, Object.assign({ className: className, size: "medium", onClick: () => handleChange('next') }, { children: _jsx(Icon, { children: "chevron_right" }) }))));
27
+ }
@@ -3,15 +3,15 @@ import { CardActions, CardContent, Skeleton } from '@mui/material';
3
3
  import { styled } from '@mui/system';
4
4
  import 'swiper/css';
5
5
  import { Swiper, SwiperSlide } from 'swiper/react';
6
+ import { SCEventTemplateType } from '../../types/event';
7
+ import { EventSkeleton } from '../Event';
6
8
  import Widget from '../Widget';
7
9
  import { PREFIX } from './constants';
8
- import { EventSkeleton } from '../Event';
9
- import { SCEventTemplateType } from '../../types/event';
10
10
  const classes = {
11
11
  root: `${PREFIX}-skeleton-root`,
12
12
  content: `${PREFIX}-content`,
13
13
  title: `${PREFIX}-title`,
14
- swiper: `${PREFIX}-swiper`,
14
+ swiperSlide: `${PREFIX}-swiper-slide`,
15
15
  actions: `${PREFIX}-actions`
16
16
  };
17
17
  const Root = styled(Widget, {
@@ -20,5 +20,5 @@ const Root = styled(Widget, {
20
20
  overridesResolver: (_props, styles) => styles.skeletonRoot
21
21
  })(() => ({}));
22
22
  export default function SuggestedEventsWidgetSkeleton() {
23
- return (_jsxs(Root, Object.assign({ className: classes.root }, { children: [_jsxs(CardContent, Object.assign({ className: classes.content }, { children: [_jsx(Skeleton, { className: classes.title, animation: "wave", width: "141px", height: "23px" }), _jsx(Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto" }, { children: [1, 2, 3, 4, 5, 6, 7].map((_element, i) => (_jsx(SwiperSlide, Object.assign({ className: classes.swiper }, { children: _jsx(EventSkeleton, { template: SCEventTemplateType.PREVIEW, variant: "outlined", actions: _jsx(_Fragment, {}) }) }), i))) }))] })), _jsx(CardActions, Object.assign({ className: classes.actions }, { children: _jsx(Skeleton, { animation: "wave", width: "52px", height: "20px" }) }))] })));
23
+ return (_jsxs(Root, Object.assign({ className: classes.root }, { children: [_jsxs(CardContent, Object.assign({ className: classes.content }, { children: [_jsx(Skeleton, { className: classes.title, animation: "wave", width: "141px", height: "23px" }), _jsx(Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto" }, { children: [1, 2, 3, 4, 5, 6, 7].map((_element, i) => (_jsx(SwiperSlide, Object.assign({ className: classes.swiperSlide }, { children: _jsx(EventSkeleton, { template: SCEventTemplateType.PREVIEW, variant: "outlined", actions: _jsx(_Fragment, {}) }) }), i))) }))] })), _jsx(CardActions, Object.assign({ className: classes.actions }, { children: _jsx(Skeleton, { animation: "wave", width: "52px", height: "20px" }) }))] })));
24
24
  }
@@ -1,4 +1,3 @@
1
- import 'swiper/css';
2
1
  import { WidgetProps } from '../Widget';
3
2
  export interface SuggestedEventsWidgetProps extends WidgetProps {
4
3
  /**
@@ -7,21 +7,25 @@ import { Link, SCRoutes, useSCRouting } from '@selfcommunity/react-core';
7
7
  import { Logger } from '@selfcommunity/utils';
8
8
  import { useCallback, useEffect, useState } from 'react';
9
9
  import { FormattedMessage } from 'react-intl';
10
- import 'swiper/css';
10
+ import { Navigation } from 'swiper/modules';
11
11
  import { Swiper, SwiperSlide } from 'swiper/react';
12
12
  import { SCOPE_SC_UI } from '../../constants/Errors';
13
13
  import { DEFAULT_PAGINATION_LIMIT, DEFAULT_PAGINATION_OFFSET } from '../../constants/Pagination';
14
14
  import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
15
+ import { SCEventTemplateType } from '../../types/event';
16
+ import Event from '../Event';
15
17
  import Widget from '../Widget';
18
+ import Arrow from './Arrow';
16
19
  import { PREFIX } from './constants';
17
20
  import Skeleton from './Skeleton';
18
- import { SCEventTemplateType } from '../../types/event';
19
- import Event from '../Event';
20
21
  const classes = {
21
22
  root: `${PREFIX}-root`,
22
23
  content: `${PREFIX}-content`,
23
24
  title: `${PREFIX}-title`,
24
25
  swiper: `${PREFIX}-swiper`,
26
+ swiperSlide: `${PREFIX}-swiper-slide`,
27
+ swiperPrevArrow: `${PREFIX}-swiper-prev-arrow`,
28
+ swiperNextArrow: `${PREFIX}-swiper-next-arrow`,
25
29
  event: `${PREFIX}-event`,
26
30
  actions: `${PREFIX}-actions`,
27
31
  actionButton: `${PREFIX}-action-button`
@@ -41,6 +45,8 @@ export default function SuggestedEventsWidget(inProps) {
41
45
  // STATE
42
46
  const [eventsData, setEventsData] = useState(null);
43
47
  const [loading, setLoading] = useState(true);
48
+ const [showSkeleton, setShowSkeleton] = useState(false);
49
+ const [currentItem, setCurrentItem] = useState(0);
44
50
  // CONTEXT
45
51
  const scRoutingContext = useSCRouting();
46
52
  useEffect(() => {
@@ -54,13 +60,17 @@ export default function SuggestedEventsWidget(inProps) {
54
60
  });
55
61
  }, []);
56
62
  const handleReachEnd = useCallback(() => {
57
- if (eventsData.count > eventsData.results.length) {
63
+ if (eventsData.count > eventsData.results.length && eventsData.next) {
64
+ setShowSkeleton(true);
58
65
  http
59
66
  .request({
60
67
  url: eventsData.next,
61
68
  method: Endpoints.GetEventSuggestedUsers.method
62
69
  })
63
- .then((res) => console.log('*** res ***', res))
70
+ .then((res) => {
71
+ setEventsData(res.data);
72
+ setShowSkeleton(false);
73
+ })
64
74
  .catch((error) => {
65
75
  Logger.error(SCOPE_SC_UI, error);
66
76
  });
@@ -73,5 +83,5 @@ export default function SuggestedEventsWidget(inProps) {
73
83
  if (!eventsData) {
74
84
  return _jsx(HiddenPlaceholder, {});
75
85
  }
76
- return (_jsxs(Root, Object.assign({ className: classes.root }, rest, { children: [_jsxs(CardContent, Object.assign({ className: classes.content }, { children: [_jsx(Typography, Object.assign({ variant: "h5", className: classes.title }, { children: _jsx(FormattedMessage, { id: "ui.suggestedEventsWidget.title", defaultMessage: "ui.suggestedEventsWidget.title" }) })), _jsx(Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto", onReachEnd: handleReachEnd }, { children: eventsData === null || eventsData === void 0 ? void 0 : eventsData.results.map((event, i) => (_jsx(SwiperSlide, Object.assign({ className: classes.swiper }, { children: _jsx(Event, { event: event, template: SCEventTemplateType.PREVIEW, actions: _jsx(_Fragment, {}), variant: "outlined", className: classes.event }) }), i))) }))] })), _jsx(CardActions, Object.assign({ className: classes.actions }, { children: _jsx(Button, Object.assign({ component: Link, to: scRoutingContext.url(SCRoutes.EVENT_ROUTE_NAME, {}), className: classes.actionButton }, { children: _jsx(Typography, Object.assign({ variant: "caption" }, { children: _jsx(FormattedMessage, { id: "ui.suggestedEventsWidget.showAll", defaultMessage: "ui.suggestedEventsWidget.showAll" }) })) })) }))] })));
86
+ return (_jsxs(Root, Object.assign({ className: classes.root }, rest, { children: [_jsxs(CardContent, Object.assign({ className: classes.content }, { children: [_jsx(Typography, Object.assign({ variant: "h5", className: classes.title }, { children: _jsx(FormattedMessage, { id: "ui.suggestedEventsWidget.title", defaultMessage: "ui.suggestedEventsWidget.title" }) })), _jsxs(Swiper, Object.assign({ spaceBetween: 8, slidesPerView: "auto", grabCursor: true, modules: [Navigation], onReachEnd: handleReachEnd, className: classes.swiper }, { children: [(showSkeleton ? [...eventsData.results, undefined] : eventsData.results).map((event, i) => (_jsx(SwiperSlide, Object.assign({ className: classes.swiperSlide }, { children: _jsx(Event, { event: event, template: SCEventTemplateType.PREVIEW, actions: _jsx(_Fragment, {}), variant: "outlined", className: classes.event }) }), i))), _jsx(Arrow, { className: classes.swiperPrevArrow, type: "prev", currentItem: currentItem, setCurrentItem: setCurrentItem }), _jsx(Arrow, { className: classes.swiperNextArrow, type: "next", currentItem: currentItem, setCurrentItem: setCurrentItem })] }))] })), _jsx(CardActions, Object.assign({ className: classes.actions }, { children: _jsx(Button, Object.assign({ component: Link, to: scRoutingContext.url(SCRoutes.EVENTS_SUGGESTED_ROUTE_NAME, {}), className: classes.actionButton }, { children: _jsx(Typography, Object.assign({ variant: "caption" }, { children: _jsx(FormattedMessage, { id: "ui.suggestedEventsWidget.showAll", defaultMessage: "ui.suggestedEventsWidget.showAll" }) })) })) }))] })));
77
87
  }
@@ -1,4 +1,5 @@
1
+ import Arrow, { ArrowProps } from './Arrow';
1
2
  import SuggestedEventsWidgetSkeleton from './Skeleton';
2
3
  import SuggestedEventsWidget, { SuggestedEventsWidgetProps } from './SuggestedEventsWidget';
3
4
  export default SuggestedEventsWidget;
4
- export { SuggestedEventsWidgetSkeleton, type SuggestedEventsWidgetProps };
5
+ export { Arrow, SuggestedEventsWidgetSkeleton, type ArrowProps, type SuggestedEventsWidgetProps };
@@ -1,4 +1,5 @@
1
+ import Arrow from './Arrow';
1
2
  import SuggestedEventsWidgetSkeleton from './Skeleton';
2
3
  import SuggestedEventsWidget from './SuggestedEventsWidget';
3
4
  export default SuggestedEventsWidget;
4
- export { SuggestedEventsWidgetSkeleton };
5
+ export { Arrow, SuggestedEventsWidgetSkeleton };