@selfcommunity/react-ui 0.7.50-events.59 → 0.7.50-events.62

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.
Files changed (58) hide show
  1. package/lib/cjs/components/EventHeader/EventHeader.d.ts +1 -1
  2. package/lib/cjs/components/EventMembersWidget/EventMembersWidget.d.ts +43 -0
  3. package/lib/cjs/components/EventMembersWidget/EventMembersWidget.js +150 -0
  4. package/lib/cjs/components/EventMembersWidget/Skeleton.d.ts +2 -0
  5. package/lib/cjs/components/EventMembersWidget/Skeleton.js +29 -0
  6. package/lib/cjs/components/EventMembersWidget/constants.d.ts +1 -0
  7. package/lib/cjs/components/EventMembersWidget/constants.js +4 -0
  8. package/lib/cjs/components/EventMembersWidget/index.d.ts +4 -0
  9. package/lib/cjs/components/EventMembersWidget/index.js +8 -0
  10. package/lib/cjs/components/Events/Events.js +1 -1
  11. package/lib/cjs/components/Events/PastEventsFilter.d.ts +1 -0
  12. package/lib/cjs/components/Events/PastEventsFilter.js +5 -1
  13. package/lib/cjs/components/InviteEventButton/InviteEventButton.d.ts +60 -0
  14. package/lib/cjs/components/InviteEventButton/InviteEventButton.js +82 -0
  15. package/lib/cjs/components/InviteEventButton/index.d.ts +3 -0
  16. package/lib/cjs/components/InviteEventButton/index.js +5 -0
  17. package/lib/cjs/components/RelatedEventsWidget/RelatedEventsWidget.d.ts +43 -0
  18. package/lib/cjs/components/RelatedEventsWidget/RelatedEventsWidget.js +125 -0
  19. package/lib/cjs/components/RelatedEventsWidget/Skeleton.d.ts +2 -0
  20. package/lib/cjs/components/RelatedEventsWidget/Skeleton.js +28 -0
  21. package/lib/cjs/components/RelatedEventsWidget/constants.d.ts +1 -0
  22. package/lib/cjs/components/RelatedEventsWidget/constants.js +4 -0
  23. package/lib/cjs/components/RelatedEventsWidget/index.d.ts +4 -0
  24. package/lib/cjs/components/RelatedEventsWidget/index.js +8 -0
  25. package/lib/cjs/components/SuggestedEventsWidget/SuggestedEventsWidget.js +2 -3
  26. package/lib/cjs/index.d.ts +5 -2
  27. package/lib/cjs/index.js +19 -10
  28. package/lib/esm/components/EventHeader/EventHeader.d.ts +1 -1
  29. package/lib/esm/components/EventMembersWidget/EventMembersWidget.d.ts +43 -0
  30. package/lib/esm/components/EventMembersWidget/EventMembersWidget.js +147 -0
  31. package/lib/esm/components/EventMembersWidget/Skeleton.d.ts +2 -0
  32. package/lib/esm/components/EventMembersWidget/Skeleton.js +25 -0
  33. package/lib/esm/components/EventMembersWidget/constants.d.ts +1 -0
  34. package/lib/esm/components/EventMembersWidget/constants.js +1 -0
  35. package/lib/esm/components/EventMembersWidget/index.d.ts +4 -0
  36. package/lib/esm/components/EventMembersWidget/index.js +4 -0
  37. package/lib/esm/components/Events/Events.js +1 -1
  38. package/lib/esm/components/Events/PastEventsFilter.d.ts +1 -0
  39. package/lib/esm/components/Events/PastEventsFilter.js +5 -1
  40. package/lib/esm/components/InviteEventButton/InviteEventButton.d.ts +60 -0
  41. package/lib/esm/components/InviteEventButton/InviteEventButton.js +79 -0
  42. package/lib/esm/components/InviteEventButton/index.d.ts +3 -0
  43. package/lib/esm/components/InviteEventButton/index.js +2 -0
  44. package/lib/esm/components/RelatedEventsWidget/RelatedEventsWidget.d.ts +43 -0
  45. package/lib/esm/components/RelatedEventsWidget/RelatedEventsWidget.js +122 -0
  46. package/lib/esm/components/RelatedEventsWidget/Skeleton.d.ts +2 -0
  47. package/lib/esm/components/RelatedEventsWidget/Skeleton.js +24 -0
  48. package/lib/esm/components/RelatedEventsWidget/constants.d.ts +1 -0
  49. package/lib/esm/components/RelatedEventsWidget/constants.js +1 -0
  50. package/lib/esm/components/RelatedEventsWidget/index.d.ts +4 -0
  51. package/lib/esm/components/RelatedEventsWidget/index.js +4 -0
  52. package/lib/esm/components/SuggestedEventsWidget/SuggestedEventsWidget.js +2 -3
  53. package/lib/esm/index.d.ts +5 -2
  54. package/lib/esm/index.js +7 -4
  55. package/lib/umd/{401.js → 224.js} +2 -2
  56. package/lib/umd/react-ui.js +1 -1
  57. package/package.json +7 -7
  58. /package/lib/umd/{401.js.LICENSE.txt → 224.js.LICENSE.txt} +0 -0
