@selfcommunity/react-ui 0.7.9-alpha.7 → 0.7.9-alpha.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +6 -5
  2. package/lib/cjs/components/GroupHeader/GroupHeader.js +17 -9
  3. package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +2 -2
  4. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  5. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +3 -2
  6. package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +8 -2
  7. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
  8. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +16 -7
  9. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +56 -0
  10. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.js +137 -0
  11. package/lib/cjs/components/GroupSettingsIconButton/index.d.ts +3 -0
  12. package/lib/cjs/components/GroupSettingsIconButton/index.js +5 -0
  13. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +7 -2
  14. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +14 -11
  15. package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  16. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  17. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  18. package/lib/cjs/index.d.ts +3 -1
  19. package/lib/cjs/index.js +6 -2
  20. package/lib/esm/components/GroupHeader/GroupHeader.d.ts +6 -5
  21. package/lib/esm/components/GroupHeader/GroupHeader.js +17 -9
  22. package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +2 -2
  23. package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  24. package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +4 -3
  25. package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +8 -2
  26. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
  27. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +16 -7
  28. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +56 -0
  29. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.js +134 -0
  30. package/lib/esm/components/GroupSettingsIconButton/index.d.ts +3 -0
  31. package/lib/esm/components/GroupSettingsIconButton/index.js +2 -0
  32. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +7 -2
  33. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +14 -11
  34. package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  35. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  36. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  37. package/lib/esm/index.d.ts +3 -1
  38. package/lib/esm/index.js +4 -2
  39. package/lib/umd/react-ui.js +1 -1
  40. package/package.json +5 -5
@@ -8,6 +8,10 @@ export interface NavigationToolbarMobileProps extends ToolbarProps {
8
8
  * Disable search action if possible
9
9
  */
10
10
  disableSearch?: boolean;
11
+ /**
12
+ * Preserve the same as the desktop version
13
+ */
14
+ preserveDesktopLogo?: boolean;
11
15
  /**
12
16
  * Props spread to SearchAutocomplete component
13
17
  */
@@ -64,7 +64,7 @@ function NavigationToolbarMobile(inProps) {
64
64
  props: inProps,
65
65
  name: constants_1.PREFIX
66
66
  });
67
- const { className = '', disableSearch = false, SearchAutocompleteProps = {}, children = null, startActions = null, endActions = null, NavigationMenuIconButtonComponent = NavigationMenuIconButton_1.default, NavigationSettingsIconButtonComponent = NavigationSettingsIconButton_1.default } = props, rest = tslib_1.__rest(props, ["className", "disableSearch", "SearchAutocompleteProps", "children", "startActions", "endActions", "NavigationMenuIconButtonComponent", "NavigationSettingsIconButtonComponent"]);
67
+ const { className = '', disableSearch = false, preserveDesktopLogo = false, SearchAutocompleteProps = {}, children = null, startActions = null, endActions = null, NavigationMenuIconButtonComponent = NavigationMenuIconButton_1.default, NavigationSettingsIconButtonComponent = NavigationSettingsIconButton_1.default } = props, rest = tslib_1.__rest(props, ["className", "disableSearch", "preserveDesktopLogo", "SearchAutocompleteProps", "children", "startActions", "endActions", "NavigationMenuIconButtonComponent", "NavigationSettingsIconButtonComponent"]);
68
68
  // CONTEXT
69
69
  const scUserContext = (0, react_core_1.useSCUser)();
70
70
  const scRoutingContext = (0, react_core_1.useSCRouting)();
@@ -85,8 +85,7 @@ function NavigationToolbarMobile(inProps) {
85
85
  }
86
86
  const _children = children || (react_1.default.createElement(react_1.default.Fragment, null,
87
87
  react_1.default.createElement(NavigationMenuIconButtonComponent, null),
88
- react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo },
89
- react_1.default.createElement("img", { src: preferences[react_core_1.SCPreferences.LOGO_NAVBAR_LOGO_MOBILE].value, alt: "logo" }))));
88
+ react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo }, !preserveDesktopLogo ? (react_1.default.createElement("img", { src: preferences[react_core_1.SCPreferences.LOGO_NAVBAR_LOGO_MOBILE].value, alt: "logo" })) : (react_1.default.createElement("img", { src: preferences[react_core_1.SCPreferences.LOGO_NAVBAR_LOGO].value, alt: "logo" })))));
90
89
  return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(className, classes.root) }, rest),
91
90
  _children,
92
91
  startActions,
@@ -80,6 +80,7 @@ import BaseItem, { BaseItemProps } from './shared/BaseItem';
80
80
  import BaseDialog, { BaseDialogProps } from './shared/BaseDialog';
81
81
  import MediaChunkUploader, { MediaChunkUploaderProps } from './shared/MediaChunkUploader';
82
82
  import { File, EditMediaProps, Link, Share } from './shared/Media';
83
+ import HiddenPlaceholder from './shared/HiddenPlaceholder';
83
84
  import UrlTextField from './shared/UrlTextField';
84
85
  import UsernameTextField from './shared/UsernameTextField';
85
86
  import EmailTextField from './shared/EmailTextField';
