@selfcommunity/react-ui 0.7.9-alpha.2 → 0.7.9-alpha.21

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 (155) hide show
  1. package/lib/cjs/components/BottomNavigation/BottomNavigation.js +3 -1
  2. package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
  3. package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
  4. package/lib/cjs/components/Composer/Attributes/Attributes.d.ts +1 -1
  5. package/lib/cjs/components/Composer/Attributes/Attributes.js +9 -2
  6. package/lib/cjs/components/Composer/Composer.d.ts +2 -1
  7. package/lib/cjs/components/Composer/Composer.js +39 -12
  8. package/lib/cjs/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +7 -3
  9. package/lib/cjs/components/Composer/Content/ContentPost/ContentPost.js +4 -3
  10. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +7 -1
  11. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +46 -12
  12. package/lib/cjs/components/CreateGroupButton/CreateGroupButton.d.ts +2 -2
  13. package/lib/cjs/components/CreateGroupButton/CreateGroupButton.js +5 -6
  14. package/lib/cjs/components/CustomAdv/CustomAdv.d.ts +4 -0
  15. package/lib/cjs/components/{CreateGroup/CreateGroup.d.ts → EditGroupButton/EditGroupButton.d.ts} +11 -16
  16. package/lib/cjs/components/EditGroupButton/EditGroupButton.js +61 -0
  17. package/lib/cjs/components/EditGroupButton/index.d.ts +3 -0
  18. package/lib/cjs/components/EditGroupButton/index.js +5 -0
  19. package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
  20. package/lib/cjs/components/FeedObject/FeedObject.js +23 -6
  21. package/lib/cjs/components/Group/Group.d.ts +4 -3
  22. package/lib/cjs/components/Group/Group.js +5 -4
  23. package/lib/cjs/components/Group/Skeleton.js +1 -1
  24. package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.d.ts +49 -0
  25. package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.js +101 -0
  26. package/lib/cjs/components/GroupAutocomplete/index.d.ts +3 -0
  27. package/lib/cjs/components/GroupAutocomplete/index.js +5 -0
  28. package/lib/cjs/components/GroupForm/GroupForm.d.ts +70 -0
  29. package/lib/cjs/components/GroupForm/GroupForm.js +239 -0
  30. package/lib/cjs/components/GroupForm/constants.d.ts +1 -0
  31. package/lib/cjs/components/{CreateGroup → GroupForm}/constants.js +1 -1
  32. package/lib/cjs/components/GroupForm/index.d.ts +3 -0
  33. package/lib/cjs/components/GroupForm/index.js +5 -0
  34. package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +6 -5
  35. package/lib/cjs/components/GroupHeader/GroupHeader.js +21 -11
  36. package/lib/cjs/components/GroupHeader/Skeleton.d.ts +2 -4
  37. package/lib/cjs/components/GroupHeader/Skeleton.js +10 -10
  38. package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.js +8 -8
  39. package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +9 -6
  40. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  41. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +3 -2
  42. package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +37 -14
  43. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
  44. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +17 -7
  45. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
  46. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.js +132 -0
  47. package/lib/cjs/components/GroupSettingsIconButton/index.d.ts +3 -0
  48. package/lib/cjs/components/GroupSettingsIconButton/index.js +5 -0
  49. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
  50. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +26 -9
  51. package/lib/cjs/components/Groups/Groups.d.ts +65 -0
  52. package/lib/cjs/components/Groups/Groups.js +135 -0
  53. package/lib/cjs/components/Groups/Skeleton.d.ts +34 -0
  54. package/lib/cjs/components/Groups/Skeleton.js +45 -0
  55. package/lib/cjs/components/Groups/constants.d.ts +1 -0
  56. package/lib/cjs/components/Groups/constants.js +4 -0
  57. package/lib/cjs/components/Groups/index.d.ts +4 -0
  58. package/lib/cjs/components/Groups/index.js +8 -0
  59. package/lib/cjs/components/InlineComposerWidget/InlineComposerWidget.d.ts +2 -1
  60. package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  61. package/lib/cjs/components/NavigationToolbar/NavigationToolbar.js +5 -1
  62. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  63. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  64. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  65. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +10 -7
  66. package/lib/cjs/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
  67. package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
  68. package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.js +24 -6
  69. package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
  70. package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.js +45 -20
  71. package/lib/cjs/index.d.ts +7 -3
  72. package/lib/cjs/index.js +14 -4
  73. package/lib/esm/components/BottomNavigation/BottomNavigation.js +3 -1
  74. package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
  75. package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
  76. package/lib/esm/components/Composer/Attributes/Attributes.d.ts +1 -1
  77. package/lib/esm/components/Composer/Attributes/Attributes.js +9 -2
  78. package/lib/esm/components/Composer/Composer.d.ts +2 -1
  79. package/lib/esm/components/Composer/Composer.js +39 -12
  80. package/lib/esm/components/Composer/Content/ContentDiscussion/ContentDiscussion.js +7 -3
  81. package/lib/esm/components/Composer/Content/ContentPost/ContentPost.js +4 -3
  82. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +7 -1
  83. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +45 -12
  84. package/lib/esm/components/CreateGroupButton/CreateGroupButton.d.ts +2 -2
  85. package/lib/esm/components/CreateGroupButton/CreateGroupButton.js +5 -6
  86. package/lib/esm/components/CustomAdv/CustomAdv.d.ts +4 -0
  87. package/lib/esm/components/{CreateGroup/CreateGroup.d.ts → EditGroupButton/EditGroupButton.d.ts} +11 -16
  88. package/lib/esm/components/EditGroupButton/EditGroupButton.js +58 -0
  89. package/lib/esm/components/EditGroupButton/index.d.ts +3 -0
  90. package/lib/esm/components/EditGroupButton/index.js +2 -0
  91. package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
  92. package/lib/esm/components/FeedObject/FeedObject.js +24 -7
  93. package/lib/esm/components/Group/Group.d.ts +4 -3
  94. package/lib/esm/components/Group/Group.js +5 -4
  95. package/lib/esm/components/Group/Skeleton.js +1 -1
  96. package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.d.ts +49 -0
  97. package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.js +99 -0
  98. package/lib/esm/components/GroupAutocomplete/index.d.ts +3 -0
  99. package/lib/esm/components/GroupAutocomplete/index.js +2 -0
  100. package/lib/esm/components/GroupForm/GroupForm.d.ts +70 -0
  101. package/lib/esm/components/GroupForm/GroupForm.js +236 -0
  102. package/lib/esm/components/GroupForm/constants.d.ts +1 -0
  103. package/lib/esm/components/GroupForm/constants.js +1 -0
  104. package/lib/esm/components/GroupForm/index.d.ts +3 -0
  105. package/lib/esm/components/GroupForm/index.js +2 -0
  106. package/lib/esm/components/GroupHeader/GroupHeader.d.ts +6 -5
  107. package/lib/esm/components/GroupHeader/GroupHeader.js +21 -11
  108. package/lib/esm/components/GroupHeader/Skeleton.d.ts +2 -4
  109. package/lib/esm/components/GroupHeader/Skeleton.js +10 -10
  110. package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.js +8 -8
  111. package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +9 -6
  112. package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  113. package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +4 -3
  114. package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +39 -16
  115. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +0 -5
  116. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +17 -7
  117. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
  118. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.js +129 -0
  119. package/lib/esm/components/GroupSettingsIconButton/index.d.ts +3 -0
  120. package/lib/esm/components/GroupSettingsIconButton/index.js +2 -0
  121. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
  122. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +27 -10
  123. package/lib/esm/components/Groups/Groups.d.ts +65 -0
  124. package/lib/esm/components/Groups/Groups.js +132 -0
  125. package/lib/esm/components/Groups/Skeleton.d.ts +34 -0
  126. package/lib/esm/components/Groups/Skeleton.js +42 -0
  127. package/lib/esm/components/Groups/constants.d.ts +1 -0
  128. package/lib/esm/components/Groups/constants.js +1 -0
  129. package/lib/esm/components/Groups/index.d.ts +4 -0
  130. package/lib/esm/components/Groups/index.js +4 -0
  131. package/lib/esm/components/InlineComposerWidget/InlineComposerWidget.d.ts +2 -1
  132. package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  133. package/lib/esm/components/NavigationToolbar/NavigationToolbar.js +5 -1
  134. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  135. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  136. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  137. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +11 -8
  138. package/lib/esm/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
  139. package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
  140. package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.js +26 -8
  141. package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
  142. package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.js +47 -22
  143. package/lib/esm/index.d.ts +7 -3
  144. package/lib/esm/index.js +8 -4
  145. package/lib/umd/react-ui.js +1 -1
  146. package/package.json +6 -6
  147. package/lib/cjs/components/CreateGroup/CreateGroup.js +0 -187
  148. package/lib/cjs/components/CreateGroup/constants.d.ts +0 -1
  149. package/lib/cjs/components/CreateGroup/index.d.ts +0 -3
  150. package/lib/cjs/components/CreateGroup/index.js +0 -5
  151. package/lib/esm/components/CreateGroup/CreateGroup.js +0 -184
  152. package/lib/esm/components/CreateGroup/constants.d.ts +0 -1
  153. package/lib/esm/components/CreateGroup/constants.js +0 -1
  154. package/lib/esm/components/CreateGroup/index.d.ts +0 -3
  155. package/lib/esm/components/CreateGroup/index.js +0 -2
