@selfcommunity/react-ui 0.7.9-alpha.73 → 0.7.9-alpha.75

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.
@@ -84,12 +84,12 @@ function ChangeGroupCover(inProps) {
84
84
  reader.onload = (e) => {
85
85
  const img = new Image();
86
86
  img.onload = () => {
87
- if (img.width < 1920) {
88
- setAlert(intl.formatMessage(messages.errorImageSize));
89
- }
90
- else {
91
- isCreationMode ? onChange && onChange(fileInput) : handleSave();
92
- }
87
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
88
+ // if (img.width < 1920) {
89
+ // setAlert(intl.formatMessage(messages.errorImageSize));
90
+ // } else {
91
+ // isCreationMode ? onChange && onChange(fileInput) : handleSave();
92
+ // }
93
93
  };
94
94
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
95
95
  // @ts-ignore
@@ -82,12 +82,12 @@ function ChangeGroupPicture(inProps) {
82
82
  reader.onload = (e) => {
83
83
  const img = new Image();
84
84
  img.onload = () => {
85
- if (img.width < 600 && img.height < 600) {
86
- setAlert(intl.formatMessage(messages.errorLoadImage));
87
- }
88
- else {
89
- isCreationMode ? onChange && onChange(fileInput) : handleSave();
90
- }
85
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
86
+ // if (img.width < 600 && img.height < 600) {
87
+ // setAlert(intl.formatMessage(messages.errorLoadImage));
88
+ // } else {
89
+ // isCreationMode ? onChange && onChange(fileInput) : handleSave();
90
+ // }
91
91
  };
92
92
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
93
93
  // @ts-ignore
@@ -70,6 +70,7 @@ function Share(props) {
70
70
  const { enqueueSnackbar } = (0, notistack_1.useSnackbar)();
71
71
  const domain = typeof location !== 'undefined' && location.origin ? location.origin : '';
72
72
  const url = domain + scRoutingContext.url((0, contribution_1.getContributionRouteName)(obj), (0, contribution_1.getRouteData)(obj));
73
+ const isGroupPublic = (0, react_1.useMemo)(() => feedObject.group && feedObject.group.privacy === types_1.SCGroupPrivacyType.PUBLIC, [feedObject.group]);
73
74
  // INTL
74
75
  const intl = (0, react_intl_1.useIntl)();
75
76
  // HANDLERS
@@ -188,22 +189,23 @@ function Share(props) {
188
189
  }
189
190
  function renderShareMenuItems() {
190
191
  return (react_1.default.createElement(material_1.Box, null,
191
- react_1.default.createElement(MenuItem_1.default, { onClick: () => share(false) },
192
- react_1.default.createElement(ListItemIcon_1.default, null,
193
- react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "redo")),
194
- react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.shareNow", defaultMessage: "ui.feedObject.share.shareNow" }) })),
195
- facebookShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.FACEBOOK_SHARE + url, 'facebook-share-dialog', 'width=626,height=436') },
196
- react_1.default.createElement(ListItemIcon_1.default, null,
197
- react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "facebook")),
198
- react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.facebook", defaultMessage: "ui.feedObject.share.facebook" }) }))),
199
- twitterShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.TWITTER_SHARE + url, 'twitter-share-dialog', 'width=626,height=436') },
200
- react_1.default.createElement(ListItemIcon_1.default, null,
201
- react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "twitter")),
202
- react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.twitter", defaultMessage: "ui.feedObject.share.twitter" }) }))),
203
- linkedinShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.LINKEDIN_SHARE + url, 'linkedin-share-dialog', 'width=626,height=436') },
204
- react_1.default.createElement(ListItemIcon_1.default, null,
205
- react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "linkedin")),
206
- react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.linkedin", defaultMessage: "ui.feedObject.share.linkedin" }) }))),
192
+ (!feedObject.group || isGroupPublic) && (react_1.default.createElement(react_1.default.Fragment, null,
193
+ react_1.default.createElement(MenuItem_1.default, { onClick: () => share(false) },
194
+ react_1.default.createElement(ListItemIcon_1.default, null,
195
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "redo")),
196
+ react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.shareNow", defaultMessage: "ui.feedObject.share.shareNow" }) })),
197
+ facebookShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.FACEBOOK_SHARE + url, 'facebook-share-dialog', 'width=626,height=436') },
198
+ react_1.default.createElement(ListItemIcon_1.default, null,
199
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "facebook")),
200
+ react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.facebook", defaultMessage: "ui.feedObject.share.facebook" }) }))),
201
+ twitterShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.TWITTER_SHARE + url, 'twitter-share-dialog', 'width=626,height=436') },
202
+ react_1.default.createElement(ListItemIcon_1.default, null,
203
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "twitter")),
204
+ react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.twitter", defaultMessage: "ui.feedObject.share.twitter" }) }))),
205
+ linkedinShareEnabled && (react_1.default.createElement(MenuItem_1.default, { onClick: () => window.open(SocialShare_1.LINKEDIN_SHARE + url, 'linkedin-share-dialog', 'width=626,height=436') },
206
+ react_1.default.createElement(ListItemIcon_1.default, null,
207
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "linkedin")),
208
+ react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.feedObject.share.linkedin", defaultMessage: "ui.feedObject.share.linkedin" }) }))))),
207
209
  react_1.default.createElement(MenuItem_1.default, null,
208
210
  react_1.default.createElement(ListItemIcon_1.default, null,
209
211
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "link")),
@@ -1,9 +1,15 @@
1
+ import { SCPrivateMessageType } from '@selfcommunity/types';
1
2
  export interface PrivateMessageComponentProps {
2
3
  /**
3
4
  * Thread receiver id
4
5
  * @default null
5
6
  */
6
7
  id?: number | string;
8
+ /**
9
+ * Thread type
10
+ * @default null
11
+ */
12
+ type?: SCPrivateMessageType;
7
13
  /**
8
14
  * Handler on message click
9
15
  * @default null
@@ -57,7 +57,7 @@ function PrivateMessageComponent(inProps) {
57
57
  props: inProps,
58
58
  name: constants_1.PREFIX
59
59
  });
60
- const { id = null, className = null, onItemClick = null, onThreadBack = null, onSingleMessageOpen = null } = props, rest = tslib_1.__rest(props, ["id", "className", "onItemClick", "onThreadBack", "onSingleMessageOpen"]);
60
+ const { id = null, type = null, className = null, onItemClick = null, onThreadBack = null, onSingleMessageOpen = null } = props, rest = tslib_1.__rest(props, ["id", "type", "className", "onItemClick", "onThreadBack", "onSingleMessageOpen"]);
61
61
  // CONTEXT
62
62
  const scUserContext = (0, react_core_1.useSCUser)();
63
63
  const scPreferences = (0, react_core_1.useSCPreferences)();
@@ -67,7 +67,7 @@ function PrivateMessageComponent(inProps) {
67
67
  const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
68
68
  const [layout, setLayout] = (0, react_1.useState)('default');
69
69
  const [obj, setObj] = (0, react_1.useState)(id !== null && id !== void 0 ? id : null);
70
- const [type, setType] = (0, react_1.useState)(null);
70
+ const [_type, _setType] = (0, react_1.useState)(type);
71
71
  const isNew = obj && obj === types_1.SCPrivateMessageStatusType.NEW;
72
72
  const [openNewMessage, setOpenNewMessage] = (0, react_1.useState)(isNew !== null && isNew !== void 0 ? isNew : false);
73
73
  const mobileSnippetsView = (layout === 'default' && !obj) || (layout === 'mobile' && !obj);
@@ -85,6 +85,9 @@ function PrivateMessageComponent(inProps) {
85
85
  (0, react_1.useEffect)(() => {
86
86
  setObj(id !== null && id !== void 0 ? id : null);
87
87
  }, [id]);
88
+ (0, react_1.useEffect)(() => {
89
+ _setType(type !== null && type !== void 0 ? type : null);
90
+ }, [type]);
88
91
  // HANDLERS
89
92
  /**
90
93
  * Handles thread opening on click
@@ -93,7 +96,7 @@ function PrivateMessageComponent(inProps) {
93
96
  */
94
97
  const handleThreadOpening = (item, type) => {
95
98
  onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId), type);
96
- setType(type);
99
+ _setType(type);
97
100
  setObj(item.group ? item : messageReceiver(item, authUserId));
98
101
  setOpenNewMessage(false);
99
102
  };
