@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.
Files changed (24) hide show
  1. package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
  2. package/lib/cjs/components/Composer/Composer.js +1 -1
  3. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +4 -4
  4. package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
  5. package/lib/cjs/components/FeedObject/FeedObject.js +17 -5
  6. package/lib/cjs/components/Group/Group.js +3 -2
  7. package/lib/cjs/components/GroupForm/GroupForm.js +3 -3
  8. package/lib/cjs/components/GroupHeader/GroupHeader.js +2 -2
  9. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  10. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +3 -3
  11. package/lib/cjs/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +1 -1
  12. package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +13 -10
  13. package/lib/esm/components/Composer/Composer.js +1 -1
  14. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +4 -4
  15. package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
  16. package/lib/esm/components/FeedObject/FeedObject.js +18 -6
  17. package/lib/esm/components/Group/Group.js +3 -2
  18. package/lib/esm/components/GroupForm/GroupForm.js +3 -3
  19. package/lib/esm/components/GroupHeader/GroupHeader.js +2 -2
  20. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  21. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +4 -4
  22. package/lib/esm/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +1 -1
  23. package/lib/umd/react-ui.js +1 -1
  24. 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
- function handleUpload(event) {
79
- const fileInput = event.target.files[0];
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 ? (react_1.default.createElement(Icon_1.default, null, "public")) : typeof addressing === 'object' ? (react_1.default.createElement(Icon_1.default, null, "groups")) : (react_1.default.createElement(Icon_1.default, null, "label"))),
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
- () => (typeof defaultValue === 'object' ? 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]);
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.length !== 0, 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" }) }),
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 obj
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 }, 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 },
430
- react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
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 }, 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 },
472
- react_1.default.createElement(material_1.Typography, { variant: "overline" }, c.name)))))),
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 = {}, visible = true } = props, rest = tslib_1.__rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps", "visible"]);
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, !visible ? 'private' : 'public'),
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, { image_bigger: avatar }));
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.image_bigger ? scGroup.image_bigger : '' }))),
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 },
@@ -8,7 +8,7 @@ export interface PrivateMessageComponentProps {
8
8
  * Handler on message click
9
9
  * @default null
10
10
  */
11
- onItemClick?: (id: any) => void;
11
+ onItemClick?: (id: any, type: any) => void;
12
12
  /**
13
13
  * Handler on single message open
14
14
  * @default null
@@ -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.image_bigger })) : (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 })))),
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
- function handleUpload(event) {
77
- const fileInput = event.target.files[0];
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 ? (React.createElement(Icon, null, "public")) : typeof addressing === 'object' ? (React.createElement(Icon, null, "groups")) : (React.createElement(Icon, null, "label"))),
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
- () => (typeof defaultValue === 'object' ? 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]);
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.length !== 0, 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" }) }),
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 obj
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 }, obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
428
- React.createElement(Typography, { variant: "overline" }, c.name)))))),
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 }, obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
470
- React.createElement(Typography, { variant: "overline" }, c.name)))))),
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 = {}, visible = true } = props, rest = __rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps", "visible"]);
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, !visible ? 'private' : 'public'),
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, { image_bigger: avatar }));
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.image_bigger ? scGroup.image_bigger : '' }))),
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 },
@@ -8,7 +8,7 @@ export interface PrivateMessageComponentProps {
8
8
  * Handler on message click
9
9
  * @default null
10
10
  */
11
- onItemClick?: (id: any) => void;
11
+ onItemClick?: (id: any, type: any) => void;
12
12
  /**
13
13
  * Handler on single message open
14
14
  * @default null
@@ -5,7 +5,7 @@ import { Grid, useMediaQuery, useTheme } from '@mui/material';
5
5
  import { useSCPreferences, useSCUser } from '@selfcommunity/react-core';
6
6
  import classNames from 'classnames';
7
7
  import { useThemeProps } from '@mui/system';
8
- import { SCFeatureName, SCPrivateMessageStatusType } from '@selfcommunity/types';
8
+ import { SCFeatureName, SCPrivateMessageStatusType, SCPrivateMessageType } from '@selfcommunity/types';
9
9
  import PrivateMessageThread from '../PrivateMessageThread';
10
10
  import PrivateMessageSnippets from '../PrivateMessageSnippets';
11
11
  import { PREFIX } from './constants';
@@ -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
  };