@selfcommunity/react-ui 0.7.9-alpha.7 → 0.7.9-alpha.70
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/AccountRecover/AccountRecover.js +6 -1
- package/lib/cjs/components/BottomNavigation/BottomNavigation.js +4 -3
- package/lib/cjs/components/CategoryHeader/Skeleton.js +3 -2
- package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
- package/lib/cjs/components/Composer/Attributes/Attributes.js +3 -3
- package/lib/cjs/components/Composer/Composer.js +3 -3
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +1 -1
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +9 -19
- package/lib/cjs/components/FeedObject/Contributors/Contributors.js +1 -1
- package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/cjs/components/FeedObject/FeedObject.js +27 -8
- package/lib/cjs/components/FeedObject/Poll/Poll.js +20 -20
- package/lib/cjs/components/FeedUpdatesWidget/FeedUpdatesWidget.js +1 -1
- package/lib/cjs/components/Group/Group.d.ts +8 -0
- package/lib/cjs/components/Group/Group.js +17 -5
- package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.js +1 -1
- package/lib/cjs/components/GroupForm/GroupForm.js +64 -13
- package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +6 -5
- package/lib/cjs/components/GroupHeader/GroupHeader.js +53 -11
- package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.js +63 -9
- package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +31 -9
- package/lib/cjs/components/GroupInvitedWidget/GroupInvitedWidget.d.ts +74 -0
- package/lib/cjs/components/GroupInvitedWidget/GroupInvitedWidget.js +221 -0
- package/lib/cjs/components/GroupInvitedWidget/Skeleton.d.ts +22 -0
- package/lib/cjs/components/GroupInvitedWidget/Skeleton.js +38 -0
- package/lib/cjs/components/GroupInvitedWidget/constants.d.ts +1 -0
- package/lib/cjs/components/GroupInvitedWidget/constants.js +4 -0
- package/lib/cjs/components/GroupInvitedWidget/index.d.ts +4 -0
- package/lib/cjs/components/GroupInvitedWidget/index.js +8 -0
- package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
- package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +8 -3
- package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +25 -4
- package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +11 -5
- package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +18 -7
- package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
- package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.js +151 -0
- package/lib/cjs/components/GroupSettingsIconButton/index.d.ts +3 -0
- package/lib/cjs/components/GroupSettingsIconButton/index.js +5 -0
- package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
- package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +30 -11
- package/lib/cjs/components/Groups/Groups.d.ts +15 -8
- package/lib/cjs/components/Groups/Groups.js +89 -32
- package/lib/cjs/components/Groups/Skeleton.d.ts +4 -0
- package/lib/cjs/components/Groups/Skeleton.js +2 -2
- package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.js +7 -0
- package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
- package/lib/cjs/components/NavigationSettingsIconButton/NavigationSettingsIconButton.js +4 -4
- package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +6 -2
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +5 -0
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +11 -4
- package/lib/cjs/components/Notification/Group/Group.d.ts +15 -0
- package/lib/cjs/components/Notification/Group/Group.js +78 -0
- package/lib/cjs/components/Notification/Group/index.d.ts +3 -0
- package/lib/cjs/components/Notification/Group/index.js +5 -0
- package/lib/cjs/components/Notification/Notification.js +31 -1
- package/lib/cjs/components/Notification/PrivateMessage/PrivateMessage.js +16 -5
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +12 -7
- package/lib/cjs/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js +1 -1
- package/lib/cjs/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
- package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
- package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.js +24 -6
- package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
- package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.js +45 -20
- package/lib/cjs/components/PrivateMessageThreadItem/PrivateMessageThreadItem.js +6 -0
- package/lib/cjs/components/SearchAutocomplete/SearchAutocomplete.js +22 -5
- package/lib/cjs/components/SnippetNotifications/SnippetNotifications.js +7 -0
- package/lib/cjs/components/ToastNotifications/ToastNotifications.js +7 -0
- package/lib/cjs/components/User/User.d.ts +6 -1
- package/lib/cjs/components/User/User.js +5 -4
- package/lib/cjs/components/UserSubscribedGroupsWidget/Skeleton.d.ts +21 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/Skeleton.js +46 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.d.ts +68 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +183 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/constants.d.ts +1 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/constants.js +4 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/index.d.ts +4 -0
- package/lib/cjs/components/UserSubscribedGroupsWidget/index.js +8 -0
- package/lib/cjs/components/VoteAudienceButton/VoteAudienceButton.js +1 -1
- package/lib/cjs/constants/PubSub.d.ts +28 -0
- package/lib/cjs/constants/PubSub.js +22 -0
- package/lib/cjs/index.d.ts +6 -2
- package/lib/cjs/index.js +15 -4
- package/lib/esm/components/AccountRecover/AccountRecover.js +6 -1
- package/lib/esm/components/BottomNavigation/BottomNavigation.js +5 -4
- package/lib/esm/components/CategoryHeader/Skeleton.js +3 -2
- package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
- package/lib/esm/components/Composer/Attributes/Attributes.js +3 -3
- package/lib/esm/components/Composer/Composer.js +3 -3
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +1 -1
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +9 -19
- package/lib/esm/components/FeedObject/Contributors/Contributors.js +1 -1
- package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/esm/components/FeedObject/FeedObject.js +28 -9
- package/lib/esm/components/FeedObject/Poll/Poll.js +20 -20
- package/lib/esm/components/FeedUpdatesWidget/FeedUpdatesWidget.js +1 -1
- package/lib/esm/components/Group/Group.d.ts +8 -0
- package/lib/esm/components/Group/Group.js +21 -9
- package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.js +1 -1
- package/lib/esm/components/GroupForm/GroupForm.js +64 -13
- package/lib/esm/components/GroupHeader/GroupHeader.d.ts +6 -5
- package/lib/esm/components/GroupHeader/GroupHeader.js +55 -13
- package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.js +63 -9
- package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +31 -9
- package/lib/esm/components/GroupInvitedWidget/GroupInvitedWidget.d.ts +74 -0
- package/lib/esm/components/GroupInvitedWidget/GroupInvitedWidget.js +218 -0
- package/lib/esm/components/GroupInvitedWidget/Skeleton.d.ts +22 -0
- package/lib/esm/components/GroupInvitedWidget/Skeleton.js +34 -0
- package/lib/esm/components/GroupInvitedWidget/constants.d.ts +1 -0
- package/lib/esm/components/GroupInvitedWidget/constants.js +1 -0
- package/lib/esm/components/GroupInvitedWidget/index.d.ts +4 -0
- package/lib/esm/components/GroupInvitedWidget/index.js +4 -0
- package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
- package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +9 -4
- package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +26 -5
- package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +11 -5
- package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +18 -7
- package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
- package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.js +148 -0
- package/lib/esm/components/GroupSettingsIconButton/index.d.ts +3 -0
- package/lib/esm/components/GroupSettingsIconButton/index.js +2 -0
- package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
- package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +30 -11
- package/lib/esm/components/Groups/Groups.d.ts +15 -8
- package/lib/esm/components/Groups/Groups.js +94 -37
- package/lib/esm/components/Groups/Skeleton.d.ts +4 -0
- package/lib/esm/components/Groups/Skeleton.js +2 -2
- package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.js +9 -2
- package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
- package/lib/esm/components/NavigationSettingsIconButton/NavigationSettingsIconButton.js +4 -4
- package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +7 -3
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +5 -0
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +13 -6
- package/lib/esm/components/Notification/Group/Group.d.ts +15 -0
- package/lib/esm/components/Notification/Group/Group.js +75 -0
- package/lib/esm/components/Notification/Group/index.d.ts +3 -0
- package/lib/esm/components/Notification/Group/index.js +2 -0
- package/lib/esm/components/Notification/Notification.js +31 -1
- package/lib/esm/components/Notification/PrivateMessage/PrivateMessage.js +16 -5
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +13 -8
- package/lib/esm/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js +1 -1
- package/lib/esm/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
- package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
- package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.js +26 -8
- package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
- package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.js +47 -22
- package/lib/esm/components/PrivateMessageThreadItem/PrivateMessageThreadItem.js +7 -1
- package/lib/esm/components/SearchAutocomplete/SearchAutocomplete.js +22 -5
- package/lib/esm/components/SnippetNotifications/SnippetNotifications.js +7 -0
- package/lib/esm/components/ToastNotifications/ToastNotifications.js +7 -0
- package/lib/esm/components/User/User.d.ts +6 -1
- package/lib/esm/components/User/User.js +5 -4
- package/lib/esm/components/UserSubscribedGroupsWidget/Skeleton.d.ts +21 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/Skeleton.js +42 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.d.ts +68 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/UserSubscribedGroupsWidget.js +180 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/constants.d.ts +1 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/constants.js +1 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/index.d.ts +4 -0
- package/lib/esm/components/UserSubscribedGroupsWidget/index.js +4 -0
- package/lib/esm/components/VoteAudienceButton/VoteAudienceButton.js +1 -1
- package/lib/esm/constants/PubSub.d.ts +28 -0
- package/lib/esm/constants/PubSub.js +19 -0
- package/lib/esm/index.d.ts +6 -2
- package/lib/esm/index.js +8 -4
- package/lib/umd/react-ui.js +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WidgetProps } from '../Widget';
|
|
2
|
+
/**
|
|
3
|
+
* > API documentation for the Community-JS Group Invited Widget Skeleton component. Learn about the available props and the CSS API.
|
|
4
|
+
|
|
5
|
+
#### Import
|
|
6
|
+
|
|
7
|
+
```jsx
|
|
8
|
+
import {GroupInvitedWidgetSkeleton} from '@selfcommunity/react-ui';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
#### Component Name
|
|
12
|
+
|
|
13
|
+
The name `SCGroupInvitedWidget-skeleton-root` can be used when providing style overrides in the theme.
|
|
14
|
+
|
|
15
|
+
#### CSS
|
|
16
|
+
|
|
17
|
+
|Rule Name|Global class|Description|
|
|
18
|
+
|---|---|---|
|
|
19
|
+
|root|.SCGroupInvitedWidget-skeleton-root|Styles applied to the root element.|
|
|
20
|
+
*
|
|
21
|
+
*/
|
|
22
|
+
export default function GroupInvitedWidgetSkeleton(props: WidgetProps): JSX.Element;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { CategoryTrendingPeopleWidgetSkeleton } from '../CategoryTrendingUsersWidget';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import { PREFIX } from './constants';
|
|
5
|
+
const classes = {
|
|
6
|
+
root: `${PREFIX}-skeleton-root`
|
|
7
|
+
};
|
|
8
|
+
const Root = styled(CategoryTrendingPeopleWidgetSkeleton, {
|
|
9
|
+
name: PREFIX,
|
|
10
|
+
slot: 'SkeletonRoot'
|
|
11
|
+
})(() => ({}));
|
|
12
|
+
/**
|
|
13
|
+
* > API documentation for the Community-JS Group Invited Widget Skeleton component. Learn about the available props and the CSS API.
|
|
14
|
+
|
|
15
|
+
#### Import
|
|
16
|
+
|
|
17
|
+
```jsx
|
|
18
|
+
import {GroupInvitedWidgetSkeleton} from '@selfcommunity/react-ui';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
#### Component Name
|
|
22
|
+
|
|
23
|
+
The name `SCGroupInvitedWidget-skeleton-root` can be used when providing style overrides in the theme.
|
|
24
|
+
|
|
25
|
+
#### CSS
|
|
26
|
+
|
|
27
|
+
|Rule Name|Global class|Description|
|
|
28
|
+
|---|---|---|
|
|
29
|
+
|root|.SCGroupInvitedWidget-skeleton-root|Styles applied to the root element.|
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
export default function GroupInvitedWidgetSkeleton(props) {
|
|
33
|
+
return React.createElement(Root, Object.assign({ className: classes.root }, props));
|
|
34
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const PREFIX = "SCGroupInvitedWidget";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const PREFIX = 'SCGroupInvitedWidget';
|
|
@@ -17,6 +17,11 @@ export interface GroupMembersButtonProps extends Pick<ButtonProps, Exclude<keyof
|
|
|
17
17
|
* @default {}
|
|
18
18
|
*/
|
|
19
19
|
DialogProps?: BaseDialogProps;
|
|
20
|
+
/**
|
|
21
|
+
* Hides this component
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
autoHide?: boolean;
|
|
20
25
|
/**
|
|
21
26
|
* Any other properties
|
|
22
27
|
*/
|
|
@@ -6,8 +6,9 @@ import BaseDialog from '../../shared/BaseDialog';
|
|
|
6
6
|
import { FormattedMessage } from 'react-intl';
|
|
7
7
|
import InfiniteScroll from '../../shared/InfiniteScroll';
|
|
8
8
|
import User, { UserSkeleton } from '../User';
|
|
9
|
-
import {
|
|
9
|
+
import { Endpoints, GroupService, http } from '@selfcommunity/api-services';
|
|
10
10
|
import { useSCFetchGroup } from '@selfcommunity/react-core';
|
|
11
|
+
import { SCGroupPrivacyType, SCGroupSubscriptionStatusType } from '@selfcommunity/types';
|
|
11
12
|
import AvatarGroupSkeleton from '../Skeleton/AvatarGroupSkeleton';
|
|
12
13
|
import classNames from 'classnames';
|
|
13
14
|
import { useThemeProps } from '@mui/system';
|
|
@@ -58,7 +59,7 @@ export default function GroupMembersButton(inProps) {
|
|
|
58
59
|
props: inProps,
|
|
59
60
|
name: PREFIX
|
|
60
61
|
});
|
|
61
|
-
const { className, groupId, group, DialogProps = {} } = props, rest = __rest(props, ["className", "groupId", "group", "DialogProps"]);
|
|
62
|
+
const { className, groupId, group, DialogProps = {}, autoHide = false } = props, rest = __rest(props, ["className", "groupId", "group", "DialogProps", "autoHide"]);
|
|
62
63
|
// STATE
|
|
63
64
|
const [loading, setLoading] = useState(true);
|
|
64
65
|
const [next, setNext] = useState(null);
|
|
@@ -69,7 +70,11 @@ export default function GroupMembersButton(inProps) {
|
|
|
69
70
|
const { scGroup } = useSCFetchGroup({ id: groupId, group });
|
|
70
71
|
// FETCH FIRST FOLLOWERS
|
|
71
72
|
useDeepCompareEffectNoCheck(() => {
|
|
72
|
-
if (!scGroup
|
|
73
|
+
if (!scGroup ||
|
|
74
|
+
(scGroup &&
|
|
75
|
+
scGroup.privacy !== SCGroupPrivacyType.PUBLIC &&
|
|
76
|
+
scGroup.subscription_status !== SCGroupSubscriptionStatusType.SUBSCRIBED &&
|
|
77
|
+
autoHide)) {
|
|
73
78
|
return;
|
|
74
79
|
}
|
|
75
80
|
if (members.length === 0) {
|
|
@@ -128,5 +133,5 @@ export default function GroupMembersButton(inProps) {
|
|
|
128
133
|
React.createElement(InfiniteScroll, { dataLength: members.length, next: fetchMembers, hasMoreNext: next !== null || loading, loaderNext: React.createElement(UserSkeleton, { elevation: 0 }), height: isMobile ? '100%' : 400, endMessage: React.createElement(Typography, { className: classes.endMessage },
|
|
129
134
|
React.createElement(FormattedMessage, { id: "ui.groupMembersButton.noOtherMembers", defaultMessage: "ui.groupMembersButton.noOtherMembers" })) },
|
|
130
135
|
React.createElement(List, null, members.map((member) => (React.createElement(ListItem, { key: member.id },
|
|
131
|
-
React.createElement(User, { elevation: 0, user: member }))))))))));
|
|
136
|
+
React.createElement(User, { elevation: 0, user: member, onClick: handleToggleDialogOpen }))))))))));
|
|
132
137
|
}
|
|
@@ -6,7 +6,7 @@ import { Button, CardActions, CardContent, ListItem, Typography, useMediaQuery,
|
|
|
6
6
|
import Widget from '../Widget';
|
|
7
7
|
import { http, Endpoints, GroupService } from '@selfcommunity/api-services';
|
|
8
8
|
import { CacheStrategies, isInteger, Logger } from '@selfcommunity/utils';
|
|
9
|
-
import { SCCache, SCPreferences, useSCFetchGroup, useSCPreferences, useSCUser } from '@selfcommunity/react-core';
|
|
9
|
+
import { Link, SCCache, SCPreferences, SCRoutes, useSCFetchGroup, useSCPreferences, useSCRouting, useSCUser } from '@selfcommunity/react-core';
|
|
10
10
|
import { actionWidgetTypes, dataWidgetReducer, stateWidgetInitializer } from '../../utils/widget';
|
|
11
11
|
import Skeleton from './Skeleton';
|
|
12
12
|
import { FormattedMessage } from 'react-intl';
|
|
@@ -19,6 +19,7 @@ import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
|
|
|
19
19
|
import { PREFIX } from './constants';
|
|
20
20
|
import User, { UserSkeleton } from '../User';
|
|
21
21
|
import GroupInviteButton from '../GroupInviteButton';
|
|
22
|
+
import GroupSettingsIconButton from '../GroupSettingsIconButton';
|
|
22
23
|
const classes = {
|
|
23
24
|
root: `${PREFIX}-root`,
|
|
24
25
|
title: `${PREFIX}-title`,
|
|
@@ -68,6 +69,7 @@ const DialogRoot = styled(BaseDialog, {
|
|
|
68
69
|
* @param inProps
|
|
69
70
|
*/
|
|
70
71
|
export default function GroupMembersWidget(inProps) {
|
|
72
|
+
var _a;
|
|
71
73
|
// PROPS
|
|
72
74
|
const props = useThemeProps({
|
|
73
75
|
props: inProps,
|
|
@@ -85,8 +87,11 @@ export default function GroupMembersWidget(inProps) {
|
|
|
85
87
|
const [openDialog, setOpenDialog] = useState(false);
|
|
86
88
|
// CONTEXT
|
|
87
89
|
const scUserContext = useSCUser();
|
|
90
|
+
const scRoutingContext = useSCRouting();
|
|
88
91
|
const scPreferencesContext = useSCPreferences();
|
|
89
92
|
const { scGroup } = useSCFetchGroup({ id: groupId, group });
|
|
93
|
+
// CONST
|
|
94
|
+
const isGroupAdmin = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
|
|
90
95
|
// MEMO
|
|
91
96
|
const contentAvailability = useMemo(() => SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY in scPreferencesContext.preferences &&
|
|
92
97
|
scPreferencesContext.preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value, [scPreferencesContext.preferences]);
|
|
@@ -168,6 +173,14 @@ export default function GroupMembersWidget(inProps) {
|
|
|
168
173
|
const handleToggleDialogOpen = () => {
|
|
169
174
|
setOpenDialog((prev) => !prev);
|
|
170
175
|
};
|
|
176
|
+
const handleRefresh = useMemo(() => (userId) => {
|
|
177
|
+
const newMembers = [...state.results];
|
|
178
|
+
const _updated = newMembers.filter((u) => u.id !== userId);
|
|
179
|
+
dispatch({
|
|
180
|
+
type: actionWidgetTypes.SET_RESULTS,
|
|
181
|
+
payload: { results: newMembers.length > 1 ? _updated : [] }
|
|
182
|
+
});
|
|
183
|
+
}, [dispatch, state.count, state.results]);
|
|
171
184
|
// RENDER
|
|
172
185
|
if ((autoHide && !state.count && state.initialized) || (!contentAvailability && !scUserContext.user) || !scGroup) {
|
|
173
186
|
return React.createElement(HiddenPlaceholder, null);
|
|
@@ -181,15 +194,23 @@ export default function GroupMembersWidget(inProps) {
|
|
|
181
194
|
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.title", defaultMessage: "ui.groupMembersWidget.title" })),
|
|
182
195
|
!state.count ? (React.createElement(Typography, { className: classes.noResults, variant: "body2" },
|
|
183
196
|
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.subtitle.noResults", defaultMessage: "" }))) : (React.createElement(React.Fragment, null,
|
|
184
|
-
React.createElement(List, null, state.results.slice(0, state.visibleItems).map((user) =>
|
|
185
|
-
|
|
197
|
+
React.createElement(List, null, state.results.slice(0, state.visibleItems).map((user) => {
|
|
198
|
+
var _a, _b;
|
|
199
|
+
return (React.createElement(ListItem, { key: user.id },
|
|
200
|
+
React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user, onRemoveSuccess: () => handleRefresh(user.id) })) : ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.id) !== user.id ? (React.createElement(Button, { size: "small", variant: "outlined", component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user) },
|
|
201
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))) : null, isGroupAdmin: ((_b = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _b === void 0 ? void 0 : _b.id) === user.id, user: user, userId: user.id })));
|
|
202
|
+
})),
|
|
186
203
|
state.count > state.visibleItems && (React.createElement(Button, { className: classes.showMore, onClick: handleToggleDialogOpen },
|
|
187
204
|
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.button.showMore", defaultMessage: "ui.groupMembersWidget.button.showMore" }))))),
|
|
188
205
|
openDialog && (React.createElement(DialogRoot, Object.assign({ className: classes.dialogRoot, title: React.createElement(FormattedMessage, { defaultMessage: "ui.groupMembersWidget.dialogTitle", id: "ui.groupMembersWidget.dialogTitle", values: { total: scGroup.subscribers_counter } }), onClose: handleToggleDialogOpen, open: openDialog }, DialogProps),
|
|
189
206
|
React.createElement(InfiniteScroll, { dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: React.createElement(UserSkeleton, Object.assign({ elevation: 0 }, UserProps)), height: isMobile ? '100%' : 400, endMessage: React.createElement(Typography, { className: classes.endMessage },
|
|
190
207
|
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.noMoreResults", defaultMessage: "ui.groupMembersWidget.noMoreResults" })) },
|
|
191
|
-
React.createElement(List, null, state.results.map((user) =>
|
|
192
|
-
|
|
208
|
+
React.createElement(List, null, state.results.map((user) => {
|
|
209
|
+
var _a, _b;
|
|
210
|
+
return (React.createElement(ListItem, { key: user.id },
|
|
211
|
+
React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user, onRemoveSuccess: () => handleRefresh(user.id) })) : ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.id) !== user.id ? (React.createElement(Button, { size: "small", variant: "outlined", component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user) },
|
|
212
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))) : null, isGroupAdmin: ((_b = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _b === void 0 ? void 0 : _b.id) === user.id, user: user, userId: user.id })));
|
|
213
|
+
})))))),
|
|
193
214
|
React.createElement(CardActions, { className: classes.actions },
|
|
194
215
|
React.createElement(GroupInviteButton, { groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup }))));
|
|
195
216
|
return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
|
|
@@ -4,6 +4,7 @@ import { CacheStrategies } from '@selfcommunity/utils';
|
|
|
4
4
|
import { BaseDialogProps } from '../../shared/BaseDialog';
|
|
5
5
|
import { VirtualScrollerItemProps } from '../../types/virtualScroller';
|
|
6
6
|
import { UserProps } from '../User';
|
|
7
|
+
import { GroupSubscribeButtonProps } from '../GroupSubscribeButton';
|
|
7
8
|
export interface GroupRequestsWidgetProps extends VirtualScrollerItemProps, WidgetProps {
|
|
8
9
|
/**
|
|
9
10
|
* Group Object
|
|
@@ -15,11 +16,6 @@ export interface GroupRequestsWidgetProps extends VirtualScrollerItemProps, Widg
|
|
|
15
16
|
* @default null
|
|
16
17
|
*/
|
|
17
18
|
groupId?: number | string;
|
|
18
|
-
/**
|
|
19
|
-
* Hides this component
|
|
20
|
-
* @default false
|
|
21
|
-
*/
|
|
22
|
-
autoHide?: boolean;
|
|
23
19
|
/**
|
|
24
20
|
* Limit the number of users to show
|
|
25
21
|
* @default false
|
|
@@ -40,6 +36,16 @@ export interface GroupRequestsWidgetProps extends VirtualScrollerItemProps, Widg
|
|
|
40
36
|
* @default {}
|
|
41
37
|
*/
|
|
42
38
|
DialogProps?: BaseDialogProps;
|
|
39
|
+
/**
|
|
40
|
+
* Props to spread to group subscribe button component
|
|
41
|
+
* @default {}
|
|
42
|
+
*/
|
|
43
|
+
GroupSubscribeButtonProps?: GroupSubscribeButtonProps;
|
|
44
|
+
/**
|
|
45
|
+
* onSubscribeAction callback
|
|
46
|
+
* @param user
|
|
47
|
+
*/
|
|
48
|
+
onSubscribeActon?: (userId: number | string) => any;
|
|
43
49
|
/**
|
|
44
50
|
* Other props
|
|
45
51
|
*/
|
|
@@ -18,6 +18,7 @@ import { useThemeProps } from '@mui/system';
|
|
|
18
18
|
import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
|
|
19
19
|
import { PREFIX } from './constants';
|
|
20
20
|
import User, { UserSkeleton } from '../User';
|
|
21
|
+
import GroupSubscribeButton from '../GroupSubscribeButton';
|
|
21
22
|
const classes = {
|
|
22
23
|
root: `${PREFIX}-root`,
|
|
23
24
|
title: `${PREFIX}-title`,
|
|
@@ -66,12 +67,13 @@ const DialogRoot = styled(BaseDialog, {
|
|
|
66
67
|
* @param inProps
|
|
67
68
|
*/
|
|
68
69
|
export default function GroupRequestsWidget(inProps) {
|
|
70
|
+
var _a;
|
|
69
71
|
// PROPS
|
|
70
72
|
const props = useThemeProps({
|
|
71
73
|
props: inProps,
|
|
72
74
|
name: PREFIX
|
|
73
75
|
});
|
|
74
|
-
const { groupId, group,
|
|
76
|
+
const { groupId, group, limit = 5, className, cacheStrategy = CacheStrategies.NETWORK_ONLY, onHeightChange, onStateChange, UserProps = {}, DialogProps = {}, GroupSubscribeButtonProps = {}, onSubscribeActon } = props, rest = __rest(props, ["groupId", "group", "limit", "className", "cacheStrategy", "onHeightChange", "onStateChange", "UserProps", "DialogProps", "GroupSubscribeButtonProps", "onSubscribeActon"]);
|
|
75
77
|
// STATE
|
|
76
78
|
const [state, dispatch] = useReducer(dataWidgetReducer, {
|
|
77
79
|
isLoadingNext: false,
|
|
@@ -91,6 +93,7 @@ export default function GroupRequestsWidget(inProps) {
|
|
|
91
93
|
// HOOKS
|
|
92
94
|
const theme = useTheme();
|
|
93
95
|
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
|
|
96
|
+
const isGroupAdmin = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
|
|
94
97
|
/**
|
|
95
98
|
* Initialize component
|
|
96
99
|
* Fetch data only if the component is not initialized and it is not loading data
|
|
@@ -166,8 +169,17 @@ export default function GroupRequestsWidget(inProps) {
|
|
|
166
169
|
const handleToggleDialogOpen = () => {
|
|
167
170
|
setOpenDialog((prev) => !prev);
|
|
168
171
|
};
|
|
172
|
+
const handleSubscribeAction = useMemo(() => (user) => {
|
|
173
|
+
const newRequests = [...state.results];
|
|
174
|
+
const _updated = newRequests.filter((u) => u.id !== user.id);
|
|
175
|
+
dispatch({
|
|
176
|
+
type: actionWidgetTypes.SET_RESULTS,
|
|
177
|
+
payload: { results: newRequests.length > 1 ? _updated : [] }
|
|
178
|
+
});
|
|
179
|
+
onSubscribeActon && onSubscribeActon(user);
|
|
180
|
+
}, [dispatch, state.count, state.results, onSubscribeActon]);
|
|
169
181
|
// RENDER
|
|
170
|
-
if ((
|
|
182
|
+
if ((!state.count && state.initialized) || !contentAvailability || !scGroup || !state.count || !state.results.length || !isGroupAdmin) {
|
|
171
183
|
return React.createElement(HiddenPlaceholder, null);
|
|
172
184
|
}
|
|
173
185
|
if (!state.initialized) {
|
|
@@ -176,16 +188,15 @@ export default function GroupRequestsWidget(inProps) {
|
|
|
176
188
|
const content = (React.createElement(CardContent, null,
|
|
177
189
|
React.createElement(Typography, { className: classes.title, variant: "h5" },
|
|
178
190
|
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.title", defaultMessage: "ui.groupRequestsWidget.title" })),
|
|
179
|
-
|
|
180
|
-
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.subtitle.noResults", defaultMessage: "" }))) : (React.createElement(React.Fragment, null,
|
|
191
|
+
React.createElement(React.Fragment, null,
|
|
181
192
|
React.createElement(List, null, state.results.slice(0, state.visibleItems).map((user) => (React.createElement(ListItem, { key: user.id },
|
|
182
|
-
React.createElement(User, { elevation: 0, actions: React.createElement(
|
|
193
|
+
React.createElement(User, { elevation: 0, actions: React.createElement(GroupSubscribeButton, Object.assign({ group: scGroup, groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, user: user, onSubscribe: () => handleSubscribeAction(user) }, GroupSubscribeButtonProps)), user: user, userId: user.id }))))),
|
|
183
194
|
state.count > state.visibleItems && (React.createElement(Button, { className: classes.showMore, onClick: handleToggleDialogOpen },
|
|
184
|
-
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.button.showMore", defaultMessage: "ui.groupRequestsWidget.button.showMore" }))))
|
|
195
|
+
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.button.showMore", defaultMessage: "ui.groupRequestsWidget.button.showMore" })))),
|
|
185
196
|
openDialog && (React.createElement(DialogRoot, Object.assign({ className: classes.dialogRoot, title: React.createElement(FormattedMessage, { defaultMessage: "ui.groupRequestsWidget.dialogTitle", id: "ui.groupRequestsWidget.dialogTitle", values: { total: scGroup.subscribers_counter } }), onClose: handleToggleDialogOpen, open: openDialog }, DialogProps),
|
|
186
197
|
React.createElement(InfiniteScroll, { dataLength: state.results.length, next: handleNext, hasMoreNext: Boolean(state.next), loaderNext: React.createElement(UserSkeleton, Object.assign({ elevation: 0 }, UserProps)), height: isMobile ? '100%' : 400, endMessage: React.createElement(Typography, { className: classes.endMessage },
|
|
187
198
|
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.noMoreResults", defaultMessage: "ui.groupRequestsWidget.noMoreResults" })) },
|
|
188
199
|
React.createElement(List, null, state.results.map((user) => (React.createElement(ListItem, { key: user.id },
|
|
189
|
-
React.createElement(User, { elevation: 0, actions: React.createElement(
|
|
200
|
+
React.createElement(User, { elevation: 0, actions: React.createElement(GroupSubscribeButton, Object.assign({ group: scGroup, groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, user: user, onSubscribe: () => handleSubscribeAction(user) }, GroupSubscribeButtonProps)), user: user, userId: user.id }))))))))));
|
|
190
201
|
return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
|
|
191
202
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { IconButtonProps } from '@mui/material';
|
|
2
|
+
import { SCGroupType, SCUserType } from '@selfcommunity/types';
|
|
3
|
+
export interface GroupSettingsIconButtonProps extends IconButtonProps {
|
|
4
|
+
/**
|
|
5
|
+
* Overrides or extends the styles applied to the component.
|
|
6
|
+
* @default null
|
|
7
|
+
*/
|
|
8
|
+
className?: string;
|
|
9
|
+
/**
|
|
10
|
+
* Handles callback on delete success
|
|
11
|
+
*/
|
|
12
|
+
onRemoveSuccess?: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* The user
|
|
15
|
+
*/
|
|
16
|
+
user: SCUserType;
|
|
17
|
+
/**
|
|
18
|
+
* The group obj
|
|
19
|
+
*/
|
|
20
|
+
group: SCGroupType;
|
|
21
|
+
/**
|
|
22
|
+
* Any other properties
|
|
23
|
+
*/
|
|
24
|
+
[p: string]: any;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
|
|
28
|
+
|
|
29
|
+
#### Import
|
|
30
|
+
|
|
31
|
+
```jsx
|
|
32
|
+
import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
#### Component Name
|
|
36
|
+
|
|
37
|
+
The name `SCGroupSettingsIconButton` can be used when providing style overrides in the theme.
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#### CSS
|
|
41
|
+
|
|
42
|
+
|Rule Name|Global class|Description|
|
|
43
|
+
|---|---|---|
|
|
44
|
+
|root|.SCGroupSettingsIconButton-root|Styles applied to the root element.|
|
|
45
|
+
|
|
46
|
+
* @param inProps
|
|
47
|
+
*/
|
|
48
|
+
export default function GroupSettingsIconButton(inProps: GroupSettingsIconButtonProps): JSX.Element;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { __rest } from "tslib";
|
|
2
|
+
import React, { useState } from 'react';
|
|
3
|
+
import { styled } from '@mui/material/styles';
|
|
4
|
+
import { SwipeableDrawer, MenuItem, IconButton, Menu, useTheme, useMediaQuery, List, ListItem } from '@mui/material';
|
|
5
|
+
import { FormattedMessage } from 'react-intl';
|
|
6
|
+
import Icon from '@mui/material/Icon';
|
|
7
|
+
import classNames from 'classnames';
|
|
8
|
+
import { useThemeProps } from '@mui/system';
|
|
9
|
+
import { Link, SCRoutes, useSCRouting, useSCUser } from '@selfcommunity/react-core';
|
|
10
|
+
import ConfirmDialog from '../../shared/ConfirmDialog/ConfirmDialog';
|
|
11
|
+
import { GroupService } from '@selfcommunity/api-services';
|
|
12
|
+
import { SCEventType, SCTopicType } from '../../constants/PubSub';
|
|
13
|
+
import PubSub from 'pubsub-js';
|
|
14
|
+
const PREFIX = 'SCGroupSettingsIconButton';
|
|
15
|
+
const classes = {
|
|
16
|
+
root: `${PREFIX}-root`,
|
|
17
|
+
drawerRoot: `${PREFIX}-drawer-root`,
|
|
18
|
+
menuRoot: `${PREFIX}-menu-root`,
|
|
19
|
+
paper: `${PREFIX}-paper`,
|
|
20
|
+
item: `${PREFIX}-item`
|
|
21
|
+
};
|
|
22
|
+
const Root = styled(IconButton, {
|
|
23
|
+
name: PREFIX,
|
|
24
|
+
slot: 'Root'
|
|
25
|
+
})(() => ({}));
|
|
26
|
+
const SwipeableDrawerRoot = styled(SwipeableDrawer, {
|
|
27
|
+
name: PREFIX,
|
|
28
|
+
slot: 'DrawerRoot'
|
|
29
|
+
})(() => ({}));
|
|
30
|
+
const MenuRoot = styled(Menu, {
|
|
31
|
+
name: PREFIX,
|
|
32
|
+
slot: 'MenuRoot'
|
|
33
|
+
})(() => ({}));
|
|
34
|
+
/**
|
|
35
|
+
* > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
|
|
36
|
+
|
|
37
|
+
#### Import
|
|
38
|
+
|
|
39
|
+
```jsx
|
|
40
|
+
import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
#### Component Name
|
|
44
|
+
|
|
45
|
+
The name `SCGroupSettingsIconButton` can be used when providing style overrides in the theme.
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
#### CSS
|
|
49
|
+
|
|
50
|
+
|Rule Name|Global class|Description|
|
|
51
|
+
|---|---|---|
|
|
52
|
+
|root|.SCGroupSettingsIconButton-root|Styles applied to the root element.|
|
|
53
|
+
|
|
54
|
+
* @param inProps
|
|
55
|
+
*/
|
|
56
|
+
export default function GroupSettingsIconButton(inProps) {
|
|
57
|
+
// PROPS
|
|
58
|
+
const props = useThemeProps({
|
|
59
|
+
props: inProps,
|
|
60
|
+
name: PREFIX
|
|
61
|
+
});
|
|
62
|
+
const { className = null, group, user, onRemoveSuccess } = props, rest = __rest(props, ["className", "group", "user", "onRemoveSuccess"]);
|
|
63
|
+
// STATE
|
|
64
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
65
|
+
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
|
|
66
|
+
// HOOKS
|
|
67
|
+
const theme = useTheme();
|
|
68
|
+
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
|
|
69
|
+
const scRoutingContext = useSCRouting();
|
|
70
|
+
// CONTEXT
|
|
71
|
+
const scUserContext = useSCUser();
|
|
72
|
+
// HANDLERS
|
|
73
|
+
const handleOpen = (event) => {
|
|
74
|
+
setAnchorEl(event.currentTarget);
|
|
75
|
+
};
|
|
76
|
+
const handleClose = () => {
|
|
77
|
+
setAnchorEl(null);
|
|
78
|
+
};
|
|
79
|
+
const handleOpenDialog = () => {
|
|
80
|
+
setOpenConfirmDialog(true);
|
|
81
|
+
setAnchorEl(null);
|
|
82
|
+
};
|
|
83
|
+
const handleCloseDialog = () => {
|
|
84
|
+
setOpenConfirmDialog(false);
|
|
85
|
+
setAnchorEl(null);
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Notify UI when a user is removed from a group
|
|
89
|
+
* @param group
|
|
90
|
+
* @param user
|
|
91
|
+
*/
|
|
92
|
+
function notifyChanges(group, user) {
|
|
93
|
+
if (group && user) {
|
|
94
|
+
PubSub.publish(`${SCTopicType.GROUP}.${SCEventType.REMOVE_MEMBER}`, { group, user });
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handles thread deletion
|
|
99
|
+
*/
|
|
100
|
+
function handleRemoveUser() {
|
|
101
|
+
GroupService.removeUserFromGroup(group.id, user.id)
|
|
102
|
+
.then(() => {
|
|
103
|
+
notifyChanges(group, user);
|
|
104
|
+
onRemoveSuccess && onRemoveSuccess();
|
|
105
|
+
handleCloseDialog();
|
|
106
|
+
})
|
|
107
|
+
.catch((error) => {
|
|
108
|
+
setOpenConfirmDialog(false);
|
|
109
|
+
console.log(error);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (scUserContext.user.id === user.id) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
*
|
|
117
|
+
*/
|
|
118
|
+
const renderList = () => {
|
|
119
|
+
if (isMobile) {
|
|
120
|
+
return [
|
|
121
|
+
React.createElement(ListItem, { className: classes.item, key: "message", component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user) },
|
|
122
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" })),
|
|
123
|
+
React.createElement(ListItem, { className: classes.item, key: "delete", onClick: handleOpenDialog },
|
|
124
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.remove", defaultMessage: "ui.groupSettingsIconButton.item.remove" }))
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
return [
|
|
129
|
+
React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user), key: "message" },
|
|
130
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" })),
|
|
131
|
+
React.createElement(MenuItem, { className: classes.item, onClick: handleOpenDialog, key: "delete" },
|
|
132
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.remove", defaultMessage: "ui.groupSettingsIconButton.item.remove" }))
|
|
133
|
+
];
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
return (React.createElement(React.Fragment, null,
|
|
137
|
+
React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest, { onClick: handleOpen }),
|
|
138
|
+
React.createElement(Icon, null, "more_vert")),
|
|
139
|
+
isMobile ? (React.createElement(SwipeableDrawerRoot, { className: classes.drawerRoot, anchor: "bottom", open: Boolean(anchorEl), onClose: handleClose, onOpen: handleOpen, PaperProps: { className: classes.paper }, disableSwipeToOpen: true },
|
|
140
|
+
React.createElement(List, null, renderList()))) : (React.createElement(MenuRoot, { className: classes.menuRoot, anchorEl: anchorEl, open: Boolean(anchorEl), onClose: handleClose, PaperProps: { className: classes.paper } }, renderList())),
|
|
141
|
+
openConfirmDialog && (React.createElement(ConfirmDialog, { open: openConfirmDialog, title: React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.dialog.msg", defaultMessage: "ui.groupSettingsIconButton.dialog.msg", values: {
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
143
|
+
// @ts-ignore
|
|
144
|
+
b: (...chunks) => React.createElement("strong", null, chunks),
|
|
145
|
+
user: user.username,
|
|
146
|
+
group: group.name
|
|
147
|
+
} }), btnConfirm: React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.dialog.confirm", defaultMessage: "ui.groupSettingsIconButton.dialog.confirm" }), onConfirm: handleRemoveUser, onClose: handleCloseDialog }))));
|
|
148
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SCGroupType } from '@selfcommunity/types';
|
|
1
|
+
import { SCGroupType, SCUserType } from '@selfcommunity/types';
|
|
2
2
|
export interface GroupSubscribeButtonProps {
|
|
3
3
|
/**
|
|
4
4
|
* Overrides or extends the styles applied to the component.
|
|
@@ -16,11 +16,16 @@ export interface GroupSubscribeButtonProps {
|
|
|
16
16
|
*/
|
|
17
17
|
groupId?: number;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* The user to be accepted into the group
|
|
20
|
+
* @default null
|
|
21
|
+
*/
|
|
22
|
+
user?: SCUserType;
|
|
23
|
+
/**
|
|
24
|
+
* onSubscribe callback
|
|
20
25
|
* @param user
|
|
21
26
|
* @param joined
|
|
22
27
|
*/
|
|
23
|
-
|
|
28
|
+
onSubscribe?: (group: SCGroupType, status: string | null) => any;
|
|
24
29
|
/**
|
|
25
30
|
* Others properties
|
|
26
31
|
*/
|