@selfcommunity/react-ui 0.7.9-alpha.2 → 0.7.9-alpha.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/components/BottomNavigation/BottomNavigation.js +3 -1
- package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
- package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
- package/lib/cjs/components/Composer/Attributes/Attributes.d.ts +1 -1
- package/lib/cjs/components/Composer/Attributes/Attributes.js +9 -2
- package/lib/cjs/components/Composer/Composer.d.ts +2 -1
- package/lib/cjs/components/Composer/Composer.js +39 -12
- package/lib/cjs/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +7 -3
- package/lib/cjs/components/Composer/Content/ContentPost/ContentPost.js +4 -3
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +7 -1
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +46 -12
- package/lib/cjs/components/CreateGroupButton/CreateGroupButton.d.ts +2 -2
- package/lib/cjs/components/CreateGroupButton/CreateGroupButton.js +5 -6
- package/lib/cjs/components/CustomAdv/CustomAdv.d.ts +4 -0
- package/lib/cjs/components/{CreateGroup/CreateGroup.d.ts → EditGroupButton/EditGroupButton.d.ts} +11 -16
- package/lib/cjs/components/EditGroupButton/EditGroupButton.js +61 -0
- package/lib/cjs/components/EditGroupButton/index.d.ts +3 -0
- package/lib/cjs/components/EditGroupButton/index.js +5 -0
- package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/cjs/components/FeedObject/FeedObject.js +23 -6
- package/lib/cjs/components/Group/Group.d.ts +4 -3
- package/lib/cjs/components/Group/Group.js +5 -4
- package/lib/cjs/components/Group/Skeleton.js +1 -1
- package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.d.ts +49 -0
- package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.js +101 -0
- package/lib/cjs/components/GroupAutocomplete/index.d.ts +3 -0
- package/lib/cjs/components/GroupAutocomplete/index.js +5 -0
- package/lib/cjs/components/GroupForm/GroupForm.d.ts +70 -0
- package/lib/cjs/components/GroupForm/GroupForm.js +239 -0
- package/lib/cjs/components/GroupForm/constants.d.ts +1 -0
- package/lib/cjs/components/{CreateGroup → GroupForm}/constants.js +1 -1
- package/lib/cjs/components/GroupForm/index.d.ts +3 -0
- package/lib/cjs/components/GroupForm/index.js +5 -0
- package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +6 -5
- package/lib/cjs/components/GroupHeader/GroupHeader.js +21 -11
- package/lib/cjs/components/GroupHeader/Skeleton.d.ts +2 -4
- package/lib/cjs/components/GroupHeader/Skeleton.js +10 -10
- package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.js +8 -8
- package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +9 -6
- package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
- package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +3 -2
- package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +29 -14
- package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
- package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +17 -7
- package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +56 -0
- package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.js +137 -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 +7 -2
- package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +24 -9
- package/lib/cjs/components/Groups/Groups.d.ts +65 -0
- package/lib/cjs/components/Groups/Groups.js +135 -0
- package/lib/cjs/components/Groups/Skeleton.d.ts +34 -0
- package/lib/cjs/components/Groups/Skeleton.js +45 -0
- package/lib/cjs/components/Groups/constants.d.ts +1 -0
- package/lib/cjs/components/Groups/constants.js +4 -0
- package/lib/cjs/components/Groups/index.d.ts +4 -0
- package/lib/cjs/components/Groups/index.js +8 -0
- package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.d.ts +2 -1
- package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
- package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +5 -1
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
- package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +10 -7
- 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/index.d.ts +7 -3
- package/lib/cjs/index.js +14 -4
- package/lib/esm/components/BottomNavigation/BottomNavigation.js +3 -1
- package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
- package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
- package/lib/esm/components/Composer/Attributes/Attributes.d.ts +1 -1
- package/lib/esm/components/Composer/Attributes/Attributes.js +9 -2
- package/lib/esm/components/Composer/Composer.d.ts +2 -1
- package/lib/esm/components/Composer/Composer.js +39 -12
- package/lib/esm/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +7 -3
- package/lib/esm/components/Composer/Content/ContentPost/ContentPost.js +4 -3
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +7 -1
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +45 -12
- package/lib/esm/components/CreateGroupButton/CreateGroupButton.d.ts +2 -2
- package/lib/esm/components/CreateGroupButton/CreateGroupButton.js +5 -6
- package/lib/esm/components/CustomAdv/CustomAdv.d.ts +4 -0
- package/lib/esm/components/{CreateGroup/CreateGroup.d.ts → EditGroupButton/EditGroupButton.d.ts} +11 -16
- package/lib/esm/components/EditGroupButton/EditGroupButton.js +58 -0
- package/lib/esm/components/EditGroupButton/index.d.ts +3 -0
- package/lib/esm/components/EditGroupButton/index.js +2 -0
- package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/esm/components/FeedObject/FeedObject.js +24 -7
- package/lib/esm/components/Group/Group.d.ts +4 -3
- package/lib/esm/components/Group/Group.js +5 -4
- package/lib/esm/components/Group/Skeleton.js +1 -1
- package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.d.ts +49 -0
- package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.js +99 -0
- package/lib/esm/components/GroupAutocomplete/index.d.ts +3 -0
- package/lib/esm/components/GroupAutocomplete/index.js +2 -0
- package/lib/esm/components/GroupForm/GroupForm.d.ts +70 -0
- package/lib/esm/components/GroupForm/GroupForm.js +236 -0
- package/lib/esm/components/GroupForm/constants.d.ts +1 -0
- package/lib/esm/components/GroupForm/constants.js +1 -0
- package/lib/esm/components/GroupForm/index.d.ts +3 -0
- package/lib/esm/components/GroupForm/index.js +2 -0
- package/lib/esm/components/GroupHeader/GroupHeader.d.ts +6 -5
- package/lib/esm/components/GroupHeader/GroupHeader.js +21 -11
- package/lib/esm/components/GroupHeader/Skeleton.d.ts +2 -4
- package/lib/esm/components/GroupHeader/Skeleton.js +10 -10
- package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.js +8 -8
- package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +9 -6
- package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
- package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +4 -3
- package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +31 -16
- package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
- package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +17 -7
- package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +56 -0
- package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.js +134 -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 +7 -2
- package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +25 -10
- package/lib/esm/components/Groups/Groups.d.ts +65 -0
- package/lib/esm/components/Groups/Groups.js +132 -0
- package/lib/esm/components/Groups/Skeleton.d.ts +34 -0
- package/lib/esm/components/Groups/Skeleton.js +42 -0
- package/lib/esm/components/Groups/constants.d.ts +1 -0
- package/lib/esm/components/Groups/constants.js +1 -0
- package/lib/esm/components/Groups/index.d.ts +4 -0
- package/lib/esm/components/Groups/index.js +4 -0
- package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.d.ts +2 -1
- package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
- package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +5 -1
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
- package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +11 -8
- 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/index.d.ts +7 -3
- package/lib/esm/index.js +8 -4
- package/lib/umd/react-ui.js +1 -1
- package/package.json +6 -6
- package/lib/cjs/components/CreateGroup/CreateGroup.js +0 -187
- package/lib/cjs/components/CreateGroup/constants.d.ts +0 -1
- package/lib/cjs/components/CreateGroup/index.d.ts +0 -3
- package/lib/cjs/components/CreateGroup/index.js +0 -5
- package/lib/esm/components/CreateGroup/CreateGroup.js +0 -184
- package/lib/esm/components/CreateGroup/constants.d.ts +0 -1
- package/lib/esm/components/CreateGroup/constants.js +0 -1
- package/lib/esm/components/CreateGroup/index.d.ts +0 -3
- package/lib/esm/components/CreateGroup/index.js +0 -2
|
@@ -73,25 +73,25 @@ export default function GroupInfoWidget(inProps) {
|
|
|
73
73
|
React.createElement(Typography, { component: "div", className: classes.privacy }, scGroup.privacy === SCGroupPrivacyType.PUBLIC ? (React.createElement(React.Fragment, null,
|
|
74
74
|
React.createElement(Typography, { className: classes.privacyTitle },
|
|
75
75
|
React.createElement(Icon, null, "public"),
|
|
76
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
76
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public", defaultMessage: "ui.groupForm.privacy.public" })),
|
|
77
77
|
React.createElement(Typography, { variant: "body2" },
|
|
78
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
78
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))) : (React.createElement(React.Fragment, null,
|
|
79
79
|
React.createElement(Typography, { className: classes.privacyTitle },
|
|
80
80
|
React.createElement(Icon, null, "private"),
|
|
81
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
81
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private", defaultMessage: "ui.groupForm.privacy.private" })),
|
|
82
82
|
React.createElement(Typography, { variant: "body2" },
|
|
83
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
83
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } }))))),
|
|
84
84
|
scGroup.privacy === SCGroupPrivacyType.PRIVATE && (React.createElement(Typography, { component: "div", className: classes.visibility }, scGroup.visible ? (React.createElement(React.Fragment, null,
|
|
85
85
|
React.createElement(Typography, { className: classes.visibilityTitle },
|
|
86
86
|
React.createElement(Icon, null, "visibility"),
|
|
87
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
87
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.visible", defaultMessage: "ui.groupForm.visibility.visible" })),
|
|
88
88
|
React.createElement(Typography, { variant: "body2" },
|
|
89
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
89
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.visible.info", defaultMessage: "ui.groupForm.visibility.visible.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))) : (React.createElement(React.Fragment, null,
|
|
90
90
|
React.createElement(Typography, { className: classes.visibilityTitle },
|
|
91
91
|
React.createElement(Icon, null, "visibility_off"),
|
|
92
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
92
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.hidden", defaultMessage: "ui.groupForm.visibility.hidden" })),
|
|
93
93
|
React.createElement(Typography, { variant: "body2" },
|
|
94
|
-
React.createElement(FormattedMessage, { id: "ui.
|
|
94
|
+
React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.hidden.info", defaultMessage: "ui.groupForm.visibility.hidden.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))))),
|
|
95
95
|
React.createElement(Typography, { variant: "body2", className: classes.date },
|
|
96
96
|
React.createElement(FormattedMessage, { id: "ui.groupInfoWidget.date", defaultMessage: "ui.groupInfoWidget.date", values: { date: intl.formatDate(scGroup.created_at, { day: 'numeric', year: 'numeric', month: 'long' }) } })))));
|
|
97
97
|
}
|
|
@@ -71,6 +71,7 @@ const DialogRoot = styled(BaseDialog, {
|
|
|
71
71
|
* @param inProps
|
|
72
72
|
*/
|
|
73
73
|
export default function GroupInviteButton(inProps) {
|
|
74
|
+
var _a;
|
|
74
75
|
//PROPS
|
|
75
76
|
const props = useThemeProps({
|
|
76
77
|
props: inProps,
|
|
@@ -105,10 +106,9 @@ export default function GroupInviteButton(inProps) {
|
|
|
105
106
|
}
|
|
106
107
|
return [invited];
|
|
107
108
|
}, [invited]);
|
|
108
|
-
// CONST
|
|
109
|
-
const authUserId = scUserContext.user ? scUserContext.user.id : null;
|
|
110
109
|
// HOOKS
|
|
111
110
|
const { scGroup } = useSCFetchGroup({ id: groupId, group });
|
|
111
|
+
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]);
|
|
112
112
|
// INTL
|
|
113
113
|
const intl = useIntl();
|
|
114
114
|
function fetchResults() {
|
|
@@ -178,8 +178,11 @@ export default function GroupInviteButton(inProps) {
|
|
|
178
178
|
GroupService.inviteOrAcceptGroupRequest(scGroup.id, data)
|
|
179
179
|
.then(() => {
|
|
180
180
|
setIsSending(false);
|
|
181
|
+
setOpen(false);
|
|
182
|
+
setInvited([]);
|
|
181
183
|
})
|
|
182
184
|
.catch((error) => {
|
|
185
|
+
setOpen(false);
|
|
183
186
|
setLoading(false);
|
|
184
187
|
Logger.error(SCOPE_SC_UI, error);
|
|
185
188
|
});
|
|
@@ -221,23 +224,23 @@ export default function GroupInviteButton(inProps) {
|
|
|
221
224
|
setList((prev) => [...prev, option]);
|
|
222
225
|
};
|
|
223
226
|
/**
|
|
224
|
-
* If
|
|
227
|
+
* If in group edit mode and logged-in user is not also the group manager, the component is hidden.
|
|
225
228
|
// */
|
|
226
|
-
if (!
|
|
229
|
+
if (group && !isGroupAdmin) {
|
|
227
230
|
return null;
|
|
228
231
|
}
|
|
229
232
|
/**
|
|
230
233
|
* Renders root object
|
|
231
234
|
*/
|
|
232
235
|
return (React.createElement(React.Fragment, null,
|
|
233
|
-
React.createElement(Root, Object.assign({ className: classNames(classes.root, className), onClick: handleClose,
|
|
236
|
+
React.createElement(Root, Object.assign({ className: classNames(classes.root, className), onClick: handleClose, variant: scGroup ? 'contained' : 'outlined', color: scGroup ? 'secondary' : 'inherit', startIcon: React.createElement(Icon, { fontSize: "small" }, "add") }, rest),
|
|
234
237
|
React.createElement(FormattedMessage, { id: "ui.groupInviteButton", defaultMessage: "ui.groupInviteButton" })),
|
|
235
238
|
open && (React.createElement(DialogRoot, { DialogContentProps: { dividers: false }, open: true, className: classes.dialogRoot, title: React.createElement(React.Fragment, null,
|
|
236
239
|
React.createElement(IconButton, { onClick: handleClose },
|
|
237
240
|
React.createElement(Icon, { fontSize: "medium" }, "arrow_back")),
|
|
238
241
|
React.createElement(Typography, { className: classes.dialogTitle },
|
|
239
242
|
React.createElement(FormattedMessage, { id: "ui.groupInviteButton.dialog.title", defaultMessage: "ui.groupInviteButton.dialog.title" })),
|
|
240
|
-
React.createElement(LoadingButton, { size: "small", color: "secondary", variant: "contained", onClick: handleSendInvitations, loading: isSending },
|
|
243
|
+
React.createElement(LoadingButton, { size: "small", color: "secondary", variant: "contained", onClick: handleSendInvitations, loading: isSending, disabled: !invited.length },
|
|
241
244
|
React.createElement(FormattedMessage, { id: "ui.groupInviteButton.dialog.button.end", defaultMessage: "ui.groupInviteButton.dialog.button.end" }))) },
|
|
242
245
|
React.createElement(Box, { className: classes.dialogContent },
|
|
243
246
|
React.createElement(Autocomplete, { className: classes.autocomplete, loading: loading, size: "small", multiple: true, freeSolo: true, disableClearable: true, options: suggested, onChange: handleChange, onInputChange: handleInputChange, inputValue: value, value: invited, getOptionLabel: (option) => (option ? option.username : '...'), isOptionEqualToValue: (option, value) => (option ? value.id === option.id : false), renderTags: () => null, renderOption: (props, option) => (React.createElement(Box, Object.assign({ component: "li" }, props),
|
|
@@ -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 } 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,7 @@ 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 || (scGroup && scGroup.privacy !== SCGroupPrivacyType.PUBLIC && autoHide)) {
|
|
73
74
|
return;
|
|
74
75
|
}
|
|
75
76
|
if (members.length === 0) {
|
|
@@ -2,11 +2,11 @@ import { __rest } from "tslib";
|
|
|
2
2
|
import React, { useEffect, useMemo, useReducer, useState } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import List from '@mui/material/List';
|
|
5
|
-
import { Button, CardContent, ListItem, Typography, useMediaQuery, useTheme } from '@mui/material';
|
|
5
|
+
import { Button, CardActions, CardContent, ListItem, Typography, useMediaQuery, useTheme } from '@mui/material';
|
|
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';
|
|
@@ -18,9 +18,12 @@ 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 GroupInviteButton from '../GroupInviteButton';
|
|
22
|
+
import GroupSettingsIconButton from '../GroupSettingsIconButton';
|
|
21
23
|
const classes = {
|
|
22
24
|
root: `${PREFIX}-root`,
|
|
23
25
|
title: `${PREFIX}-title`,
|
|
26
|
+
actions: `${PREFIX}-actions`,
|
|
24
27
|
noResults: `${PREFIX}-no-results`,
|
|
25
28
|
showMore: `${PREFIX}-show-more`,
|
|
26
29
|
dialogRoot: `${PREFIX}-dialog-root`,
|
|
@@ -66,6 +69,7 @@ const DialogRoot = styled(BaseDialog, {
|
|
|
66
69
|
* @param inProps
|
|
67
70
|
*/
|
|
68
71
|
export default function GroupMembersWidget(inProps) {
|
|
72
|
+
var _a;
|
|
69
73
|
// PROPS
|
|
70
74
|
const props = useThemeProps({
|
|
71
75
|
props: inProps,
|
|
@@ -83,8 +87,11 @@ export default function GroupMembersWidget(inProps) {
|
|
|
83
87
|
const [openDialog, setOpenDialog] = useState(false);
|
|
84
88
|
// CONTEXT
|
|
85
89
|
const scUserContext = useSCUser();
|
|
90
|
+
const scRoutingContext = useSCRouting();
|
|
86
91
|
const scPreferencesContext = useSCPreferences();
|
|
87
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]);
|
|
88
95
|
// MEMO
|
|
89
96
|
const contentAvailability = useMemo(() => SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY in scPreferencesContext.preferences &&
|
|
90
97
|
scPreferencesContext.preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value, [scPreferencesContext.preferences]);
|
|
@@ -173,19 +180,27 @@ export default function GroupMembersWidget(inProps) {
|
|
|
173
180
|
if (!state.initialized) {
|
|
174
181
|
return React.createElement(Skeleton, null);
|
|
175
182
|
}
|
|
176
|
-
const content = (React.createElement(
|
|
177
|
-
React.createElement(
|
|
178
|
-
React.createElement(
|
|
179
|
-
|
|
180
|
-
React.createElement(
|
|
181
|
-
|
|
182
|
-
React.createElement(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
React.createElement(
|
|
183
|
+
const content = (React.createElement(React.Fragment, null,
|
|
184
|
+
React.createElement(CardContent, null,
|
|
185
|
+
React.createElement(Typography, { className: classes.title, variant: "h5" },
|
|
186
|
+
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.title", defaultMessage: "ui.groupMembersWidget.title" })),
|
|
187
|
+
!state.count ? (React.createElement(Typography, { className: classes.noResults, variant: "body2" },
|
|
188
|
+
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.subtitle.noResults", defaultMessage: "" }))) : (React.createElement(React.Fragment, null,
|
|
189
|
+
React.createElement(List, null, state.results.slice(0, state.visibleItems).map((user) => {
|
|
190
|
+
var _a;
|
|
191
|
+
return (React.createElement(ListItem, { key: user.id },
|
|
192
|
+
React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user })) : ((_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) },
|
|
193
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))) : null, user: user, userId: user.id })));
|
|
194
|
+
})),
|
|
195
|
+
state.count > state.visibleItems && (React.createElement(Button, { className: classes.showMore, onClick: handleToggleDialogOpen },
|
|
196
|
+
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.button.showMore", defaultMessage: "ui.groupMembersWidget.button.showMore" }))))),
|
|
197
|
+
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),
|
|
198
|
+
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 },
|
|
199
|
+
React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.noMoreResults", defaultMessage: "ui.groupMembersWidget.noMoreResults" })) },
|
|
200
|
+
React.createElement(List, null, state.results.map((user) => (React.createElement(ListItem, { key: user.id },
|
|
201
|
+
React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user })) : (React.createElement(Button, null,
|
|
202
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))), user: user, userId: user.id }))))))))),
|
|
203
|
+
React.createElement(CardActions, { className: classes.actions },
|
|
204
|
+
React.createElement(GroupInviteButton, { groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup }))));
|
|
190
205
|
return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
|
|
191
206
|
}
|
|
@@ -15,11 +15,6 @@ export interface GroupRequestsWidgetProps extends VirtualScrollerItemProps, Widg
|
|
|
15
15
|
* @default null
|
|
16
16
|
*/
|
|
17
17
|
groupId?: number | string;
|
|
18
|
-
/**
|
|
19
|
-
* Hides this component
|
|
20
|
-
* @default false
|
|
21
|
-
*/
|
|
22
|
-
autoHide?: boolean;
|
|
23
18
|
/**
|
|
24
19
|
* Limit the number of users to show
|
|
25
20
|
* @default false
|
|
@@ -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 = {} } = props, rest = __rest(props, ["groupId", "group", "limit", "className", "cacheStrategy", "onHeightChange", "onStateChange", "UserProps", "DialogProps"]);
|
|
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,16 @@ export default function GroupRequestsWidget(inProps) {
|
|
|
166
169
|
const handleToggleDialogOpen = () => {
|
|
167
170
|
setOpenDialog((prev) => !prev);
|
|
168
171
|
};
|
|
172
|
+
const handleSubscribeAction = useMemo(() => (userId) => {
|
|
173
|
+
const newRequests = [...state.results];
|
|
174
|
+
const _updated = newRequests.findIndex((u) => u.id !== userId);
|
|
175
|
+
dispatch({
|
|
176
|
+
type: actionWidgetTypes.SET_RESULTS,
|
|
177
|
+
payload: { results: newRequests.length > 1 ? _updated : [] }
|
|
178
|
+
});
|
|
179
|
+
}, [dispatch, state.count, state.results]);
|
|
169
180
|
// RENDER
|
|
170
|
-
if ((
|
|
181
|
+
if ((!state.count && state.initialized) || !contentAvailability || !scGroup || !state.count || !state.results.length || !isGroupAdmin) {
|
|
171
182
|
return React.createElement(HiddenPlaceholder, null);
|
|
172
183
|
}
|
|
173
184
|
if (!state.initialized) {
|
|
@@ -176,16 +187,15 @@ export default function GroupRequestsWidget(inProps) {
|
|
|
176
187
|
const content = (React.createElement(CardContent, null,
|
|
177
188
|
React.createElement(Typography, { className: classes.title, variant: "h5" },
|
|
178
189
|
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,
|
|
190
|
+
React.createElement(React.Fragment, null,
|
|
181
191
|
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(
|
|
192
|
+
React.createElement(User, { elevation: 0, actions: React.createElement(GroupSubscribeButton, { group: scGroup, groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, userId: user.id, onSubscribe: () => handleSubscribeAction(user.id) }), user: user, userId: user.id }))))),
|
|
183
193
|
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" }))))
|
|
194
|
+
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.button.showMore", defaultMessage: "ui.groupRequestsWidget.button.showMore" })))),
|
|
185
195
|
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
196
|
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
197
|
React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.noMoreResults", defaultMessage: "ui.groupRequestsWidget.noMoreResults" })) },
|
|
188
198
|
React.createElement(List, null, state.results.map((user) => (React.createElement(ListItem, { key: user.id },
|
|
189
|
-
React.createElement(User, { elevation: 0, actions: React.createElement(
|
|
199
|
+
React.createElement(User, { elevation: 0, actions: React.createElement(GroupSubscribeButton, { group: scGroup, groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, userId: user.id }), user: user, userId: user.id }))))))))));
|
|
190
200
|
return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
|
|
191
201
|
}
|
|
@@ -0,0 +1,56 @@
|
|
|
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 menu item delete click
|
|
11
|
+
*/
|
|
12
|
+
onMenuItemRemoveClick?: () => void;
|
|
13
|
+
/**
|
|
14
|
+
* Handles callback on delete confirm
|
|
15
|
+
*/
|
|
16
|
+
onItemRemoveConfirm?: () => void;
|
|
17
|
+
/**
|
|
18
|
+
* The deleting thread id
|
|
19
|
+
*/
|
|
20
|
+
userToRemove?: any;
|
|
21
|
+
/**
|
|
22
|
+
* The user
|
|
23
|
+
*/
|
|
24
|
+
user?: SCUserType;
|
|
25
|
+
/**
|
|
26
|
+
* The group obj
|
|
27
|
+
*/
|
|
28
|
+
group?: SCGroupType;
|
|
29
|
+
/**
|
|
30
|
+
* Any other properties
|
|
31
|
+
*/
|
|
32
|
+
[p: string]: any;
|
|
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: GroupSettingsIconButtonProps): JSX.Element;
|
|
@@ -0,0 +1,134 @@
|
|
|
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
|
+
const PREFIX = 'SCGroupSettingsIconButton';
|
|
12
|
+
const classes = {
|
|
13
|
+
root: `${PREFIX}-root`,
|
|
14
|
+
drawerRoot: `${PREFIX}-drawer-root`,
|
|
15
|
+
menuRoot: `${PREFIX}-menu-root`,
|
|
16
|
+
paper: `${PREFIX}-paper`,
|
|
17
|
+
item: `${PREFIX}-item`
|
|
18
|
+
};
|
|
19
|
+
const Root = styled(IconButton, {
|
|
20
|
+
name: PREFIX,
|
|
21
|
+
slot: 'Root'
|
|
22
|
+
})(() => ({}));
|
|
23
|
+
const SwipeableDrawerRoot = styled(SwipeableDrawer, {
|
|
24
|
+
name: PREFIX,
|
|
25
|
+
slot: 'DrawerRoot'
|
|
26
|
+
})(() => ({}));
|
|
27
|
+
const MenuRoot = styled(Menu, {
|
|
28
|
+
name: PREFIX,
|
|
29
|
+
slot: 'MenuRoot'
|
|
30
|
+
})(() => ({}));
|
|
31
|
+
/**
|
|
32
|
+
* > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
|
|
33
|
+
|
|
34
|
+
#### Import
|
|
35
|
+
|
|
36
|
+
```jsx
|
|
37
|
+
import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
#### Component Name
|
|
41
|
+
|
|
42
|
+
The name `SCGroupSettingsIconButton` can be used when providing style overrides in the theme.
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
#### CSS
|
|
46
|
+
|
|
47
|
+
|Rule Name|Global class|Description|
|
|
48
|
+
|---|---|---|
|
|
49
|
+
|root|.SCGroupSettingsIconButton-root|Styles applied to the root element.|
|
|
50
|
+
|
|
51
|
+
* @param inProps
|
|
52
|
+
*/
|
|
53
|
+
export default function GroupSettingsIconButton(inProps) {
|
|
54
|
+
// PROPS
|
|
55
|
+
const props = useThemeProps({
|
|
56
|
+
props: inProps,
|
|
57
|
+
name: PREFIX
|
|
58
|
+
});
|
|
59
|
+
const { className = null, onMenuItemRemoveClick, group, user, onItemRemoveConfirm, userToRemove } = props, rest = __rest(props, ["className", "onMenuItemRemoveClick", "group", "user", "onItemRemoveConfirm", "userToRemove"]);
|
|
60
|
+
// STATE
|
|
61
|
+
const [anchorEl, setAnchorEl] = useState(null);
|
|
62
|
+
const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
|
|
63
|
+
// HOOKS
|
|
64
|
+
const theme = useTheme();
|
|
65
|
+
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
|
|
66
|
+
const scRoutingContext = useSCRouting();
|
|
67
|
+
// CONTEXT
|
|
68
|
+
const scUserContext = useSCUser();
|
|
69
|
+
// HANDLERS
|
|
70
|
+
const handleOpen = (event) => {
|
|
71
|
+
setAnchorEl(event.currentTarget);
|
|
72
|
+
};
|
|
73
|
+
const handleClose = () => {
|
|
74
|
+
setAnchorEl(null);
|
|
75
|
+
};
|
|
76
|
+
const handleOpenDialog = () => {
|
|
77
|
+
setOpenConfirmDialog(true);
|
|
78
|
+
setAnchorEl(null);
|
|
79
|
+
};
|
|
80
|
+
const handleCloseDialog = () => {
|
|
81
|
+
setOpenConfirmDialog(false);
|
|
82
|
+
setAnchorEl(null);
|
|
83
|
+
onItemRemoveConfirm && onItemRemoveConfirm();
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Handles thread deletion
|
|
87
|
+
*/
|
|
88
|
+
function handleRemoveUser() {
|
|
89
|
+
console.log(userToRemove);
|
|
90
|
+
// GroupService.removeUserFromGroup(group.id, userToRemove)
|
|
91
|
+
// .then(() => {
|
|
92
|
+
// PubSub.publish('snippetsChannelDelete', userToRemove);
|
|
93
|
+
// handleCloseDialog();
|
|
94
|
+
// })
|
|
95
|
+
// .catch((error) => {
|
|
96
|
+
// setOpenConfirmDialog(false);
|
|
97
|
+
// console.log(error);
|
|
98
|
+
// });
|
|
99
|
+
}
|
|
100
|
+
if (scUserContext.user.id === user.id) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
*
|
|
105
|
+
*/
|
|
106
|
+
const renderList = () => {
|
|
107
|
+
if (isMobile) {
|
|
108
|
+
return [
|
|
109
|
+
React.createElement(ListItem, { className: classes.item, key: "message", component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user) },
|
|
110
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" })),
|
|
111
|
+
React.createElement(ListItem, { className: classes.item, key: "report", onClick: () => console.log('report') },
|
|
112
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.report", defaultMessage: "ui.groupSettingsIconButton.item.report" })),
|
|
113
|
+
React.createElement(ListItem, { className: classes.item, key: "delete", onClick: userToRemove ? handleOpenDialog : onMenuItemRemoveClick },
|
|
114
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.remove", defaultMessage: "ui.groupSettingsIconButton.item.remove" }))
|
|
115
|
+
];
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return [
|
|
119
|
+
React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.USER_PRIVATE_MESSAGES_ROUTE_NAME, user), key: "message" },
|
|
120
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" })),
|
|
121
|
+
React.createElement(MenuItem, { className: classes.item, onClick: () => console.log('report'), key: "report" },
|
|
122
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.report", defaultMessage: "ui.groupSettingsIconButton.item.report" })),
|
|
123
|
+
React.createElement(MenuItem, { className: classes.item, onClick: userToRemove ? handleOpenDialog : onMenuItemRemoveClick, key: "delete" },
|
|
124
|
+
React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.remove", defaultMessage: "ui.groupSettingsIconButton.item.remove" }))
|
|
125
|
+
];
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
return (React.createElement(React.Fragment, null,
|
|
129
|
+
React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest, { onClick: handleOpen }),
|
|
130
|
+
React.createElement(Icon, null, "more_vert")),
|
|
131
|
+
isMobile ? (React.createElement(SwipeableDrawerRoot, { className: classes.drawerRoot, anchor: "bottom", open: Boolean(anchorEl), onClose: handleClose, onOpen: handleOpen, PaperProps: { className: classes.paper }, disableSwipeToOpen: true },
|
|
132
|
+
React.createElement(List, null, renderList()))) : (React.createElement(MenuRoot, { className: classes.menuRoot, anchorEl: anchorEl, open: Boolean(anchorEl), onClose: handleClose, PaperProps: { className: classes.paper } }, renderList())),
|
|
133
|
+
openConfirmDialog && (React.createElement(ConfirmDialog, { open: openConfirmDialog, title: React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.dialog.msg", defaultMessage: "ui.groupSettingsIconButton.dialog.msg" }), btnConfirm: React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.dialog.confirm", defaultMessage: "ui.groupSettingsIconButton.dialog.confirm" }), onConfirm: handleRemoveUser, onClose: handleCloseDialog }))));
|
|
134
|
+
}
|
|
@@ -16,11 +16,16 @@ export interface GroupSubscribeButtonProps {
|
|
|
16
16
|
*/
|
|
17
17
|
groupId?: number;
|
|
18
18
|
/**
|
|
19
|
-
*
|
|
19
|
+
* id of the user to be accepted into the group
|
|
20
|
+
* @default null
|
|
21
|
+
*/
|
|
22
|
+
userId?: number;
|
|
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
|
*/
|