@selfcommunity/react-ui 0.7.9-alpha.16 → 0.7.9-alpha.17
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/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
- package/lib/cjs/components/Composer/Composer.js +1 -1
- package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +4 -4
- package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/cjs/components/FeedObject/FeedObject.js +17 -5
- package/lib/cjs/components/Group/Group.js +3 -2
- package/lib/cjs/components/GroupForm/GroupForm.js +3 -3
- package/lib/cjs/components/GroupHeader/GroupHeader.js +2 -2
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +3 -3
- package/lib/cjs/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +1 -1
- package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
- package/lib/esm/components/Composer/Composer.js +1 -1
- package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +4 -4
- package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
- package/lib/esm/components/FeedObject/FeedObject.js +18 -6
- package/lib/esm/components/Group/Group.js +3 -2
- package/lib/esm/components/GroupForm/GroupForm.js +3 -3
- package/lib/esm/components/GroupHeader/GroupHeader.js +2 -2
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
- package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +4 -4
- package/lib/esm/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +1 -1
- package/lib/umd/react-ui.js +1 -1
- package/package.json +6 -6
|
@@ -59,12 +59,12 @@ function ChangeGroupPicture(inProps) {
|
|
|
59
59
|
name: constants_1.PREFIX
|
|
60
60
|
});
|
|
61
61
|
const { groupId, onChange, autoHide, className, isCreationMode = false } = props, rest = tslib_1.__rest(props, ["groupId", "onChange", "autoHide", "className", "isCreationMode"]);
|
|
62
|
+
//CONTEXT
|
|
63
|
+
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
62
64
|
//STATE
|
|
65
|
+
let fileInput = (0, react_1.useRef)(null);
|
|
63
66
|
const [loading, setLoading] = (0, react_1.useState)(false);
|
|
64
67
|
const [alert, setAlert] = (0, react_1.useState)(null);
|
|
65
|
-
let fileInput = (0, react_1.useRef)(null);
|
|
66
|
-
//CONTEXT
|
|
67
|
-
const scUserContext = (0, react_1.useContext)(react_core_1.SCUserContext);
|
|
68
68
|
// INTL
|
|
69
69
|
const intl = (0, react_intl_1.useIntl)();
|
|
70
70
|
// Anonymous
|
|
@@ -75,8 +75,8 @@ function ChangeGroupPicture(inProps) {
|
|
|
75
75
|
* Handles avatar upload
|
|
76
76
|
* @param event
|
|
77
77
|
*/
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
const handleUpload = (event) => {
|
|
79
|
+
fileInput = event.target.files[0];
|
|
80
80
|
if (fileInput) {
|
|
81
81
|
const reader = new FileReader();
|
|
82
82
|
reader.onload = (e) => {
|
|
@@ -93,26 +93,29 @@ function ChangeGroupPicture(inProps) {
|
|
|
93
93
|
// @ts-ignore
|
|
94
94
|
img.src = e.target.result;
|
|
95
95
|
};
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
97
|
+
// @ts-ignore
|
|
96
98
|
reader.readAsDataURL(fileInput);
|
|
97
99
|
}
|
|
98
|
-
}
|
|
99
|
-
// ui.changeGroupPicture.alert
|
|
100
|
+
};
|
|
100
101
|
/**
|
|
101
102
|
* Performs save avatar after upload
|
|
102
103
|
*/
|
|
103
104
|
function handleSave() {
|
|
104
105
|
setLoading(true);
|
|
105
106
|
const formData = new FormData();
|
|
107
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
108
|
+
// @ts-ignore
|
|
106
109
|
formData.append('image_original', fileInput);
|
|
107
110
|
api_services_1.GroupService.changeGroupAvatarOrCover(groupId, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
|
|
108
111
|
.then((data) => {
|
|
112
|
+
onChange && onChange(data.image_big);
|
|
109
113
|
setLoading(false);
|
|
110
|
-
onChange && onChange(data.image_bigger);
|
|
111
114
|
})
|
|
112
115
|
.catch((error) => {
|
|
113
|
-
setAlert(intl.formatMessage(messages.errorLoadImage));
|
|
114
|
-
setLoading(false);
|
|
115
116
|
utils_1.Logger.error(Errors_1.SCOPE_SC_UI, error);
|
|
117
|
+
setLoading(false);
|
|
118
|
+
setAlert(intl.formatMessage(messages.errorLoadImage));
|
|
116
119
|
});
|
|
117
120
|
}
|
|
118
121
|
/**
|
|
@@ -553,7 +553,7 @@ function Composer(inProps) {
|
|
|
553
553
|
}),
|
|
554
554
|
react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleAddCategoryLayer },
|
|
555
555
|
react_1.default.createElement(Icon_1.default, null, "category")),
|
|
556
|
-
react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting || !features.includes(types_1.SCFeatureName.TAGGING), onClick: handleAddAudienceLayer }, addressing === null || addressing.length === 0 ?
|
|
556
|
+
react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting || !features.includes(types_1.SCFeatureName.TAGGING) || Boolean(feedObject === null || feedObject === void 0 ? void 0 : feedObject.group), onClick: handleAddAudienceLayer }, (!group && addressing === null) || (addressing === null || addressing === void 0 ? void 0 : addressing.length) === 0 ? react_1.default.createElement(Icon_1.default, null, "public") : group ? react_1.default.createElement(Icon_1.default, null, "groups") : react_1.default.createElement(Icon_1.default, null, "label")),
|
|
557
557
|
preferences[react_core_1.SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED].value && (react_1.default.createElement(material_1.IconButton, { disabled: isSubmitting, onClick: handleAddLocationLayer, color: location !== null ? 'primary' : 'default' },
|
|
558
558
|
react_1.default.createElement(Icon_1.default, null, "add_location_alt"))))),
|
|
559
559
|
layer && (react_1.default.createElement(LayerTransitionRoot, { className: classes.layerTransitionRoot, in: true, container: dialogRef.current, direction: "left" },
|
|
@@ -46,7 +46,7 @@ const AudienceLayer = react_1.default.forwardRef((props, ref) => {
|
|
|
46
46
|
// @ts-ignore
|
|
47
47
|
defaultValue === null || defaultValue.length === 0
|
|
48
48
|
? AudienceTypes.AUDIENCE_ALL
|
|
49
|
-
: typeof defaultValue === 'object'
|
|
49
|
+
: defaultValue && typeof defaultValue === 'object'
|
|
50
50
|
? AudienceTypes.AUDIENCE_GROUP
|
|
51
51
|
: AudienceTypes.AUDIENCE_TAG);
|
|
52
52
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -58,7 +58,7 @@ const AudienceLayer = react_1.default.forwardRef((props, ref) => {
|
|
|
58
58
|
const handleSave = (0, react_1.useCallback)(
|
|
59
59
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
60
60
|
// @ts-ignore
|
|
61
|
-
() => (
|
|
61
|
+
() => (audience === AudienceTypes.AUDIENCE_GROUP ? onSave(value) : onSave((value === null || value === void 0 ? void 0 : value.length) && (value === null || value === void 0 ? void 0 : value.length) > 0 ? value : null)), [value, onSave, audience]);
|
|
62
62
|
const handleChange = (0, react_1.useCallback)((event, tags) => setValue(tags), []);
|
|
63
63
|
const handleGroupChange = (0, react_1.useCallback)((group) => setValue(group), []);
|
|
64
64
|
const handleChangeAudience = (0, react_1.useCallback)((event, data) => setAudience(data), []);
|
|
@@ -81,14 +81,14 @@ const AudienceLayer = react_1.default.forwardRef((props, ref) => {
|
|
|
81
81
|
, {
|
|
82
82
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
83
83
|
// @ts-ignore
|
|
84
|
-
disabled: defaultValue && defaultValue
|
|
84
|
+
disabled: defaultValue && typeof defaultValue !== 'object', value: AudienceTypes.AUDIENCE_GROUP, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.layer.audience.group", defaultMessage: "ui.composer.layer.audience.group" }) }),
|
|
85
85
|
react_1.default.createElement(material_1.Tab
|
|
86
86
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
87
87
|
// @ts-ignore
|
|
88
88
|
, {
|
|
89
89
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
90
90
|
// @ts-ignore
|
|
91
|
-
disabled: typeof defaultValue === 'object', value: AudienceTypes.AUDIENCE_TAG, icon: react_1.default.createElement(Icon_1.default, null, "label"), label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
|
|
91
|
+
disabled: value && typeof defaultValue === 'object', value: AudienceTypes.AUDIENCE_TAG, icon: react_1.default.createElement(Icon_1.default, null, "label"), label: react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
|
|
92
92
|
react_1.default.createElement(material_1.Typography, { className: classes.message },
|
|
93
93
|
audience === AudienceTypes.AUDIENCE_ALL && (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.layer.audience.all.message", defaultMessage: "ui.composer.audience.layer.all.message" })),
|
|
94
94
|
audience === AudienceTypes.AUDIENCE_GROUP && (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.composer.layer.audience.group.message", defaultMessage: "ui.composer.audience.layer.group.message" })),
|
|
@@ -188,6 +188,7 @@ export interface FeedObjectProps extends CardProps, VirtualScrollerItemProps {
|
|
|
188
188
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
189
189
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
190
190
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
191
|
+
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
191
192
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
192
193
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
193
194
|
|activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
|
|
@@ -49,6 +49,7 @@ const classes = {
|
|
|
49
49
|
deleted: `${constants_1.PREFIX}-deleted`,
|
|
50
50
|
header: `${constants_1.PREFIX}-header`,
|
|
51
51
|
category: `${constants_1.PREFIX}-category`,
|
|
52
|
+
group: `${constants_1.PREFIX}-group`,
|
|
52
53
|
avatar: `${constants_1.PREFIX}-avatar`,
|
|
53
54
|
username: `${constants_1.PREFIX}-username`,
|
|
54
55
|
activityAt: `${constants_1.PREFIX}-activity-at`,
|
|
@@ -102,6 +103,7 @@ const Root = (0, styles_1.styled)(Widget_1.default, {
|
|
|
102
103
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
103
104
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
104
105
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
106
|
+
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
105
107
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
106
108
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
107
109
|
|activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
|
|
@@ -169,7 +171,7 @@ function FeedObject(inProps) {
|
|
|
169
171
|
}, [onStateChange, onHeightChange]);
|
|
170
172
|
/**
|
|
171
173
|
* Update state object
|
|
172
|
-
* @param
|
|
174
|
+
* @param newObj
|
|
173
175
|
*/
|
|
174
176
|
const updateObject = (newObj) => {
|
|
175
177
|
setObj(newObj);
|
|
@@ -426,8 +428,13 @@ function FeedObject(inProps) {
|
|
|
426
428
|
template === feedObject_1.SCFeedObjectTemplateType.DETAIL ||
|
|
427
429
|
template === feedObject_1.SCFeedObjectTemplateType.SEARCH) {
|
|
428
430
|
objElement = (react_1.default.createElement(react_1.default.Fragment, null, obj ? (react_1.default.createElement(material_1.Box, { className: (0, classnames_1.default)({ [classes.deleted]: obj && obj.deleted }) },
|
|
429
|
-
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
430
|
-
react_1.default.createElement(
|
|
431
|
+
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
432
|
+
react_1.default.createElement(react_1.default.Fragment, null, obj.group && (react_1.default.createElement("div", { className: classes.group },
|
|
433
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
|
|
434
|
+
obj.categories.map((c) => (react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
435
|
+
react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
|
|
436
|
+
obj.group && !obj.categories.length && (react_1.default.createElement("div", { className: classes.group },
|
|
437
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: obj.group.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
431
438
|
react_1.default.createElement(material_1.CardHeader, { className: classes.header, avatar: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null }),
|
|
432
439
|
react_1.default.createElement(UserAvatar_1.default, { hide: !obj.author.community_badge },
|
|
433
440
|
react_1.default.createElement(material_1.Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: react_1.default.createElement(react_1.default.Fragment, null,
|
|
@@ -468,8 +475,13 @@ function FeedObject(inProps) {
|
|
|
468
475
|
}
|
|
469
476
|
else if (template === feedObject_1.SCFeedObjectTemplateType.SHARE) {
|
|
470
477
|
objElement = (react_1.default.createElement(react_1.default.Fragment, null, obj ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
471
|
-
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
472
|
-
react_1.default.createElement(
|
|
478
|
+
obj.categories.length > 0 && (react_1.default.createElement("div", { className: classes.category },
|
|
479
|
+
react_1.default.createElement(react_1.default.Fragment, null, obj.group && (react_1.default.createElement("div", { className: classes.group },
|
|
480
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
|
|
481
|
+
obj.categories.map((c) => (react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
482
|
+
react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
|
|
483
|
+
obj.group && !obj.categories.length && (react_1.default.createElement("div", { className: classes.group },
|
|
484
|
+
react_1.default.createElement(material_1.Chip, { color: "secondary", size: "small", key: obj.group.id, icon: react_1.default.createElement(Icon_1.default, null, "groups"), label: obj.group.name, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
473
485
|
react_1.default.createElement(material_1.CardHeader, { classes: { root: classes.header }, avatar: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }),
|
|
474
486
|
react_1.default.createElement(UserAvatar_1.default, { hide: !obj.author.community_badge },
|
|
475
487
|
react_1.default.createElement(material_1.Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: react_1.default.createElement(react_core_1.Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: react_1.default.createElement(react_core_1.Link, { to: scRoutingContext.url((0, contribution_1.getContributionRouteName)(obj), (0, contribution_1.getRouteData)(obj)), className: classes.activityAt },
|
|
@@ -4,6 +4,7 @@ const tslib_1 = require("tslib");
|
|
|
4
4
|
const react_1 = tslib_1.__importStar(require("react"));
|
|
5
5
|
const styles_1 = require("@mui/material/styles");
|
|
6
6
|
const material_1 = require("@mui/material");
|
|
7
|
+
const types_1 = require("@selfcommunity/types");
|
|
7
8
|
const react_core_1 = require("@selfcommunity/react-core");
|
|
8
9
|
const react_intl_1 = require("react-intl");
|
|
9
10
|
const classnames_1 = tslib_1.__importDefault(require("classnames"));
|
|
@@ -63,7 +64,7 @@ function Group(inProps) {
|
|
|
63
64
|
props: inProps,
|
|
64
65
|
name: constants_1.PREFIX
|
|
65
66
|
});
|
|
66
|
-
const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {}
|
|
67
|
+
const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {} } = props, rest = tslib_1.__rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps"]);
|
|
67
68
|
// STATE
|
|
68
69
|
const { scGroup } = (0, react_core_1.useSCFetchGroup)({ id: groupId, group });
|
|
69
70
|
// CONTEXT
|
|
@@ -77,7 +78,7 @@ function Group(inProps) {
|
|
|
77
78
|
*/
|
|
78
79
|
function renderAuthenticatedActions() {
|
|
79
80
|
return (react_1.default.createElement(material_1.Stack, { className: classes.actions, direction: "row", alignItems: "center", justifyContent: "center", spacing: 2 },
|
|
80
|
-
react_1.default.createElement(material_1.Icon, null,
|
|
81
|
+
react_1.default.createElement(material_1.Icon, null, (group === null || group === void 0 ? void 0 : group.privacy) === types_1.SCGroupPrivacyType.PRIVATE ? 'private' : 'public'),
|
|
81
82
|
react_1.default.createElement(GroupSubscribeButton_1.default, Object.assign({ group: group, groupId: groupId }, groupSubscribeButtonProps))));
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
@@ -208,7 +208,7 @@ function GroupForm(inProps) {
|
|
|
208
208
|
react_1.default.createElement(material_1.TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: field.description, name: "description", onChange: handleChange, InputProps: {
|
|
209
209
|
endAdornment: react_1.default.createElement(material_1.Typography, { variant: "body2" }, Group_1.GROUP_DESCRIPTION_MAX_LENGTH - field.description.length)
|
|
210
210
|
} }),
|
|
211
|
-
react_1.default.createElement(material_1.Box, { className: classes.privacySection },
|
|
211
|
+
(!group || (group && group.privacy !== types_1.SCGroupPrivacyType.PRIVATE)) && (react_1.default.createElement(material_1.Box, { className: classes.privacySection },
|
|
212
212
|
react_1.default.createElement(material_1.Typography, { variant: "h4" },
|
|
213
213
|
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.title", defaultMessage: "ui.groupForm.privacy.title", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })),
|
|
214
214
|
react_1.default.createElement(material_1.Stack, { direction: "row", spacing: 1, alignItems: "center" },
|
|
@@ -219,8 +219,8 @@ function GroupForm(inProps) {
|
|
|
219
219
|
react_1.default.createElement(material_1.Typography, { className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: field.isPublic }) },
|
|
220
220
|
react_1.default.createElement(material_1.Icon, null, "public"),
|
|
221
221
|
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.public", defaultMessage: "ui.groupForm.privacy.public" }))),
|
|
222
|
-
react_1.default.createElement(material_1.Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })))),
|
|
223
|
-
react_1.default.createElement(material_1.Box, { className: classes.visibilitySection }, !field.isPublic && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
222
|
+
react_1.default.createElement(material_1.Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })) : (react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } }))))),
|
|
223
|
+
react_1.default.createElement(material_1.Box, { className: classes.visibilitySection }, ((!field.isPublic && !group) || (group && !field.isPublic)) && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
224
224
|
react_1.default.createElement(material_1.Typography, { variant: "h4" },
|
|
225
225
|
react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.groupForm.visibility.title", defaultMessage: "ui.groupForm.visibility.title", values: { b: (chunks) => react_1.default.createElement("strong", null, chunks) } })),
|
|
226
226
|
react_1.default.createElement(material_1.Stack, { direction: "row", spacing: 1, alignItems: "center" },
|
|
@@ -89,7 +89,7 @@ function GroupHeader(inProps) {
|
|
|
89
89
|
*/
|
|
90
90
|
function handleChangeAvatar(avatar) {
|
|
91
91
|
if (isGroupAdmin) {
|
|
92
|
-
setSCGroup(Object.assign({}, scGroup, {
|
|
92
|
+
setSCGroup(Object.assign({}, scGroup, { image_big: avatar }));
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
/**
|
|
@@ -118,7 +118,7 @@ function GroupHeader(inProps) {
|
|
|
118
118
|
react_1.default.createElement(material_1.Paper, { style: _backgroundCover, classes: { root: classes.cover } },
|
|
119
119
|
react_1.default.createElement(material_1.Box, { className: classes.avatar },
|
|
120
120
|
react_1.default.createElement(material_1.Avatar, null,
|
|
121
|
-
react_1.default.createElement("img", { alt: "group", src: scGroup.
|
|
121
|
+
react_1.default.createElement("img", { alt: "group", src: scGroup.image_big ? scGroup.image_big : '' }))),
|
|
122
122
|
isGroupAdmin && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
123
123
|
react_1.default.createElement(ChangeGroupPicture_1.default, Object.assign({ groupId: scGroup.id, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
|
|
124
124
|
react_1.default.createElement("div", { className: classes.changeCover },
|
|
@@ -92,7 +92,7 @@ function PrivateMessageComponent(inProps) {
|
|
|
92
92
|
* @param type
|
|
93
93
|
*/
|
|
94
94
|
const handleThreadOpening = (item, type) => {
|
|
95
|
-
onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId));
|
|
95
|
+
onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId), type);
|
|
96
96
|
setType(type);
|
|
97
97
|
setObj(item.group ? item : messageReceiver(item, authUserId));
|
|
98
98
|
setOpenNewMessage(false);
|
|
@@ -110,7 +110,7 @@ function PrivateMessageComponent(inProps) {
|
|
|
110
110
|
const handleOpenNewMessage = () => {
|
|
111
111
|
setOpenNewMessage(!openNewMessage);
|
|
112
112
|
setObj(types_1.SCPrivateMessageStatusType.NEW);
|
|
113
|
-
onItemClick && onItemClick(types_1.SCPrivateMessageStatusType.NEW);
|
|
113
|
+
onItemClick && onItemClick(types_1.SCPrivateMessageStatusType.NEW, types_1.SCPrivateMessageType.NEW);
|
|
114
114
|
};
|
|
115
115
|
/**
|
|
116
116
|
* Handles new messages open from user profile page or notifications section
|
|
@@ -132,7 +132,7 @@ function PrivateMessageComponent(inProps) {
|
|
|
132
132
|
* Handles state update when a new message is sent
|
|
133
133
|
*/
|
|
134
134
|
const handleOnNewMessageSent = (msg, isOne) => {
|
|
135
|
-
onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '');
|
|
135
|
+
onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '', msg.group ? types_1.SCPrivateMessageType.GROUP : types_1.SCPrivateMessageType.USER);
|
|
136
136
|
setObj(isOne ? messageReceiver(msg, authUserId) : null);
|
|
137
137
|
setOpenNewMessage(false);
|
|
138
138
|
};
|
|
@@ -90,7 +90,7 @@ function PrivateMessageSnippetItem(inProps) {
|
|
|
90
90
|
return (react_1.default.createElement(Root, Object.assign({ className: (0, classnames_1.default)(classes.root, className) }, rest, { secondaryAction: secondaryAction, disablePadding: true }),
|
|
91
91
|
react_1.default.createElement(material_1.ListItemButton, { onClick: onItemClick, classes: { root: (0, classnames_1.default)({ [classes.unread]: message.thread_status === types_1.SCPrivateMessageStatusType.NEW }) } },
|
|
92
92
|
react_1.default.createElement(material_1.ListItemAvatar, null,
|
|
93
|
-
react_1.default.createElement(UserAvatar_1.default, { hide: !hasBadge() }, message.group ? (react_1.default.createElement(material_1.Avatar, { alt: message.group.name, src: message.group.
|
|
93
|
+
react_1.default.createElement(UserAvatar_1.default, { hide: !hasBadge() }, message.group ? (react_1.default.createElement(material_1.Avatar, { alt: message.group.name, src: message.group.image_big })) : (react_1.default.createElement(material_1.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 })))),
|
|
94
94
|
react_1.default.createElement(material_1.ListItemText, { primary: react_1.default.createElement(react_1.default.Fragment, null,
|
|
95
95
|
react_1.default.createElement(material_1.Typography, { component: "span", className: classes.username }, message.group
|
|
96
96
|
? message.group.name
|
|
@@ -57,12 +57,12 @@ export default function ChangeGroupPicture(inProps) {
|
|
|
57
57
|
name: PREFIX
|
|
58
58
|
});
|
|
59
59
|
const { groupId, onChange, autoHide, className, isCreationMode = false } = props, rest = __rest(props, ["groupId", "onChange", "autoHide", "className", "isCreationMode"]);
|
|
60
|
+
//CONTEXT
|
|
61
|
+
const scUserContext = useContext(SCUserContext);
|
|
60
62
|
//STATE
|
|
63
|
+
let fileInput = useRef(null);
|
|
61
64
|
const [loading, setLoading] = useState(false);
|
|
62
65
|
const [alert, setAlert] = useState(null);
|
|
63
|
-
let fileInput = useRef(null);
|
|
64
|
-
//CONTEXT
|
|
65
|
-
const scUserContext = useContext(SCUserContext);
|
|
66
66
|
// INTL
|
|
67
67
|
const intl = useIntl();
|
|
68
68
|
// Anonymous
|
|
@@ -73,8 +73,8 @@ export default function ChangeGroupPicture(inProps) {
|
|
|
73
73
|
* Handles avatar upload
|
|
74
74
|
* @param event
|
|
75
75
|
*/
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
const handleUpload = (event) => {
|
|
77
|
+
fileInput = event.target.files[0];
|
|
78
78
|
if (fileInput) {
|
|
79
79
|
const reader = new FileReader();
|
|
80
80
|
reader.onload = (e) => {
|
|
@@ -91,26 +91,29 @@ export default function ChangeGroupPicture(inProps) {
|
|
|
91
91
|
// @ts-ignore
|
|
92
92
|
img.src = e.target.result;
|
|
93
93
|
};
|
|
94
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
95
|
+
// @ts-ignore
|
|
94
96
|
reader.readAsDataURL(fileInput);
|
|
95
97
|
}
|
|
96
|
-
}
|
|
97
|
-
// ui.changeGroupPicture.alert
|
|
98
|
+
};
|
|
98
99
|
/**
|
|
99
100
|
* Performs save avatar after upload
|
|
100
101
|
*/
|
|
101
102
|
function handleSave() {
|
|
102
103
|
setLoading(true);
|
|
103
104
|
const formData = new FormData();
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
|
|
106
|
+
// @ts-ignore
|
|
104
107
|
formData.append('image_original', fileInput);
|
|
105
108
|
GroupService.changeGroupAvatarOrCover(groupId, formData, { headers: { 'Content-Type': 'multipart/form-data' } })
|
|
106
109
|
.then((data) => {
|
|
110
|
+
onChange && onChange(data.image_big);
|
|
107
111
|
setLoading(false);
|
|
108
|
-
onChange && onChange(data.image_bigger);
|
|
109
112
|
})
|
|
110
113
|
.catch((error) => {
|
|
111
|
-
setAlert(intl.formatMessage(messages.errorLoadImage));
|
|
112
|
-
setLoading(false);
|
|
113
114
|
Logger.error(SCOPE_SC_UI, error);
|
|
115
|
+
setLoading(false);
|
|
116
|
+
setAlert(intl.formatMessage(messages.errorLoadImage));
|
|
114
117
|
});
|
|
115
118
|
}
|
|
116
119
|
/**
|
|
@@ -551,7 +551,7 @@ export default function Composer(inProps) {
|
|
|
551
551
|
}),
|
|
552
552
|
React.createElement(IconButton, { disabled: isSubmitting, onClick: handleAddCategoryLayer },
|
|
553
553
|
React.createElement(Icon, null, "category")),
|
|
554
|
-
React.createElement(IconButton, { disabled: isSubmitting || !features.includes(SCFeatureName.TAGGING), onClick: handleAddAudienceLayer }, addressing === null || addressing.length === 0 ?
|
|
554
|
+
React.createElement(IconButton, { disabled: isSubmitting || !features.includes(SCFeatureName.TAGGING) || Boolean(feedObject === null || feedObject === void 0 ? void 0 : feedObject.group), onClick: handleAddAudienceLayer }, (!group && addressing === null) || (addressing === null || addressing === void 0 ? void 0 : addressing.length) === 0 ? React.createElement(Icon, null, "public") : group ? React.createElement(Icon, null, "groups") : React.createElement(Icon, null, "label")),
|
|
555
555
|
preferences[SCPreferences.ADDONS_POST_GEOLOCATION_ENABLED].value && (React.createElement(IconButton, { disabled: isSubmitting, onClick: handleAddLocationLayer, color: location !== null ? 'primary' : 'default' },
|
|
556
556
|
React.createElement(Icon, null, "add_location_alt"))))),
|
|
557
557
|
layer && (React.createElement(LayerTransitionRoot, { className: classes.layerTransitionRoot, in: true, container: dialogRef.current, direction: "left" },
|
|
@@ -43,7 +43,7 @@ const AudienceLayer = React.forwardRef((props, ref) => {
|
|
|
43
43
|
// @ts-ignore
|
|
44
44
|
defaultValue === null || defaultValue.length === 0
|
|
45
45
|
? AudienceTypes.AUDIENCE_ALL
|
|
46
|
-
: typeof defaultValue === 'object'
|
|
46
|
+
: defaultValue && typeof defaultValue === 'object'
|
|
47
47
|
? AudienceTypes.AUDIENCE_GROUP
|
|
48
48
|
: AudienceTypes.AUDIENCE_TAG);
|
|
49
49
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -55,7 +55,7 @@ const AudienceLayer = React.forwardRef((props, ref) => {
|
|
|
55
55
|
const handleSave = useCallback(
|
|
56
56
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
57
57
|
// @ts-ignore
|
|
58
|
-
() => (
|
|
58
|
+
() => (audience === AudienceTypes.AUDIENCE_GROUP ? onSave(value) : onSave((value === null || value === void 0 ? void 0 : value.length) && (value === null || value === void 0 ? void 0 : value.length) > 0 ? value : null)), [value, onSave, audience]);
|
|
59
59
|
const handleChange = useCallback((event, tags) => setValue(tags), []);
|
|
60
60
|
const handleGroupChange = useCallback((group) => setValue(group), []);
|
|
61
61
|
const handleChangeAudience = useCallback((event, data) => setAudience(data), []);
|
|
@@ -78,14 +78,14 @@ const AudienceLayer = React.forwardRef((props, ref) => {
|
|
|
78
78
|
, {
|
|
79
79
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
80
80
|
// @ts-ignore
|
|
81
|
-
disabled: defaultValue && defaultValue
|
|
81
|
+
disabled: defaultValue && typeof defaultValue !== 'object', value: AudienceTypes.AUDIENCE_GROUP, icon: React.createElement(Icon, null, "groups"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.group", defaultMessage: "ui.composer.layer.audience.group" }) }),
|
|
82
82
|
React.createElement(Tab
|
|
83
83
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
84
84
|
// @ts-ignore
|
|
85
85
|
, {
|
|
86
86
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
87
87
|
// @ts-ignore
|
|
88
|
-
disabled: typeof defaultValue === 'object', value: AudienceTypes.AUDIENCE_TAG, icon: React.createElement(Icon, null, "label"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
|
|
88
|
+
disabled: value && typeof defaultValue === 'object', value: AudienceTypes.AUDIENCE_TAG, icon: React.createElement(Icon, null, "label"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
|
|
89
89
|
React.createElement(Typography, { className: classes.message },
|
|
90
90
|
audience === AudienceTypes.AUDIENCE_ALL && (React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.all.message", defaultMessage: "ui.composer.audience.layer.all.message" })),
|
|
91
91
|
audience === AudienceTypes.AUDIENCE_GROUP && (React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.group.message", defaultMessage: "ui.composer.audience.layer.group.message" })),
|
|
@@ -188,6 +188,7 @@ export interface FeedObjectProps extends CardProps, VirtualScrollerItemProps {
|
|
|
188
188
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
189
189
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
190
190
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
191
|
+
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
191
192
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
192
193
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
193
194
|
|activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
|
|
@@ -2,7 +2,7 @@ import { __rest } from "tslib";
|
|
|
2
2
|
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import CardContent from '@mui/material/CardContent';
|
|
5
|
-
import { Avatar, Box, Button, CardActions, CardHeader, Collapse, Stack, Tooltip, Typography } from '@mui/material';
|
|
5
|
+
import { Avatar, Box, Button, CardActions, CardHeader, Chip, Collapse, Stack, Tooltip, Typography } from '@mui/material';
|
|
6
6
|
import FeedObjectSkeleton from './Skeleton';
|
|
7
7
|
import DateTimeAgo from '../../shared/DateTimeAgo';
|
|
8
8
|
import Bullet from '../../shared/Bullet';
|
|
@@ -47,6 +47,7 @@ const classes = {
|
|
|
47
47
|
deleted: `${PREFIX}-deleted`,
|
|
48
48
|
header: `${PREFIX}-header`,
|
|
49
49
|
category: `${PREFIX}-category`,
|
|
50
|
+
group: `${PREFIX}-group`,
|
|
50
51
|
avatar: `${PREFIX}-avatar`,
|
|
51
52
|
username: `${PREFIX}-username`,
|
|
52
53
|
activityAt: `${PREFIX}-activity-at`,
|
|
@@ -100,6 +101,7 @@ const Root = styled(Widget, {
|
|
|
100
101
|
|deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
|
|
101
102
|
|header|.SCFeedObject-header|Styles applied to the header of the card.|
|
|
102
103
|
|category|.SCFeedObject-category|Styles applied to the category element.|
|
|
104
|
+
|group|.SCFeedObject-group|Styles applied to the group element.|
|
|
103
105
|
|avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
|
|
104
106
|
|username|.SCFeedObject-username|Styles applied to the username element.|
|
|
105
107
|
|activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
|
|
@@ -167,7 +169,7 @@ export default function FeedObject(inProps) {
|
|
|
167
169
|
}, [onStateChange, onHeightChange]);
|
|
168
170
|
/**
|
|
169
171
|
* Update state object
|
|
170
|
-
* @param
|
|
172
|
+
* @param newObj
|
|
171
173
|
*/
|
|
172
174
|
const updateObject = (newObj) => {
|
|
173
175
|
setObj(newObj);
|
|
@@ -424,8 +426,13 @@ export default function FeedObject(inProps) {
|
|
|
424
426
|
template === SCFeedObjectTemplateType.DETAIL ||
|
|
425
427
|
template === SCFeedObjectTemplateType.SEARCH) {
|
|
426
428
|
objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(Box, { className: classNames({ [classes.deleted]: obj && obj.deleted }) },
|
|
427
|
-
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
428
|
-
React.createElement(
|
|
429
|
+
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
430
|
+
React.createElement(React.Fragment, null, obj.group && (React.createElement("div", { className: classes.group },
|
|
431
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
|
|
432
|
+
obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
433
|
+
React.createElement(Typography, { variant: "overline" }, c.name)))))),
|
|
434
|
+
obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
|
|
435
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
429
436
|
React.createElement(CardHeader, { className: classes.header, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null }),
|
|
430
437
|
React.createElement(UserAvatar, { hide: !obj.author.community_badge },
|
|
431
438
|
React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(React.Fragment, null,
|
|
@@ -466,8 +473,13 @@ export default function FeedObject(inProps) {
|
|
|
466
473
|
}
|
|
467
474
|
else if (template === SCFeedObjectTemplateType.SHARE) {
|
|
468
475
|
objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(React.Fragment, null,
|
|
469
|
-
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
470
|
-
React.createElement(
|
|
476
|
+
obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
|
|
477
|
+
React.createElement(React.Fragment, null, obj.group && (React.createElement("div", { className: classes.group },
|
|
478
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
|
|
479
|
+
obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
|
|
480
|
+
React.createElement(Typography, { variant: "overline" }, c.name)))))),
|
|
481
|
+
obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
|
|
482
|
+
React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
|
|
471
483
|
React.createElement(CardHeader, { classes: { root: classes.header }, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }),
|
|
472
484
|
React.createElement(UserAvatar, { hide: !obj.author.community_badge },
|
|
473
485
|
React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(Link, { to: scRoutingContext.url(getContributionRouteName(obj), getRouteData(obj)), className: classes.activityAt },
|
|
@@ -2,6 +2,7 @@ import { __rest } from "tslib";
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import { styled } from '@mui/material/styles';
|
|
4
4
|
import { Avatar, Icon, Stack } from '@mui/material';
|
|
5
|
+
import { SCGroupPrivacyType } from '@selfcommunity/types';
|
|
5
6
|
import { Link, SCRoutes, useSCFetchGroup, useSCRouting } from '@selfcommunity/react-core';
|
|
6
7
|
import { defineMessages, useIntl } from 'react-intl';
|
|
7
8
|
import classNames from 'classnames';
|
|
@@ -61,7 +62,7 @@ export default function Group(inProps) {
|
|
|
61
62
|
props: inProps,
|
|
62
63
|
name: PREFIX
|
|
63
64
|
});
|
|
64
|
-
const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {}
|
|
65
|
+
const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {} } = props, rest = __rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps"]);
|
|
65
66
|
// STATE
|
|
66
67
|
const { scGroup } = useSCFetchGroup({ id: groupId, group });
|
|
67
68
|
// CONTEXT
|
|
@@ -75,7 +76,7 @@ export default function Group(inProps) {
|
|
|
75
76
|
*/
|
|
76
77
|
function renderAuthenticatedActions() {
|
|
77
78
|
return (React.createElement(Stack, { className: classes.actions, direction: "row", alignItems: "center", justifyContent: "center", spacing: 2 },
|
|
78
|
-
React.createElement(Icon, null,
|
|
79
|
+
React.createElement(Icon, null, (group === null || group === void 0 ? void 0 : group.privacy) === SCGroupPrivacyType.PRIVATE ? 'private' : 'public'),
|
|
79
80
|
React.createElement(GroupSubscribeButton, Object.assign({ group: group, groupId: groupId }, groupSubscribeButtonProps))));
|
|
80
81
|
}
|
|
81
82
|
/**
|
|
@@ -206,7 +206,7 @@ export default function GroupForm(inProps) {
|
|
|
206
206
|
React.createElement(TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: field.description, name: "description", onChange: handleChange, InputProps: {
|
|
207
207
|
endAdornment: React.createElement(Typography, { variant: "body2" }, GROUP_DESCRIPTION_MAX_LENGTH - field.description.length)
|
|
208
208
|
} }),
|
|
209
|
-
React.createElement(Box, { className: classes.privacySection },
|
|
209
|
+
(!group || (group && group.privacy !== SCGroupPrivacyType.PRIVATE)) && (React.createElement(Box, { className: classes.privacySection },
|
|
210
210
|
React.createElement(Typography, { variant: "h4" },
|
|
211
211
|
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.title", defaultMessage: "ui.groupForm.privacy.title", values: { b: (chunks) => React.createElement("strong", null, chunks) } })),
|
|
212
212
|
React.createElement(Stack, { direction: "row", spacing: 1, alignItems: "center" },
|
|
@@ -217,8 +217,8 @@ export default function GroupForm(inProps) {
|
|
|
217
217
|
React.createElement(Typography, { className: classNames(classes.switchLabel, { [classes.active]: field.isPublic }) },
|
|
218
218
|
React.createElement(Icon, null, "public"),
|
|
219
219
|
React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public", defaultMessage: "ui.groupForm.privacy.public" }))),
|
|
220
|
-
React.createElement(Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))),
|
|
221
|
-
React.createElement(Box, { className: classes.visibilitySection }, !field.isPublic && (React.createElement(React.Fragment, null,
|
|
220
|
+
React.createElement(Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } }))))),
|
|
221
|
+
React.createElement(Box, { className: classes.visibilitySection }, ((!field.isPublic && !group) || (group && !field.isPublic)) && (React.createElement(React.Fragment, null,
|
|
222
222
|
React.createElement(Typography, { variant: "h4" },
|
|
223
223
|
React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.title", defaultMessage: "ui.groupForm.visibility.title", values: { b: (chunks) => React.createElement("strong", null, chunks) } })),
|
|
224
224
|
React.createElement(Stack, { direction: "row", spacing: 1, alignItems: "center" },
|
|
@@ -87,7 +87,7 @@ export default function GroupHeader(inProps) {
|
|
|
87
87
|
*/
|
|
88
88
|
function handleChangeAvatar(avatar) {
|
|
89
89
|
if (isGroupAdmin) {
|
|
90
|
-
setSCGroup(Object.assign({}, scGroup, {
|
|
90
|
+
setSCGroup(Object.assign({}, scGroup, { image_big: avatar }));
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
@@ -116,7 +116,7 @@ export default function GroupHeader(inProps) {
|
|
|
116
116
|
React.createElement(Paper, { style: _backgroundCover, classes: { root: classes.cover } },
|
|
117
117
|
React.createElement(Box, { className: classes.avatar },
|
|
118
118
|
React.createElement(Avatar, null,
|
|
119
|
-
React.createElement("img", { alt: "group", src: scGroup.
|
|
119
|
+
React.createElement("img", { alt: "group", src: scGroup.image_big ? scGroup.image_big : '' }))),
|
|
120
120
|
isGroupAdmin && (React.createElement(React.Fragment, null,
|
|
121
121
|
React.createElement(ChangeGroupPicture, Object.assign({ groupId: scGroup.id, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
|
|
122
122
|
React.createElement("div", { className: classes.changeCover },
|
|
@@ -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';
|
|
@@ -90,7 +90,7 @@ export default function PrivateMessageComponent(inProps) {
|
|
|
90
90
|
* @param type
|
|
91
91
|
*/
|
|
92
92
|
const handleThreadOpening = (item, type) => {
|
|
93
|
-
onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId));
|
|
93
|
+
onItemClick && onItemClick(item.group ? item.group.id : messageReceiver(item, authUserId), type);
|
|
94
94
|
setType(type);
|
|
95
95
|
setObj(item.group ? item : messageReceiver(item, authUserId));
|
|
96
96
|
setOpenNewMessage(false);
|
|
@@ -108,7 +108,7 @@ export default function PrivateMessageComponent(inProps) {
|
|
|
108
108
|
const handleOpenNewMessage = () => {
|
|
109
109
|
setOpenNewMessage(!openNewMessage);
|
|
110
110
|
setObj(SCPrivateMessageStatusType.NEW);
|
|
111
|
-
onItemClick && onItemClick(SCPrivateMessageStatusType.NEW);
|
|
111
|
+
onItemClick && onItemClick(SCPrivateMessageStatusType.NEW, SCPrivateMessageType.NEW);
|
|
112
112
|
};
|
|
113
113
|
/**
|
|
114
114
|
* Handles new messages open from user profile page or notifications section
|
|
@@ -130,7 +130,7 @@ export default function PrivateMessageComponent(inProps) {
|
|
|
130
130
|
* Handles state update when a new message is sent
|
|
131
131
|
*/
|
|
132
132
|
const handleOnNewMessageSent = (msg, isOne) => {
|
|
133
|
-
onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '');
|
|
133
|
+
onItemClick && onItemClick(isOne ? messageReceiver(msg, authUserId) : '', msg.group ? SCPrivateMessageType.GROUP : SCPrivateMessageType.USER);
|
|
134
134
|
setObj(isOne ? messageReceiver(msg, authUserId) : null);
|
|
135
135
|
setOpenNewMessage(false);
|
|
136
136
|
};
|