@@ -1,5 +1,5 @@
1
1
  import { __rest } from "tslib";
2
- import React, { useEffect, useState } from 'react';
2
+ import React, { useEffect, useMemo, useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import { CacheStrategies, Logger } from '@selfcommunity/utils';
5
5
  import { useSCContext, useSCFetchGroup, useSCUser } from '@selfcommunity/react-core';
@@ -41,12 +41,13 @@ const Root = styled(LoadingButton, {
41
41
  * @param inProps
42
42
  */
43
43
  export default function GroupSubscribeButton(inProps) {
44
+ var _a;
44
45
  // PROPS
45
46
  const props = useThemeProps({
46
47
  props: inProps,
47
48
  name: PREFIX
48
49
  });
49
- const { className, groupId, group, onJoin } = props, rest = __rest(props, ["className", "groupId", "group", "onJoin"]);
50
+ const { className, groupId, group, user, onSubscribe } = props, rest = __rest(props, ["className", "groupId", "group", "user", "onSubscribe"]);
50
51
  // STATE
51
52
  const [status, setStatus] = useState(null);
52
53
  // CONTEXT
@@ -60,6 +61,7 @@ export default function GroupSubscribeButton(inProps) {
60
61
  group,
61
62
  cacheStrategy: authUserId ? CacheStrategies.CACHE_FIRST : CacheStrategies.STALE_WHILE_REVALIDATE
62
63
  });
64
+ 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]);
63
65
  useEffect(() => {
64
66
  /**
65
67
  * Call scGroupsManager.subscriptionStatus inside an effect
@@ -69,11 +71,21 @@ export default function GroupSubscribeButton(inProps) {
69
71
  setStatus(scGroupsManager.subscriptionStatus(scGroup));
70
72
  }
71
73
  }, [authUserId, scGroupsManager.subscriptionStatus]);
72
- const subscribe = () => {
74
+ const subscribe = (userId) => {
73
75
  scGroupsManager
74
- .subscribe(scGroup)
76
+ .subscribe(scGroup, userId)
75
77
  .then(() => {
76
- // onJoin && onJoin(scGroup, !joined);
78
+ onSubscribe && onSubscribe(scGroup, SCGroupSubscriptionStatusType.SUBSCRIBED);
79
+ })
80
+ .catch((e) => {
81
+ Logger.error(SCOPE_SC_UI, e);
82
+ });
83
+ };
84
+ const unsubscribe = () => {
85
+ scGroupsManager
86
+ .unsubscribe(scGroup)
87
+ .then(() => {
88
+ onSubscribe && onSubscribe(scGroup, null);
77
89
  })
78
90
  .catch((e) => {
79
91
  Logger.error(SCOPE_SC_UI, e);
@@ -84,7 +96,7 @@ export default function GroupSubscribeButton(inProps) {
84
96
  scContext.settings.handleAnonymousAction();
85
97
  }
86
98
  else {
87
- subscribe();
99
+ status === SCGroupSubscriptionStatusType.SUBSCRIBED && !(user === null || user === void 0 ? void 0 : user.id) ? unsubscribe() : (user === null || user === void 0 ? void 0 : user.id) ? subscribe(user === null || user === void 0 ? void 0 : user.id) : subscribe();
88
100
  }
89
101
  };
90
102
  /**
@@ -94,21 +106,26 @@ export default function GroupSubscribeButton(inProps) {
94
106
  let _status;
95
107
  switch (status) {
96
108
  case SCGroupSubscriptionStatusType.REQUESTED:
97
- _status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupJoinButton.waitingApproval", id: "ui.groupJoinButton.waitingApproval" });
109
+ _status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.waitingApproval", id: "ui.groupSubscribeButton.waitingApproval" });
98
110
  break;
99
111
  case SCGroupSubscriptionStatusType.SUBSCRIBED:
100
112
  _status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.exit", id: "ui.groupSubscribeButton.exit" });
101
113
  break;
114
+ case SCGroupSubscriptionStatusType.INVITED:
115
+ _status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.accept", id: "ui.groupSubscribeButton.accept" });
116
+ break;
102
117
  default:
103
118
  scGroup.privacy === SCGroupPrivacyType.PUBLIC
104
119
  ? (_status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.enter", id: "ui.groupSubscribeButton.enter" }))
105
- : (_status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupJoinButton.requestAccess", id: "ui.groupJoinButton.requestAccess" }));
120
+ : (_status = React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.requestAccess", id: "ui.groupSubscribeButton.requestAccess" }));
106
121
  break;
107
122
  }
108
123
  return _status;
109
124
  };
110
- if (!scGroup || (scGroup && !scGroup.subscription_status)) {
125
+ if (!scGroup || (isGroupAdmin && (user === null || user === void 0 ? void 0 : user.id) === scUserContext.user.id) || (isGroupAdmin && !(user === null || user === void 0 ? void 0 : user.id))) {
111
126
  return null;
112
127
  }
113
- return (React.createElement(Root, Object.assign({ size: "small", variant: "outlined", onClick: handleSubscribeAction, loading: scUserContext.user ? scGroupsManager.isLoading(scGroup) : null, className: classNames(classes.root, className) }, rest), getStatus()));
128
+ return (React.createElement(Root, Object.assign({ size: "small", variant: "outlined", onClick: handleSubscribeAction, loading: (user && user.group_status === SCGroupSubscriptionStatusType.REQUESTED) || (!user && scUserContext.user)
129
+ ? status === null || scGroupsManager.isLoading(scGroup)
130
+ : null, disabled: status === SCGroupSubscriptionStatusType.REQUESTED, className: classNames(classes.root, className) }, rest), isGroupAdmin ? React.createElement(FormattedMessage, { defaultMessage: "ui.groupSubscribeButton.accept", id: "ui.groupSubscribeButton.accept" }) : getStatus()));
114
131
  }
@@ -0,0 +1,65 @@
1
+ import { SCGroupType } from '@selfcommunity/types';
2
+ import { EndpointType } from '@selfcommunity/api-services';
3
+ import { GroupProps } from '../Group';
4
+ export interface GroupsProps {
5
+ /**
6
+ * Overrides or extends the styles applied to the component.
7
+ * @default null
8
+ */
9
+ className?: string;
10
+ /**
11
+ * Endpoint to call
12
+ */
13
+ endpoint: EndpointType;
14
+ /**
15
+ * Props to spread to single group object
16
+ * @default {variant: 'outlined', ButtonBaseProps: {disableRipple: 'true'}}
17
+ */
18
+ GroupComponentProps?: GroupProps;
19
+ /**
20
+ * Prefetch groups. Useful for SSR.
21
+ * Use this to init the component with groups
22
+ * @default null
23
+ */
24
+ prefetchedGroups?: SCGroupType[];
25
+ /** If true, it means that the endpoint fetches all groups available
26
+ * @default null
27
+ */
28
+ general?: boolean;
29
+ /**
30
+ * Other props
31
+ */
32
+ [p: string]: any;
33
+ }
34
+ /**
35
+ * > API documentation for the Community-JS Groups component. Learn about the available props and the CSS API.
36
+ *
37
+ *
38
+ * This component renders the list of the follows of the given group.
39
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/Groups)
40
+
41
+ #### Import
42
+
43
+ ```jsx
44
+ import {Groups} from '@selfcommunity/react-ui';
45
+ ```
46
+
47
+ #### Component Name
48
+
49
+ The name `SCGroups` can be used when providing style overrides in the theme.
50
+
51
+
52
+ #### CSS
53
+
54
+ |Rule Name|Global class|Description|
55
+ |---|---|---|
56
+ |root|.SCGroups-root|Styles applied to the root element.|
57
+ |title|.SCGroups-title|Styles applied to the title element.|
58
+ |noResults|.SCGroups-no-results|Styles applied to no results section.|
59
+ |showMore|.SCGroups-show-more|Styles applied to show more button element.|
60
+ |dialogRoot|.SCGroups-dialog-root|Styles applied to the dialog root element.|
61
+ |endMessage|.SCGroups-end-message|Styles applied to the end message element.|
62
+
63
+ * @param inProps
64
+ */
65
+ export default function Groups(inProps: GroupsProps): JSX.Element;
@@ -0,0 +1,132 @@
1
+ import { __awaiter, __rest } from "tslib";
2
+ import React, { useEffect, useMemo, useState } from 'react';
3
+ import { styled } from '@mui/material/styles';
4
+ import { Box, Grid, Typography } from '@mui/material';
5
+ import { http } from '@selfcommunity/api-services';
6
+ import { Logger } from '@selfcommunity/utils';
7
+ import { SCPreferences, useIsComponentMountedRef, useSCPreferences, useSCUser } from '@selfcommunity/react-core';
8
+ import Skeleton from './Skeleton';
9
+ import { FormattedMessage } from 'react-intl';
10
+ import classNames from 'classnames';
11
+ import { SCOPE_SC_UI } from '../../constants/Errors';
12
+ import { useThemeProps } from '@mui/system';
13
+ import HiddenPlaceholder from '../../shared/HiddenPlaceholder';
14
+ import { PREFIX } from './constants';
15
+ import Group from '../Group';
16
+ const classes = {
17
+ root: `${PREFIX}-root`,
18
+ groups: `${PREFIX}-groups`,
19
+ item: `${PREFIX}-item`,
20
+ noResults: `${PREFIX}-no-results`,
21
+ showMore: `${PREFIX}-show-more`,
22
+ endMessage: `${PREFIX}-end-message`
23
+ };
24
+ const Root = styled(Box, {
25
+ name: PREFIX,
26
+ slot: 'Root'
27
+ })(() => ({}));
28
+ /**
29
+ * > API documentation for the Community-JS Groups component. Learn about the available props and the CSS API.
30
+ *
31
+ *
32
+ * This component renders the list of the follows of the given group.
33
+ * Take a look at our <strong>demo</strong> component [here](/docs/sdk/community-js/react-ui/Components/Groups)
34
+
35
+ #### Import
36
+
37
+ ```jsx
38
+ import {Groups} from '@selfcommunity/react-ui';
39
+ ```
40
+
41
+ #### Component Name
42
+
43
+ The name `SCGroups` can be used when providing style overrides in the theme.
44
+
45
+
46
+ #### CSS
47
+
48
+ |Rule Name|Global class|Description|
49
+ |---|---|---|
50
+ |root|.SCGroups-root|Styles applied to the root element.|
51
+ |title|.SCGroups-title|Styles applied to the title element.|
52
+ |noResults|.SCGroups-no-results|Styles applied to no results section.|
53
+ |showMore|.SCGroups-show-more|Styles applied to show more button element.|
54
+ |dialogRoot|.SCGroups-dialog-root|Styles applied to the dialog root element.|
55
+ |endMessage|.SCGroups-end-message|Styles applied to the end message element.|
56
+
57
+ * @param inProps
58
+ */
59
+ export default function Groups(inProps) {
60
+ // PROPS
61
+ const props = useThemeProps({
62
+ props: inProps,
63
+ name: PREFIX
64
+ });
65
+ const { endpoint, className, GroupComponentProps = { variant: 'outlined', ButtonBaseProps: { disableRipple: true, component: Box } }, prefetchedGroups = [], general } = props, rest = __rest(props, ["endpoint", "className", "GroupComponentProps", "prefetchedGroups", "general"]);
66
+ // STATE
67
+ const [groups, setGroups] = useState([]);
68
+ const [loading, setLoading] = useState(true);
69
+ // CONTEXT
70
+ const scUserContext = useSCUser();
71
+ const scPreferencesContext = useSCPreferences();
72
+ // MEMO
73
+ const contentAvailability = useMemo(() => SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY in scPreferencesContext.preferences &&
74
+ scPreferencesContext.preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY].value, [scPreferencesContext.preferences]);
75
+ // CONST
76
+ const authUserId = scUserContext.user ? scUserContext.user.id : null;
77
+ // REFS
78
+ const isMountedRef = useIsComponentMountedRef();
79
+ /**
80
+ * Fetches groups list
81
+ */
82
+ const fetchGroups = (next = endpoint.url({})) => __awaiter(this, void 0, void 0, function* () {
83
+ const response = yield http.request({
84
+ url: next,
85
+ method: endpoint.method
86
+ });
87
+ const data = response.data;
88
+ return data.next ? data.results.concat(yield fetchGroups(data.next)) : data.results;
89
+ });
90
+ /**
91
+ * On mount, fetches groups list
92
+ */
93
+ useEffect(() => {
94
+ if (!contentAvailability && !authUserId) {
95
+ return;
96
+ }
97
+ else if (prefetchedGroups.length) {
98
+ setGroups(prefetchedGroups);
99
+ setLoading(false);
100
+ }
101
+ else {
102
+ fetchGroups()
103
+ .then((data) => {
104
+ if (isMountedRef.current) {
105
+ setGroups(data);
106
+ setLoading(false);
107
+ }
108
+ })
109
+ .catch((error) => {
110
+ Logger.error(SCOPE_SC_UI, error);
111
+ });
112
+ }
113
+ }, [contentAvailability, authUserId, prefetchedGroups.length]);
114
+ const handleSubscribe = (group) => {
115
+ if (!general) {
116
+ const newGroups = [...groups];
117
+ const _updated = newGroups.filter((g) => g.id !== group.id);
118
+ setGroups(_updated);
119
+ }
120
+ };
121
+ // RENDER
122
+ if (!contentAvailability && !scUserContext.user) {
123
+ return React.createElement(HiddenPlaceholder, null);
124
+ }
125
+ const content = (React.createElement(React.Fragment, null, loading ? (React.createElement(Skeleton, null)) : (React.createElement(Grid, { container: true, spacing: { xs: 3 }, className: classes.groups }, !groups.length ? (React.createElement(Box, { className: classes.noResults },
126
+ React.createElement(Typography, { variant: "h4" },
127
+ React.createElement(FormattedMessage, { id: "ui.groups.noGroups.title", defaultMessage: "ui.groups.noGroups.title" })),
128
+ React.createElement(Typography, { variant: "body1" },
129
+ React.createElement(FormattedMessage, { id: "ui.groups.noGroups.subtitle", defaultMessage: "ui.groups.noGroups.subtitle" })))) : (React.createElement(React.Fragment, null, groups.map((group) => (React.createElement(Grid, { item: true, xs: 12, sm: 8, md: 6, key: group.id, className: classes.item },
130
+ React.createElement(Group, Object.assign({ group: group, groupId: group.id, groupSubscribeButtonProps: { onSubscribe: handleSubscribe } }, GroupComponentProps)))))))))));
131
+ return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest), content));
132
+ }
@@ -0,0 +1,34 @@
1
+ export interface GroupsSkeletonProps {
2
+ /**
3
+ * Overrides or extends the styles applied to the component.
4
+ * @default null
5
+ */
6
+ className?: string;
7
+ /**
8
+ * Overrides or extends the styles applied to the component.
9
+ * @default null
10
+ */
11
+ GroupSkeletonProps?: any;
12
+ }
13
+ /**
14
+ * > API documentation for the Community-JS Groups Skeleton component. Learn about the available props and the CSS API.
15
+
16
+ #### Import
17
+
18
+ ```jsx
19
+ import {GroupsSkeleton} from '@selfcommunity/react-ui';
20
+ ```
21
+
22
+ #### Component Name
23
+
24
+ The name `SCGroups-skeleton-root` can be used when providing style overrides in the theme.
25
+
26
+ #### CSS
27
+
28
+ |Rule Name|Global class|Description|
29
+ |---|---|---|
30
+ |root|.SCGroups-skeleton-root|Styles applied to the root element.|
31
+ |groups|.SCGroups-skeleton-groups|Styles applied to the group elements.|
32
+ *
33
+ */
34
+ export default function GroupsSkeleton(inProps: GroupsSkeletonProps): JSX.Element;
@@ -0,0 +1,42 @@
1
+ import { __rest } from "tslib";
2
+ import React from 'react';
3
+ import { styled } from '@mui/material/styles';
4
+ import { PREFIX } from './constants';
5
+ import { Box, Grid } from '@mui/material';
6
+ import classNames from 'classnames';
7
+ import { GroupSkeleton } from '../Group';
8
+ const classes = {
9
+ root: `${PREFIX}-skeleton-root`,
10
+ groups: `${PREFIX}-groups`
11
+ };
12
+ const Root = styled(Box, {
13
+ name: PREFIX,
14
+ slot: 'SkeletonRoot'
15
+ })(() => ({}));
16
+ /**
17
+ * > API documentation for the Community-JS Groups Skeleton component. Learn about the available props and the CSS API.
18
+
19
+ #### Import
20
+
21
+ ```jsx
22
+ import {GroupsSkeleton} from '@selfcommunity/react-ui';
23
+ ```
24
+
25
+ #### Component Name
26
+
27
+ The name `SCGroups-skeleton-root` can be used when providing style overrides in the theme.
28
+
29
+ #### CSS
30
+
31
+ |Rule Name|Global class|Description|
32
+ |---|---|---|
33
+ |root|.SCGroups-skeleton-root|Styles applied to the root element.|
34
+ |groups|.SCGroups-skeleton-groups|Styles applied to the group elements.|
35
+ *
36
+ */
37
+ export default function GroupsSkeleton(inProps) {
38
+ const { className, GroupSkeletonProps = {} } = inProps, rest = __rest(inProps, ["className", "GroupSkeletonProps"]);
39
+ return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest),
40
+ React.createElement(Grid, { container: true, spacing: { xs: 3 }, className: classes.groups }, [...Array(15)].map((category, index) => (React.createElement(Grid, { item: true, xs: 12, sm: 8, md: 6, key: index },
41
+ React.createElement(GroupSkeleton, Object.assign({ elevation: 0, variant: 'outlined' }, GroupSkeletonProps))))))));
42
+ }
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCGroups";
@@ -0,0 +1 @@
1
+ export const PREFIX = 'SCGroups';
@@ -0,0 +1,4 @@
1
+ import Groups, { GroupsProps } from './Groups';
2
+ import GroupsSkeleton from './Skeleton';
3
+ export default Groups;
4
+ export { GroupsProps, GroupsSkeleton };
@@ -0,0 +1,4 @@
1
+ import Groups from './Groups';
2
+ import GroupsSkeleton from './Skeleton';
3
+ export default Groups;
4
+ export { GroupsSkeleton };
@@ -1,4 +1,4 @@
1
- import { SCCategoryType, SCMediaType, SCPollType, SCTagType } from '@selfcommunity/types';
1
+ import { SCCategoryType, SCGroupType, SCMediaType, SCPollType, SCTagType } from '@selfcommunity/types';
2
2
  import { SCMediaObjectType } from '../../types/media';
