@selfcommunity/react-ui 0.7.50-events.39 → 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 +5 -6
- 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/Events/Events.js +10 -10
- 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/index.d.ts +104 -103
- package/lib/cjs/index.js +270 -267
- 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 +5 -6
- 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/Events/Events.js +10 -10
- 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/index.d.ts +104 -103
- package/lib/esm/index.js +109 -108
- 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
|
@@ -63,18 +63,27 @@ function BottomNavigation(inProps) {
|
|
|
63
63
|
// MEMO
|
|
64
64
|
const privateMessagingEnabled = (0, react_1.useMemo)(() => features.includes(types_1.SCFeatureName.PRIVATE_MESSAGING), [features]);
|
|
65
65
|
const groupsEnabled = (0, react_1.useMemo)(() => features.includes(types_1.SCFeatureName.GROUPING) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
|
|
66
|
+
const eventsEnabled = (0, react_1.useMemo)(() => features && features.includes(types_1.SCFeatureName.EVENT) && features.includes(types_1.SCFeatureName.TAGGING), [features]);
|
|
67
|
+
const exploreStreamEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value;
|
|
68
|
+
const postOnlyStaffEnabled = preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value;
|
|
69
|
+
const contentAvailable = preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value;
|
|
66
70
|
const isIOS = (0, react_1.useMemo)(() => (0, utils_1.iOS)(), []);
|
|
67
71
|
// RENDER
|
|
68
72
|
return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root, { [classes.ios]: isIOS }) }, rest), children
|
|
69
73
|
? children
|
|
70
74
|
: [
|
|
71
75
|
react_1.default.createElement(material_1.BottomNavigationAction, { key: "home", className: classes.action, component: react_core_1.Link, to: scUserContext.user ? scRoutingContext.url(react_core_1.SCRoutes.HOME_ROUTE_NAME, {}) : '/', value: scUserContext.user ? scRoutingContext.url(react_core_1.SCRoutes.HOME_ROUTE_NAME, {}) : '/', icon: react_1.default.createElement(material_1.Icon, null, "home") }),
|
|
72
|
-
(scUserContext.user ||
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
(scUserContext.user || contentAvailable) && exploreStreamEnabled ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "explore", className: classes.action, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EXPLORE_ROUTE_NAME, {}), value: scRoutingContext.url(react_core_1.SCRoutes.EXPLORE_ROUTE_NAME, {}), icon: react_1.default.createElement(material_1.Icon, null, "explore") })) : null,
|
|
77
|
+
(!postOnlyStaffEnabled || (react_core_1.UserUtils.isStaff(scUserContext.user) && postOnlyStaffEnabled)) &&
|
|
78
|
+
((groupsEnabled && !eventsEnabled) || (!groupsEnabled && eventsEnabled)) &&
|
|
79
|
+
!exploreStreamEnabled ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "composer", className: (0, classnames_1.default)(classes.composer, classes.action), component: ComposerIconButton_1.default, disableRipple: true })) : null,
|
|
76
80
|
groupsEnabled && scUserContext.user ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "groups", className: classes.action, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), value: scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), icon: react_1.default.createElement(material_1.Icon, null, "groups") })) : null,
|
|
77
|
-
|
|
81
|
+
(!postOnlyStaffEnabled || (react_core_1.UserUtils.isStaff(scUserContext.user) && postOnlyStaffEnabled)) &&
|
|
82
|
+
groupsEnabled &&
|
|
83
|
+
eventsEnabled &&
|
|
84
|
+
!exploreStreamEnabled ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "composer", className: (0, classnames_1.default)(classes.composer, classes.action), component: ComposerIconButton_1.default, disableRipple: true })) : null,
|
|
85
|
+
eventsEnabled && scUserContext.user ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "events", className: classes.action, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.EVENT_ROUTE_NAME, {}), value: scRoutingContext.url(react_core_1.SCRoutes.EVENTS_ROUTE_NAME, {}), icon: react_1.default.createElement(material_1.Icon, null, "CalendarIcon") })) : null,
|
|
86
|
+
scUserContext.user && !groupsEnabled && !eventsEnabled ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "notifications", className: classes.action, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_NOTIFICATIONS_ROUTE_NAME, {}), value: scRoutingContext.url(react_core_1.SCRoutes.USER_NOTIFICATIONS_ROUTE_NAME, {}), icon: react_1.default.createElement(material_1.Badge, { badgeContent: scUserContext.user.unseen_notification_banners_counter + scUserContext.user.unseen_interactions_counter, color: "secondary" },
|
|
78
87
|
react_1.default.createElement(material_1.Icon, null, "notifications_active")) })) : null,
|
|
79
88
|
privateMessagingEnabled && scUserContext.user ? (react_1.default.createElement(material_1.BottomNavigationAction, { key: "messages", className: classes.action, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, {}), value: scRoutingContext.url(react_core_1.SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, {}), icon: react_1.default.createElement(material_1.Badge, { badgeContent: 0, color: "secondary" },
|
|
80
89
|
react_1.default.createElement(material_1.Icon, null, "email")) })) : null
|
|
@@ -1,15 +1,14 @@
|
|
|
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 system_1 = require("@mui/system");
|
|
6
|
-
const styles_1 = require("@mui/material/styles");
|
|
7
4
|
const material_1 = require("@mui/material");
|
|
8
|
-
const
|
|
5
|
+
const styles_1 = require("@mui/material/styles");
|
|
6
|
+
const system_1 = require("@mui/system");
|
|
9
7
|
const react_core_1 = require("@selfcommunity/react-core");
|
|
10
8
|
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
9
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
10
|
+
const react_intl_1 = require("react-intl");
|
|
11
11
|
const EventForm_1 = tslib_1.__importDefault(require("../EventForm"));
|
|
12
|
-
const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
|
|
13
12
|
const PREFIX = 'SCCreateEventButton';
|
|
14
13
|
const classes = {
|
|
15
14
|
root: `${PREFIX}-root`
|
|
@@ -67,7 +66,7 @@ function CreateEventButton(inProps) {
|
|
|
67
66
|
* If there's no authUserId, component is hidden.
|
|
68
67
|
*/
|
|
69
68
|
if ((!canCreateEvent && onlyStaffEnabled) || !authUserId) {
|
|
70
|
-
return
|
|
69
|
+
return null;
|
|
71
70
|
}
|
|
72
71
|
/**
|
|
73
72
|
* Renders root object
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SCEventType } from '@selfcommunity/types';
|
|
2
|
+
import { WidgetProps } from '../Widget';
|
|
3
|
+
export interface EventInfoWidgetProps extends WidgetProps {
|
|
4
|
+
/**
|
|
5
|
+
* Event Object
|
|
6
|
+
* @default null
|
|
7
|
+
*/
|
|
8
|
+
event?: SCEventType;
|
|
9
|
+
/**
|
|
10
|
+
* Id of event object
|
|
11
|
+
* @default null
|
|
12
|
+
*/
|
|
13
|
+
eventId?: number;
|
|
14
|
+
/**
|
|
15
|
+
* True if summary must be already expanded
|
|
16
|
+
* @default false
|
|
17
|
+
*/
|
|
18
|
+
summaryExpanded?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Other props
|
|
21
|
+
*/
|
|
22
|
+
[p: string]: any;
|
|
23
|
+
}
|
|
24
|
+
export default function EventInfoWidget(inProps: EventInfoWidgetProps): JSX.Element;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const material_1 = require("@mui/material");
|
|
5
|
+
const react_core_1 = require("@selfcommunity/react-core");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const react_intl_1 = require("react-intl");
|
|
8
|
+
const EventInfoDetails_1 = tslib_1.__importDefault(require("../../shared/EventInfoDetails"));
|
|
9
|
+
const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
|
|
10
|
+
const Widget_1 = tslib_1.__importDefault(require("../Widget"));
|
|
11
|
+
const constants_1 = require("./constants");
|
|
12
|
+
const classes = {
|
|
13
|
+
root: `${constants_1.PREFIX}-root`,
|
|
14
|
+
content: `${constants_1.PREFIX}-content`,
|
|
15
|
+
titleWrapper: `${constants_1.PREFIX}-title-wrapper`,
|
|
16
|
+
textWrapper: `${constants_1.PREFIX}-text-wrapper`,
|
|
17
|
+
showMore: `${constants_1.PREFIX}-show-more`
|
|
18
|
+
};
|
|
19
|
+
const Root = (0, material_1.styled)(Widget_1.default, {
|
|
20
|
+
name: constants_1.PREFIX,
|
|
21
|
+
slot: 'Root',
|
|
22
|
+
overridesResolver: (_props, styles) => styles.root
|
|
23
|
+
})();
|
|
24
|
+
function isTextLongerThanLimit(text, limit = 125) {
|
|
25
|
+
return text.length > limit;
|
|
26
|
+
}
|
|
27
|
+
function getTruncatedText(text, limit = 125) {
|
|
28
|
+
return isTextLongerThanLimit(text, limit) ? text.substring(0, limit).concat('...') : text;
|
|
29
|
+
}
|
|
30
|
+
function EventInfoWidget(inProps) {
|
|
31
|
+
// PROPS
|
|
32
|
+
const props = (0, material_1.useThemeProps)({
|
|
33
|
+
props: inProps,
|
|
34
|
+
name: constants_1.PREFIX
|
|
35
|
+
});
|
|
36
|
+
const { event, eventId, summaryExpanded = false } = props, rest = tslib_1.__rest(props, ["event", "eventId", "summaryExpanded"]);
|
|
37
|
+
// STATE
|
|
38
|
+
const [expanded, setExpanded] = (0, react_1.useState)(summaryExpanded);
|
|
39
|
+
const [showButton, setShowButton] = (0, react_1.useState)(!summaryExpanded);
|
|
40
|
+
// HOOKS
|
|
41
|
+
const { scEvent } = (0, react_core_1.useSCFetchEvent)({ id: eventId, event });
|
|
42
|
+
(0, react_1.useEffect)(() => {
|
|
43
|
+
if (!scEvent) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const _showButton = isTextLongerThanLimit(scEvent.description, 220);
|
|
47
|
+
if (_showButton !== !summaryExpanded) {
|
|
48
|
+
setShowButton(_showButton);
|
|
49
|
+
}
|
|
50
|
+
}, [scEvent]);
|
|
51
|
+
/**
|
|
52
|
+
* Handle toggle summary
|
|
53
|
+
*/
|
|
54
|
+
const handleToggleSummary = (0, react_1.useCallback)(() => {
|
|
55
|
+
setExpanded(!expanded);
|
|
56
|
+
}, [expanded]);
|
|
57
|
+
if (!scEvent) {
|
|
58
|
+
return React.createElement(HiddenPlaceholder_1.default, null);
|
|
59
|
+
}
|
|
60
|
+
const description = expanded ? scEvent.description : getTruncatedText(scEvent.description, 220);
|
|
61
|
+
return (React.createElement(Root, Object.assign({ className: classes.root }, rest, { expanded: expanded }),
|
|
62
|
+
React.createElement(material_1.CardContent, { className: classes.content },
|
|
63
|
+
React.createElement(material_1.Stack, { className: classes.titleWrapper },
|
|
64
|
+
React.createElement(material_1.Icon, { fontSize: "small" }, "info"),
|
|
65
|
+
React.createElement(material_1.Typography, { variant: "h5" },
|
|
66
|
+
React.createElement(react_intl_1.FormattedMessage, { id: "ui.infoEventWidget.title", defaultMessage: "ui.infoEventWidget.title" }))),
|
|
67
|
+
React.createElement(material_1.Box, { className: classes.textWrapper },
|
|
68
|
+
React.createElement(material_1.Typography, { component: "span", variant: "body1" },
|
|
69
|
+
description,
|
|
70
|
+
showButton && !expanded && (React.createElement(material_1.Button, { size: "small", variant: "text", className: classes.showMore, onClick: handleToggleSummary },
|
|
71
|
+
React.createElement(react_intl_1.FormattedMessage, { id: "ui.infoEventWidget.showMore", defaultMessage: "ui.infoEventWidget.showMore" }))))),
|
|
72
|
+
React.createElement(EventInfoDetails_1.default, { event: scEvent }))));
|
|
73
|
+
}
|
|
74
|
+
exports.default = EventInfoWidget;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PREFIX = "SCEventInfoWidget";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const EventInfoWidget_1 = tslib_1.__importDefault(require("./EventInfoWidget"));
|
|
5
|
+
// import EventInfoWidgetSkeleton from './Skeleton';
|
|
6
|
+
exports.default = EventInfoWidget_1.default;
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
const
|
|
5
|
-
const system_1 = require("@mui/system");
|
|
6
|
-
const styles_1 = require("@mui/material/styles");
|
|
4
|
+
const lab_1 = require("@mui/lab");
|
|
7
5
|
const material_1 = require("@mui/material");
|
|
8
|
-
const
|
|
6
|
+
const Autocomplete_1 = tslib_1.__importDefault(require("@mui/material/Autocomplete"));
|
|
7
|
+
const styles_1 = require("@mui/material/styles");
|
|
8
|
+
const system_1 = require("@mui/system");
|
|
9
|
+
const api_services_1 = require("@selfcommunity/api-services");
|
|
9
10
|
const react_core_1 = require("@selfcommunity/react-core");
|
|
11
|
+
const utils_1 = require("@selfcommunity/utils");
|
|
10
12
|
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const Autocomplete_1 = tslib_1.__importDefault(require("@mui/material/Autocomplete"));
|
|
15
|
-
const User_1 = tslib_1.__importDefault(require("../User"));
|
|
13
|
+
const pubsub_js_1 = tslib_1.__importDefault(require("pubsub-js"));
|
|
14
|
+
const react_1 = tslib_1.__importStar(require("react"));
|
|
15
|
+
const react_intl_1 = require("react-intl");
|
|
16
16
|
const Errors_1 = require("../../constants/Errors");
|
|
17
|
-
const utils_1 = require("@selfcommunity/utils");
|
|
18
17
|
const PubSub_1 = require("../../constants/PubSub");
|
|
19
|
-
const
|
|
18
|
+
const BaseDialog_1 = tslib_1.__importDefault(require("../../shared/BaseDialog"));
|
|
19
|
+
const User_1 = tslib_1.__importDefault(require("../User"));
|
|
20
20
|
const messages = (0, react_intl_1.defineMessages)({
|
|
21
21
|
placeholder: {
|
|
22
22
|
id: 'ui.eventInviteButton.searchBar.placeholder',
|
|
@@ -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:
|
|
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);
|
|
@@ -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;
|