@@ -31,7 +31,7 @@ export interface EventHeaderProps {
31
31
  * Props to spread event actions menu
32
32
  * @default {}
33
33
  */
34
- EventActionsProps?: EventActionsMenuProps;
34
+ EventActionsProps?: Omit<EventActionsMenuProps, 'event'>;
35
35
  /**
36
36
  * Any other properties
37
37
  */
@@ -0,0 +1,43 @@
1
+ import { SCEventType } from '@selfcommunity/types';
2
+ import { CacheStrategies } from '@selfcommunity/utils';
3
+ import 'swiper/css';
4
+ import { BaseDialogProps } from '../../shared/BaseDialog';
5
+ import { UserProps } from '../User';
6
+ import { WidgetProps } from '../Widget';
7
+ export interface EventMembersWidgetProps extends WidgetProps {
8
+ /**
9
+ * Event Object
10
+ * @default null
11
+ */
12
+ event?: SCEventType;
13
+ /**
14
+ * Id of event object
15
+ * @default null
16
+ */
17
+ eventId?: number;
18
+ /**
19
+ * Props to spread to single user object
20
+ * @default empty object
21
+ */
22
+ userProps?: UserProps;
23
+ /**
24
+ * Feed API Query Params
25
+ * @default [{'limit': 20, 'offset': 0}]
26
+ */
27
+ endpointQueryParams?: Record<string, string | number>;
28
+ /**
29
+ * Caching strategies
30
+ * @default CacheStrategies.CACHE_FIRST
31
+ */
32
+ cacheStrategy?: CacheStrategies;
33
+ /**
34
+ * Props to spread to users suggestion dialog
35
+ * @default {}
36
+ */
37
+ dialogProps?: BaseDialogProps;
38
+ /**
39
+ * Other props
40
+ */
41
+ [p: string]: any;
42
+ }
43
+ export default function EventMembersWidget(inProps: EventMembersWidgetProps): JSX.Element;
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const lab_1 = require("@mui/lab");
6
+ const material_1 = require("@mui/material");
7
+ const system_1 = require("@mui/system");
8
+ const api_services_1 = require("@selfcommunity/api-services");
9
+ const react_core_1 = require("@selfcommunity/react-core");
10
+ const utils_1 = require("@selfcommunity/utils");
11
+ const react_1 = require("react");
12
+ const react_intl_1 = require("react-intl");
13
+ require("swiper/css");
14
+ const Errors_1 = require("../../constants/Errors");
15
+ const Pagination_1 = require("../../constants/Pagination");
16
+ const BaseDialog_1 = tslib_1.__importDefault(require("../../shared/BaseDialog"));
17
+ const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
18
+ const InfiniteScroll_1 = tslib_1.__importDefault(require("../../shared/InfiniteScroll"));
19
+ const widget_1 = require("../../utils/widget");
20
+ const InviteEventButton_1 = tslib_1.__importDefault(require("../InviteEventButton"));
21
+ const User_1 = tslib_1.__importStar(require("../User"));
22
+ const Widget_1 = tslib_1.__importDefault(require("../Widget"));
23
+ const constants_1 = require("./constants");
24
+ const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
25
+ const classes = {
26
+ root: `${constants_1.PREFIX}-root`,
27
+ content: `${constants_1.PREFIX}-content`,
28
+ title: `${constants_1.PREFIX}-title`,
29
+ tabsWrapper: `${constants_1.PREFIX}-tabs-wrapper`,
30
+ tabLabelWrapper: `${constants_1.PREFIX}-tab-label-wrapper`,
31
+ tabPanel: `${constants_1.PREFIX}-tab-panel`,
32
+ actions: `${constants_1.PREFIX}-actions`,
33
+ actionButton: `${constants_1.PREFIX}-action-button`,
34
+ dialogRoot: `${constants_1.PREFIX}-dialog-root`,
35
+ infiniteScroll: `${constants_1.PREFIX}-infinite-scroll`,
36
+ endMessage: `${constants_1.PREFIX}-end-message`
37
+ };
38
+ const Root = (0, system_1.styled)(Widget_1.default, {
39
+ name: constants_1.PREFIX,
40
+ slot: 'Root',
41
+ overridesResolver: (_props, styles) => styles.root
42
+ })();
43
+ const DialogRoot = (0, system_1.styled)(BaseDialog_1.default, {
44
+ name: constants_1.PREFIX,
45
+ slot: 'DialogRoot',
46
+ overridesResolver: (_props, styles) => styles.dialogRoot
47
+ })();
48
+ function EventMembersWidget(inProps) {
49
+ // PROPS
50
+ const props = (0, material_1.useThemeProps)({
51
+ props: inProps,
52
+ name: constants_1.PREFIX
53
+ });
54
+ const { event, eventId, userProps = {}, endpointQueryParams = { limit: Pagination_1.DEFAULT_PAGINATION_LIMIT, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, cacheStrategy, dialogProps } = props, rest = tslib_1.__rest(props, ["event", "eventId", "userProps", "endpointQueryParams", "cacheStrategy", "dialogProps"]);
55
+ // STATE
56
+ const [partecipants, dispatchPartecipants] = (0, react_1.useReducer)(widget_1.dataWidgetReducer, {
57
+ isLoadingNext: false,
58
+ next: null,
59
+ cacheKey: react_core_1.SCCache.getWidgetStateCacheKey(react_core_1.SCCache.USER_EVENTS_STATE_CACHE_PREFIX_KEY),
60
+ cacheStrategy,
61
+ visibleItems: Pagination_1.DEFAULT_PAGINATION_LIMIT
62
+ }, widget_1.stateWidgetInitializer);
63
+ const [invited, dispatchInvited] = (0, react_1.useReducer)(widget_1.dataWidgetReducer, {
64
+ isLoadingNext: false,
65
+ next: null,
66
+ cacheKey: react_core_1.SCCache.getWidgetStateCacheKey(react_core_1.SCCache.USER_EVENTS_STATE_CACHE_PREFIX_KEY),
67
+ cacheStrategy,
68
+ visibleItems: Pagination_1.DEFAULT_PAGINATION_LIMIT
69
+ }, widget_1.stateWidgetInitializer);
70
+ const [openDialog, setOpenDialog] = (0, react_1.useState)(false);
71
+ const [invitedNumber, setInvitedNumber] = (0, react_1.useState)(0);
72
+ const [tabValue, setTabValue] = (0, react_1.useState)('1');
73
+ const state = (0, react_1.useMemo)(() => (tabValue === '1' ? partecipants : invited), [tabValue, partecipants, invited]);
74
+ const dispatch = (0, react_1.useCallback)((value) => (tabValue === '1' ? dispatchPartecipants(value) : dispatchInvited(value)), [tabValue, dispatchPartecipants, dispatchInvited]);
75
+ // CONTEXT
76
+ const scUserContext = (0, react_core_1.useSCUser)();
77
+ // HOOKS
78
+ const { scEvent } = (0, react_core_1.useSCFetchEvent)({ id: eventId, event });
79
+ const _initPartecipants = (0, react_1.useCallback)(() => {
80
+ if (!partecipants.initialized && !partecipants.isLoadingNext) {
81
+ dispatchPartecipants({ type: widget_1.actionWidgetTypes.LOADING_NEXT });
82
+ api_services_1.EventService.getUsersGoingToEvent(scEvent.id, Object.assign({}, endpointQueryParams))
83
+ .then((payload) => {
84
+ dispatchPartecipants({ type: widget_1.actionWidgetTypes.LOAD_NEXT_SUCCESS, payload: Object.assign(Object.assign({}, payload), { initialized: true }) });
85
+ })
86
+ .catch((error) => {
87
+ dispatchPartecipants({ type: widget_1.actionWidgetTypes.LOAD_NEXT_FAILURE, payload: { errorLoadNext: error } });
88
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
89
+ });
90
+ }
91
+ }, [partecipants.isLoadingNext, partecipants.initialized, dispatchPartecipants, scEvent]);
92
+ const _initInvited = (0, react_1.useCallback)(() => {
93
+ var _a;
94
+ if (!invited.initialized && !invited.isLoadingNext && ((_a = scUserContext.user) === null || _a === void 0 ? void 0 : _a.id) === scEvent.managed_by.id) {
95
+ dispatchInvited({ type: widget_1.actionWidgetTypes.LOADING_NEXT });
96
+ api_services_1.EventService.getEventInvitedUsers(scEvent.id, Object.assign({}, endpointQueryParams))
97
+ .then((payload) => {
98
+ dispatchInvited({ type: widget_1.actionWidgetTypes.LOAD_NEXT_SUCCESS, payload: Object.assign(Object.assign({}, payload), { initialized: true }) });
99
+ setInvitedNumber(payload.count);
100
+ })
101
+ .catch((error) => {
102
+ dispatchInvited({ type: widget_1.actionWidgetTypes.LOAD_NEXT_FAILURE, payload: { errorLoadNext: error } });
103
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
104
+ });
105
+ }
106
+ }, [invited.isLoadingNext, invited.initialized, dispatchInvited, scUserContext.user, scEvent]);
107
+ // EFFECTS
108
+ (0, react_1.useEffect)(() => {
109
+ let _t;
110
+ if (scUserContext.user && scEvent) {
111
+ _t = setTimeout(() => {
112
+ _initPartecipants();
113
+ _initInvited();
114
+ });
115
+ return () => {
116
+ clearTimeout(_t);
117
+ };
118
+ }
119
+ }, [scUserContext.user, scEvent]);
120
+ // HANDLERS
121
+ /**
122
+ * Handles pagination
123
+ */
124
+ const handleNext = (0, react_1.useCallback)(() => {
125
+ dispatch({ type: widget_1.actionWidgetTypes.LOADING_NEXT });
126
+ api_services_1.http
127
+ .request({
128
+ url: state.next,
129
+ method: api_services_1.Endpoints.UserSuggestion.method
130
+ })
131
+ .then((res) => {
132
+ dispatch({ type: widget_1.actionWidgetTypes.LOAD_NEXT_SUCCESS, payload: res.data });
133
+ });
134
+ }, [dispatch, state.next, state.isLoadingNext, state.initialized]);
135
+ const handleToggleDialogOpen = (0, react_1.useCallback)(() => {
136
+ setOpenDialog((prev) => !prev);
137
+ }, []);
138
+ const handleTabChange = (0, react_1.useCallback)((_evt, newTabValue) => {
139
+ setTabValue(newTabValue);
140
+ }, []);
141
+ if (!scEvent && !state.initialized) {
142
+ return (0, jsx_runtime_1.jsx)(Skeleton_1.default, {});
143
+ }
144
+ // RENDER
145
+ if (!scEvent) {
146
+ return (0, jsx_runtime_1.jsx)(HiddenPlaceholder_1.default, {});
147
+ }
148
+ 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.eventMembersWidget.invited", defaultMessage: "ui.eventMembersWidget.invited" }) })), (0, jsx_runtime_1.jsxs)(lab_1.TabContext, Object.assign({ value: tabValue }, { children: [(0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.tabsWrapper }, { children: (0, jsx_runtime_1.jsxs)(lab_1.TabList, Object.assign({ onChange: handleTabChange, textColor: "secondary", indicatorColor: "secondary", variant: "fullWidth" }, { children: [(0, jsx_runtime_1.jsx)(material_1.Tab, { label: (0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ className: classes.tabLabelWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h3" }, { children: partecipants.count })), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "subtitle2" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventMembersWidget.partecipants", defaultMessage: "ui.eventMembersWidget.partecipants" }) }))] })), value: "1" }), invited && ((0, jsx_runtime_1.jsx)(material_1.Tab, { label: (0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ className: classes.tabLabelWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h3" }, { children: invitedNumber })), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "subtitle2" }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventMembersWidget.invited", defaultMessage: "ui.eventMembersWidget.invited" }) }))] })), value: "2" }))] })) })), (0, jsx_runtime_1.jsx)(lab_1.TabPanel, Object.assign({ value: "1", className: classes.tabPanel }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: partecipants.results.map((user) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(User_1.default, Object.assign({ elevation: 0, user: user }, userProps)) }, user.id))) }) })), invited && ((0, jsx_runtime_1.jsx)(lab_1.TabPanel, Object.assign({ value: "2", className: classes.tabPanel }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: invited.results.map((user) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(User_1.default, Object.assign({ elevation: 0, user: user }, userProps, { actions: (0, jsx_runtime_1.jsx)(InviteEventButton_1.default, { event: scEvent, user: scUserContext.user, setInvitedNumber: setInvitedNumber }) })) }, user.id))) }) })))] }))] })), state.count > state.visibleItems && ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ onClick: handleToggleDialogOpen, 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.eventMembersWidget.showAll", defaultMessage: "ui.eventMembersWidget.showAll" }) })) })) }))), openDialog && ((0, jsx_runtime_1.jsx)(DialogRoot, Object.assign({ className: classes.dialogRoot, title: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventMembersWidget.title", id: "ui.eventMembersWidget.title" }), onClose: handleToggleDialogOpen, open: openDialog }, dialogProps, { children: (0, jsx_runtime_1.jsx)(InfiniteScroll_1.default, Object.assign({ dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: (0, jsx_runtime_1.jsx)(User_1.UserSkeleton, Object.assign({ elevation: 0 }, userProps)), className: classes.infiniteScroll, endMessage: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ className: classes.endMessage }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventMembersWidget.noMoreResults", defaultMessage: "ui.eventMembersWidget.noMoreResults" }) })) }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: state.results.map((user) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(User_1.default, Object.assign({ elevation: 0, user: user }, userProps)) }, user.id))) }) })) })))] })));
149
+ }
150
+ exports.default = EventMembersWidget;
@@ -0,0 +1,2 @@
1
+ import 'swiper/css';
2
+ export default function EventMembersWidgetSkeleton(): JSX.Element;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const lab_1 = require("@mui/lab");
6
+ const material_1 = require("@mui/material");
7
+ const system_1 = require("@mui/system");
8
+ require("swiper/css");
9
+ const User_1 = require("../User");
10
+ const Widget_1 = tslib_1.__importDefault(require("../Widget"));
11
+ const constants_1 = require("./constants");
12
+ const classes = {
13
+ root: `${constants_1.PREFIX}-skeleton-root`,
14
+ content: `${constants_1.PREFIX}-content`,
15
+ title: `${constants_1.PREFIX}-title`,
16
+ tabsWrapper: `${constants_1.PREFIX}-tabs-wrapper`,
17
+ tabLabelWrapper: `${constants_1.PREFIX}-tab-label-wrapper`,
18
+ tabPanel: `${constants_1.PREFIX}-tab-panel`,
19
+ actions: `${constants_1.PREFIX}-actions`
20
+ };
21
+ const Root = (0, system_1.styled)(Widget_1.default, {
22
+ name: constants_1.PREFIX,
23
+ slot: 'SkeletonRoot',
24
+ overridesResolver: (_props, styles) => styles.skeletonRoot
25
+ })();
26
+ function EventMembersWidgetSkeleton() {
27
+ 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, { animation: "wave", width: "53px", height: "25px", className: classes.title }), (0, jsx_runtime_1.jsxs)(lab_1.TabContext, Object.assign({ value: "1" }, { children: [(0, jsx_runtime_1.jsx)(system_1.Box, Object.assign({ className: classes.tabsWrapper }, { children: (0, jsx_runtime_1.jsxs)(lab_1.TabList, Object.assign({ variant: "fullWidth" }, { children: [(0, jsx_runtime_1.jsx)(material_1.Tab, { label: (0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ className: classes.tabLabelWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "26px", height: "24px" }), (0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "106px", height: "19px" })] })), value: "1" }), (0, jsx_runtime_1.jsx)(material_1.Tab, { label: (0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ className: classes.tabLabelWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "26px", height: "24px" }), (0, jsx_runtime_1.jsx)(material_1.Skeleton, { animation: "wave", width: "106px", height: "19px" })] })), value: "2" })] })) })), (0, jsx_runtime_1.jsx)(lab_1.TabPanel, Object.assign({ value: "1", className: classes.tabPanel }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: [1, 2, 3, 4].map((_element, i) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(User_1.UserSkeleton, {}) }, i))) }) })), (0, jsx_runtime_1.jsx)(lab_1.TabPanel, Object.assign({ value: "2", className: classes.tabPanel }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: [1, 2, 3, 4].map((_element, i) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(User_1.UserSkeleton, {}) }, 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" }) }))] })));
28
+ }
29
+ exports.default = EventMembersWidgetSkeleton;
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCEventMembersWidget";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCEventMembersWidget';
@@ -0,0 +1,4 @@
1
+ import EventMembersWidget, { EventMembersWidgetProps } from './EventMembersWidget';
2
+ import EventMembersWidgetSkeleton from './Skeleton';
3
+ export default EventMembersWidget;
4
+ export { EventMembersWidgetSkeleton, type EventMembersWidgetProps };
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventMembersWidgetSkeleton = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const EventMembersWidget_1 = tslib_1.__importDefault(require("./EventMembersWidget"));
6
+ const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
7
+ exports.EventMembersWidgetSkeleton = Skeleton_1.default;
8
+ exports.default = EventMembersWidget_1.default;
@@ -184,7 +184,7 @@ function Events(inProps) {
184
184
  * Renders events list
185
185
  */
186
186
  const filteredEvents = (0, utils_1.sortByAttr)(getFilteredEvents(), 'order');
187
- const c = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [showFilters && ((0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ container: true, className: classes.filters, gap: 2 }, { children: filters ? (filters) : !general && events.length ? ((0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(PastEventsFilter_1.default, { showPastEvents: showPastEvents, handleClick: handleChipPastClick, handleDeleteClick: handleDeletePastClick }) }))) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true, xs: 12, md: 4 }, { children: (0, jsx_runtime_1.jsx)(material_1.TextField, { size: 'small', fullWidth: true, value: search, label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByName", defaultMessage: "ui.events.filterByName" }), variant: "outlined", onChange: handleOnChangeFilterName, disabled: loading }) })), (0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true, xs: 12, md: 2 }, { children: (0, jsx_runtime_1.jsxs)(material_1.FormControl, Object.assign({ fullWidth: true }, { children: [(0, jsx_runtime_1.jsx)(material_1.InputLabel, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByDate", defaultMessage: "ui.events.filterByDate" }) }), (0, jsx_runtime_1.jsx)(material_1.Select, Object.assign({ disabled: showPastEvents, size: 'small', label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByDate", defaultMessage: "ui.events.filterByDate" }), value: dateSearch, onChange: handleOnChangeTimeFrame, renderValue: (selected) => options.find((option) => option.value === selected).label }, { children: options.map((option) => ((0, jsx_runtime_1.jsxs)(material_1.MenuItem, Object.assign({ value: option.value }, { children: [(0, jsx_runtime_1.jsx)(material_1.Radio, { checked: dateSearch === option.value, value: option.value, name: "radio-button-select", inputProps: { 'aria-label': option.label } }), option.label] }), option.value))) }))] })) })), (0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(exports.EventsChipRoot
187
+ const c = ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [showFilters && ((0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ container: true, className: classes.filters, gap: 2 }, { children: filters ? (filters) : !general ? ((0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(PastEventsFilter_1.default, { showPastEvents: showPastEvents, handleClick: handleChipPastClick, handleDeleteClick: handleDeletePastClick, autoHide: !events.length }) }))) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true, xs: 12, md: 4 }, { children: (0, jsx_runtime_1.jsx)(material_1.TextField, { size: 'small', fullWidth: true, value: search, label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByName", defaultMessage: "ui.events.filterByName" }), variant: "outlined", onChange: handleOnChangeFilterName, disabled: loading }) })), (0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true, xs: 12, md: 2 }, { children: (0, jsx_runtime_1.jsxs)(material_1.FormControl, Object.assign({ fullWidth: true }, { children: [(0, jsx_runtime_1.jsx)(material_1.InputLabel, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByDate", defaultMessage: "ui.events.filterByDate" }) }), (0, jsx_runtime_1.jsx)(material_1.Select, Object.assign({ disabled: showPastEvents, size: 'small', label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.events.filterByDate", defaultMessage: "ui.events.filterByDate" }), value: dateSearch, onChange: handleOnChangeTimeFrame, renderValue: (selected) => options.find((option) => option.value === selected).label }, { children: options.map((option) => ((0, jsx_runtime_1.jsxs)(material_1.MenuItem, Object.assign({ value: option.value }, { children: [(0, jsx_runtime_1.jsx)(material_1.Radio, { checked: dateSearch === option.value, value: option.value, name: "radio-button-select", inputProps: { 'aria-label': option.label } }), option.label] }), option.value))) }))] })) })), (0, jsx_runtime_1.jsx)(material_1.Grid, Object.assign({ item: true }, { children: (0, jsx_runtime_1.jsx)(exports.EventsChipRoot
188
188
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
189
189
  // @ts-ignore
190
190
  , {
@@ -1,5 +1,6 @@
1
1
  import { ChipProps } from '@mui/material';
2
2
  export interface PastEventsFilterProps extends ChipProps {
3
+ autoHide?: boolean;
3
4
  showPastEvents: boolean;
4
5
  handleClick: () => void;
5
6
  handleDeleteClick?: () => void;
@@ -7,13 +7,17 @@ const react_intl_1 = require("react-intl");
7
7
  const system_1 = require("@mui/system");
8
8
  const constants_1 = require("./constants");
9
9
  const Events_1 = require("./Events");
10
+ const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
10
11
  function PastEventsFilter(inProps) {
11
12
  // PROPS
12
13
  const props = (0, system_1.useThemeProps)({
13
14
  props: inProps,
14
15
  name: constants_1.PREFIX
15
16
  });
16
- const { showPastEvents, handleClick, handleDeleteClick } = props, rest = tslib_1.__rest(props, ["showPastEvents", "handleClick", "handleDeleteClick"]);
17
+ const { autoHide = false, showPastEvents, handleClick, handleDeleteClick } = props, rest = tslib_1.__rest(props, ["autoHide", "showPastEvents", "handleClick", "handleDeleteClick"]);
18
+ if (autoHide) {
19
+ return (0, jsx_runtime_1.jsx)(HiddenPlaceholder_1.default, {});
20
+ }
17
21
  return ((0, jsx_runtime_1.jsx)(Events_1.EventsChipRoot
18
22
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
19
23
  // @ts-ignore
@@ -0,0 +1,60 @@
1
+ import { SCEventType, SCUserType } from '@selfcommunity/types';
2
+ import { Dispatch, HTMLAttributes, SetStateAction } from 'react';
3
+ export interface InviteEventButtonProps {
4
+ /**
5
+ * Overrides or extends the styles applied to the component.
6
+ * @default null
7
+ */
8
+ className?: HTMLAttributes<HTMLButtonElement>['className'];
9
+ /**
10
+ * Id of the event
11
+ * @default null
12
+ */
13
+ eventId?: number;
14
+ /**
15
+ * Event
16
+ * @default null
17
+ */
18
+ event?: SCEventType;
19
+ /**
20
+ * Id of the user
21
+ * @default null
22
+ */
23
+ userId?: number;
24
+ /**
25
+ * Event
26
+ * @default null
27
+ */
28
+ user?: SCUserType;
29
+ /**
30
+ * setInvitedNumber set state action
31
+ */
32
+ setInvitedNumber?: Dispatch<SetStateAction<number>>;
33
+ /**
34
+ * Others properties
35
+ */
36
+ [p: string]: any;
37
+ }
38
+ /**
39
+ * > API documentation for the Community-JS Invite Event Button component. Learn about the available props and the CSS API.
40
+
41
+ #### Import
42
+
43
+ ```jsx
44
+ import {InviteEventButton} from '@selfcommunity/react-ui';
45
+ ```
46
+
47
+ #### Component Name
48
+
49
+ The name `SCInviteEventButton` can be used when providing style overrides in the theme.
50
+
51
+
52
+ #### CSS
53
+
54
+ |Rule Name|Global class|Description|
55
+ |---|---|---|
56
+ |root|.SCInviteEventButton-root|Styles applied to the root element.|
57
+
58
+ * @param inProps
59
+ */
60
+ export default function InviteEventButton(inProps: InviteEventButtonProps): JSX.Element;
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const lab_1 = require("@mui/lab");
6
+ const styles_1 = require("@mui/material/styles");
7
+ const system_1 = require("@mui/system");
8
+ const api_services_1 = require("@selfcommunity/api-services");
9
+ const react_core_1 = require("@selfcommunity/react-core");
10
+ const utils_1 = require("@selfcommunity/utils");
11
+ const classnames_1 = tslib_1.__importDefault(require("classnames"));
12
+ const react_1 = require("react");
13
+ const react_intl_1 = require("react-intl");
14
+ const Errors_1 = require("../../constants/Errors");
15
+ const PREFIX = 'SCInviteEventButton';
16
+ const classes = {
17
+ root: `${PREFIX}-root`
18
+ };
19
+ const InviteButton = (0, styles_1.styled)(lab_1.LoadingButton, {
20
+ name: PREFIX,
21
+ slot: 'Root',
22
+ overridesResolver: (_props, styles) => styles.root
23
+ })();
24
+ /**
25
+ * > API documentation for the Community-JS Invite Event Button component. Learn about the available props and the CSS API.
26
+
27
+ #### Import
28
+
29
+ ```jsx
30
+ import {InviteEventButton} from '@selfcommunity/react-ui';
31
+ ```
32
+
33
+ #### Component Name
34
+
35
+ The name `SCInviteEventButton` can be used when providing style overrides in the theme.
36
+
37
+
38
+ #### CSS
39
+
40
+ |Rule Name|Global class|Description|
41
+ |---|---|---|
42
+ |root|.SCInviteEventButton-root|Styles applied to the root element.|
43
+
44
+ * @param inProps
45
+ */
46
+ function InviteEventButton(inProps) {
47
+ // PROPS
48
+ const props = (0, system_1.useThemeProps)({
49
+ props: inProps,
50
+ name: PREFIX
51
+ });
52
+ const { className, eventId, event, userId, user, setInvitedNumber } = props, rest = tslib_1.__rest(props, ["className", "eventId", "event", "userId", "user", "setInvitedNumber"]);
53
+ // STATE
54
+ const { scEvent } = (0, react_core_1.useSCFetchEvent)({ id: eventId, event });
55
+ const { scUser } = (0, react_core_1.useSCFetchUser)({ id: userId, user });
56
+ const [invited, setInvited] = (0, react_1.useState)(true);
57
+ const handleInviteAction = (0, react_1.useCallback)(() => {
58
+ setInvited(null);
59
+ if (invited) {
60
+ api_services_1.EventService.removeInviteEvent(scEvent.id, { users: [scUser.id] })
61
+ .then(() => {
62
+ setInvited(!invited);
63
+ setInvitedNumber((prev) => prev - 1);
64
+ })
65
+ .catch((_error) => {
66
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, _error);
67
+ });
68
+ }
69
+ else {
70
+ api_services_1.EventService.inviteOrAcceptEventRequest(scEvent.id, { users: [scUser.id] })
71
+ .then(() => {
72
+ setInvited(!invited);
73
+ setInvitedNumber((prev) => prev + 1);
74
+ })
75
+ .catch((_error) => {
76
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, _error);
77
+ });
78
+ }
79
+ }, [scEvent, scUser]);
80
+ return ((0, jsx_runtime_1.jsx)(InviteButton, Object.assign({ size: "small", variant: "outlined", onClick: handleInviteAction, loading: invited === null, className: (0, classnames_1.default)(classes.root, className) }, rest, { children: invited ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.inviteEventButton.remove", id: "ui.inviteEventButton.remove" })) : ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { defaultMessage: "ui.inviteEventButton.invite", id: "ui.inviteEventButton.invite" })) })));
81
+ }
82
+ exports.default = InviteEventButton;
@@ -0,0 +1,3 @@
1
+ import InviteEventButton, { InviteEventButtonProps } from './InviteEventButton';
2
+ export default InviteEventButton;
3
+ export { InviteEventButtonProps };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const InviteEventButton_1 = tslib_1.__importDefault(require("./InviteEventButton"));
5
+ exports.default = InviteEventButton_1.default;
@@ -0,0 +1,43 @@
1
+ import { SCEventType } from '@selfcommunity/types';
2
+ import { CacheStrategies } from '@selfcommunity/utils';
3
+ import 'swiper/css';
4
+ import { BaseDialogProps } from '../../shared/BaseDialog';
5
+ import { EventProps } from '../Event';
6
+ import { WidgetProps } from '../Widget';
7
+ export interface RelatedEventsWidgetProps extends WidgetProps {
8
+ /**
9
+ * Event Object
10
+ * @default null
11
+ */
12
+ event?: SCEventType;
13
+ /**
14
+ * Id of event object
15
+ * @default null
16
+ */
17
+ eventId?: number;
18
+ /**
19
+ * Props to spread to single event object
20
+ * @default {}
21
+ */
22
+ eventComponentProps?: EventProps;
23
+ /**
24
+ * Feed API Query Params
25
+ * @default [{'limit': 20, 'offset': 0}]
26
+ */
27
+ endpointQueryParams?: Record<string, string | number>;
28
+ /**
29
+ * Caching strategies
30
+ * @default CacheStrategies.CACHE_FIRST
31
+ */
32
+ cacheStrategy?: CacheStrategies;
33
+ /**
34
+ * Props to spread to users suggestion dialog
35
+ * @default {}
36
+ */
37
+ dialogProps?: BaseDialogProps;
38
+ /**
39
+ * Other props
40
+ */
41
+ [p: string]: any;
42
+ }
43
+ export default function RelatedEventsWidget(inProps: RelatedEventsWidgetProps): JSX.Element;
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const material_1 = require("@mui/material");
6
+ const system_1 = require("@mui/system");
7
+ const api_services_1 = require("@selfcommunity/api-services");
8
+ const react_core_1 = require("@selfcommunity/react-core");
9
+ const utils_1 = require("@selfcommunity/utils");
10
+ const react_1 = require("react");
11
+ const react_intl_1 = require("react-intl");
12
+ require("swiper/css");
13
+ const Errors_1 = require("../../constants/Errors");
14
+ const Pagination_1 = require("../../constants/Pagination");
15
+ const BaseDialog_1 = tslib_1.__importDefault(require("../../shared/BaseDialog"));
16
+ const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
17
+ const InfiniteScroll_1 = tslib_1.__importDefault(require("../../shared/InfiniteScroll"));
18
+ const widget_1 = require("../../utils/widget");
19
+ const Event_1 = tslib_1.__importStar(require("../Event"));
20
+ const Widget_1 = tslib_1.__importDefault(require("../Widget"));
21
+ const constants_1 = require("./constants");
22
+ const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
23
+ const messages = (0, react_intl_1.defineMessages)({
24
+ title: {
25
+ id: 'ui.relatedEventsWidget.title',
26
+ defaultMessage: 'ui.relatedEventsWidget.title'
27
+ }
28
+ });
29
+ const classes = {
30
+ root: `${constants_1.PREFIX}-root`,
31
+ content: `${constants_1.PREFIX}-content`,
32
+ avatarWrapper: `${constants_1.PREFIX}-avatar-wrapper`,
33
+ avatar: `${constants_1.PREFIX}-avatar`,
34
+ eventWrapper: `${constants_1.PREFIX}-event-wrapper`,
35
+ event: `${constants_1.PREFIX}-event`,
36
+ actions: `${constants_1.PREFIX}-actions`,
37
+ actionButton: `${constants_1.PREFIX}-action-button`,
38
+ dialogRoot: `${constants_1.PREFIX}-dialog-root`,
39
+ infiniteScroll: `${constants_1.PREFIX}-infinite-scroll`,
40
+ endMessage: `${constants_1.PREFIX}-end-message`
41
+ };
42
+ const Root = (0, system_1.styled)(Widget_1.default, {
43
+ name: constants_1.PREFIX,
44
+ slot: 'Root',
45
+ overridesResolver: (_props, styles) => styles.root
46
+ })();
47
+ const DialogRoot = (0, system_1.styled)(BaseDialog_1.default, {
48
+ name: constants_1.PREFIX,
49
+ slot: 'DialogRoot',
50
+ overridesResolver: (_props, styles) => styles.dialogRoot
51
+ })();
52
+ function RelatedEventsWidget(inProps) {
53
+ var _a;
54
+ // PROPS
55
+ const props = (0, material_1.useThemeProps)({
56
+ props: inProps,
57
+ name: constants_1.PREFIX
58
+ });
59
+ const { event, eventId, eventComponentProps = { elevation: 0, square: true }, endpointQueryParams = { limit: Pagination_1.DEFAULT_PAGINATION_LIMIT, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, cacheStrategy, dialogProps } = props, rest = tslib_1.__rest(props, ["event", "eventId", "eventComponentProps", "endpointQueryParams", "cacheStrategy", "dialogProps"]);
60
+ // STATE
61
+ const [state, dispatch] = (0, react_1.useReducer)(widget_1.dataWidgetReducer, {
62
+ isLoadingNext: false,
63
+ next: null,
64
+ cacheKey: react_core_1.SCCache.getWidgetStateCacheKey(react_core_1.SCCache.USER_EVENTS_STATE_CACHE_PREFIX_KEY),
65
+ cacheStrategy,
66
+ visibleItems: Pagination_1.DEFAULT_PAGINATION_LIMIT
67
+ }, widget_1.stateWidgetInitializer);
68
+ const [openDialog, setOpenDialog] = (0, react_1.useState)(false);
69
+ // CONTEXT
70
+ const scUserContext = (0, react_core_1.useSCUser)();
71
+ const scRoutingContext = (0, react_core_1.useSCRouting)();
72
+ // HOOKS
73
+ const intl = (0, react_intl_1.useIntl)();
74
+ const { scEvent } = (0, react_core_1.useSCFetchEvent)({ id: eventId, event });
75
+ const _initComponent = (0, react_1.useCallback)(() => {
76
+ if (!state.initialized && !state.isLoadingNext) {
77
+ dispatch({ type: widget_1.actionWidgetTypes.LOADING_NEXT });
78
+ api_services_1.EventService.getEventRelated(scEvent.id, Object.assign({ created_by: scEvent.managed_by.id }, endpointQueryParams))
79
+ .then((payload) => {
80
+ dispatch({ type: widget_1.actionWidgetTypes.LOAD_NEXT_SUCCESS, payload: Object.assign(Object.assign({}, payload), { initialized: true }) });
81
+ })
82
+ .catch((error) => {
83
+ dispatch({ type: widget_1.actionWidgetTypes.LOAD_NEXT_FAILURE, payload: { errorLoadNext: error } });
84
+ utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
85
+ });
86
+ }
87
+ }, [state.isLoadingNext, state.initialized, dispatch, scEvent]);
88
+ // EFFECTS
89
+ (0, react_1.useEffect)(() => {
90
+ let _t;
91
+ if (scUserContext.user && scEvent) {
92
+ _t = setTimeout(_initComponent);
93
+ return () => {
94
+ clearTimeout(_t);
95
+ };
96
+ }
97
+ }, [scUserContext.user, scEvent]);
98
+ // HANDLERS
99
+ /**
100
+ * Handles pagination
101
+ */
102
+ const handleNext = (0, react_1.useCallback)(() => {
103
+ dispatch({ type: widget_1.actionWidgetTypes.LOADING_NEXT });
104
+ api_services_1.http
105
+ .request({
106
+ url: state.next,
107
+ method: api_services_1.Endpoints.EventSuggestion.method
108
+ })
109
+ .then((res) => {
110
+ dispatch({ type: widget_1.actionWidgetTypes.LOAD_NEXT_SUCCESS, payload: res.data });
111
+ });
112
+ }, [dispatch, state.next, state.isLoadingNext, state.initialized]);
113
+ const handleToggleDialogOpen = (0, react_1.useCallback)(() => {
114
+ setOpenDialog((prev) => !prev);
115
+ }, []);
116
+ if (!scEvent && !state.initialized) {
117
+ return (0, jsx_runtime_1.jsx)(Skeleton_1.default, {});
118
+ }
119
+ // RENDER
120
+ if (!scEvent) {
121
+ return (0, jsx_runtime_1.jsx)(HiddenPlaceholder_1.default, {});
122
+ }
123
+ 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.jsxs)(material_1.Button, Object.assign({ component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, { id: (_a = scUserContext.user) === null || _a === void 0 ? void 0 : _a.id }), className: classes.avatarWrapper }, { children: [(0, jsx_runtime_1.jsx)(material_1.Avatar, { variant: "rounded", src: scEvent.managed_by.avatar, alt: scEvent.managed_by.username, className: classes.avatar }), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "h3" }, { children: intl.formatMessage(messages.title, { user: scEvent.managed_by.username }) }))] })), (0, jsx_runtime_1.jsx)(material_1.Stack, Object.assign({ className: classes.eventWrapper }, { children: state === null || state === void 0 ? void 0 : state.results.map((_event, i, array) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Event_1.default, Object.assign({ event: _event, eventId: _event.id }, eventComponentProps, { className: classes.event }), i), i < array.length - 1 && (0, jsx_runtime_1.jsx)(material_1.Divider, {})] }))) }))] })), state.count > state.visibleItems && ((0, jsx_runtime_1.jsx)(material_1.CardActions, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(material_1.Button, Object.assign({ onClick: handleToggleDialogOpen, 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.relatedEventsWidget.showAll", defaultMessage: "ui.relatedEventsWidget.showAll" }) })) })) }))), openDialog && ((0, jsx_runtime_1.jsx)(DialogRoot, Object.assign({ className: classes.dialogRoot, title: intl.formatMessage(messages.title, { user: scEvent.managed_by.username }), onClose: handleToggleDialogOpen, open: openDialog }, dialogProps, { children: (0, jsx_runtime_1.jsx)(InfiniteScroll_1.default, Object.assign({ dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: (0, jsx_runtime_1.jsx)(Event_1.EventSkeleton, Object.assign({ elevation: 0 }, eventComponentProps)), className: classes.infiniteScroll, endMessage: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ className: classes.endMessage }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.relatedEventsWidget.noMoreResults", defaultMessage: "ui.eventMembersWidget.noMoreResults" }) })) }, { children: (0, jsx_runtime_1.jsx)(material_1.List, { children: state.results.map((event) => ((0, jsx_runtime_1.jsx)(material_1.ListItem, { children: (0, jsx_runtime_1.jsx)(Event_1.default, Object.assign({ elevation: 0, event: event }, eventComponentProps)) }, event.id))) }) })) })))] })));
124
+ }
125
+ exports.default = RelatedEventsWidget;
@@ -0,0 +1,2 @@
1
+ import 'swiper/css';
2
+ export default function RelatedEventsWidgetSkeleton(): JSX.Element;