@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.
- package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.js +6 -6
- package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +6 -6
- package/lib/cjs/components/FeedObject/Actions/Share/Share.js +18 -16
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +6 -0
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +10 -7
- package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +6 -1
- package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.js +6 -6
- package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.js +6 -6
- package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +6 -6
- package/lib/esm/components/FeedObject/Actions/Share/Share.js +19 -17
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +6 -0
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +10 -7
- package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +6 -1
- package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.js +6 -6
- package/lib/umd/react-ui.js +1 -1
- package/package.json +2 -2
|
@@ -84,12 +84,12 @@ function ChangeGroupCover(inProps) {
|
|
|
84
84
|
reader.onload = (e) => {
|
|
85
85
|
const img = new Image();
|
|
86
86
|
img.onload = () => {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
else {
|
|
91
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
else {
|
|
89
|
-
|
|
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(
|
|
192
|
-
react_1.default.createElement(
|
|
193
|
-
react_1.default.createElement(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
react_1.default.createElement(
|
|
197
|
-
react_1.default.createElement(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
react_1.default.createElement(
|
|
201
|
-
react_1.default.createElement(
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
react_1.default.createElement(
|
|
205
|
-
react_1.default.createElement(
|
|
206
|
-
|
|
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 [
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 [
|
|
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 &&
|
|
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 &&
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
else {
|
|
89
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
else {
|
|
87
|
-
|
|
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
|
-
|
|
190
|
-
React.createElement(
|
|
191
|
-
React.createElement(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
React.createElement(
|
|
195
|
-
React.createElement(
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
React.createElement(
|
|
199
|
-
React.createElement(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
React.createElement(
|
|
203
|
-
React.createElement(
|
|
204
|
-
|
|
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 [
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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 [
|
|
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 &&
|
|
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 &&
|
|
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,
|
|
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
|
-
|
|
135
|
+
_setType(_type);
|
|
136
136
|
snippetActions && snippetActions.onSnippetClick(msg, _type);
|
|
137
137
|
handleClear();
|
|
138
138
|
updateSnippetsParams(msg.id, 'seen');
|