3
3
  import { WidgetProps } from '../Widget';
4
4
  export interface InlineComposerWidgetProps extends Omit<WidgetProps, 'defaultValue'> {
@@ -15,6 +15,7 @@ export interface InlineComposerWidgetProps extends Omit<WidgetProps, 'defaultVal
15
15
  title?: string;
16
16
  text?: string;
17
17
  categories?: SCCategoryType[];
18
+ group?: SCGroupType;
18
19
  audience?: string;
19
20
  addressing?: SCTagType[];
20
21
  medias?: SCMediaType[];
@@ -60,7 +60,7 @@ export default function NavigationMenuIconButton(inProps) {
60
60
  props: inProps,
61
61
  name: PREFIX
62
62
  });
63
- const { className = null, DrawerProps = { anchor: 'left' }, drawerContent = React.createElement(DefaultDrawerContent, null), drawerHeaderContent = React.createElement(DefaultHeaderContent, null), ScrollContainerProps = {} } = props, rest = __rest(props, ["className", "DrawerProps", "drawerContent", "drawerHeaderContent", "ScrollContainerProps"]);
63
+ const { className = null, DrawerProps = { anchor: 'left' }, drawerHeaderContent = React.createElement(DefaultHeaderContent, null), drawerContent = React.createElement(DefaultDrawerContent, null), ScrollContainerProps = {} } = props, rest = __rest(props, ["className", "DrawerProps", "drawerHeaderContent", "drawerContent", "ScrollContainerProps"]);
64
64
  // STATE
