@selfcommunity/react-ui 0.7.9-alpha.62 → 0.7.9-alpha.64

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.
@@ -71,7 +71,8 @@ function BottomNavigation(inProps) {
71
71
  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
72
  (scUserContext.user || preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value) &&
73
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
- react_1.default.createElement(material_1.BottomNavigationAction, { key: "composer", className: (0, classnames_1.default)(classes.composer, classes.action), component: ComposerIconButton_1.default, disableRipple: true }),
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,
75
76
  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,
76
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" },
77
78
  react_1.default.createElement(material_1.Icon, null, "notifications_active")) })) : null,
@@ -12,6 +12,7 @@ const system_1 = require("@mui/system");
12
12
  const Composer_1 = tslib_1.__importDefault(require("../Composer"));
13
13
  const Media_1 = require("../../shared/Media");
14
14
  const constants_1 = require("./constants");
15
+ const HiddenPlaceholder_1 = tslib_1.__importDefault(require("../../shared/HiddenPlaceholder"));
15
16
  const classes = {
16
17
  root: `${constants_1.PREFIX}-root`,
17
18
  content: `${constants_1.PREFIX}-content`,
@@ -60,6 +61,9 @@ function InlineComposerWidget(inProps) {
60
61
  const scUserContext = (0, react_core_1.useSCUser)();
61
62
  const scRoutingContext = (0, react_core_1.useSCRouting)();
62
63
  const { enqueueSnackbar } = (0, notistack_1.useSnackbar)();
64
+ // PREFERENCES
65
+ const preferences = (0, react_core_1.useSCPreferences)();
66
+ const onlyStaffEnabled = (0, react_1.useMemo)(() => preferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value, [preferences.preferences]);
63
67
  // State variables
64
68
  const [open, setOpen] = (0, react_1.useState)(false);
65
69
  // Handlers
@@ -94,6 +98,9 @@ function InlineComposerWidget(inProps) {
94
98
  }
95
99
  setOpen(false);
96
100
  };
101
+ if (!react_core_1.UserUtils.isStaff(scUserContext.user) && onlyStaffEnabled) {
102
+ return react_1.default.createElement(HiddenPlaceholder_1.default, null);
103
+ }
97
104
  return (react_1.default.createElement(react_1.default.Fragment, null,
98
105
  react_1.default.createElement(Root, Object.assign({ className: classes.root }, rest),
99
106
  react_1.default.createElement(material_1.CardContent, { className: classes.content },
@@ -123,7 +123,9 @@ function NavigationToolbar(inProps) {
123
123
  preferences[react_core_1.SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED] &&
124
124
  (preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY] || scUserContext.user) && (react_1.default.createElement(material_1.IconButton, { className: (0, classnames_1.default)(classes.explore, { [classes.active]: value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.EXPLORE_ROUTE_NAME, {})) }), "aria-label": "Explore", to: scRoutingContext.url(react_core_1.SCRoutes.EXPLORE_ROUTE_NAME, {}), component: react_core_1.Link },
125
125
  react_1.default.createElement(Icon_1.default, null, "explore"))),
126
- groupsEnabled && scUserContext.user && (react_1.default.createElement(material_1.IconButton, { className: (0, classnames_1.default)(classes.groups, { [classes.active]: value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {})) }), "aria-label": "Groups", to: scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), component: react_core_1.Link },
126
+ groupsEnabled && scUserContext.user && (react_1.default.createElement(material_1.IconButton, { className: (0, classnames_1.default)(classes.groups, {
127
+ [classes.active]: value.startsWith(scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}))
128
+ }), "aria-label": "Groups", to: scRoutingContext.url(react_core_1.SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), component: react_core_1.Link },
127
129
  react_1.default.createElement(Icon_1.default, null, "groups")))));
128
130
  return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root) }, rest),
129
131
  react_1.default.createElement(NavigationMenuIconButtonComponent, null),