@@ -110,7 +113,7 @@ function PrivateMessageComponent(inProps) {
110
113
  const handleOpenNewMessage = () => {
111
114
  setOpenNewMessage(!openNewMessage);
112
115
  setObj(types_1.SCPrivateMessageStatusType.NEW);
113
- setType(types_1.SCPrivateMessageType.NEW);
116
+ _setType(types_1.SCPrivateMessageType.NEW);
114
117
  onItemClick && onItemClick(types_1.SCPrivateMessageStatusType.NEW, types_1.SCPrivateMessageType.NEW);
115
118
  };
116
119
  /**
@@ -127,7 +130,7 @@ function PrivateMessageComponent(inProps) {
127
130
  id && setLayout('mobile');
128
131
  setOpenNewMessage(false);
129
132
  setObj(null);
130
- setType(null);
133
+ _setType(null);
131
134
  onThreadBack && onThreadBack();
132
135
  };
133
136
  /**
@@ -154,14 +157,14 @@ function PrivateMessageComponent(inProps) {
154
157
  onSnippetClick: handleThreadOpening,
155
158
  onNewMessageClick: handleOpenNewMessage,
156
159
  onDeleteConfirm: handleDeleteThread
157
- }, threadObj: obj, clearSearch: clear, elevation: 0 })));
160
+ }, threadObj: obj, clearSearch: clear, elevation: 0, type: _type })));
158
161
  }
159
162
  /**
160
163
  * Renders thread section
161
164
  */
162
165
  function renderThread() {
163
166
  return (react_1.default.createElement(material_1.Grid, { item: true, xs: 12, md: 7, className: (0, classnames_1.default)(classes.threadBox, { [classes.hide]: isMobile && mobileSnippetsView }) },
164
- react_1.default.createElement(PrivateMessageThread_1.default, { threadObj: obj, type: type, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
167
+ react_1.default.createElement(PrivateMessageThread_1.default, { threadObj: obj, type: _type, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
165
168
  }
166
169
  /**
167
170
  * Renders the component (if not hidden by autoHide prop)
@@ -1,5 +1,5 @@
1
1
  import { CardProps } from '@mui/material';
2
- import { SCPrivateMessageSnippetType } from '@selfcommunity/types';
2
+ import { SCPrivateMessageSnippetType, SCPrivateMessageType } from '@selfcommunity/types';
3
3
  export interface PrivateMessageSnippetsProps extends CardProps {
4
4
  /**
5
5
  * Snippets list
@@ -33,6 +33,11 @@ export interface PrivateMessageSnippetsProps extends CardProps {
33
33
  * @default null
34
34
  */
35
35
  threadObj?: any;
36
+ /**
37
+ * Thread type
38
+ * @default SCPrivateMessageType.USER
39
+ */
40
+ type?: SCPrivateMessageType;
36
41
  }
37
42
  /**
38
43
  * > API documentation for the Community-JS PrivateMessageSnippets component. Learn about the available props and the CSS API.
@@ -71,7 +71,7 @@ function PrivateMessageSnippets(inProps) {
71
71
  props: inProps,
72
72
  name: constants_1.PREFIX
73
73
  });
74
- const { className = null, threadObj = null, snippetActions, clearSearch } = props, rest = tslib_1.__rest(props, ["className", "threadObj", "snippetActions", "clearSearch"]);
74
+ const { className = null, threadObj = null, type = null, snippetActions, clearSearch } = props, rest = tslib_1.__rest(props, ["className", "threadObj", "type", "snippetActions", "clearSearch"]);
75
75
  // STATE
76
76
  const theme = (0, material_1.useTheme)();
77
77
  const isMobile = (0, useMediaQuery_1.default)(theme.breakpoints.down('md'));
@@ -80,7 +80,7 @@ function PrivateMessageSnippets(inProps) {
80
80
  const isObj = typeof threadObj === 'object';
81
81
  const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
82
82
  const authUserId = scUserContext.user ? scUserContext.user.id : null;
83
- const [type, setType] = (0, react_1.useState)(null);
83
+ const [_type, _setType] = (0, react_1.useState)(type);
84
84
  // INTL
85
85
  const intl = (0, react_intl_1.useIntl)();
86
86
  // REFS
@@ -109,15 +109,15 @@ function PrivateMessageSnippets(inProps) {
109
109
  const isSelected = (0, react_1.useMemo)(() => {
110
110
  return (message) => {
111
111
  var _a, _b;
112
- if (threadObj && type === types_1.SCPrivateMessageType.GROUP) {
112
+ if (threadObj && _type === types_1.SCPrivateMessageType.GROUP) {
113
113
  return ((_a = message === null || message === void 0 ? void 0 : message.group) === null || _a === void 0 ? void 0 : _a.id) === (isObj ? (_b = threadObj === null || threadObj === void 0 ? void 0 : threadObj.group) === null || _b === void 0 ? void 0 : _b.id : threadObj);
114
114
  }
115
- else if (threadObj && type === types_1.SCPrivateMessageType.USER) {
115
+ else if (threadObj && threadObj !== types_1.SCPrivateMessageType.NEW) {
116
116
  return messageReceiver(message, authUserId) === (isObj ? messageReceiver(threadObj, authUserId) : threadObj);
117
117
  }
118
118
  return null;
119
119
  };
120
- }, [threadObj, authUserId, type]);
120
+ }, [threadObj, authUserId, _type]);
121
121
  //HANDLERS
122
122
  const handleChange = (event) => {
123
123
  setSearch(event.target.value);
@@ -134,7 +134,7 @@ function PrivateMessageSnippets(inProps) {
134
134
  };
135
135
  function handleOpenThread(msg) {
136
136
  const _type = msg.group !== null ? types_1.SCPrivateMessageType.GROUP : types_1.SCPrivateMessageType.USER;
137
- setType(_type);
137
+ _setType(_type);
138
138
  snippetActions && snippetActions.onSnippetClick(msg, _type);
139
139
  handleClear();
140
140
  updateSnippetsParams(msg.id, 'seen');
@@ -82,12 +82,12 @@ export default function ChangeGroupCover(inProps) {
82
82
  reader.onload = (e) => {
83
83
  const img = new Image();
84
84
  img.onload = () => {
85
- if (img.width < 1920) {
86
- setAlert(intl.formatMessage(messages.errorImageSize));
87
- }
88
- else {
89
- isCreationMode ? onChange && onChange(fileInput) : handleSave();
90
- }
85
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
86
+ // if (img.width < 1920) {
87
+ // setAlert(intl.formatMessage(messages.errorImageSize));
88
+ // } else {
89
+ // isCreationMode ? onChange && onChange(fileInput) : handleSave();
90
+ // }
91
91
  };
92
92
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
93
93
  // @ts-ignore
@@ -80,12 +80,12 @@ export default function ChangeGroupPicture(inProps) {
80
80
  reader.onload = (e) => {
81
81
  const img = new Image();
82
82
  img.onload = () => {
83
- if (img.width < 600 && img.height < 600) {
84
- setAlert(intl.formatMessage(messages.errorLoadImage));
85
- }
86
- else {
87
- isCreationMode ? onChange && onChange(fileInput) : handleSave();
88
- }
83
+ isCreationMode ? onChange && onChange(fileInput) : handleSave();
84
+ // if (img.width < 600 && img.height < 600) {
85
+ // setAlert(intl.formatMessage(messages.errorLoadImage));
86
+ // } else {
87
+ // isCreationMode ? onChange && onChange(fileInput) : handleSave();
88
+ // }
89
89
  };
90
90
  // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
91
91
  // @ts-ignore
@@ -13,7 +13,7 @@ import { SCOPE_SC_UI } from '../../../../constants/Errors';
13
13
  import classNames from 'classnames';
14
14
  import { useSnackbar } from 'notistack';
15
15
  import Skeleton from '@mui/material/Skeleton';
16
- import { SCContributionType } from '@selfcommunity/types';
16
+ import { SCContributionType, SCGroupPrivacyType } from '@selfcommunity/types';
17
17
  import { Endpoints, http } from '@selfcommunity/api-services';
18
18
  import { copyTextToClipboard, Logger } from '@selfcommunity/utils';
19
19
  import { SCPreferences, SCPreferencesContext, UserUtils, useSCContext, useSCFetchFeedObject, useSCRouting, useSCUser } from '@selfcommunity/react-core';
@@ -68,6 +68,7 @@ export default function Share(props) {
68
68
  const { enqueueSnackbar } = useSnackbar();
69
69
  const domain = typeof location !== 'undefined' && location.origin ? location.origin : '';
70
70
  const url = domain + scRoutingContext.url(getContributionRouteName(obj), getRouteData(obj));
71
+ const isGroupPublic = useMemo(() => feedObject.group && feedObject.group.privacy === SCGroupPrivacyType.PUBLIC, [feedObject.group]);
71
72
  // INTL
72
73
  const intl = useIntl();
73
74
  // HANDLERS
@@ -186,22 +187,23 @@ export default function Share(props) {
186
187
  }
187
188
  function renderShareMenuItems() {
188
189
  return (React.createElement(Box, null,
189
- React.createElement(MenuItem, { onClick: () => share(false) },
190
- React.createElement(ListItemIcon, null,
191
- React.createElement(Icon, { fontSize: "small" }, "redo")),
192
- React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.shareNow", defaultMessage: "ui.feedObject.share.shareNow" }) })),
193
- facebookShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(FACEBOOK_SHARE + url, 'facebook-share-dialog', 'width=626,height=436') },
194
- React.createElement(ListItemIcon, null,
195
- React.createElement(Icon, { fontSize: "small" }, "facebook")),
196
- React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.facebook", defaultMessage: "ui.feedObject.share.facebook" }) }))),
197
- twitterShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(TWITTER_SHARE + url, 'twitter-share-dialog', 'width=626,height=436') },
198
- React.createElement(ListItemIcon, null,
199
- React.createElement(Icon, { fontSize: "small" }, "twitter")),
200
- React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.twitter", defaultMessage: "ui.feedObject.share.twitter" }) }))),
201
- linkedinShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(LINKEDIN_SHARE + url, 'linkedin-share-dialog', 'width=626,height=436') },
202
- React.createElement(ListItemIcon, null,
203
- React.createElement(Icon, { fontSize: "small" }, "linkedin")),
204
- React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.linkedin", defaultMessage: "ui.feedObject.share.linkedin" }) }))),
190
+ (!feedObject.group || isGroupPublic) && (React.createElement(React.Fragment, null,
191
+ React.createElement(MenuItem, { onClick: () => share(false) },
192
+ React.createElement(ListItemIcon, null,
193
+ React.createElement(Icon, { fontSize: "small" }, "redo")),
194
+ React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.shareNow", defaultMessage: "ui.feedObject.share.shareNow" }) })),
195
+ facebookShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(FACEBOOK_SHARE + url, 'facebook-share-dialog', 'width=626,height=436') },
196
+ React.createElement(ListItemIcon, null,
197
+ React.createElement(Icon, { fontSize: "small" }, "facebook")),
198
+ React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.facebook", defaultMessage: "ui.feedObject.share.facebook" }) }))),
199
+ twitterShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(TWITTER_SHARE + url, 'twitter-share-dialog', 'width=626,height=436') },
200
+ React.createElement(ListItemIcon, null,
201
+ React.createElement(Icon, { fontSize: "small" }, "twitter")),
202
+ React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.twitter", defaultMessage: "ui.feedObject.share.twitter" }) }))),
203
+ linkedinShareEnabled && (React.createElement(MenuItem, { onClick: () => window.open(LINKEDIN_SHARE + url, 'linkedin-share-dialog', 'width=626,height=436') },
204
+ React.createElement(ListItemIcon, null,
205
+ React.createElement(Icon, { fontSize: "small" }, "linkedin")),
206
+ React.createElement(ListItemText, { primary: React.createElement(FormattedMessage, { id: "ui.feedObject.share.linkedin", defaultMessage: "ui.feedObject.share.linkedin" }) }))))),
205
207
  React.createElement(MenuItem, null,
206
208
  React.createElement(ListItemIcon, null,
207
209
  React.createElement(Icon, { fontSize: "small" }, "link")),
@@ -1,9 +1,15 @@
1
+ import { SCPrivateMessageType } from '@selfcommunity/types';
1
2
  export interface PrivateMessageComponentProps {
2
3
  /**
3
4
  * Thread receiver id
4
5
  * @default null
5
6
  */
6
7
  id?: number | string;
8
+ /**
9
+ * Thread type
10
+ * @default null
11
+ */
12
+ type?: SCPrivateMessageType;
7
13
  /**
8
14
  * Handler on message click
9
15
  * @default null
@@ -55,7 +55,7 @@ export default function PrivateMessageComponent(inProps) {
55
55
  props: inProps,
56
56
  name: PREFIX
57
57
  });
58
- const { id = null, className = null, onItemClick = null, onThreadBack = null, onSingleMessageOpen = null } = props, rest = __rest(props, ["id", "className", "onItemClick", "onThreadBack", "onSingleMessageOpen"]);
58
+ const { id = null, type = null, className = null, onItemClick = null, onThreadBack = null, onSingleMessageOpen = null } = props, rest = __rest(props, ["id", "type", "className", "onItemClick", "onThreadBack", "onSingleMessageOpen"]);
59
59
  // CONTEXT
60
60
  const scUserContext = useSCUser();
61
61
  const scPreferences = useSCPreferences();
@@ -65,7 +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
+ const [_type, _setType] = useState(type);
69
69
  const isNew = obj && obj === SCPrivateMessageStatusType.NEW;
70
70
  const [openNewMessage, setOpenNewMessage] = useState(isNew !== null && isNew !== void 0 ? isNew : false);
71
71
  const mobileSnippetsView = (layout === 'default' && !obj) || (layout === 'mobile' && !obj);
@@ -83,6 +83,9 @@ export default function PrivateMessageComponent(inProps) {
83
83
  useEffect(() => {
84
84
  setObj(id !== null && id !== void 0 ? id : null);
85
85
  }, [id]);
86
+ useEffect(() => {
87
+ _setType(type !== null && type !== void 0 ? type : null);
88
+ }, [type]);
86
89
  // HANDLERS
87
90
  /**
88
91
  * Handles thread opening on click
@@ -91,7 +94,7 @@ export default function PrivateMessageComponent(inProps) {
91
94
  */
92
95
  const handleThreadOpening = (item, type) => {
93
96
  onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId), type);
94
- setType(type);
97
+ _setType(type);
95
98
  setObj(item.group ? item : messageReceiver(item, authUserId));
96
99
  setOpenNewMessage(false);
97
100
  };
@@ -108,7 +111,7 @@ export default function PrivateMessageComponent(inProps) {
108
111
  const handleOpenNewMessage = () => {
109
112
  setOpenNewMessage(!openNewMessage);
110
113
  setObj(SCPrivateMessageStatusType.NEW);
111
- setType(SCPrivateMessageType.NEW);
114
+ _setType(SCPrivateMessageType.NEW);
112
115
  onItemClick && onItemClick(SCPrivateMessageStatusType.NEW, SCPrivateMessageType.NEW);
113
116
  };
114
117
  /**
@@ -125,7 +128,7 @@ export default function PrivateMessageComponent(inProps) {
125
128
  id && setLayout('mobile');
126
129
  setOpenNewMessage(false);
127
130
  setObj(null);
128
- setType(null);
131
+ _setType(null);
129
132
  onThreadBack && onThreadBack();
130
133
  };
131
134
  /**
@@ -152,14 +155,14 @@ export default function PrivateMessageComponent(inProps) {
152
155
  onSnippetClick: handleThreadOpening,
153
156
  onNewMessageClick: handleOpenNewMessage,
154
157
  onDeleteConfirm: handleDeleteThread
155
- }, threadObj: obj, clearSearch: clear, elevation: 0 })));
158
+ }, threadObj: obj, clearSearch: clear, elevation: 0, type: _type })));
156
159
  }
157
160
  /**
158
161
  * Renders thread section
159
162
  */
160
163
  function renderThread() {
161
164
  return (React.createElement(Grid, { item: true, xs: 12, md: 7, className: classNames(classes.threadBox, { [classes.hide]: isMobile && mobileSnippetsView }) },
162
- React.createElement(PrivateMessageThread, { threadObj: obj, type: type, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
165
+ React.createElement(PrivateMessageThread, { threadObj: obj, type: _type, openNewMessage: openNewMessage, onNewMessageClose: handleMessageBack, onNewMessageSent: handleOnNewMessageSent, onSingleMessageOpen: handleSingleMessage, elevation: 0 })));
163
166
  }
164
167
  /**
165
168
  * Renders the component (if not hidden by autoHide prop)
@@ -1,5 +1,5 @@
1
1
  import { CardProps } from '@mui/material';
2
- import { SCPrivateMessageSnippetType } from '@selfcommunity/types';
2
+ import { SCPrivateMessageSnippetType, SCPrivateMessageType } from '@selfcommunity/types';
3
3
  export interface PrivateMessageSnippetsProps extends CardProps {
4
4
  /**
5
5
  * Snippets list
@@ -33,6 +33,11 @@ export interface PrivateMessageSnippetsProps extends CardProps {
33
33
  * @default null
34
34
  */
35
35
  threadObj?: any;
36
+ /**
37
+ * Thread type
38
+ * @default SCPrivateMessageType.USER
39
+ */
40
+ type?: SCPrivateMessageType;
36
41
  }
37
42
  /**
38
43
  * > API documentation for the Community-JS PrivateMessageSnippets component. Learn about the available props and the CSS API.
@@ -69,7 +69,7 @@ export default function PrivateMessageSnippets(inProps) {
69
69
  props: inProps,
70
70
  name: PREFIX
71
71
  });
72
- const { className = null, threadObj = null, snippetActions, clearSearch } = props, rest = __rest(props, ["className", "threadObj", "snippetActions", "clearSearch"]);
72
+ const { className = null, threadObj = null, type = null, snippetActions, clearSearch } = props, rest = __rest(props, ["className", "threadObj", "type", "snippetActions", "clearSearch"]);
73
73
  // STATE
74
74
  const theme = useTheme();
75
75
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
@@ -78,7 +78,7 @@ export default function PrivateMessageSnippets(inProps) {
78
78
  const isObj = typeof threadObj === 'object';
79
79
  const scUserContext = useContext(SCUserContext);
80
80
  const authUserId = scUserContext.user ? scUserContext.user.id : null;
81
- const [type, setType] = useState(null);
81
+ const [_type, _setType] = useState(type);
82
82
  // INTL
83
83
  const intl = useIntl();
84
84
  // REFS
@@ -107,15 +107,15 @@ export default function PrivateMessageSnippets(inProps) {
107
107
  const isSelected = useMemo(() => {
108
108
  return (message) => {
109
109
  var _a, _b;
110
- if (threadObj && type === SCPrivateMessageType.GROUP) {
110
+ if (threadObj && _type === SCPrivateMessageType.GROUP) {
111
111
  return ((_a = message === null || message === void 0 ? void 0 : message.group) === null || _a === void 0 ? void 0 : _a.id) === (isObj ? (_b = threadObj === null || threadObj === void 0 ? void 0 : threadObj.group) === null || _b === void 0 ? void 0 : _b.id : threadObj);
112
112
  }
113
- else if (threadObj && type === SCPrivateMessageType.USER) {
113
+ else if (threadObj && threadObj !== SCPrivateMessageType.NEW) {
114
114
  return messageReceiver(message, authUserId) === (isObj ? messageReceiver(threadObj, authUserId) : threadObj);
115
115
  }
116
116
  return null;
117
117
  };
118
- }, [threadObj, authUserId, type]);
118
+ }, [threadObj, authUserId, _type]);
119
119
  //HANDLERS
120
120
  const handleChange = (event) => {
121
121
  setSearch(event.target.value);
@@ -132,7 +132,7 @@ export default function PrivateMessageSnippets(inProps) {
132
132
  };
133
133
  function handleOpenThread(msg) {
134
134
  const _type = msg.group !== null ? SCPrivateMessageType.GROUP : SCPrivateMessageType.USER;
135
- setType(_type);
135
+ _setType(_type);
136
136
  snippetActions && snippetActions.onSnippetClick(msg, _type);
137
137
  handleClear();
138
138
  updateSnippetsParams(msg.id, 'seen');