65
65
  const [anchorEl, setAnchorEl] = useState(null);
66
66
  // CONTEXT
@@ -21,6 +21,7 @@ const classes = {
21
21
  navigation: `${PREFIX}-navigation`,
22
22
  home: `${PREFIX}-home`,
23
23
  explore: `${PREFIX}-explore`,
24
+ groups: `${PREFIX}-groups`,
24
25
  search: `${PREFIX}-search`,
25
26
  composer: `${PREFIX}-composer`,
26
27
  profile: `${PREFIX}-profile`,
@@ -98,6 +99,7 @@ export default function NavigationToolbar(inProps) {
98
99
  return _preferences;
99
100
  }, [scPreferences.preferences]);
100
101
  const privateMessagingEnabled = useMemo(() => scPreferences.features.includes(SCFeatureName.PRIVATE_MESSAGING), [scPreferences.features]);
102
+ const groupsEnabled = useMemo(() => scPreferences.features.includes(SCFeatureName.GROUPING), [scPreferences.features]);
101
103
  // STATE
102
104
  const [anchorNotification, setAnchorNotification] = React.useState(null);
103
105
  // HANDLERS
@@ -118,7 +120,9 @@ export default function NavigationToolbar(inProps) {
118
120
  React.createElement(Icon, null, "home"))),