@@ -135,7 +137,9 @@ function NavigationToolbar(inProps) {
135
137
  (preferences[react_core_1.SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY] || scUserContext.user) && !disableSearch ? (react_1.default.createElement(SearchAutocomplete_1.default, Object.assign({ className: classes.search, blurOnSelect: true }, SearchAutocompleteProps))) : (react_1.default.createElement(material_1.Box, { className: classes.search })),
136
138
  startActions,
137
139
  scUserContext.user ? (react_1.default.createElement(react_1.default.Fragment, null,
138
- !disableComposer && react_1.default.createElement(ComposerIconButton_1.default, Object.assign({ className: classes.composer }, ComposerIconButtonProps)),
140
+ !disableComposer ||
141
+ !preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value ||
142
+ (react_core_1.UserUtils.isStaff(scUserContext.user) && preferences[react_core_1.SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value && (react_1.default.createElement(ComposerIconButton_1.default, Object.assign({ className: classes.composer }, ComposerIconButtonProps)))),
139
143
  react_1.default.createElement(material_1.Tooltip, { title: scUserContext.user.username },
140
144
  react_1.default.createElement(material_1.IconButton, { component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, scUserContext.user), "aria-label": "Profile", className: classes.profile },
141
145
  react_1.default.createElement(material_1.Avatar, { alt: scUserContext.user.username, src: scUserContext.user.avatar }))),
@@ -116,7 +116,7 @@ function PrivateMessageSettingsIconButton(inProps) {
116
116
  }
117
117
  else {
118
118
  return [
119
- user && (react_1.default.createElement(material_1.MenuItem, { className: classes.item, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile" },
119
+ user && (react_1.default.createElement(material_1.MenuItem, { className: classes.item, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile", onClick: handleCloseDialog },
120
120
  react_1.default.createElement(material_1.ListItemIcon, null,
121
121
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "people_alt")),
122
122
  react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),
@@ -1,7 +1,7 @@
1
1
  import { __rest } from "tslib";
2
2
  import { Badge, BottomNavigation as MuiBottomNavigation, BottomNavigationAction, Icon, styled } from '@mui/material';
3
3
  import React, { useMemo } from 'react';
4
- import { Link, SCPreferences, SCRoutes, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
4
+ import { Link, SCPreferences, SCRoutes, UserUtils, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
5
5
  import { useThemeProps } from '@mui/system';
6
6
  import classNames from 'classnames';
7
7
  import { SCFeatureName } from '@selfcommunity/types';
@@ -69,7 +69,8 @@ export default function BottomNavigation(inProps) {
69
69
  React.createElement(BottomNavigationAction, { key: "home", className: classes.action, component: Link, to: scUserContext.user ? scRoutingContext.url(SCRoutes.HOME_ROUTE_NAME, {}) : '/', value: scUserContext.user ? scRoutingContext.url(SCRoutes.HOME_ROUTE_NAME, {}) : '/', icon: React.createElement(Icon, null, "home") }),
70
70
  (scUserContext.user || preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value) &&
71
71
  preferences[SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED].value ? (React.createElement(BottomNavigationAction, { key: "explore", className: classes.action, component: Link, to: scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {}), value: scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {}), icon: React.createElement(Icon, null, "explore") })) : null,
72
- React.createElement(BottomNavigationAction, { key: "composer", className: classNames(classes.composer, classes.action), component: ComposerIconButton, disableRipple: true }),
72
+ !preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value ||
73
+ (UserUtils.isStaff(scUserContext.user) && preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value) ? (React.createElement(BottomNavigationAction, { key: "composer", className: classNames(classes.composer, classes.action), component: ComposerIconButton, disableRipple: true })) : null,
73
74
  groupsEnabled && scUserContext.user ? (React.createElement(BottomNavigationAction, { key: "groups", className: classes.action, component: Link, to: scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), value: scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), icon: React.createElement(Icon, null, "groups") })) : null,
74
75
  scUserContext.user && !groupsEnabled ? (React.createElement(BottomNavigationAction, { key: "notifications", className: classes.action, component: Link, to: scRoutingContext.url(SCRoutes.USER_NOTIFICATIONS_ROUTE_NAME, {}), value: scRoutingContext.url(SCRoutes.USER_NOTIFICATIONS_ROUTE_NAME, {}), icon: React.createElement(Badge, { badgeContent: scUserContext.user.unseen_notification_banners_counter + scUserContext.user.unseen_interactions_counter, color: "secondary" },
75
76
  React.createElement(Icon, null, "notifications_active")) })) : null,
@@ -1,6 +1,6 @@
1
1
  import { __rest } from "tslib";
2
- import React, { useCallback, useState } from 'react';
3
- import { Link, SCRoutes, UserUtils, useSCContext, useSCRouting, useSCUser } from '@selfcommunity/react-core';
2
+ import React, { useCallback, useMemo, useState } from 'react';
3
+ import { Link, SCPreferences, SCRoutes, UserUtils, useSCContext, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
4
4
  import { Avatar, Box, Button, CardContent } from '@mui/material';
5
5
  import { styled } from '@mui/material/styles';
6
6
  import { FormattedMessage } from 'react-intl';
@@ -10,6 +10,7 @@ import { useThemeProps } from '@mui/system';
10
10
  import Composer from '../Composer';
11
11
  import { File, Link as MediaLink } from '../../shared/Media';
12
12
  import { PREFIX } from './constants';
13
+ import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
13
14
  const classes = {
14
15
  root: `${PREFIX}-root`,
15
16
  content: `${PREFIX}-content`,
@@ -58,6 +59,9 @@ export default function InlineComposerWidget(inProps) {
58
59
  const scUserContext = useSCUser();
59
60
  const scRoutingContext = useSCRouting();
60
61
  const { enqueueSnackbar } = useSnackbar();
62
+ // PREFERENCES
63
+ const preferences = useSCPreferences();
64
+ const onlyStaffEnabled = useMemo(() => preferences.preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value, [preferences.preferences]);
61
65
  // State variables
62
66
  const [open, setOpen] = useState(false);
63
67
  // Handlers
@@ -92,6 +96,9 @@ export default function InlineComposerWidget(inProps) {
92
96
  }
93
97
  setOpen(false);
94
98
  };
99
+ if (!UserUtils.isStaff(scUserContext.user) && onlyStaffEnabled) {
100
+ return React.createElement(HiddenPlaceholder, null);
101
+ }
95
102
  return (React.createElement(React.Fragment, null,
96
103
  React.createElement(Root, Object.assign({ className: classes.root }, rest),
97
104
  React.createElement(CardContent, { className: classes.content },
@@ -11,7 +11,7 @@ import SearchAutocomplete from '../SearchAutocomplete';
11
11
  import NavigationSettingsIconButton from '../NavigationSettingsIconButton';
12
12
  import ComposerIconButton from '../ComposerIconButton';
13
13
  import { SCFeatureName } from '@selfcommunity/types';
14
- import { Link, SCPreferences, SCRoutes, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
14
+ import { Link, SCPreferences, SCRoutes, UserUtils, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
15
15
  import NavigationMenuIconButton from '../NavigationMenuIconButton';
16
16
  import { PREFIX } from './constants';
17
17
  const classes = {
@@ -121,7 +121,9 @@ export default function NavigationToolbar(inProps) {
121
121
  preferences[SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED] &&
122
122
  (preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY] || scUserContext.user) && (React.createElement(IconButton, { className: classNames(classes.explore, { [classes.active]: value.startsWith(scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {})) }), "aria-label": "Explore", to: scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {}), component: Link },
123
123
  React.createElement(Icon, null, "explore"))),
124
- groupsEnabled && scUserContext.user && (React.createElement(IconButton, { className: classNames(classes.groups, { [classes.active]: value.startsWith(scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {})) }), "aria-label": "Groups", to: scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), component: Link },
124
+ groupsEnabled && scUserContext.user && (React.createElement(IconButton, { className: classNames(classes.groups, {
125
+ [classes.active]: value.startsWith(scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}))
126
+ }), "aria-label": "Groups", to: scRoutingContext.url(SCRoutes.GROUPS_SUBSCRIBED_ROUTE_NAME, {}), component: Link },
125
127
  React.createElement(Icon, null, "groups")))));
126
128
  return (React.createElement(Root, Object.assign({ className: classNames(className, classes.root) }, rest),
127
129
  React.createElement(NavigationMenuIconButtonComponent, null),
@@ -133,7 +135,9 @@ export default function NavigationToolbar(inProps) {
133
135
  (preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY] || scUserContext.user) && !disableSearch ? (React.createElement(SearchAutocomplete, Object.assign({ className: classes.search, blurOnSelect: true }, SearchAutocompleteProps))) : (React.createElement(Box, { className: classes.search })),
134
136
  startActions,
135
137
  scUserContext.user ? (React.createElement(React.Fragment, null,
136
- !disableComposer && React.createElement(ComposerIconButton, Object.assign({ className: classes.composer }, ComposerIconButtonProps)),
138
+ !disableComposer ||
139
+ !preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value ||
140
+ (UserUtils.isStaff(scUserContext.user) && preferences[SCPreferences.CONFIGURATIONS_POST_ONLY_STAFF_ENABLED].value && (React.createElement(ComposerIconButton, Object.assign({ className: classes.composer }, ComposerIconButtonProps)))),
137
141
  React.createElement(Tooltip, { title: scUserContext.user.username },
138
142
  React.createElement(IconButton, { component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, scUserContext.user), "aria-label": "Profile", className: classes.profile },
139
143
  React.createElement(Avatar, { alt: scUserContext.user.username, src: scUserContext.user.avatar }))),
@@ -114,7 +114,7 @@ export default function PrivateMessageSettingsIconButton(inProps) {
114
114
  }
115
115
  else {
116
116
  return [
117
- user && (React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile" },
117
+ user && (React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile", onClick: handleCloseDialog },
118
118
  React.createElement(ListItemIcon, null,
119
119
  React.createElement(Icon, { fontSize: "small" }, "people_alt")),
120
120
  React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),