@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.
Files changed (49) hide show
  1. package/lib/cjs/components/BottomNavigation/BottomNavigation.js +14 -5
  2. package/lib/cjs/components/CreateEventButton/CreateEventButton.js +5 -6
  3. package/lib/cjs/components/EventInfoWidget/EventInfoWidget.d.ts +24 -0
  4. package/lib/cjs/components/EventInfoWidget/EventInfoWidget.js +74 -0
  5. package/lib/cjs/components/EventInfoWidget/constants.d.ts +1 -0
  6. package/lib/cjs/components/EventInfoWidget/constants.js +4 -0
  7. package/lib/cjs/components/EventInfoWidget/index.d.ts +3 -0
  8. package/lib/cjs/components/EventInfoWidget/index.js +6 -0
  9. package/lib/cjs/components/EventInviteButton/EventInviteButton.js +11 -11
  10. package/lib/cjs/components/Events/Events.js +10 -10
  11. package/lib/cjs/components/NavigationToolbar/NavigationToolbar.d.ts +2 -0
  12. package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +9 -1
  13. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +12 -2
  14. package/lib/cjs/components/User/User.d.ts +2 -1
  15. package/lib/cjs/components/User/User.js +9 -9
  16. package/lib/cjs/index.d.ts +104 -103
  17. package/lib/cjs/index.js +270 -267
  18. package/lib/cjs/shared/Bullet/index.js +1 -2
  19. package/lib/cjs/shared/Calendar/index.d.ts +1 -2
  20. package/lib/cjs/shared/Calendar/index.js +3 -5
  21. package/lib/cjs/shared/EventInfoDetails/index.d.ts +6 -0
  22. package/lib/cjs/shared/EventInfoDetails/index.js +67 -0
  23. package/lib/esm/components/BottomNavigation/BottomNavigation.js +14 -5
  24. package/lib/esm/components/CreateEventButton/CreateEventButton.js +5 -6
  25. package/lib/esm/components/EventInfoWidget/EventInfoWidget.d.ts +24 -0
  26. package/lib/esm/components/EventInfoWidget/EventInfoWidget.js +71 -0
  27. package/lib/esm/components/EventInfoWidget/constants.d.ts +1 -0
  28. package/lib/esm/components/EventInfoWidget/constants.js +1 -0
  29. package/lib/esm/components/EventInfoWidget/index.d.ts +3 -0
  30. package/lib/esm/components/EventInfoWidget/index.js +3 -0
  31. package/lib/esm/components/EventInviteButton/EventInviteButton.js +11 -11
  32. package/lib/esm/components/Events/Events.js +10 -10
  33. package/lib/esm/components/NavigationToolbar/NavigationToolbar.d.ts +2 -0
  34. package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +9 -1
  35. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +13 -3
  36. package/lib/esm/components/User/User.d.ts +2 -1
  37. package/lib/esm/components/User/User.js +9 -9
  38. package/lib/esm/index.d.ts +104 -103
  39. package/lib/esm/index.js +109 -108
  40. package/lib/esm/shared/Bullet/index.js +0 -1
  41. package/lib/esm/shared/Calendar/index.d.ts +1 -2
  42. package/lib/esm/shared/Calendar/index.js +0 -1
  43. package/lib/esm/shared/EventInfoDetails/index.d.ts +6 -0
  44. package/lib/esm/shared/EventInfoDetails/index.js +64 -0
  45. package/lib/umd/84.js +2 -0
  46. package/lib/umd/react-ui.js +1 -1
  47. package/package.json +8 -7
  48. package/lib/umd/204.js +0 -2
  49. /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 || preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value) &&
73
- preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value ? (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,
74
- !preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value ||
75
- (react_core_1.UserUtils.isStaff(scUserContext.user) && preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value) ? (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
+ (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
- scUserContext.user && !groupsEnabled ? (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" },
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 react_intl_1 = require("react-intl");
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 react_1.default.createElement(HiddenPlaceholder_1.default, null);
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,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCEventInfoWidget';
@@ -0,0 +1,3 @@
1
+ import EventInfoWidget, { EventInfoWidgetProps } from './EventInfoWidget';
2
+ export default EventInfoWidget;
3
+ export { type EventInfoWidgetProps };
@@ -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 react_1 = tslib_1.__importStar(require("react"));
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 react_intl_1 = require("react-intl");
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 BaseDialog_1 = tslib_1.__importDefault(require("../../shared/BaseDialog"));
12
- const lab_1 = require("@mui/lab");
13
- const api_services_1 = require("@selfcommunity/api-services");
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 pubsub_js_1 = tslib_1.__importDefault(require("pubsub-js"));
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 Event_1 = tslib_1.__importStar(require("../Event"));
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 system_1 = require("@mui/system");
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: 2, offset: Pagination_1.DEFAULT_PAGINATION_OFFSET }, className, EventComponentProps = {}, showFilters = false, filters, general = true } = props, rest = tslib_1.__rest(props, ["endpointQueryParams", "className", "EventComponentProps", "showFilters", "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);
@@ -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
- (preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value || scUserContext.user) && !disableSearch && (react_1.default.createElement(react_1.default.Fragment, null,
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
- scUserContext.user && groupsEnabled && (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, {}) },
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 ConnectionUserButton_1 = tslib_1.__importDefault(require("../ConnectionUserButton"));
12
- const system_1 = require("@mui/system");
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;