119
121
  preferences[SCPreferences.CONFIGURATIONS_EXPLORE_STREAM_ENABLED] &&
120
122
  (preferences[SCPreferences.CONFIGURATIONS_CONTENT_AVAILABILITY] || scUserContext.user) && (React.createElement(IconButton, { className: classNames(classes.explore, { [classes.active]: value.startsWith(scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {})) }), "aria-label": "Explore", to: scRoutingContext.url(SCRoutes.EXPLORE_ROUTE_NAME, {}), component: Link },
121
- React.createElement(Icon, null, "explore")))));
123
+ React.createElement(Icon, null, "explore"))),
124
+ groupsEnabled && scUserContext.user && (React.createElement(IconButton, { className: classNames(classes.groups, { [classes.active]: value.startsWith(scRoutingContext.url(SCRoutes.GROUPS_ROUTE_NAME, {})) }), "aria-label": "Groups", to: scRoutingContext.url(SCRoutes.GROUPS_ROUTE_NAME, {}), component: Link },
125
+ React.createElement(Icon, null, "groups")))));
122
126
  return (React.createElement(Root, Object.assign({ className: classNames(className, classes.root) }, rest),
123
127
  React.createElement(NavigationMenuIconButtonComponent, null),
124
128
  React.createElement(Link, { to: scRoutingContext.url(SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo },
@@ -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
  */
@@ -62,7 +62,7 @@ export default function NavigationToolbarMobile(inProps) {
62
62
  props: inProps,
63
63
  name: PREFIX
64
64
  });
65
- const { className = '', disableSearch = false, SearchAutocompleteProps = {}, children = null, startActions = null, endActions = null, NavigationMenuIconButtonComponent = NavigationMenuIconButton, NavigationSettingsIconButtonComponent = NavigationSettingsIconButton } = props, rest = __rest(props, ["className", "disableSearch", "SearchAutocompleteProps", "children", "startActions", "endActions", "NavigationMenuIconButtonComponent", "NavigationSettingsIconButtonComponent"]);
65
+ const { className = '', disableSearch = false, preserveDesktopLogo = false, SearchAutocompleteProps = {}, children = null, startActions = null, endActions = null, NavigationMenuIconButtonComponent = NavigationMenuIconButton, NavigationSettingsIconButtonComponent = NavigationSettingsIconButton } = props, rest = __rest(props, ["className", "disableSearch", "preserveDesktopLogo", "SearchAutocompleteProps", "children", "startActions", "endActions", "NavigationMenuIconButtonComponent", "NavigationSettingsIconButtonComponent"]);
66
66
  // CONTEXT
67
67
  const scUserContext = useSCUser();
68
68
  const scRoutingContext = useSCRouting();
@@ -83,8 +83,7 @@ export default function NavigationToolbarMobile(inProps) {
83
83
  }
84
84
  const _children = children || (React.createElement(React.Fragment, null,
85
85
  React.createElement(NavigationMenuIconButtonComponent, null),
86
- React.createElement(Link, { to: scRoutingContext.url(SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo },
87
- React.createElement("img", { src: preferences[SCPreferences.LOGO_NAVBAR_LOGO_MOBILE].value, alt: "logo" }))));
86
+ React.createElement(Link, { to: scRoutingContext.url(SCRoutes.HOME_ROUTE_NAME, {}), className: classes.logo }, !preserveDesktopLogo ? (React.createElement("img", { src: preferences[SCPreferences.LOGO_NAVBAR_LOGO_MOBILE].value, alt: "logo" })) : (React.createElement("img", { src: preferences[SCPreferences.LOGO_NAVBAR_LOGO].value, alt: "logo" })))));
88
87
  return (React.createElement(Root, Object.assign({ className: classNames(className, classes.root) }, rest),
89
88
  _children,
90
89
  startActions,
@@ -8,7 +8,7 @@ export interface PrivateMessageComponentProps {
8
8
  * Handler on message click
9
9
  * @default null
10
10
  */
11
- onItemClick?: (id: any) => void;
11
+ onItemClick?: (id: any, type: any) => void;
12
12
  /**
13
13
  * Handler on single message open
14
14
  * @default null
@@ -5,7 +5,7 @@ import { Grid, useMediaQuery, useTheme } from '@mui/material';
5
5
  import { useSCPreferences, useSCUser } from '@selfcommunity/react-core';
6
6
  import classNames from 'classnames';
7
7
  import { useThemeProps } from '@mui/system';
8
- import { SCFeatureName, SCPrivateMessageStatusType } from '@selfcommunity/types';
8
+ import { SCFeatureName, SCPrivateMessageStatusType, SCPrivateMessageType } from '@selfcommunity/types';
9
9
  import PrivateMessageThread from '../PrivateMessageThread';
10
10
  import PrivateMessageSnippets from '../PrivateMessageSnippets';
11
11
  import { PREFIX } from './constants';
@@ -65,6 +65,7 @@ export default function PrivateMessageComponent(inProps) {
65
65
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
66
66
  const [layout, setLayout] = useState('default');
67
67
  const [obj, setObj] = useState(id !== null && id !== void 0 ? id : null);
68
+ const [type, setType] = useState(null);
68
69
  const isNew = obj && obj === SCPrivateMessageStatusType.NEW;
69
70
  const [openNewMessage, setOpenNewMessage] = useState(isNew !== null && isNew !== void 0 ? isNew : false);
70
71
  const mobileSnippetsView = (layout === 'default' && !obj) || (layout === 'mobile' && !obj);
@@ -86,10 +87,12 @@ export default function PrivateMessageComponent(inProps) {
86
87
  /**
87
88
  * Handles thread opening on click
88
89
  * @param item
90
+ * @param type
89
91
  */
90
- const handleThreadOpening = (item) => {
91
- onItemClick && onItemClick(messageReceiver(item, authUserId));
92
- setObj(messageReceiver(item, authUserId));
92
+ const handleThreadOpening = (item, type) => {
93
+ onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId), type);
94
+ setType(type);
95
+ setObj(item.group ? item : messageReceiver(item, authUserId));
93
96
  setOpenNewMessage(false);
94
97
  };
95
98
  /**
@@ -105,7 +108,7 @@ export default function PrivateMessageComponent(inProps) {
105
108
  const handleOpenNewMessage = () => {
106
109
  setOpenNewMessage(!openNewMessage);
107
110
  setObj(SCPrivateMessageStatusType.NEW);
108
- onItemClick && onItemClick(SCPrivateMessageStatusType.NEW);
111
+ onItemClick && onItemClick(SCPrivateMessageStatusType.NEW, SCPrivateMessageType.NEW);
109
112
  };
110
113
  /**
111
114
  * Handles new messages open from user profile page or notifications section
@@ -127,7 +130,7 @@ export default function PrivateMessageComponent(inProps) {
127
130
  * Handles state update when a new message is sent
128
131
  */
129
132
  const handleOnNewMessageSent = (msg, isOne) => {
130
- onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '');
133
+ onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '', msg.group ? SCPrivateMessageType.GROUP : SCPrivateMessageType.USER);
131
134
  setObj(isOne ? messageReceiver(msg, authUserId) : null);
132
135
  setOpenNewMessage(false);
133
136
  };
@@ -147,14 +150,14 @@ export default function PrivateMessageComponent(inProps) {
147
150
  onSnippetClick: handleThreadOpening,
148
151
  onNewMessageClick: handleOpenNewMessage,
149
152
  onDeleteConfirm: handleDeleteThread
150
- }, userObj: obj, clearSearch: clear, elevation: 0 })));
153
+ }, threadObj: obj, clearSearch: clear, elevation: 0 })));
151
154
  }
