@selfcommunity/react-ui 0.7.50-events.38 → 0.7.50-events.40
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/lib/cjs/components/BottomNavigation/BottomNavigation.js +14 -5
- package/lib/cjs/components/CreateEventButton/CreateEventButton.js +6 -7
- package/lib/cjs/components/EditEventButton/EditEventButton.d.ts +43 -0
- package/lib/cjs/components/EditEventButton/EditEventButton.js +61 -0
- package/lib/cjs/components/EditEventButton/index.d.ts +3 -0
- package/lib/cjs/components/EditEventButton/index.js +5 -0
- package/lib/cjs/components/EventForm/EventAddress.d.ts +2 -1
- package/lib/cjs/components/EventForm/EventAddress.js +4 -4
- package/lib/cjs/components/EventForm/EventForm.d.ts +6 -0
- package/lib/cjs/components/EventForm/EventForm.js +51 -25
- package/lib/cjs/components/EventForm/UploadEventCover.d.ts +10 -0
- package/lib/cjs/components/EventForm/UploadEventCover.js +34 -7
- package/lib/cjs/components/EventHeader/EventHeader.d.ts +67 -0
- package/lib/cjs/components/EventHeader/EventHeader.js +175 -0
- package/lib/cjs/components/EventHeader/Skeleton.d.ts +25 -0
- package/lib/cjs/components/EventHeader/Skeleton.js +56 -0
- package/lib/cjs/components/EventHeader/constants.d.ts +1 -0
- package/lib/cjs/components/EventHeader/constants.js +4 -0
- package/lib/cjs/components/EventHeader/index.d.ts +4 -0
- package/lib/cjs/components/EventHeader/index.js +8 -0
- package/lib/cjs/components/EventInfoWidget/EventInfoWidget.d.ts +24 -0
- package/lib/cjs/components/EventInfoWidget/EventInfoWidget.js +74 -0
- package/lib/cjs/components/EventInfoWidget/constants.d.ts +1 -0
- package/lib/cjs/components/EventInfoWidget/constants.js +4 -0
- package/lib/cjs/components/EventInfoWidget/index.d.ts +3 -0
- package/lib/cjs/components/EventInfoWidget/index.js +6 -0
- package/lib/cjs/components/EventInviteButton/EventInviteButton.js +11 -11
- package/lib/cjs/components/EventLocationWidget/EventLocationWidget.js +1 -0
- package/lib/cjs/components/EventSubscribeButton/EventSubscribeButton.d.ts +56 -0
- package/lib/cjs/components/EventSubscribeButton/EventSubscribeButton.js +193 -0
- package/lib/cjs/components/EventSubscribeButton/index.d.ts +3 -0
- package/lib/cjs/components/EventSubscribeButton/index.js +5 -0
- package/lib/cjs/components/Events/Events.js +12 -11
- package/lib/cjs/components/FeedObject/FeedObject.js +1 -1
- package/lib/cjs/components/NavigationToolbar/NavigationToolbar.d.ts +2 -0
- package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +9 -1
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +12 -2
- package/lib/cjs/components/User/User.d.ts +2 -1
- package/lib/cjs/components/User/User.js +9 -9
- package/lib/cjs/constants/PubSub.d.ts +5 -1
- package/lib/cjs/index.d.ts +104 -100
- package/lib/cjs/index.js +270 -260
- package/lib/cjs/shared/Bullet/index.js +1 -2
- package/lib/cjs/shared/Calendar/index.d.ts +1 -2
- package/lib/cjs/shared/Calendar/index.js +3 -5
- package/lib/cjs/shared/EventInfoDetails/index.d.ts +6 -0
- package/lib/cjs/shared/EventInfoDetails/index.js +67 -0
- package/lib/esm/components/BottomNavigation/BottomNavigation.js +14 -5
- package/lib/esm/components/CreateEventButton/CreateEventButton.js +6 -7
- package/lib/esm/components/EditEventButton/EditEventButton.d.ts +43 -0
- package/lib/esm/components/EditEventButton/EditEventButton.js +58 -0
- package/lib/esm/components/EditEventButton/index.d.ts +3 -0
- package/lib/esm/components/EditEventButton/index.js +2 -0
- package/lib/esm/components/EventForm/EventAddress.d.ts +2 -1
- package/lib/esm/components/EventForm/EventAddress.js +4 -4
- package/lib/esm/components/EventForm/EventForm.d.ts +6 -0
- package/lib/esm/components/EventForm/EventForm.js +51 -25
- package/lib/esm/components/EventForm/UploadEventCover.d.ts +10 -0
- package/lib/esm/components/EventForm/UploadEventCover.js +34 -7
- package/lib/esm/components/EventHeader/EventHeader.d.ts +67 -0
- package/lib/esm/components/EventHeader/EventHeader.js +172 -0
- package/lib/esm/components/EventHeader/Skeleton.d.ts +25 -0
- package/lib/esm/components/EventHeader/Skeleton.js +53 -0
- package/lib/esm/components/EventHeader/constants.d.ts +1 -0
- package/lib/esm/components/EventHeader/constants.js +1 -0
- package/lib/esm/components/EventHeader/index.d.ts +4 -0
- package/lib/esm/components/EventHeader/index.js +4 -0
- package/lib/esm/components/EventInfoWidget/EventInfoWidget.d.ts +24 -0
- package/lib/esm/components/EventInfoWidget/EventInfoWidget.js +71 -0
- package/lib/esm/components/EventInfoWidget/constants.d.ts +1 -0
- package/lib/esm/components/EventInfoWidget/constants.js +1 -0
- package/lib/esm/components/EventInfoWidget/index.d.ts +3 -0
- package/lib/esm/components/EventInfoWidget/index.js +3 -0
- package/lib/esm/components/EventInviteButton/EventInviteButton.js +11 -11
- package/lib/esm/components/EventLocationWidget/EventLocationWidget.js +1 -0
- package/lib/esm/components/EventSubscribeButton/EventSubscribeButton.d.ts +56 -0
- package/lib/esm/components/EventSubscribeButton/EventSubscribeButton.js +190 -0
- package/lib/esm/components/EventSubscribeButton/index.d.ts +3 -0
- package/lib/esm/components/EventSubscribeButton/index.js +2 -0
- package/lib/esm/components/Events/Events.js +12 -11
- package/lib/esm/components/FeedObject/FeedObject.js +1 -1
- package/lib/esm/components/NavigationToolbar/NavigationToolbar.d.ts +2 -0
- package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +9 -1
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +13 -3
- package/lib/esm/components/User/User.d.ts +2 -1
- package/lib/esm/components/User/User.js +9 -9
- package/lib/esm/constants/PubSub.d.ts +5 -1
- package/lib/esm/index.d.ts +104 -100
- package/lib/esm/index.js +109 -105
- package/lib/esm/shared/Bullet/index.js +0 -1
- package/lib/esm/shared/Calendar/index.d.ts +1 -2
- package/lib/esm/shared/Calendar/index.js +0 -1
- package/lib/esm/shared/EventInfoDetails/index.d.ts +6 -0
- package/lib/esm/shared/EventInfoDetails/index.js +64 -0
- package/lib/umd/84.js +2 -0
- package/lib/umd/react-ui.js +1 -1
- package/package.json +8 -7
- package/lib/umd/204.js +0 -2
- /package/lib/umd/{204.js.LICENSE.txt → 84.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
+
const styles_1 = require("@mui/material/styles");
|
|
6
|
+
const utils_1 = require("@selfcommunity/utils");
|
|
7
|
+
const react_core_1 = require("@selfcommunity/react-core");
|
|
8
|
+
const types_1 = require("@selfcommunity/types");
|
|
9
|
+
const react_intl_1 = require("react-intl");
|
|
10
|
+
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
11
|
+
const system_1 = require("@mui/system");
|
|
12
|
+
const Errors_1 = require("../../constants/Errors");
|
|
13
|
+
const material_1 = require("@mui/material");
|
|
14
|
+
const lab_1 = require("@mui/lab");
|
|
15
|
+
const PREFIX = 'SCEventSubscribeButton';
|
|
16
|
+
const classes = {
|
|
17
|
+
requestRoot: `${PREFIX}-request-root`,
|
|
18
|
+
selectRoot: `${PREFIX}-select-root`,
|
|
19
|
+
drawerRoot: `${PREFIX}-drawer-root`,
|
|
20
|
+
menuRoot: `${PREFIX}-menu-root`,
|
|
21
|
+
paper: `${PREFIX}-paper`,
|
|
22
|
+
item: `${PREFIX}-item`,
|
|
23
|
+
going: `${PREFIX}-going`,
|
|
24
|
+
notGoing: `${PREFIX}-not-going`
|
|
25
|
+
};
|
|
26
|
+
const options = [
|
|
27
|
+
{
|
|
28
|
+
value: types_1.SCEventSubscriptionStatusType.GOING,
|
|
29
|
+
label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventSubscribeButton.going", defaultMessage: "ui.eventSubscribeButton.going" })
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: types_1.SCEventSubscriptionStatusType.NOT_GOING,
|
|
33
|
+
label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.eventSubscribeButton.notGoing", defaultMessage: "ui.eventSubscribeButton.notGoing" })
|
|
34
|
+
}
|
|
35
|
+
];
|
|
36
|
+
const RequestRoot = (0, styles_1.styled)(lab_1.LoadingButton, {
|
|
37
|
+
name: PREFIX,
|
|
38
|
+
slot: 'RequestRoot'
|
|
39
|
+
})(() => ({}));
|
|
40
|
+
const SelectRoot = (0, styles_1.styled)(material_1.Button, {
|
|
41
|
+
name: PREFIX,
|
|
42
|
+
slot: 'SelectRoot'
|
|
43
|
+
})(() => ({}));
|
|
44
|
+
const SwipeableDrawerRoot = (0, styles_1.styled)(material_1.SwipeableDrawer, {
|
|
45
|
+
name: PREFIX,
|
|
46
|
+
slot: 'DrawerRoot'
|
|
47
|
+
})(() => ({}));
|
|
48
|
+
const MenuRoot = (0, styles_1.styled)(material_1.Menu, {
|
|
49
|
+
name: PREFIX,
|
|
50
|
+
slot: 'MenuRoot'
|
|
51
|
+
})(() => ({}));
|
|
52
|
+
/**
|
|
53
|
+
* > API documentation for the Community-JS Event Subscribe Button component. Learn about the available props and the CSS API.
|
|
54
|
+
|
|
55
|
+
#### Import
|
|
56
|
+
|
|
57
|
+
```jsx
|
|
58
|
+
import {EventSubscribeButton} from '@selfcommunity/react-ui';
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
#### Component Name
|
|
62
|
+
|
|
63
|
+
The name `SCEventSubscribeButton` can be used when providing style overrides in the theme.
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
#### CSS
|
|
67
|
+
|
|
68
|
+
|Rule Name|Global class|Description|
|
|
69
|
+
|---|---|---|
|
|
70
|
+
|root|.SCEventSubscribeButton-root|Styles applied to the root element.|
|
|
71
|
+
|
|
72
|
+
* @param inProps
|
|
73
|
+
*/
|
|
74
|
+
function EventSubscribeButton(inProps) {
|
|
75
|
+
var _a;
|
|
76
|
+
// PROPS
|
|
77
|
+
const props = (0, system_1.useThemeProps)({
|
|
78
|
+
props: inProps,
|
|
79
|
+
name: PREFIX
|
|
80
|
+
});
|
|
81
|
+
const { className, eventId, event, user, onSubscribe } = props, rest = tslib_1.__rest(props, ["className", "eventId", "event", "user", "onSubscribe"]);
|
|
82
|
+
// STATE
|
|
83
|
+
const [status, setStatus] = (0, react_1.useState)(null);
|
|
84
|
+
const [anchorEl, setAnchorEl] = react_1.default.useState(null);
|
|
85
|
+
const open = Boolean(anchorEl);
|
|
86
|
+
// CONTEXT
|
|
87
|
+
const scContext = (0, react_core_1.useSCContext)();
|
|
88
|
+
const scUserContext = (0, react_core_1.useSCUser)();
|
|
89
|
+
const scEventsManager = scUserContext.managers.events;
|
|
90
|
+
const theme = (0, material_1.useTheme)();
|
|
91
|
+
const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
|
|
92
|
+
// CONST
|
|
93
|
+
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
94
|
+
const { scEvent } = (0, react_core_1.useSCFetchEvent)({
|
|
95
|
+
id: eventId,
|
|
96
|
+
event,
|
|
97
|
+
cacheStrategy: authUserId ? utils_1.CacheStrategies.CACHE_FIRST : utils_1.CacheStrategies.STALE_WHILE_REVALIDATE
|
|
98
|
+
});
|
|
99
|
+
const isEventAdmin = (0, react_1.useMemo)(() => { var _a; return scUserContext.user && ((_a = scEvent === null || scEvent === void 0 ? void 0 : scEvent.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scEvent === null || scEvent === void 0 ? void 0 : scEvent.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
|
|
100
|
+
// HANDLERS
|
|
101
|
+
const handleOpen = (event) => {
|
|
102
|
+
setAnchorEl(event.currentTarget);
|
|
103
|
+
};
|
|
104
|
+
const handleClose = () => {
|
|
105
|
+
setAnchorEl(null);
|
|
106
|
+
};
|
|
107
|
+
(0, react_1.useEffect)(() => {
|
|
108
|
+
/**
|
|
109
|
+
* Call scEventsManager.subscriptionStatus inside an effect
|
|
110
|
+
* to avoid warning rendering child during update parent state
|
|
111
|
+
*/
|
|
112
|
+
if (authUserId) {
|
|
113
|
+
setStatus(scEventsManager === null || scEventsManager === void 0 ? void 0 : scEventsManager.subscriptionStatus(scEvent));
|
|
114
|
+
}
|
|
115
|
+
}, [authUserId, scEventsManager === null || scEventsManager === void 0 ? void 0 : scEventsManager.subscriptionStatus, scEvent]);
|
|
116
|
+
const toggleGoingToEvent = (user) => {
|
|
117
|
+
scEventsManager
|
|
118
|
+
.toggleEventAttendance(scEvent, user === null || user === void 0 ? void 0 : user.id)
|
|
119
|
+
.then(() => {
|
|
120
|
+
const _status = scEvent.privacy === types_1.SCEventPrivacyType.PRIVATE && scEvent.subscription_status !== types_1.SCEventSubscriptionStatusType.INVITED
|
|
121
|
+
? types_1.SCEventSubscriptionStatusType.REQUESTED
|
|
122
|
+
: scEvent.subscription_status === types_1.SCEventSubscriptionStatusType.GOING
|
|
123
|
+
? types_1.SCEventSubscriptionStatusType.SUBSCRIBED
|
|
124
|
+
: types_1.SCEventSubscriptionStatusType.GOING;
|
|
125
|
+
onSubscribe && onSubscribe(scEvent, _status);
|
|
126
|
+
})
|
|
127
|
+
.catch((e) => {
|
|
128
|
+
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
const toggleNotGoingToEvent = () => {
|
|
132
|
+
scEventsManager
|
|
133
|
+
.toggleEventNonattendance(scEvent)
|
|
134
|
+
.then(() => {
|
|
135
|
+
const _status = scEvent.subscription_status === types_1.SCEventSubscriptionStatusType.NOT_GOING
|
|
136
|
+
? types_1.SCEventSubscriptionStatusType.SUBSCRIBED
|
|
137
|
+
: types_1.SCEventSubscriptionStatusType.NOT_GOING;
|
|
138
|
+
onSubscribe && onSubscribe(scEvent, _status);
|
|
139
|
+
})
|
|
140
|
+
.catch((e) => {
|
|
141
|
+
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
const handleToggleAction = (event) => {
|
|
145
|
+
const _status = event.target.value;
|
|
146
|
+
setAnchorEl(null);
|
|
147
|
+
if (!scUserContext.user) {
|
|
148
|
+
scContext.settings.handleAnonymousAction();
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
(_status === types_1.SCEventSubscriptionStatusType.NOT_GOING && !(user === null || user === void 0 ? void 0 : user.id)) || (!_status && (user === null || user === void 0 ? void 0 : user.id)) ? toggleNotGoingToEvent() : toggleGoingToEvent();
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
function renderMenuItems() {
|
|
155
|
+
return (react_1.default.createElement(material_1.Box, null, options.map((option) => (react_1.default.createElement(material_1.MenuItem, { key: option.value, className: classes.item },
|
|
156
|
+
option.label,
|
|
157
|
+
react_1.default.createElement(material_1.Checkbox, { size: "small", checked: status === option.value, value: option.value, onChange: handleToggleAction, name: `${option.value}-option`, inputProps: { 'aria-label': `${option.label}` } }))))));
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get current translated status
|
|
161
|
+
*/
|
|
162
|
+
const getStatus = (0, react_1.useMemo)(() => {
|
|
163
|
+
let _status;
|
|
164
|
+
switch (status) {
|
|
165
|
+
case types_1.SCEventSubscriptionStatusType.REQUESTED:
|
|
166
|
+
_status = react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.waitingApproval", id: "ui.eventSubscribeButton.waitingApproval" });
|
|
167
|
+
break;
|
|
168
|
+
case types_1.SCEventSubscriptionStatusType.GOING:
|
|
169
|
+
_status = react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.going", id: "ui.eventSubscribeButton.going" });
|
|
170
|
+
break;
|
|
171
|
+
case types_1.SCEventSubscriptionStatusType.INVITED:
|
|
172
|
+
_status = react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.accept", id: "ui.eventSubscribeButton.accept" });
|
|
173
|
+
break;
|
|
174
|
+
case types_1.SCEventSubscriptionStatusType.NOT_GOING:
|
|
175
|
+
_status = react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.notGoing", id: "ui.eventSubscribeButton.notGoing" });
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
(scEvent === null || scEvent === void 0 ? void 0 : scEvent.privacy) === types_1.SCEventPrivacyType.PUBLIC
|
|
179
|
+
? (_status = react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.label", id: "ui.eventSubscribeButton.label" }))
|
|
180
|
+
: (_status = (react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.eventSubscribeButton.requestParticipation", id: "ui.eventSubscribeButton.requestParticipation" })));
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
return _status;
|
|
184
|
+
}, [status, scEvent]);
|
|
185
|
+
if (!scEvent || (isEventAdmin && (user === null || user === void 0 ? void 0 : user.id) === scUserContext.user.id) || (isEventAdmin && !(user === null || user === void 0 ? void 0 : user.id))) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
return (react_1.default.createElement(react_1.default.Fragment, null, (scEvent === null || scEvent === void 0 ? void 0 : scEvent.privacy) !== types_1.SCEventPrivacyType.PRIVATE ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
189
|
+
react_1.default.createElement(SelectRoot, Object.assign({ className: (0, classnames_1.default)(classes.selectRoot, className, { [classes.going]: status && status === types_1.SCEventSubscriptionStatusType.GOING }, { [classes.notGoing]: status && status === types_1.SCEventSubscriptionStatusType.NOT_GOING }), onClick: handleOpen, endIcon: react_1.default.createElement(material_1.Icon, null, open ? 'expand_less' : 'expand_more'), startIcon: status &&
|
|
190
|
+
status !== types_1.SCEventSubscriptionStatusType.SUBSCRIBED && (react_1.default.createElement(material_1.Icon, null, status === types_1.SCEventSubscriptionStatusType.GOING ? 'circle_checked' : 'circle_closed')) }, rest), getStatus),
|
|
191
|
+
isMobile ? (react_1.default.createElement(SwipeableDrawerRoot, { className: classes.drawerRoot, PaperProps: { className: classes.paper }, open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderMenuItems())) : (react_1.default.createElement(MenuRoot, { className: classes.menuRoot, anchorEl: anchorEl, open: open, onClose: handleClose }, renderMenuItems())))) : (react_1.default.createElement(RequestRoot, Object.assign({ className: (0, classnames_1.default)(classes.requestRoot, className), variant: "outlined", size: "small", loading: scUserContext.user ? scEventsManager.isLoading(scEvent) : null, disabled: status === types_1.SCEventSubscriptionStatusType.REQUESTED }, rest), getStatus))));
|
|
192
|
+
}
|
|
193
|
+
exports.default = EventSubscribeButton;
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
-
const styles_1 = require("@mui/material/styles");
|
|
6
4
|
const material_1 = require("@mui/material");
|
|
5
|
+
const styles_1 = require("@mui/material/styles");
|
|
6
|
+
const system_1 = require("@mui/system");
|
|
7
7
|
const api_services_1 = require("@selfcommunity/api-services");
|
|
8
8
|
const react_core_1 = require("@selfcommunity/react-core");
|
|
9
9
|
const types_1 = require("@selfcommunity/types");
|
|
10
|
-
const
|
|
11
|
-
const react_intl_1 = require("react-intl");
|
|
10
|
+
const utils_1 = require("@selfcommunity/utils");
|
|
12
11
|
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
13
|
-
const
|
|
12
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
13
|
+
const react_intl_1 = require("react-intl");
|
|
14
14
|
const Errors_1 = require("../../constants/Errors");
|
|
15
|
-
const utils_1 = require("@selfcommunity/utils");
|
|
16
|
-
const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
|
|
17
|
-
const constants_1 = require("./constants");
|
|
18
|
-
const Skeleton_1 = tslib_1.__importDefault(require("../Events/Skeleton"));
|
|
19
15
|
const Pagination_1 = require("../../constants/Pagination");
|
|
16
|
+
const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
|
|
20
17
|
const CreateEventButton_1 = tslib_1.__importDefault(require("../CreateEventButton"));
|
|
18
|
+
const Event_1 = tslib_1.__importStar(require("../Event"));
|
|
19
|
+
const Skeleton_1 = tslib_1.__importDefault(require("../Events/Skeleton"));
|
|
20
|
+
const constants_1 = require("./constants");
|
|
21
21
|
const classes = {
|
|
22
22
|
root: `${constants_1.PREFIX}-root`,
|
|
23
23
|
filters: `${constants_1.PREFIX}-filters`,
|
|
@@ -76,7 +76,7 @@ function Events(inProps) {
|
|
|
76
76
|
props: inProps,
|
|
77
77
|
name: constants_1.PREFIX
|
|
78
78
|
});
|
|
79
|
-
const { endpointQueryParams = { limit: 8, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, className, EventComponentProps = {}, showFilters = false, filters, general =
|
|
79
|
+
const { endpointQueryParams = { limit: 8, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, className, EventComponentProps = {}, showFilters = false, filters, general = false } = props, rest = tslib_1.__rest(props, ["endpointQueryParams", "className", "EventComponentProps", "showFilters", "filters", "general"]);
|
|
80
80
|
// STATE
|
|
81
81
|
const [events, setEvents] = (0, react_1.useState)([]);
|
|
82
82
|
const [loading, setLoading] = (0, react_1.useState)(true);
|
|
@@ -213,7 +213,8 @@ function Events(inProps) {
|
|
|
213
213
|
filteredEvents.map((event) => (react_1.default.createElement(material_1.Grid, { item: true, xs: 12, sm: 8, md: 6, key: event.id, className: classes.item },
|
|
214
214
|
react_1.default.createElement(Event_1.default, Object.assign({ event: event, eventId: event.id }, EventComponentProps))))),
|
|
215
215
|
filteredEvents.length <= 3 && (react_1.default.createElement(material_1.Grid, { item: true, xs: 12, sm: 8, md: 6, key: 'skeleton-item', className: classes.itemSkeleton },
|
|
216
|
-
react_1.default.createElement(Event_1.EventSkeleton, { action: react_1.default.createElement(CreateEventButton_1.default,
|
|
216
|
+
react_1.default.createElement(Event_1.EventSkeleton, { action: react_1.default.createElement(CreateEventButton_1.default, { variant: "outlined", color: "primary", size: "small" },
|
|
217
|
+
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.events.skeleton.action.add", defaultMessage: "ui.events.skeleton.action.add" })) }))))),
|
|
217
218
|
Boolean(next) && (react_1.default.createElement(material_1.Button, { color: "secondary", variant: "text", onClick: handleNext, className: classes.showMore },
|
|
218
219
|
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.events.button.seeMore", defaultMessage: "ui.events.button.seeMore" }))))))));
|
|
219
220
|
/**
|
|
@@ -440,7 +440,7 @@ function FeedObject(inProps) {
|
|
|
440
440
|
obj.group && (react_1.default.createElement("div", { className: classes.group },
|
|
441
441
|
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
442
442
|
obj.event && (react_1.default.createElement("div", { className: classes.event },
|
|
443
|
-
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, icon: react_1.default.createElement(Icon_1.default, null, "CalendarIcon"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
443
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.event.id, label: obj.event.name, icon: react_1.default.createElement(Icon_1.default, null, "CalendarIcon"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, obj.event), clickable: true })))),
|
|
444
444
|
obj.categories.map((c) => (react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
445
445
|
react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
|
|
446
446
|
obj.group && !obj.categories.length && (react_1.default.createElement("div", { className: classes.group },
|
|
@@ -85,6 +85,8 @@ export interface NavigationToolbarProps extends ToolbarProps {
|
|
|
85
85
|
|navigation|.SCNavigationToolbar-navigation|Styles applied to the navigation container element|
|
|
86
86
|
|home|.SCNavigationToolbar-home|Styles applied to the home button|
|
|
87
87
|
|explore|.SCNavigationToolbar-explore|Styles applied to the explore button|
|
|
88
|
+
|groups|.SCNavigationToolbar-groups|Styles applied to the group button|
|
|
89
|
+
|events|.SCNavigationToolbar-events|Styles applied to the event button|
|
|
88
90
|
|search|.SCNavigationToolbar-search|Styles applied to the search component|
|
|
89
91
|
|composer|.SCNavigationToolbar-composer|Styles applied to the composer component|
|
|
90
92
|
|profile|.SCNavigationToolbar-profile|Styles applied to the profile button|
|
|
@@ -24,6 +24,7 @@ const classes = {
|
|
|
24
24
|
navigation: `${constants_1.PREFIX}-navigation`,
|
|
25
25
|
home: `${constants_1.PREFIX}-home`,
|
|
26
26
|
explore: `${constants_1.PREFIX}-explore`,
|
|
27
|
+
events: `${constants_1.PREFIX}-events`,
|
|
27
28
|
groups: `${constants_1.PREFIX}-groups`,
|
|
28
29
|
search: `${constants_1.PREFIX}-search`,
|
|
29
30
|
composer: `${constants_1.PREFIX}-composer`,
|
|
@@ -76,6 +77,8 @@ const PREFERENCES = [
|
|
|
76
77
|
|navigation|.SCNavigationToolbar-navigation|Styles applied to the navigation container element|
|
|
77
78
|
|home|.SCNavigationToolbar-home|Styles applied to the home button|
|
|
78
79
|
|explore|.SCNavigationToolbar-explore|Styles applied to the explore button|
|
|
80
|
+
|groups|.SCNavigationToolbar-groups|Styles applied to the group button|
|
|
81
|
+
|events|.SCNavigationToolbar-events|Styles applied to the event button|
|
|
79
82
|
|search|.SCNavigationToolbar-search|Styles applied to the search component|
|
|
80
83
|
|composer|.SCNavigationToolbar-composer|Styles applied to the composer component|
|
|
81
84
|
|profile|.SCNavigationToolbar-profile|Styles applied to the profile button|
|
|
@@ -107,6 +110,7 @@ function NavigationToolbar(inProps) {
|
|
|
107
110
|
}, [scPreferences.preferences]);
|
|
108
111
|
const privateMessagingEnabled = (0, react_1.useMemo)(() => scPreferences.features.includes(types_1.SCFeatureName.PRIVATE_MESSAGING), [scPreferences.features]);
|
|
109
112
|
const groupsEnabled = (0, react_1.useMemo)(() => scPreferences.features && scPreferences.features.includes(types_1.SCFeatureName.GROUPING) && scPreferences.features.includes(types_1.SCFeatureName.TAGGING), [scPreferences.features]);
|
|
113
|
+
const eventsEnabled = (0, react_1.useMemo)(() => scPreferences.features && scPreferences.features.includes(types_1.SCFeatureName.EVENT) && scPreferences.features.includes(types_1.SCFeatureName.TAGGING), [scPreferences.features]);
|
|
110
114
|
const showComposer = (0, react_1.useMemo)(() => {
|
|
111
115
|
return (!disableComposer &&
|
|
112
116
|
(!scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value || react_core_1.UserUtils.isStaff(scUserContext.user)));
|
|
@@ -136,7 +140,11 @@ function NavigationToolbar(inProps) {
|
|
|
136
140
|
[classes.active]: value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {})) ||
|
|
137
141
|
value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.GROUPS_ROUTE_NAME, {}))
|
|
138
142
|
}), "aria-label": "Groups", to: scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), component: react_core_1.Link },
|
|
139
|
-
react_1.default.createElement(Icon_1.default, null, "groups")))
|
|
143
|
+
react_1.default.createElement(Icon_1.default, null, "groups"))),
|
|
144
|
+
eventsEnabled && scUserContext.user && (react_1.default.createElement(material_1.IconButton, { className: (0, classnames_1.default)(classes.events, {
|
|
145
|
+
[classes.active]: value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, {}))
|
|
146
|
+
}), "aria-label": "Groups", to: scRoutingContext.url(react_core_1.SCRoutes.EVENTS_ROUTE_NAME, {}), component: react_core_1.Link },
|
|
147
|
+
react_1.default.createElement(Icon_1.default, null, "CalendarIcon")))));
|
|
140
148
|
return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root) }, rest),
|
|
141
149
|
react_1.default.createElement(NavigationMenuIconButtonComponent, null),
|
|
142
150
|
react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo },
|
|
@@ -14,6 +14,7 @@ const NavigationSettingsIconButton_1 = tslib_1.__importDefault(require("../Navig
|
|
|
14
14
|
const NavigationMenuIconButton_1 = tslib_1.__importDefault(require("../NavigationMenuIconButton"));
|
|
15
15
|
const constants_1 = require("./constants");
|
|
16
16
|
const types_1 = require("@selfcommunity/types");
|
|
17
|
+
const ComposerIconButton_1 = tslib_1.__importDefault(require("../ComposerIconButton"));
|
|
17
18
|
const classes = {
|
|
18
19
|
root: `${constants_1.PREFIX}-root`,
|
|
19
20
|
logo: `${constants_1.PREFIX}-logo`,
|
|
@@ -79,6 +80,10 @@ function NavigationToolbarMobile(inProps) {
|
|
|
79
80
|
const [searchOpen, setSearchOpen] = (0, react_1.useState)(false);
|
|
80
81
|
// MEMO
|
|
81
82
|
const groupsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
|
|
83
|
+
const eventsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
|
|
84
|
+
const exploreStreamEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value;
|
|
85
|
+
const postOnlyStaffEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value;
|
|
86
|
+
const contentAvailable = preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value;
|
|
82
87
|
// HANDLERS
|
|
83
88
|
const handleOpenSearch = (0, react_1.useCallback)(() => {
|
|
84
89
|
setSearchOpen(true);
|
|
@@ -100,12 +105,17 @@ function NavigationToolbarMobile(inProps) {
|
|
|
100
105
|
return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root) }, rest),
|
|
101
106
|
_children,
|
|
102
107
|
startActions,
|
|
103
|
-
(
|
|
108
|
+
(contentAvailable || scUserContext.user) && !disableSearch && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
104
109
|
react_1.default.createElement(material_1.IconButton, { className: classes.search, onClick: handleOpenSearch },
|
|
105
110
|
react_1.default.createElement(Icon_1.default, null, "search")),
|
|
106
111
|
react_1.default.createElement(SearchDialog_1.default, { className: classes.searchDialog, fullScreen: true, open: searchOpen, SearchAutocompleteProps: Object.assign(Object.assign({}, SearchAutocompleteProps), { onClear: handleCloseSearch }) }))),
|
|
107
112
|
endActions,
|
|
108
|
-
|
|
113
|
+
(!postOnlyStaffEnabled || (react_core_1.UserUtils.isStaff(scUserContext.user) && postOnlyStaffEnabled)) &&
|
|
114
|
+
groupsEnabled &&
|
|
115
|
+
eventsEnabled &&
|
|
116
|
+
(scUserContext.user || contentAvailable) &&
|
|
117
|
+
exploreStreamEnabled && react_1.default.createElement(ComposerIconButton_1.default, null),
|
|
118
|
+
scUserContext.user && (groupsEnabled || eventsEnabled) && (react_1.default.createElement(material_1.IconButton, { className: classes.notifications, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_NOTIFICATIONS_ROUTE_NAME, {}) },
|
|
109
119
|
react_1.default.createElement(material_1.Badge, { badgeContent: scUserContext.user.unseen_notification_banners_counter + scUserContext.user.unseen_interactions_counter, color: "secondary" },
|
|
110
120
|
react_1.default.createElement(Icon_1.default, null, "notifications_active")))),
|
|
111
121
|
scUserContext.user ? (react_1.default.createElement(NavigationSettingsIconButtonComponent, { className: classes.settings })) : (react_1.default.createElement(material_1.Button, { className: classes.login, color: "inherit", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.SIGNIN_ROUTE_NAME, {}) },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
1
|
import { ButtonBaseProps } from '@mui/material';
|
|
3
2
|
import { SCUserType } from '@selfcommunity/types';
|
|
3
|
+
import React, { ReactNode } from 'react';
|
|
4
4
|
import { FollowUserButtonProps } from '../FollowUserButton/FollowUserButton';
|
|
5
5
|
import { FriendshipButtonProps } from '../FriendshipUserButton/FriendshipUserButton';
|
|
6
6
|
import { WidgetProps } from '../Widget';
|
|
@@ -49,6 +49,7 @@ export interface UserProps extends WidgetProps {
|
|
|
49
49
|
* @default {}
|
|
50
50
|
*/
|
|
51
51
|
buttonProps?: ButtonBaseProps | null;
|
|
52
|
+
secondary?: ReactNode | null;
|
|
52
53
|
/**
|
|
53
54
|
* Any other properties
|
|
54
55
|
*/
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
|
-
const styles_1 = require("@mui/material/styles");
|
|
6
|
-
const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
|
|
7
4
|
const material_1 = require("@mui/material");
|
|
5
|
+
const styles_1 = require("@mui/material/styles");
|
|
6
|
+
const system_1 = require("@mui/system");
|
|
8
7
|
const react_core_1 = require("@selfcommunity/react-core");
|
|
9
|
-
const react_intl_1 = require("react-intl");
|
|
10
8
|
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
11
|
-
const
|
|
12
|
-
const
|
|
9
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
10
|
+
const react_intl_1 = require("react-intl");
|
|
13
11
|
const BaseItemButton_1 = tslib_1.__importDefault(require("../../shared/BaseItemButton"));
|
|
14
|
-
const UserDeletedSnackBar_1 = tslib_1.__importDefault(require("../../shared/UserDeletedSnackBar"));
|
|
15
12
|
const UserAvatar_1 = tslib_1.__importDefault(require("../../shared/UserAvatar"));
|
|
13
|
+
const UserDeletedSnackBar_1 = tslib_1.__importDefault(require("../../shared/UserDeletedSnackBar"));
|
|
14
|
+
const ConnectionUserButton_1 = tslib_1.__importDefault(require("../ConnectionUserButton"));
|
|
16
15
|
const constants_1 = require("./constants");
|
|
16
|
+
const Skeleton_1 = tslib_1.__importDefault(require("./Skeleton"));
|
|
17
17
|
const messages = (0, react_intl_1.defineMessages)({
|
|
18
18
|
userFollowers: {
|
|
19
19
|
id: 'ui.user.userFollowers',
|
|
@@ -67,7 +67,7 @@ function User(inProps) {
|
|
|
67
67
|
props: inProps,
|
|
68
68
|
name: constants_1.PREFIX
|
|
69
69
|
});
|
|
70
|
-
const { userId = null, user = null, handleIgnoreAction, className = null, followConnectUserButtonProps = {}, showFollowers = false, elevation, badgeContent = null, actions = null, isGroupAdmin = false, buttonProps = null } = props, rest = tslib_1.__rest(props, ["userId", "user", "handleIgnoreAction", "className", "followConnectUserButtonProps", "showFollowers", "elevation", "badgeContent", "actions", "isGroupAdmin", "buttonProps"]);
|
|
70
|
+
const { userId = null, user = null, handleIgnoreAction, className = null, followConnectUserButtonProps = {}, showFollowers = false, elevation, badgeContent = null, actions = null, isGroupAdmin = false, buttonProps = null, secondary = null } = props, rest = tslib_1.__rest(props, ["userId", "user", "handleIgnoreAction", "className", "followConnectUserButtonProps", "showFollowers", "elevation", "badgeContent", "actions", "isGroupAdmin", "buttonProps", "secondary"]);
|
|
71
71
|
// STATE
|
|
72
72
|
const { scUser, setSCUser } = (0, react_core_1.useSCFetchUser)({ id: userId, user });
|
|
73
73
|
// CONTEXT
|
|
@@ -109,7 +109,7 @@ function User(inProps) {
|
|
|
109
109
|
react_1.default.createElement(material_1.Avatar, { alt: scUser.username, src: scUser.avatar, className: classes.avatar }))) : (react_1.default.createElement(UserAvatar_1.default, { hide: !hasBadge },
|
|
110
110
|
react_1.default.createElement(material_1.Avatar, { alt: scUser.username, src: scUser.avatar, className: classes.avatar }))), primary: (hasBadge && preferences) || isGroupAdmin ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
111
111
|
scUser.username,
|
|
112
|
-
react_1.default.createElement(material_1.Chip, { component: "span", className: isGroupAdmin ? classes.groupAdminBadgeLabel : classes.staffBadgeLabel, size: "small", label: isGroupAdmin ? (react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.user.group.admin", id: "ui.user.group.admin" })) : (preferences[react_core_1.SCPreferences.STAFF_STAFF_BADGE_LABEL]) }))) : (scUser.username), secondary: showFollowers ? `${intl.formatMessage(messages.userFollowers, { total: scUser.followers_counter })}` : scUser.description, actions: actions !== null && actions !== void 0 ? actions : renderAuthenticatedActions() })),
|
|
112
|
+
react_1.default.createElement(material_1.Chip, { component: "span", className: isGroupAdmin ? classes.groupAdminBadgeLabel : classes.staffBadgeLabel, size: "small", label: isGroupAdmin ? (react_1.default.createElement(react_intl_1.FormattedMessage, { defaultMessage: "ui.user.group.admin", id: "ui.user.group.admin" })) : (preferences[react_core_1.SCPreferences.STAFF_STAFF_BADGE_LABEL]) }))) : (scUser.username), secondary: secondary || (showFollowers ? `${intl.formatMessage(messages.userFollowers, { total: scUser.followers_counter })}` : scUser.description), actions: actions !== null && actions !== void 0 ? actions : renderAuthenticatedActions() })),
|
|
113
113
|
openAlert && react_1.default.createElement(UserDeletedSnackBar_1.default, { open: openAlert, handleClose: () => setOpenAlert(false) })));
|
|
114
114
|
}
|
|
115
115
|
exports.default = User;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SCUserType, SCGroupType } from '@selfcommunity/types';
|
|
1
|
+
import { SCUserType, SCGroupType, SCEventType } from '@selfcommunity/types';
|
|
2
2
|
/**
|
|
3
3
|
* Define topics for pubsub
|
|
4
4
|
*/
|
|
@@ -21,3 +21,7 @@ export interface SCGroupMembersEventType {
|
|
|
21
21
|
group: SCGroupType;
|
|
22
22
|
user?: SCUserType;
|
|
23
23
|
}
|
|
24
|
+
export interface SCEventMembersEventType {
|
|
25
|
+
event: SCEventType;
|
|
26
|
+
user?: SCUserType;
|
|
27
|
+
}
|