@@ -118,6 +119,7 @@ import GroupMembersWidget, { GroupMembersWidgetProps, GroupMembersWidgetSkeleton
118
119
  import GroupRequestsWidget, { GroupRequestsWidgetProps, GroupRequestsWidgetSkeleton } from './components/GroupRequestsWidget';
119
120
  import Groups, { GroupsProps, GroupsSkeleton } from './components/Groups';
120
121
  import GroupForm, { GroupFormProps } from './components/GroupForm';
122
+ import GroupSettingsIconButton, { GroupSettingsIconButtonProps } from './components/GroupSettingsIconButton';
121
123
  /**
122
124
  * Constants
123
125
  */
@@ -142,4 +144,4 @@ import FeedObjectMediaPreview, { FeedObjectMediaPreviewProps } from './component
142
144
  /**
143
145
  * List all exports
144
146
  */
145
- export { AccountDataPortability, AccountDataPortabilityProps, AccountDataPortabilityButton, AccountDataPortabilityButtonProps, AccountDelete, AccountDeleteProps, AccountDeleteButton, AccountDeleteButtonProps, AccountRecover, AccountRecoverProps, AccountReset, AccountResetProps, AccountVerify, AccountVerifyProps, AccountChangeMailValidation, AccountChangeMailValidationProps, NavigationSettingsIconButton, NavigationSettingsIconButtonProps, NavigationSettingsItem, NavigationToolbarMobile, NavigationToolbarMobileProps, NavigationToolbarMobileSkeleton, NavigationToolbar, NavigationToolbarProps, NavigationToolbarSkeleton, NavigationMenuIconButton, NavigationMenuContent, NavigationMenuIconButtonProps, BottomNavigation, BottomNavigationProps, BroadcastMessages, BroadcastMessagesProps, BroadcastMessagesSkeleton, Category, CategoryProps, CategorySkeleton, CategoryAutocomplete, CategoryAutocompleteProps, CategoryFollowersButton, CategoryFollowersButtonProps, CategoryHeader, CategoryHeaderProps, CategoryHeaderSkeleton, Categories, CategoriesProps, CategoriesSkeleton, CategoriesSkeletonProps, UserFollowedCategoriesWidget, UserFollowedCategoriesWidgetProps, UserFollowedCategoriesWidgetSkeleton, CategoriesPopularWidget, CategoriesPopularWidgetSkeleton, CategoriesSuggestionWidget, CategoriesSuggestionWidgetProps, CategoriesSuggestionWidgetSkeleton, ChangeCover, ChangePicture, ChangePictureProps, ChangeCoverProps, Composer, ComposerProps, ComposerIconButton, ComposerIconButtonProps, Editor, EditorProps, EditorSkeleton, FriendshipUserButton, FriendshipButtonProps, Feed, FeedRef, FeedProps, FeedSidebarProps, FeedSkeleton, CategoryFollowButton, CategoryFollowButtonProps, FollowUserButton, FollowUserButtonProps, ConnectionUserButton, FeedObject, FeedObjectProps, FeedObjectSkeleton, FeedObjectMediaPreview, FeedObjectMediaPreviewProps, FeedUpdatesWidget, FeedUpdatesWidgetProps, FeedUpdatesWidgetSkeleton, GenericSkeleton, AvatarGroupSkeleton, CommentObject, CommentsObject, CommentsObjectProps, CommentObjectProps, CommentsObjectSkeleton, CommentObjectSkeleton, CommentObjectReply, CommentObjectReplyProps, CommentsFeedObject, CommentsFeedObjectProps, CommentsFeedObjectSkeleton, ReplyComment, InlineComposerWidget, InlineComposerWidgetProps, InlineComposerWidgetSkeleton, Notification, NotificationProps, NotificationSkeleton, UserSuggestionWidget, UserSuggestionWidgetProps, UserSuggestionWidgetSkeleton, PlatformWidget, PlatformWidgetProps, PlatformWidgetSkeleton, LocationAutocomplete, LocationAutocompleteProps, LoyaltyProgramWidget, LoyaltyProgramWidgetProps, LoyaltyProgramWidgetSkeleton, CategoryTrendingFeedWidget, CategoryTrendingFeedWidgetProps, CategoryTrendingFeedWidgetSkeleton, CategoryTrendingUsersWidget, CategoryTrendingUsersWidgetProps, CategoryTrendingPeopleWidgetSkeleton, RelatedFeedObjectsWidget, RelatedFeedObjectWidgetProps, RelatedFeedObjectsWidgetSkeleton, UserActionIconButton, UserActionIconButtonProps, UserCounters, UserCountersProps, UserProfileHeader, UserProfileHeaderProps, UserProfileHeaderSkeleton, UserInfoDialog, UserInfoDialogProps, UserInfo, UserInfoProps, UserInfoSkeleton, UserProfileBlocked, UserProfileBlockedProps, SCUserProfileFields, SCUserProfileSettings, UserProfileEdit, UserProfileEditProps, UserProfileEditSkeleton, UserProfileEditSectionPublicInfo, UserProfileEditSectionPublicInfoProps, UserProfileEditSectionSettings, UserProfileEditSectionSettingsProps, UserProfileEditSectionAccount, UserProfileEditSectionAccountProps, UserFollowedUsersWidget, UserFollowedUsersWidgetProps, UserFollowedUsersWidgetSkeleton, UserFollowersWidget, UserFollowersWidgetProps, UserFollowersWidgetSkeleton, UserConnectionsWidget, UserConnectionsWidgetProps, UserConnectionsWidgetSkeleton, UserConnectionsRequestsWidget, UserConnectionsRequestsWidgetProps, UserConnectionsRequestsWidgetSkeleton, UserConnectionsRequestsSentWidget, UserConnectionsRequestsSentWidgetProps, UserConnectionsRequestsSentWidgetSkeleton, UserSocialAssociation, UserSocialAssociationProps, SCUserSocialAssociations, CustomAdv, CustomAdvProps, CustomAdvSkeleton, User, UserProps, UserSkeleton, PrivateMessageThread, PrivateMessageThreadProps, PrivateMessageThreadSkeleton, PrivateMessageThreadItem, PrivateMessageThreadItemProps, PrivateMessageThreadItemSkeleton, PrivateMessageSnippetItem, PrivateMessageSnippetItemProps, PrivateMessageSnippetItemSkeleton, PrivateMessageEditor, PrivateMessageEditorProps, PrivateMessageEditorSkeleton, PrivateMessageSnippets, PrivateMessageSnippetsProps, PrivateMessageSnippetsSkeleton, PrivateMessageComponent, PrivateMessageComponentProps, PrivateMessageComponentSkeleton, PrivateMessageSettingsIconButton, PrivateMessageSettingsIconButtonProps, ToastNotifications, ToastNotificationsProps, ToastNotificationsSkeleton, SnippetNotifications, SnippetNotificationsProps, SnippetNotificationsSkeleton, SearchAutocomplete, SearchAutocompleteProps, SearchDialog, SearchDialogProps, Widget, WidgetProps, SCFeedWidgetType, SCFeedObjectTemplateType, SCCommentsOrderBy, SCFeedObjectActivitiesType, SCMediaObjectType, SCMediaChunkType, SCNotificationObjectTemplateType, SCBroadcastMessageTemplateType, ChangeGroupCover, ChangeGroupCoverProps, ChangeGroupPicture, ChangeGroupPictureProps, GroupHeader, GroupHeaderProps, GroupHeaderSkeleton, GroupMembersButton, GroupMembersButtonProps, CreateGroupButton, CreateGroupButtonProps, EditGroupButton, EditGroupButtonProps, GroupInviteButton, GroupInviteButtonProps, GroupInfoWidget, GroupInfoWidgetProps, GroupInfoWidgetSkeleton, Group, GroupProps, GroupSubscribeButton, GroupSubscribeButtonProps, GroupMembersWidget, GroupMembersWidgetProps, GroupMembersWidgetSkeleton, GroupRequestsWidget, GroupRequestsWidgetProps, GroupRequestsWidgetSkeleton, Groups, GroupsProps, GroupsSkeleton, GroupForm, GroupFormProps, UrlTextField, UsernameTextField, EmailTextField, PasswordTextField, PhoneTextField, MetadataField, InfiniteScroll, StickyBox, useStickyBox, StickyBoxProps, StickyBoxComponent, UseStickyBoxProps, TagChip, TagChipProps, UserDeletedSnackBar, UserDeletedSnackBarProps, UserAvatar, UserAvatarProps, Lightbox, CentralProgress, ConfirmDialog, LanguageSwitcher, MediaChunkUploader, MediaChunkUploaderProps, File, Link, Share, EditMediaProps, MEDIA_TYPE_EMBED, FACEBOOK_SHARE, TWITTER_SHARE, LINKEDIN_SHARE, DEFAULT_PRELOAD_OFFSET_VIEWPORT, MIN_PRELOAD_OFFSET_VIEWPORT, MAX_PRELOAD_OFFSET_VIEWPORT, ConsentSolution, ConsentSolutionProps, ConsentSolutionSkeleton, ConsentSolutionButton, ConsentSolutionButtonProps, LEGAL_POLICIES, DEFAULT_FIELDS, DEFAULT_PAGINATION_QUERY_PARAM_NAME, DEFAULT_PAGINATION_OFFSET, DEFAULT_PAGINATION_LIMIT, DEFAULT_WIDGETS_NUMBER, PollSuggestionWidget, PollSuggestionWidgetProps, Incubator, IncubatorSubscribeButton, IncubatorSubscribeButtonProps, IncubatorProps, IncubatorListWidget, IncubatorListWidgetProps, IncubatorDetail, IncubatorDetailProps, IncubatorSuggestionWidget, IncubatorSuggestionWidgetProps, ContributionUtils, bytesToSize, getUnseenNotification, getUnseenNotificationCounter, MessageUploaderUtils, getRelativeTime, Footer, FooterProps, FooterSkeleton, BaseItem, BaseItemProps, BaseDialog, BaseDialogProps };
147
+ export { AccountDataPortability, AccountDataPortabilityProps, AccountDataPortabilityButton, AccountDataPortabilityButtonProps, AccountDelete, AccountDeleteProps, AccountDeleteButton, AccountDeleteButtonProps, AccountRecover, AccountRecoverProps, AccountReset, AccountResetProps, AccountVerify, AccountVerifyProps, AccountChangeMailValidation, AccountChangeMailValidationProps, NavigationSettingsIconButton, NavigationSettingsIconButtonProps, NavigationSettingsItem, NavigationToolbarMobile, NavigationToolbarMobileProps, NavigationToolbarMobileSkeleton, NavigationToolbar, NavigationToolbarProps, NavigationToolbarSkeleton, NavigationMenuIconButton, NavigationMenuContent, NavigationMenuIconButtonProps, BottomNavigation, BottomNavigationProps, BroadcastMessages, BroadcastMessagesProps, BroadcastMessagesSkeleton, Category, CategoryProps, CategorySkeleton, CategoryAutocomplete, CategoryAutocompleteProps, CategoryFollowersButton, CategoryFollowersButtonProps, CategoryHeader, CategoryHeaderProps, CategoryHeaderSkeleton, Categories, CategoriesProps, CategoriesSkeleton, CategoriesSkeletonProps, UserFollowedCategoriesWidget, UserFollowedCategoriesWidgetProps, UserFollowedCategoriesWidgetSkeleton, CategoriesPopularWidget, CategoriesPopularWidgetSkeleton, CategoriesSuggestionWidget, CategoriesSuggestionWidgetProps, CategoriesSuggestionWidgetSkeleton, ChangeCover, ChangePicture, ChangePictureProps, ChangeCoverProps, Composer, ComposerProps, ComposerIconButton, ComposerIconButtonProps, Editor, EditorProps, EditorSkeleton, FriendshipUserButton, FriendshipButtonProps, Feed, FeedRef, FeedProps, FeedSidebarProps, FeedSkeleton, CategoryFollowButton, CategoryFollowButtonProps, FollowUserButton, FollowUserButtonProps, ConnectionUserButton, FeedObject, FeedObjectProps, FeedObjectSkeleton, FeedObjectMediaPreview, FeedObjectMediaPreviewProps, FeedUpdatesWidget, FeedUpdatesWidgetProps, FeedUpdatesWidgetSkeleton, GenericSkeleton, AvatarGroupSkeleton, CommentObject, CommentsObject, CommentsObjectProps, CommentObjectProps, CommentsObjectSkeleton, CommentObjectSkeleton, CommentObjectReply, CommentObjectReplyProps, CommentsFeedObject, CommentsFeedObjectProps, CommentsFeedObjectSkeleton, ReplyComment, InlineComposerWidget, InlineComposerWidgetProps, InlineComposerWidgetSkeleton, Notification, NotificationProps, NotificationSkeleton, UserSuggestionWidget, UserSuggestionWidgetProps, UserSuggestionWidgetSkeleton, PlatformWidget, PlatformWidgetProps, PlatformWidgetSkeleton, LocationAutocomplete, LocationAutocompleteProps, LoyaltyProgramWidget, LoyaltyProgramWidgetProps, LoyaltyProgramWidgetSkeleton, CategoryTrendingFeedWidget, CategoryTrendingFeedWidgetProps, CategoryTrendingFeedWidgetSkeleton, CategoryTrendingUsersWidget, CategoryTrendingUsersWidgetProps, CategoryTrendingPeopleWidgetSkeleton, RelatedFeedObjectsWidget, RelatedFeedObjectWidgetProps, RelatedFeedObjectsWidgetSkeleton, UserActionIconButton, UserActionIconButtonProps, UserCounters, UserCountersProps, UserProfileHeader, UserProfileHeaderProps, UserProfileHeaderSkeleton, UserInfoDialog, UserInfoDialogProps, UserInfo, UserInfoProps, UserInfoSkeleton, UserProfileBlocked, UserProfileBlockedProps, SCUserProfileFields, SCUserProfileSettings, UserProfileEdit, UserProfileEditProps, UserProfileEditSkeleton, UserProfileEditSectionPublicInfo, UserProfileEditSectionPublicInfoProps, UserProfileEditSectionSettings, UserProfileEditSectionSettingsProps, UserProfileEditSectionAccount, UserProfileEditSectionAccountProps, UserFollowedUsersWidget, UserFollowedUsersWidgetProps, UserFollowedUsersWidgetSkeleton, UserFollowersWidget, UserFollowersWidgetProps, UserFollowersWidgetSkeleton, UserConnectionsWidget, UserConnectionsWidgetProps, UserConnectionsWidgetSkeleton, UserConnectionsRequestsWidget, UserConnectionsRequestsWidgetProps, UserConnectionsRequestsWidgetSkeleton, UserConnectionsRequestsSentWidget, UserConnectionsRequestsSentWidgetProps, UserConnectionsRequestsSentWidgetSkeleton, UserSocialAssociation, UserSocialAssociationProps, SCUserSocialAssociations, CustomAdv, CustomAdvProps, CustomAdvSkeleton, User, UserProps, UserSkeleton, PrivateMessageThread, PrivateMessageThreadProps, PrivateMessageThreadSkeleton, PrivateMessageThreadItem, PrivateMessageThreadItemProps, PrivateMessageThreadItemSkeleton, PrivateMessageSnippetItem, PrivateMessageSnippetItemProps, PrivateMessageSnippetItemSkeleton, PrivateMessageEditor, PrivateMessageEditorProps, PrivateMessageEditorSkeleton, PrivateMessageSnippets, PrivateMessageSnippetsProps, PrivateMessageSnippetsSkeleton, PrivateMessageComponent, PrivateMessageComponentProps, PrivateMessageComponentSkeleton, PrivateMessageSettingsIconButton, PrivateMessageSettingsIconButtonProps, ToastNotifications, ToastNotificationsProps, ToastNotificationsSkeleton, SnippetNotifications, SnippetNotificationsProps, SnippetNotificationsSkeleton, SearchAutocomplete, SearchAutocompleteProps, SearchDialog, SearchDialogProps, Widget, WidgetProps, SCFeedWidgetType, SCFeedObjectTemplateType, SCCommentsOrderBy, SCFeedObjectActivitiesType, SCMediaObjectType, SCMediaChunkType, SCNotificationObjectTemplateType, SCBroadcastMessageTemplateType, ChangeGroupCover, ChangeGroupCoverProps, ChangeGroupPicture, ChangeGroupPictureProps, GroupHeader, GroupHeaderProps, GroupHeaderSkeleton, GroupMembersButton, GroupMembersButtonProps, CreateGroupButton, CreateGroupButtonProps, EditGroupButton, EditGroupButtonProps, GroupInviteButton, GroupInviteButtonProps, GroupInfoWidget, GroupInfoWidgetProps, GroupInfoWidgetSkeleton, Group, GroupProps, GroupSubscribeButton, GroupSubscribeButtonProps, GroupMembersWidget, GroupMembersWidgetProps, GroupMembersWidgetSkeleton, GroupRequestsWidget, GroupRequestsWidgetProps, GroupRequestsWidgetSkeleton, Groups, GroupsProps, GroupsSkeleton, GroupForm, GroupFormProps, HiddenPlaceholder, UrlTextField, UsernameTextField, EmailTextField, PasswordTextField, PhoneTextField, MetadataField, InfiniteScroll, StickyBox, useStickyBox, StickyBoxProps, StickyBoxComponent, UseStickyBoxProps, TagChip, TagChipProps, UserDeletedSnackBar, UserDeletedSnackBarProps, UserAvatar, UserAvatarProps, Lightbox, CentralProgress, ConfirmDialog, LanguageSwitcher, MediaChunkUploader, MediaChunkUploaderProps, File, Link, Share, EditMediaProps, MEDIA_TYPE_EMBED, FACEBOOK_SHARE, TWITTER_SHARE, LINKEDIN_SHARE, DEFAULT_PRELOAD_OFFSET_VIEWPORT, MIN_PRELOAD_OFFSET_VIEWPORT, MAX_PRELOAD_OFFSET_VIEWPORT, ConsentSolution, ConsentSolutionProps, ConsentSolutionSkeleton, ConsentSolutionButton, ConsentSolutionButtonProps, LEGAL_POLICIES, DEFAULT_FIELDS, DEFAULT_PAGINATION_QUERY_PARAM_NAME, DEFAULT_PAGINATION_OFFSET, DEFAULT_PAGINATION_LIMIT, DEFAULT_WIDGETS_NUMBER, PollSuggestionWidget, PollSuggestionWidgetProps, Incubator, IncubatorSubscribeButton, IncubatorSubscribeButtonProps, IncubatorProps, IncubatorListWidget, IncubatorListWidgetProps, IncubatorDetail, IncubatorDetailProps, IncubatorSuggestionWidget, IncubatorSuggestionWidgetProps, ContributionUtils, bytesToSize, getUnseenNotification, getUnseenNotificationCounter, MessageUploaderUtils, getRelativeTime, Footer, FooterProps, FooterSkeleton, BaseItem, BaseItemProps, BaseDialog, BaseDialogProps, GroupSettingsIconButton, GroupSettingsIconButtonProps };
package/lib/cjs/index.js CHANGED
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.GenericSkeleton = exports.FeedUpdatesWidgetSkeleton = exports.FeedUpdatesWidget = exports.FeedObjectMediaPreview = exports.FeedObjectSkeleton = exports.FeedObject = exports.ConnectionUserButton = exports.FollowUserButton = exports.CategoryFollowButton = exports.FeedSkeleton = exports.Feed = exports.FriendshipUserButton = exports.EditorSkeleton = exports.Editor = exports.ComposerIconButton = exports.Composer = exports.ChangePicture = exports.ChangeCover = exports.CategoriesSuggestionWidgetSkeleton = exports.CategoriesSuggestionWidget = exports.CategoriesPopularWidgetSkeleton = exports.CategoriesPopularWidget = exports.UserFollowedCategoriesWidgetSkeleton = exports.UserFollowedCategoriesWidget = exports.CategoriesSkeleton = exports.Categories = exports.CategoryHeaderSkeleton = exports.CategoryHeader = exports.CategoryFollowersButton = exports.CategoryAutocomplete = exports.CategorySkeleton = exports.Category = exports.BroadcastMessagesSkeleton = exports.BroadcastMessages = exports.BottomNavigation = exports.NavigationMenuContent = exports.NavigationMenuIconButton = exports.NavigationToolbarSkeleton = exports.NavigationToolbar = exports.NavigationToolbarMobileSkeleton = exports.NavigationToolbarMobile = exports.NavigationSettingsIconButton = exports.AccountChangeMailValidation = exports.AccountVerify = exports.AccountReset = exports.AccountRecover = exports.AccountDeleteButton = exports.AccountDelete = exports.AccountDataPortabilityButton = exports.AccountDataPortability = void 0;
4
4
  exports.UserConnectionsRequestsSentWidget = exports.UserConnectionsRequestsWidgetSkeleton = exports.UserConnectionsRequestsWidget = exports.UserConnectionsWidgetSkeleton = exports.UserConnectionsWidget = exports.UserFollowersWidgetSkeleton = exports.UserFollowersWidget = exports.UserFollowedUsersWidgetSkeleton = exports.UserFollowedUsersWidget = exports.UserProfileEditSectionAccount = exports.UserProfileEditSectionSettings = exports.UserProfileEditSectionPublicInfo = exports.UserProfileEditSkeleton = exports.UserProfileEdit = exports.SCUserProfileSettings = exports.SCUserProfileFields = exports.UserProfileBlocked = exports.UserInfoSkeleton = exports.UserInfo = exports.UserInfoDialog = exports.UserProfileHeaderSkeleton = exports.UserProfileHeader = exports.UserCounters = exports.UserActionIconButton = exports.RelatedFeedObjectsWidgetSkeleton = exports.RelatedFeedObjectsWidget = exports.CategoryTrendingPeopleWidgetSkeleton = exports.CategoryTrendingUsersWidget = exports.CategoryTrendingFeedWidgetSkeleton = exports.CategoryTrendingFeedWidget = exports.LoyaltyProgramWidgetSkeleton = exports.LoyaltyProgramWidget = exports.LocationAutocomplete = exports.PlatformWidgetSkeleton = exports.PlatformWidget = exports.UserSuggestionWidgetSkeleton = exports.UserSuggestionWidget = exports.NotificationSkeleton = exports.Notification = exports.InlineComposerWidgetSkeleton = exports.InlineComposerWidget = exports.ReplyComment = exports.CommentsFeedObjectSkeleton = exports.CommentsFeedObject = exports.CommentObjectReply = exports.CommentObjectSkeleton = exports.CommentsObjectSkeleton = exports.CommentsObject = exports.CommentObject = exports.AvatarGroupSkeleton = void 0;
5
5
  exports.GroupsSkeleton = exports.Groups = exports.GroupRequestsWidgetSkeleton = exports.GroupRequestsWidget = exports.GroupMembersWidgetSkeleton = exports.GroupMembersWidget = exports.GroupSubscribeButton = exports.Group = exports.GroupInfoWidgetSkeleton = exports.GroupInfoWidget = exports.GroupInviteButton = exports.EditGroupButton = exports.CreateGroupButton = exports.GroupMembersButton = exports.GroupHeaderSkeleton = exports.GroupHeader = exports.ChangeGroupPicture = exports.ChangeGroupCover = exports.SCBroadcastMessageTemplateType = exports.SCNotificationObjectTemplateType = exports.SCFeedObjectActivitiesType = exports.SCCommentsOrderBy = exports.SCFeedObjectTemplateType = exports.Widget = exports.SearchDialog = exports.SearchAutocomplete = exports.SnippetNotificationsSkeleton = exports.SnippetNotifications = exports.ToastNotificationsSkeleton = exports.ToastNotifications = exports.PrivateMessageSettingsIconButton = exports.PrivateMessageComponentSkeleton = exports.PrivateMessageComponent = exports.PrivateMessageSnippetsSkeleton = exports.PrivateMessageSnippets = exports.PrivateMessageEditorSkeleton = exports.PrivateMessageEditor = exports.PrivateMessageSnippetItemSkeleton = exports.PrivateMessageSnippetItem = exports.PrivateMessageThreadItemSkeleton = exports.PrivateMessageThreadItem = exports.PrivateMessageThreadSkeleton = exports.PrivateMessageThread = exports.UserSkeleton = exports.User = exports.CustomAdvSkeleton = exports.CustomAdv = exports.SCUserSocialAssociations = exports.UserSocialAssociation = exports.UserConnectionsRequestsSentWidgetSkeleton = void 0;
6
- exports.Footer = exports.getRelativeTime = exports.MessageUploaderUtils = exports.getUnseenNotificationCounter = exports.getUnseenNotification = exports.bytesToSize = exports.ContributionUtils = exports.IncubatorSuggestionWidget = exports.IncubatorDetail = exports.IncubatorListWidget = exports.IncubatorSubscribeButton = exports.Incubator = exports.PollSuggestionWidget = exports.DEFAULT_WIDGETS_NUMBER = exports.DEFAULT_PAGINATION_LIMIT = exports.DEFAULT_PAGINATION_OFFSET = exports.DEFAULT_PAGINATION_QUERY_PARAM_NAME = exports.DEFAULT_FIELDS = exports.LEGAL_POLICIES = exports.ConsentSolutionButton = exports.ConsentSolutionSkeleton = exports.ConsentSolution = exports.MAX_PRELOAD_OFFSET_VIEWPORT = exports.MIN_PRELOAD_OFFSET_VIEWPORT = exports.DEFAULT_PRELOAD_OFFSET_VIEWPORT = exports.LINKEDIN_SHARE = exports.TWITTER_SHARE = exports.FACEBOOK_SHARE = exports.MEDIA_TYPE_EMBED = exports.Share = exports.Link = exports.File = exports.MediaChunkUploader = exports.LanguageSwitcher = exports.ConfirmDialog = exports.CentralProgress = exports.Lightbox = exports.UserAvatar = exports.UserDeletedSnackBar = exports.TagChip = exports.useStickyBox = exports.StickyBox = exports.InfiniteScroll = exports.MetadataField = exports.PhoneTextField = exports.PasswordTextField = exports.EmailTextField = exports.UsernameTextField = exports.UrlTextField = exports.GroupForm = void 0;
7
- exports.BaseDialog = exports.BaseItem = exports.FooterSkeleton = void 0;
6
+ exports.getRelativeTime = exports.MessageUploaderUtils = exports.getUnseenNotificationCounter = exports.getUnseenNotification = exports.bytesToSize = exports.ContributionUtils = exports.IncubatorSuggestionWidget = exports.IncubatorDetail = exports.IncubatorListWidget = exports.IncubatorSubscribeButton = exports.Incubator = exports.PollSuggestionWidget = exports.DEFAULT_WIDGETS_NUMBER = exports.DEFAULT_PAGINATION_LIMIT = exports.DEFAULT_PAGINATION_OFFSET = exports.DEFAULT_PAGINATION_QUERY_PARAM_NAME = exports.DEFAULT_FIELDS = exports.LEGAL_POLICIES = exports.ConsentSolutionButton = exports.ConsentSolutionSkeleton = exports.ConsentSolution = exports.MAX_PRELOAD_OFFSET_VIEWPORT = exports.MIN_PRELOAD_OFFSET_VIEWPORT = exports.DEFAULT_PRELOAD_OFFSET_VIEWPORT = exports.LINKEDIN_SHARE = exports.TWITTER_SHARE = exports.FACEBOOK_SHARE = exports.MEDIA_TYPE_EMBED = exports.Share = exports.Link = exports.File = exports.MediaChunkUploader = exports.LanguageSwitcher = exports.ConfirmDialog = exports.CentralProgress = exports.Lightbox = exports.UserAvatar = exports.UserDeletedSnackBar = exports.TagChip = exports.useStickyBox = exports.StickyBox = exports.InfiniteScroll = exports.MetadataField = exports.PhoneTextField = exports.PasswordTextField = exports.EmailTextField = exports.UsernameTextField = exports.UrlTextField = exports.HiddenPlaceholder = exports.GroupForm = void 0;
7
+ exports.GroupSettingsIconButton = exports.BaseDialog = exports.BaseItem = exports.FooterSkeleton = exports.Footer = void 0;
8
8
  const tslib_1 = require("tslib");
9
9
  /**
10
10
  * Components
@@ -222,6 +222,8 @@ const Media_1 = require("./shared/Media");
222
222
  Object.defineProperty(exports, "File", { enumerable: true, get: function () { return Media_1.File; } });
223
223
  Object.defineProperty(exports, "Link", { enumerable: true, get: function () { return Media_1.Link; } });
224
224
  Object.defineProperty(exports, "Share", { enumerable: true, get: function () { return Media_1.Share; } });
225
+ const HiddenPlaceholder_1 = tslib_1.__importDefault(require("./shared/HiddenPlaceholder"));
226
+ exports.HiddenPlaceholder = HiddenPlaceholder_1.default;
225
227
  const UrlTextField_1 = tslib_1.__importDefault(require("./shared/UrlTextField"));
226
228
  exports.UrlTextField = UrlTextField_1.default;
227
229
  const UsernameTextField_1 = tslib_1.__importDefault(require("./shared/UsernameTextField"));
@@ -307,6 +309,8 @@ exports.Groups = Groups_1.default;
307
309
  Object.defineProperty(exports, "GroupsSkeleton", { enumerable: true, get: function () { return Groups_1.GroupsSkeleton; } });
308
310
  const GroupForm_1 = tslib_1.__importDefault(require("./components/GroupForm"));
309
311
  exports.GroupForm = GroupForm_1.default;
312
+ const GroupSettingsIconButton_1 = tslib_1.__importDefault(require("./components/GroupSettingsIconButton"));
313
+ exports.GroupSettingsIconButton = GroupSettingsIconButton_1.default;
310
314
  /**
311
315
  * Constants
312
316
  */
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
1
  import { SCGroupType } from '@selfcommunity/types';
3
2
  import { ChangeGroupCoverProps } from '../ChangeGroupCover';
4
3
  import { ChangeGroupPictureProps } from '../ChangeGroupPicture';
5
4
  import { GroupMembersButtonProps } from '../GroupMembersButton';
5
+ import { GroupSubscribeButtonProps } from '../GroupSubscribeButton';
6
6
  export interface GroupHeaderProps {
7
7
  /**
8
8
  * Id of group object
@@ -35,14 +35,15 @@ export interface GroupHeaderProps {
35
35
  */
36
36
  ChangeCoverProps?: ChangeGroupCoverProps;
37
37
  /**
38
- * Props to spread to the group memebers button
38
+ * Props to spread category button followed
39
39
  * @default {}
40
40
  */
41
- GroupMembersButtonProps?: GroupMembersButtonProps;
41
+ GroupSubscribeButtonProps?: Pick<GroupSubscribeButtonProps, Exclude<keyof GroupSubscribeButtonProps, 'group' | 'onSubscribe'>>;
42
42
  /**
43
- *
43
+ * Props to spread to the group memebers button
44
+ * @default {}
44
45
  */
45
- actions?: React.ReactNode;
46
+ GroupMembersButtonProps?: GroupMembersButtonProps;
46
47
  /**
47
48
  * Any other properties
48
49
  */
@@ -14,6 +14,8 @@ import Bullet from '../../shared/Bullet';
14
14
  import ChangeGroupPicture from '../ChangeGroupPicture';
15
15
  import GroupMembersButton from '../GroupMembersButton';
16
16
  import EditGroupButton from '../EditGroupButton';
17
+ import GroupSubscribeButton from '../GroupSubscribeButton';
18
+ import GroupInviteButton from '../GroupInviteButton';
17
19
  const classes = {
18
20
  root: `${PREFIX}-root`,
19
21
  cover: `${PREFIX}-cover`,
@@ -70,7 +72,7 @@ export default function GroupHeader(inProps) {
70
72
  props: inProps,
71
73
  name: PREFIX
72
74
  });
73
- const { id = null, className = null, group, groupId = null, ChangePictureProps = {}, ChangeCoverProps = {}, GroupMembersButtonProps = {}, actions } = props, rest = __rest(props, ["id", "className", "group", "groupId", "ChangePictureProps", "ChangeCoverProps", "GroupMembersButtonProps", "actions"]);
75
+ const { id = null, className = null, group, groupId = null, ChangePictureProps = {}, ChangeCoverProps = {}, GroupSubscribeButtonProps = {}, GroupMembersButtonProps = {} } = props, rest = __rest(props, ["id", "className", "group", "groupId", "ChangePictureProps", "ChangeCoverProps", "GroupSubscribeButtonProps", "GroupMembersButtonProps"]);
74
76
  // PREFERENCES
75
77
  const scPreferences = useSCPreferences();
76
78
  // CONTEXT
@@ -78,13 +80,13 @@ export default function GroupHeader(inProps) {
78
80
  // HOOKS
79
81
  const { scGroup, setSCGroup } = useSCFetchGroup({ id: groupId, group });
80
82
  // CONST
81
- const canEdit = 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]);
83
+ 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]);
82
84
  /**
83
85
  * Handles Change Avatar
84
86
  * @param avatar
85
87
  */