152
155
  /**
153
156
  * Renders thread section
154
157
  */
155
158
  function renderThread() {
156
159
  return (React.createElement(Grid, { item: true, xs: 12, md: 7, className: classNames(classes.threadBox, { [classes.hide]: isMobile && mobileSnippetsView }) },
157
- React.createElement(PrivateMessageThread, { userObj: obj, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
160
+ React.createElement(PrivateMessageThread, { threadObj: obj, type: type, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
158
161
  }
159
162
  /**
160
163
  * Renders the component (if not hidden by autoHide prop)
@@ -72,10 +72,12 @@ export default function PrivateMessageSnippetItem(inProps) {
72
72
  // STATE
73
73
  const hasBadge = () => {
74
74
  var _a;
75
- if ((message === null || message === void 0 ? void 0 : message.receiver.id) !== ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.id)) {
76
- return message === null || message === void 0 ? void 0 : message.receiver.community_badge;
75
+ if (message.receiver) {
76
+ if ((message === null || message === void 0 ? void 0 : message.receiver.id) !== ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.id)) {
77
+ return message === null || message === void 0 ? void 0 : message.receiver.community_badge;
78
+ }
79
+ return message === null || message === void 0 ? void 0 : message.sender.community_badge;
77
80
  }
78
- return message === null || message === void 0 ? void 0 : message.sender.community_badge;
79
81
  };
80
82
  if (!message) {
81
83
  return React.createElement(PrivateMessageSnippetItemSkeleton, { elevation: 0 });
@@ -86,10 +88,13 @@ export default function PrivateMessageSnippetItem(inProps) {
86
88
  return (React.createElement(Root, Object.assign({ className: classNames(classes.root, className) }, rest, { secondaryAction: secondaryAction, disablePadding: true }),
87
89
  React.createElement(ListItemButton, { onClick: onItemClick, classes: { root: classNames({ [classes.unread]: message.thread_status === SCPrivateMessageStatusType.NEW }) } },
88
90
  React.createElement(ListItemAvatar, null,
89
- React.createElement(UserAvatar, { hide: !hasBadge() },
90
- React.createElement(Avatar, { alt: ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.username) === message.receiver.username ? message.sender.username : message.receiver.username, src: ((_b = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _b === void 0 ? void 0 : _b.username) === message.receiver.username ? message.sender.avatar : message.receiver.avatar }))),
91
+ React.createElement(UserAvatar, { hide: !hasBadge() }, message.group ? (React.createElement(Avatar, { alt: message.group.name, src: message.group.image_big })) : (React.createElement(Avatar, { alt: ((_a = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _a === void 0 ? void 0 : _a.username) === message.receiver.username ? message.sender.username : message.receiver.username, src: ((_b = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _b === void 0 ? void 0 : _b.username) === message.receiver.username ? message.sender.avatar : message.receiver.avatar })))),
91
92
  React.createElement(ListItemText, { primary: React.createElement(React.Fragment, null,
92
- React.createElement(Typography, { component: "span", className: classes.username }, ((_c = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _c === void 0 ? void 0 : _c.username) === message.receiver.username ? message.sender.username : message.receiver.username),
93
+ React.createElement(Typography, { component: "span", className: classes.username }, message.group
94
+ ? message.group.name
95
+ : ((_c = scUserContext === null || scUserContext === void 0 ? void 0 : scUserContext.user) === null || _c === void 0 ? void 0 : _c.username) === message.receiver.username
96
+ ? message.sender.username
97
+ : message.receiver.username),
93
98
  hasBadge() && preferences && (React.createElement(Chip, { component: "span", className: classes.badgeLabel, size: "small", label: preferences[SCPreferences.STAFF_STAFF_BADGE_LABEL] })),
94
99
  React.createElement(Typography, { color: "secondary", className: classes.time, component: "span" }, `${intl.formatDate(message.last_message_at, {
95
100
  day: '2-digit',
@@ -20,7 +20,7 @@ export interface PrivateMessageSnippetsProps extends CardProps {
20
20
  *
21
21
  */
22
22
  snippetActions?: {
23
- onSnippetClick?: (msg: any) => void;
23
+ onSnippetClick?: (msg: any, type: any) => void;
24
24
  onNewMessageClick?: () => void;
25
25
  onDeleteConfirm?: (msg: any) => void;
26
26
  };
@@ -29,10 +29,10 @@ export interface PrivateMessageSnippetsProps extends CardProps {
29
29
  */
30
30
  [p: string]: any;
31
31
  /**
32
- * thread user object
32
+ * thread user/ group object
33
33
  * @default null
34
34
  */
35
- userObj?: any;
35
+ threadObj?: any;
36
36
  }
37
37
  /**
38
38
  * > API documentation for the Community-JS PrivateMessageSnippets component. Learn about the available props and the CSS API.