86
88
  function handleChangeAvatar(avatar) {
87
- if (canEdit) {
89
+ if (isGroupAdmin) {
88
90
  setSCGroup(Object.assign({}, scGroup, { image_bigger: avatar }));
89
91
  }
90
92
  }
@@ -93,10 +95,16 @@ export default function GroupHeader(inProps) {
93
95
  * @param cover
94
96
  */
95
97
  function handleChangeCover(cover) {
96
- if (canEdit) {
98
+ if (isGroupAdmin) {
97
99
  setSCGroup(Object.assign({}, scGroup, { emotional_image: cover }));
98
100
  }
99
101
  }
102
+ /**
103
+ * Handles callback subscribe/unsubscribe group
104
+ */
105
+ const handleSubscribe = (group, status) => {
106
+ setSCGroup(Object.assign(Object.assign({}, group), { subscribers_counter: group.subscribers_counter + (status ? 1 : -1) }));
107
+ };
100
108
  // RENDER
101
109
  if (!scGroup) {
102
110
  return React.createElement(GroupHeaderSkeleton, null);
@@ -109,12 +117,12 @@ export default function GroupHeader(inProps) {
109
117
  React.createElement(Box, { className: classes.avatar },
110
118
  React.createElement(Avatar, null,
111
119
  React.createElement("img", { alt: "group", src: scGroup.image_bigger ? scGroup.image_bigger : '' }))),
112
- canEdit && (React.createElement(React.Fragment, null,
120
+ isGroupAdmin && (React.createElement(React.Fragment, null,
113
121
  React.createElement(ChangeGroupPicture, Object.assign({ groupId: scGroup.id, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
114
122
  React.createElement("div", { className: classes.changeCover },
115
123
  React.createElement(ChangeGroupCover, Object.assign({ groupId: scGroup.id, onChange: handleChangeCover }, ChangeCoverProps)))))),
116
124
  React.createElement(Box, { className: classes.info },
117
- canEdit && React.createElement(EditGroupButton, { group: scGroup, groupId: scGroup.id, onEditSuccess: (data) => setSCGroup(data) }),
125
+ isGroupAdmin && React.createElement(EditGroupButton, { group: scGroup, groupId: scGroup.id, onEditSuccess: (data) => setSCGroup(data) }),
118
126
  React.createElement(Typography, { variant: "h5", className: classes.name }, scGroup.name),
119
127
  React.createElement(Box, { className: classes.visibility },
120
128
  scGroup.privacy === SCGroupPrivacyType.PUBLIC ? (React.createElement(Typography, { className: classes.visibilityItem },
@@ -128,9 +136,9 @@ export default function GroupHeader(inProps) {
128
136
  React.createElement(FormattedMessage, { id: "ui.groupHeader.visibility.visible", defaultMessage: "ui.groupHeader.visibility.visible" }))) : (React.createElement(Typography, { className: classes.visibilityItem },
129
137
  React.createElement(Icon, null, "visibility_off"),
130
138
  React.createElement(FormattedMessage, { id: "ui.groupHeader.visibility.hidden", defaultMessage: "ui.groupHeader.visibility.hidden" })))),
131
- React.createElement(Box, { className: classes.members },
139
+ React.createElement(React.Fragment, null, ((scGroup && scGroup.privacy === SCGroupPrivacyType.PUBLIC) || isGroupAdmin) && (React.createElement(Box, { className: classes.members },
132
140
  React.createElement(Typography, { className: classes.membersCounter, component: "div" },
133
141
  React.createElement(FormattedMessage, { id: "ui.groupHeader.members", defaultMessage: "ui.groupHeader.members", values: { total: scGroup.subscribers_counter } })),
134
- React.createElement(GroupMembersButton, Object.assign({ groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup }, GroupMembersButtonProps))),
135
- actions && actions)));
142
+ React.createElement(GroupMembersButton, Object.assign({ groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup, autoHide: !isGroupAdmin }, GroupMembersButtonProps))))),
143
+ isGroupAdmin ? (React.createElement(GroupInviteButton, { group: scGroup, groupId: scGroup.id })) : (React.createElement(GroupSubscribeButton, Object.assign({ group: scGroup, onSubscribe: handleSubscribe }, GroupSubscribeButtonProps))))));
136
144
  }
@@ -108,7 +108,7 @@ export default function GroupInviteButton(inProps) {
108
108
  }, [invited]);
109
109
  // HOOKS
110
110
  const { scGroup } = useSCFetchGroup({ id: groupId, group });
111
- const canEdit = 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]);
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() {
@@ -226,7 +226,7 @@ export default function GroupInviteButton(inProps) {
226
226
  /**
227
227
  * If in group edit mode and logged-in user is not also the group manager, the component is hidden.
228
228
  // */
229
- if (group && !canEdit) {
229
+ if (group && !isGroupAdmin) {
230
230
  return null;
231
231
  }
232
232
  /**
@@ -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 { GroupService, Endpoints, http } from '@selfcommunity/api-services';
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) {
@@ -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,
@@ -87,6 +89,8 @@ export default function GroupMembersWidget(inProps) {
87
89
  const scUserContext = useSCUser();
88
90
  const scPreferencesContext = useSCPreferences();
89
91
  const { scGroup } = useSCFetchGroup({ id: groupId, group });
92
+ // CONST
93
+ 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
94
  // MEMO
91
95
  const contentAvailability = useMemo(() => SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY in scPreferencesContext.preferences &&
92
96
  scPreferencesContext.preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value, [scPreferencesContext.preferences]);
@@ -182,14 +186,16 @@ export default function GroupMembersWidget(inProps) {
182
186
  !state.count ? (React.createElement(Typography, { className: classes.noResults, variant: "body2" },
183
187
  React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.subtitle.noResults", defaultMessage: "" }))) : (React.createElement(React.Fragment, null,
184
188
  React.createElement(List, null, state.results.slice(0, state.visibleItems).map((user) => (React.createElement(ListItem, { key: user.id },
185
- React.createElement(User, { elevation: 0, actions: React.createElement(React.Fragment, null), user: user, userId: user.id, buttonProps: { onClick: () => console.log(user) } }))))),
189
+ React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user })) : (React.createElement(Button, null,
190
+ React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))), user: user, userId: user.id }))))),
186
191
  state.count > state.visibleItems && (React.createElement(Button, { className: classes.showMore, onClick: handleToggleDialogOpen },
187
192
  React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.button.showMore", defaultMessage: "ui.groupMembersWidget.button.showMore" }))))),
188
193
  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
194
  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
195
  React.createElement(FormattedMessage, { id: "ui.groupMembersWidget.noMoreResults", defaultMessage: "ui.groupMembersWidget.noMoreResults" })) },
191
196
  React.createElement(List, null, state.results.map((user) => (React.createElement(ListItem, { key: user.id },
192
- React.createElement(User, { elevation: 0, actions: React.createElement(React.Fragment, null), user: user, userId: user.id, buttonProps: { onClick: () => console.log(user) } }))))))))),
197
+ React.createElement(User, { elevation: 0, actions: isGroupAdmin ? (React.createElement(GroupSettingsIconButton, { group: scGroup, user: user })) : (React.createElement(Button, null,
198
+ React.createElement(FormattedMessage, { id: "ui.groupSettingsIconButton.item.message", defaultMessage: "ui.groupSettingsIconButton.item.message" }))), user: user, userId: user.id }))))))))),
193
199
  React.createElement(CardActions, { className: classes.actions },
194
200
  React.createElement(GroupInviteButton, { groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup }))));
195
201
  return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
@@ -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, autoHide = false, limit = 5, className, cacheStrategy = CacheStrategies.NETWORK_ONLY, onHeightChange, onStateChange, UserProps = {}, DialogProps = {} } = props, rest = __rest(props, ["groupId", "group", "autoHide", "limit", "className", "cacheStrategy", "onHeightChange", "onStateChange", "UserProps", "DialogProps"]);
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,15 @@ 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 index = newRequests.findIndex((u) => u.id === userId);
175
+ if (index !== -1) {
176
+ dispatch({ type: actionWidgetTypes.SET_RESULTS, payload: { results: newRequests } });
177
+ }
178
+ }, [dispatch, state.count, state.results]);
169
179
  // RENDER
170
- if ((autoHide && !state.count && state.initialized) || (!contentAvailability && !scUserContext.user) || !scGroup) {
180
+ if ((!state.count && state.initialized) || (!contentAvailability && !isGroupAdmin) || !scGroup || !state.count) {
171
181
  return React.createElement(HiddenPlaceholder, null);
172
182
  }
173
183
  if (!state.initialized) {
@@ -176,16 +186,15 @@ export default function GroupRequestsWidget(inProps) {
176
186
  const content = (React.createElement(CardContent, null,
177
187
  React.createElement(Typography, { className: classes.title, variant: "h5" },
178
188
  React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.title", defaultMessage: "ui.groupRequestsWidget.title" })),
179
- !state.count ? (React.createElement(Typography, { className: classes.noResults, variant: "body2" },
180
- React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.subtitle.noResults", defaultMessage: "" }))) : (React.createElement(React.Fragment, null,
189
+ React.createElement(React.Fragment, null,
181
190
  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(React.Fragment, null), user: user, userId: user.id, buttonProps: { onClick: () => console.log(user) } }))))),
191
+ 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
192
  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" }))))),
193
+ React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.button.showMore", defaultMessage: "ui.groupRequestsWidget.button.showMore" })))),
185
194
  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
195
  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
196
  React.createElement(FormattedMessage, { id: "ui.groupRequestsWidget.noMoreResults", defaultMessage: "ui.groupRequestsWidget.noMoreResults" })) },
188
197
  React.createElement(List, null, state.results.map((user) => (React.createElement(ListItem, { key: user.id },
189
- React.createElement(User, { elevation: 0, actions: React.createElement(React.Fragment, null), user: user, userId: user.id, buttonProps: { onClick: () => console.log(user) } }))))))))));
198
+ 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
199
  return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
191
200
  }
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ import GroupSettingsIconButton, { GroupSettingsIconButtonProps } from './GroupSettingsIconButton';
2
+ export default GroupSettingsIconButton;
3
+ export { GroupSettingsIconButtonProps };