@selfcommunity/react-ui 0.7.0-alpha.362 → 0.7.0-alpha.364

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.
@@ -14,29 +14,17 @@ const CircularProgress_1 = tslib_1.__importDefault(require("@mui/material/Circul
14
14
  const system_1 = require("@mui/system");
15
15
  const Errors_1 = require("../../constants/Errors");
16
16
  const utils_1 = require("@selfcommunity/utils");
17
- const PREFIX = 'SCChangeCoverButton';
17
+ const constants_1 = require("./constants");
18
18
  const classes = {
19
- root: `${PREFIX}-root`,
20
- helpPopover: `${PREFIX}-help-popover`,
21
- addMenuItem: `${PREFIX}-add-menuItem`,
22
- delMenuItem: `${PREFIX}-del-menuItem`
19
+ root: `${constants_1.PREFIX}-root`,
20
+ helpPopover: `${constants_1.PREFIX}-help-popover`,
21
+ addMenuItem: `${constants_1.PREFIX}-add-menuItem`,
22
+ delMenuItem: `${constants_1.PREFIX}-del-menuItem`
23
23
  };
24
24
  const Root = (0, styles_1.styled)(material_1.Box, {
25
- name: PREFIX,
26
- slot: 'Root',
27
- overridesResolver: (props, styles) => styles.root
28
- })(({ theme }) => ({
29
- display: 'flex',
30
- alignItems: 'center',
31
- flexWrap: 'wrap',
32
- [theme.breakpoints.down('md')]: {
33
- '& .MuiButtonBase-root': {
34
- padding: 6,
35
- borderRadius: 50,
36
- minWidth: 'auto'
37
- }
38
- }
39
- }));
25
+ name: constants_1.PREFIX,
26
+ slot: 'Root'
27
+ })(() => ({}));
40
28
  const messages = (0, react_intl_1.defineMessages)({
41
29
  imageMaxSize: {
42
30
  id: 'ui.changeCover.button.change.alertMaxSize',
@@ -77,7 +65,7 @@ function ChangeCover(inProps) {
77
65
  //PROPS
78
66
  const props = (0, system_1.useThemeProps)({
79
67
  props: inProps,
80
- name: PREFIX
68
+ name: constants_1.PREFIX
81
69
  });
82
70
  const { onChange, autoHide, className } = props, rest = tslib_1.__rest(props, ["onChange", "autoHide", "className"]);
83
71
  //CONTEXT
@@ -196,10 +184,11 @@ function ChangeCover(inProps) {
196
184
  * Renders change cover menu
197
185
  */
198
186
  const cc = (react_1.default.createElement(react_1.default.Fragment, null,
199
- react_1.default.createElement(material_1.Button, Object.assign({ size: "small", variant: "contained", disabled: loading, onClick: handleOpen }, rest), isMobile ? react_1.default.createElement(Icon_1.default, null, "photo_camera") : react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.changeCover.button.change", defaultMessage: "ui.changeCover.button.change" })),
187
+ react_1.default.createElement(material_1.Button, Object.assign({ size: "small", variant: "contained", disabled: loading, onClick: handleOpen }, rest),
188
+ react_1.default.createElement(Icon_1.default, null, "photo_camera")),
200
189
  react_1.default.createElement(react_1.default.Fragment, null, isMobile ? (react_1.default.createElement(material_1.SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderMenuItems())) : (react_1.default.createElement(material_1.Menu, { anchorEl: anchorEl, open: open, onClose: handleClose }, renderMenuItems()))),
201
190
  !isMobile && (react_1.default.createElement(react_1.default.Fragment, null,
202
- react_1.default.createElement(material_1.IconButton, { className: classes.helpPopover, color: "primary", "aria-label": "upload picture", component: "span", onClick: handleClickHelpButton },
191
+ react_1.default.createElement(material_1.Button, { className: classes.helpPopover, variant: "contained", onClick: handleClickHelpButton },
203
192
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "help_outline")),
204
193
  isOpen && (react_1.default.createElement(material_1.Popover, { open: isOpen, anchorEl: anchorElPopover, onClose: handleCloseHelpPopover, anchorOrigin: {
205
194
  vertical: 'bottom',
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCChangeCoverButton";
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PREFIX = void 0;
4
+ exports.PREFIX = 'SCChangeCoverButton';
@@ -1,4 +1,5 @@
1
1
  import { IconButtonProps } from '@mui/material';
2
+ import { SCUserType } from '@selfcommunity/types';
2
3
  export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
3
4
  /**
4
5
  * Overrides or extends the styles applied to the component.
@@ -6,7 +7,7 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
6
7
  */
7
8
  className?: string;
8
9
  /**
9
- * Handles callback on menu item click
10
+ * Handles callback on menu item delete click
10
11
  */
11
12
  onMenuItemDeleteClick?: () => void;
12
13
  /**
@@ -17,6 +18,10 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
17
18
  * The deleting thread id
18
19
  */
19
20
  threadToDelete?: any;
21
+ /**
22
+ * The user receiver context
23
+ */
24
+ user?: SCUserType;
20
25
  /**
21
26
  * Any other properties
22
27
  */
@@ -8,6 +8,7 @@ const react_intl_1 = require("react-intl");
8
8
  const Icon_1 = tslib_1.__importDefault(require("@mui/material/Icon"));
9
9
  const classnames_1 = tslib_1.__importDefault(require("classnames"));
10
10
  const system_1 = require("@mui/system");
11
+ const react_core_1 = require("@selfcommunity/react-core");
11
12
  const ConfirmDialog_1 = tslib_1.__importDefault(require("../../shared/ConfirmDialog/ConfirmDialog"));
12
13
  const api_services_1 = require("@selfcommunity/api-services");
13
14
  const pubsub_js_1 = tslib_1.__importDefault(require("pubsub-js"));
@@ -62,13 +63,14 @@ function PrivateMessageSettingsIconButton(inProps) {
62
63
  props: inProps,
63
64
  name: PREFIX
64
65
  });
65
- const { className = null, onMenuItemDeleteClick, onItemDeleteConfirm, threadToDelete } = props, rest = tslib_1.__rest(props, ["className", "onMenuItemDeleteClick", "onItemDeleteConfirm", "threadToDelete"]);
66
+ const { className = null, onMenuItemDeleteClick, user, onItemDeleteConfirm, threadToDelete } = props, rest = tslib_1.__rest(props, ["className", "onMenuItemDeleteClick", "user", "onItemDeleteConfirm", "threadToDelete"]);
66
67
  // STATE
67
68
  const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
68
69
  const [openConfirmDialog, setOpenConfirmDialog] = (0, react_1.useState)(false);
69
70
  // HOOKS
70
71
  const theme = (0, material_1.useTheme)();
71
72
  const isMobile = (0, material_1.useMediaQuery)(theme.breakpoints.down('md'));
73
+ const scRoutingContext = (0, react_core_1.useSCRouting)();
72
74
  // HANDLERS
73
75
  const handleOpen = (event) => {
74
76
  setAnchorEl(event.currentTarget);
@@ -105,6 +107,10 @@ function PrivateMessageSettingsIconButton(inProps) {
105
107
  const renderList = () => {
106
108
  if (isMobile) {
107
109
  return [
110
+ react_1.default.createElement(material_1.ListItem, { className: classes.item, key: "profile", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, user) },
111
+ react_1.default.createElement(material_1.ListItemIcon, null,
112
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "people_alt")),
113
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" })),
108
114
  react_1.default.createElement(material_1.ListItem, { className: classes.item, key: "delete", onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick },
109
115
  react_1.default.createElement(material_1.ListItemIcon, null,
110
116
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "delete")),
@@ -113,6 +119,10 @@ function PrivateMessageSettingsIconButton(inProps) {
113
119
  }
114
120
  else {
115
121
  return [
122
+ react_1.default.createElement(material_1.MenuItem, { className: classes.item, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile" },
123
+ react_1.default.createElement(material_1.ListItemIcon, null,
124
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "people_alt")),
125
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" })),
116
126
  react_1.default.createElement(material_1.MenuItem, { className: classes.item, onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick, key: "delete" },
117
127
  react_1.default.createElement(material_1.ListItemIcon, null,
118
128
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "delete")),
@@ -94,9 +94,12 @@ function PrivateMessageSnippets(inProps) {
94
94
  }
95
95
  return el.receiver.username.includes(search.toLowerCase());
96
96
  });
97
- const messageReceiver = (item, loggedUserId) => {
98
- var _a, _b, _c;
99
- return ((_a = item === null || item === void 0 ? void 0 : item.receiver) === null || _a === void 0 ? void 0 : _a.id) !== loggedUserId ? (_b = item === null || item === void 0 ? void 0 : item.receiver) === null || _b === void 0 ? void 0 : _b.id : (_c = item === null || item === void 0 ? void 0 : item.sender) === null || _c === void 0 ? void 0 : _c.id;
97
+ const messageReceiver = (item, loggedUserId, obj) => {
98
+ var _a, _b, _c, _d;
99
+ if (obj) {
100
+ return ((_a = item === null || item === void 0 ? void 0 : item.receiver) === null || _a === void 0 ? void 0 : _a.id) !== loggedUserId ? item === null || item === void 0 ? void 0 : item.receiver : item === null || item === void 0 ? void 0 : item.sender;
101
+ }
102
+ return ((_b = item === null || item === void 0 ? void 0 : item.receiver) === null || _b === void 0 ? void 0 : _b.id) !== loggedUserId ? (_c = item === null || item === void 0 ? void 0 : item.receiver) === null || _c === void 0 ? void 0 : _c.id : (_d = item === null || item === void 0 ? void 0 : item.sender) === null || _d === void 0 ? void 0 : _d.id;
100
103
  };
101
104
  //HANDLERS
102
105
  const handleChange = (event) => {
@@ -218,7 +221,7 @@ function PrivateMessageSnippets(inProps) {
218
221
  } }),
219
222
  react_1.default.createElement(material_1.List, null, filteredSnippets.map((message) => (react_1.default.createElement(PrivateMessageSnippetItem_1.default, { message: message, key: message.id, onItemClick: () => handleOpenThread(message), secondaryAction: react_1.default.createElement(react_1.default.Fragment, null,
220
223
  message.thread_status === types_1.SCPrivateMessageStatusType.NEW && (react_1.default.createElement(material_1.Icon, { fontSize: "small", color: "secondary" }, "fiber_manual_record")),
221
- !isMobile && (react_1.default.createElement(PrivateMessageSettingsIconButton_1.default, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)) }))), selected: userObj !== types_1.SCPrivateMessageStatusType.NEW &&
224
+ !isMobile && (react_1.default.createElement(PrivateMessageSettingsIconButton_1.default, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true) }))), selected: userObj !== types_1.SCPrivateMessageStatusType.NEW &&
222
225
  messageReceiver(message, authUserId) === (isObj ? messageReceiver(userObj, authUserId) : userObj) })))))))));
223
226
  }
224
227
  exports.default = PrivateMessageSnippets;
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { ChangeCoverProps } from '../ChangeCover';
2
3
  import { ChangePictureProps } from '../ChangePicture';
3
4
  import { SCUserType } from '@selfcommunity/types';
@@ -32,6 +33,10 @@ export interface UserProfileHeaderProps {
32
33
  * @default {}
33
34
  */
34
35
  ChangeCoverProps?: ChangeCoverProps;
36
+ /**
37
+ *
38
+ */
39
+ actions?: React.ReactNode;
35
40
  /**
36
41
  * Any other properties
37
42
  */
@@ -62,6 +67,8 @@ export interface UserProfileHeaderProps {
62
67
  |root|.SCUserProfileHeader-root|Styles applied to the root element.|
63
68
  |cover|.SCUserProfileHeader-cover|Styles applied to the cover element.|
64
69
  |avatar|.SCUserProfileHeader-avatar|Styles applied to the avatar element.|
70
+ |infOpsSection|SCUserProfileHeader-infops-section|Styles applied to the section including info and actions.|
71
+ |info|SCUserProfileHeader-info|Styles applied to the info section.|
65
72
  |username|SCUserProfileHeader-username|Styles applied to the username element.|
66
73
  |realname|SCUserProfileHeader-realname|Styles applied to the realname element.|
67
74
  |changePicture|.SCUserProfileHeader-change-picture|Styles applied to changePicture element.|
@@ -15,6 +15,8 @@ const classes = {
15
15
  root: `${constants_1.PREFIX}-root`,
16
16
  cover: `${constants_1.PREFIX}-cover`,
17
17
  avatar: `${constants_1.PREFIX}-avatar`,
18
+ info: `${constants_1.PREFIX}-info`,
19
+ infOpsSection: `${constants_1.PREFIX}-infops-section`,
18
20
  username: `${constants_1.PREFIX}-username`,
19
21
  realname: `${constants_1.PREFIX}-realname`,
20
22
  changePicture: `${constants_1.PREFIX}-change-picture`,
@@ -49,6 +51,8 @@ const Root = (0, styles_1.styled)(material_1.Box, {
49
51
  |root|.SCUserProfileHeader-root|Styles applied to the root element.|
50
52
  |cover|.SCUserProfileHeader-cover|Styles applied to the cover element.|
51
53
  |avatar|.SCUserProfileHeader-avatar|Styles applied to the avatar element.|
54
+ |infOpsSection|SCUserProfileHeader-infops-section|Styles applied to the section including info and actions.|
55
+ |info|SCUserProfileHeader-info|Styles applied to the info section.|
52
56
  |username|SCUserProfileHeader-username|Styles applied to the username element.|
53
57
  |realname|SCUserProfileHeader-realname|Styles applied to the realname element.|
54
58
  |changePicture|.SCUserProfileHeader-change-picture|Styles applied to changePicture element.|
@@ -62,7 +66,7 @@ function UserProfileHeader(inProps) {
62
66
  props: inProps,
63
67
  name: constants_1.PREFIX
64
68
  });
65
- const { id = null, className = null, userId = null, user = null, ChangePictureProps = {}, ChangeCoverProps = {} } = props, rest = tslib_1.__rest(props, ["id", "className", "userId", "user", "ChangePictureProps", "ChangeCoverProps"]);
69
+ const { id = null, className = null, userId = null, user = null, ChangePictureProps = {}, ChangeCoverProps = {}, actions } = props, rest = tslib_1.__rest(props, ["id", "className", "userId", "user", "ChangePictureProps", "ChangeCoverProps", "actions"]);
66
70
  // PREFERENCES
67
71
  const scPreferences = (0, react_core_1.useSCPreferences)();
68
72
  // CONTEXT
@@ -111,9 +115,12 @@ function UserProfileHeader(inProps) {
111
115
  react_1.default.createElement(ChangePicture_1.default, Object.assign({ iconButton: true, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
112
116
  react_1.default.createElement("div", { className: classes.changeCover },
113
117
  react_1.default.createElement(ChangeCover_1.default, Object.assign({ onChange: handleChangeCover }, ChangeCoverProps)))))),
114
- react_1.default.createElement(material_1.Typography, { variant: "h5", className: classes.username },
115
- "@",
116
- isMe ? scUserContext.user.username : scUser.username),
117
- realName && (react_1.default.createElement(material_1.Typography, { variant: "h5", className: classes.realname }, realName))));
118
+ react_1.default.createElement(material_1.Box, { className: classes.infOpsSection },
119
+ react_1.default.createElement(material_1.Box, { className: classes.info },
120
+ react_1.default.createElement(material_1.Typography, { variant: "h5", className: classes.username },
121
+ "@",
122
+ isMe ? scUserContext.user.username : scUser.username),
123
+ realName && (react_1.default.createElement(material_1.Typography, { variant: "h5", className: classes.realname }, realName))),
124
+ actions && actions)));
118
125
  }
119
126
  exports.default = UserProfileHeader;
@@ -1,7 +1,7 @@
1
1
  import { __rest } from "tslib";
2
2
  import React, { useContext, useRef, useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
- import { Alert, Box, Button, Divider, IconButton, ListItemIcon, Menu, MenuItem, Popover, SwipeableDrawer, Typography, useMediaQuery, useTheme } from '@mui/material';
4
+ import { Alert, Box, Button, Divider, ListItemIcon, Menu, MenuItem, Popover, SwipeableDrawer, Typography, useMediaQuery, useTheme } from '@mui/material';
5
5
  import { Endpoints, http } from '@selfcommunity/api-services';
6
6
  import { SCUserContext } from '@selfcommunity/react-core';
7
7
  import Icon from '@mui/material/Icon';
@@ -12,7 +12,7 @@ import CircularProgress from '@mui/material/CircularProgress';
12
12
  import { useThemeProps } from '@mui/system';
13
13
  import { SCOPE_SC_UI } from '../../constants/Errors';
14
14
  import { Logger } from '@selfcommunity/utils';
15
- const PREFIX = 'SCChangeCoverButton';
15
+ import { PREFIX } from './constants';
16
16
  const classes = {
17
17
  root: `${PREFIX}-root`,
18
18
  helpPopover: `${PREFIX}-help-popover`,
@@ -21,20 +21,8 @@ const classes = {
21
21
  };
22
22
  const Root = styled(Box, {
23
23
  name: PREFIX,
24
- slot: 'Root',
25
- overridesResolver: (props, styles) => styles.root
26
- })(({ theme }) => ({
27
- display: 'flex',
28
- alignItems: 'center',
29
- flexWrap: 'wrap',
30
- [theme.breakpoints.down('md')]: {
31
- '& .MuiButtonBase-root': {
32
- padding: 6,
33
- borderRadius: 50,
34
- minWidth: 'auto'
35
- }
36
- }
37
- }));
24
+ slot: 'Root'
25
+ })(() => ({}));
38
26
  const messages = defineMessages({
39
27
  imageMaxSize: {
40
28
  id: 'ui.changeCover.button.change.alertMaxSize',
@@ -194,10 +182,11 @@ export default function ChangeCover(inProps) {
194
182
  * Renders change cover menu
195
183
  */
196
184
  const cc = (React.createElement(React.Fragment, null,
197
- React.createElement(Button, Object.assign({ size: "small", variant: "contained", disabled: loading, onClick: handleOpen }, rest), isMobile ? React.createElement(Icon, null, "photo_camera") : React.createElement(FormattedMessage, { id: "ui.changeCover.button.change", defaultMessage: "ui.changeCover.button.change" })),
185
+ React.createElement(Button, Object.assign({ size: "small", variant: "contained", disabled: loading, onClick: handleOpen }, rest),
186
+ React.createElement(Icon, null, "photo_camera")),
198
187
  React.createElement(React.Fragment, null, isMobile ? (React.createElement(SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderMenuItems())) : (React.createElement(Menu, { anchorEl: anchorEl, open: open, onClose: handleClose }, renderMenuItems()))),
199
188
  !isMobile && (React.createElement(React.Fragment, null,
200
- React.createElement(IconButton, { className: classes.helpPopover, color: "primary", "aria-label": "upload picture", component: "span", onClick: handleClickHelpButton },
189
+ React.createElement(Button, { className: classes.helpPopover, variant: "contained", onClick: handleClickHelpButton },
201
190
  React.createElement(Icon, { fontSize: "small" }, "help_outline")),
202
191
  isOpen && (React.createElement(Popover, { open: isOpen, anchorEl: anchorElPopover, onClose: handleCloseHelpPopover, anchorOrigin: {
203
192
  vertical: 'bottom',
@@ -0,0 +1 @@
1
+ export declare const PREFIX = "SCChangeCoverButton";
@@ -0,0 +1 @@
1
+ export const PREFIX = 'SCChangeCoverButton';
@@ -1,4 +1,5 @@
1
1
  import { IconButtonProps } from '@mui/material';
2
+ import { SCUserType } from '@selfcommunity/types';
2
3
  export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
3
4
  /**
4
5
  * Overrides or extends the styles applied to the component.
@@ -6,7 +7,7 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
6
7
  */
7
8
  className?: string;
8
9
  /**
9
- * Handles callback on menu item click
10
+ * Handles callback on menu item delete click
10
11
  */
11
12
  onMenuItemDeleteClick?: () => void;
12
13
  /**
@@ -17,6 +18,10 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
17
18
  * The deleting thread id
18
19
  */
19
20
  threadToDelete?: any;
21
+ /**
22
+ * The user receiver context
23
+ */
24
+ user?: SCUserType;
20
25
  /**
21
26
  * Any other properties
22
27
  */
@@ -6,6 +6,7 @@ import { FormattedMessage } from 'react-intl';
6
6
  import Icon from '@mui/material/Icon';
7
7
  import classNames from 'classnames';
8
8
  import { useThemeProps } from '@mui/system';
9
+ import { Link, SCRoutes, useSCRouting } from '@selfcommunity/react-core';
9
10
  import ConfirmDialog from '../../shared/ConfirmDialog/ConfirmDialog';
10
11
  import { PrivateMessageService } from '@selfcommunity/api-services';
11
12
  import PubSub from 'pubsub-js';
@@ -60,13 +61,14 @@ export default function PrivateMessageSettingsIconButton(inProps) {
60
61
  props: inProps,
61
62
  name: PREFIX
62
63
  });
63
- const { className = null, onMenuItemDeleteClick, onItemDeleteConfirm, threadToDelete } = props, rest = __rest(props, ["className", "onMenuItemDeleteClick", "onItemDeleteConfirm", "threadToDelete"]);
64
+ const { className = null, onMenuItemDeleteClick, user, onItemDeleteConfirm, threadToDelete } = props, rest = __rest(props, ["className", "onMenuItemDeleteClick", "user", "onItemDeleteConfirm", "threadToDelete"]);
64
65
  // STATE
65
66
  const [anchorEl, setAnchorEl] = useState(null);
66
67
  const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
67
68
  // HOOKS
68
69
  const theme = useTheme();
69
70
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
71
+ const scRoutingContext = useSCRouting();
70
72
  // HANDLERS
71
73
  const handleOpen = (event) => {
72
74
  setAnchorEl(event.currentTarget);
@@ -103,6 +105,10 @@ export default function PrivateMessageSettingsIconButton(inProps) {
103
105
  const renderList = () => {
104
106
  if (isMobile) {
105
107
  return [
108
+ React.createElement(ListItem, { className: classes.item, key: "profile", component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, user) },
109
+ React.createElement(ListItemIcon, null,
110
+ React.createElement(Icon, { fontSize: "small" }, "people_alt")),
111
+ React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" })),
106
112
  React.createElement(ListItem, { className: classes.item, key: "delete", onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick },
107
113
  React.createElement(ListItemIcon, null,
108
114
  React.createElement(Icon, { fontSize: "small" }, "delete")),
@@ -111,6 +117,10 @@ export default function PrivateMessageSettingsIconButton(inProps) {
111
117
  }
112
118
  else {
113
119
  return [
120
+ React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, user), key: "profile" },
121
+ React.createElement(ListItemIcon, null,
122
+ React.createElement(Icon, { fontSize: "small" }, "people_alt")),
123
+ React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" })),
114
124
  React.createElement(MenuItem, { className: classes.item, onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick, key: "delete" },
115
125
  React.createElement(ListItemIcon, null,
116
126
  React.createElement(Icon, { fontSize: "small" }, "delete")),
@@ -92,9 +92,12 @@ export default function PrivateMessageSnippets(inProps) {
92
92
  }
93
93
  return el.receiver.username.includes(search.toLowerCase());
94
94
  });
95
- const messageReceiver = (item, loggedUserId) => {
96
- var _a, _b, _c;
97
- return ((_a = item === null || item === void 0 ? void 0 : item.receiver) === null || _a === void 0 ? void 0 : _a.id) !== loggedUserId ? (_b = item === null || item === void 0 ? void 0 : item.receiver) === null || _b === void 0 ? void 0 : _b.id : (_c = item === null || item === void 0 ? void 0 : item.sender) === null || _c === void 0 ? void 0 : _c.id;
95
+ const messageReceiver = (item, loggedUserId, obj) => {
96
+ var _a, _b, _c, _d;
97
+ if (obj) {
98
+ return ((_a = item === null || item === void 0 ? void 0 : item.receiver) === null || _a === void 0 ? void 0 : _a.id) !== loggedUserId ? item === null || item === void 0 ? void 0 : item.receiver : item === null || item === void 0 ? void 0 : item.sender;
99
+ }
100
+ return ((_b = item === null || item === void 0 ? void 0 : item.receiver) === null || _b === void 0 ? void 0 : _b.id) !== loggedUserId ? (_c = item === null || item === void 0 ? void 0 : item.receiver) === null || _c === void 0 ? void 0 : _c.id : (_d = item === null || item === void 0 ? void 0 : item.sender) === null || _d === void 0 ? void 0 : _d.id;
98
101
  };
99
102
  //HANDLERS
100
103
  const handleChange = (event) => {
@@ -216,6 +219,6 @@ export default function PrivateMessageSnippets(inProps) {
216
219
  } }),
217
220
  React.createElement(List, null, filteredSnippets.map((message) => (React.createElement(PrivateMessageSnippetItem, { message: message, key: message.id, onItemClick: () => handleOpenThread(message), secondaryAction: React.createElement(React.Fragment, null,
218
221
  message.thread_status === SCPrivateMessageStatusType.NEW && (React.createElement(Icon, { fontSize: "small", color: "secondary" }, "fiber_manual_record")),
219
- !isMobile && (React.createElement(PrivateMessageSettingsIconButton, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)) }))), selected: userObj !== SCPrivateMessageStatusType.NEW &&
222
+ !isMobile && (React.createElement(PrivateMessageSettingsIconButton, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true) }))), selected: userObj !== SCPrivateMessageStatusType.NEW &&
220
223
  messageReceiver(message, authUserId) === (isObj ? messageReceiver(userObj, authUserId) : userObj) })))))))));
221
224
  }
@@ -1,3 +1,4 @@
1
+ import React from 'react';
1
2
  import { ChangeCoverProps } from '../ChangeCover';
2
3
  import { ChangePictureProps } from '../ChangePicture';
3
4
  import { SCUserType } from '@selfcommunity/types';
@@ -32,6 +33,10 @@ export interface UserProfileHeaderProps {
32
33
  * @default {}
33
34
  */
34
35
  ChangeCoverProps?: ChangeCoverProps;
36
+ /**
37
+ *
38
+ */
39
+ actions?: React.ReactNode;
35
40
  /**
36
41
  * Any other properties
37
42
  */
@@ -62,6 +67,8 @@ export interface UserProfileHeaderProps {
62
67
  |root|.SCUserProfileHeader-root|Styles applied to the root element.|
63
68
  |cover|.SCUserProfileHeader-cover|Styles applied to the cover element.|
64
69
  |avatar|.SCUserProfileHeader-avatar|Styles applied to the avatar element.|
70
+ |infOpsSection|SCUserProfileHeader-infops-section|Styles applied to the section including info and actions.|
71
+ |info|SCUserProfileHeader-info|Styles applied to the info section.|
65
72
  |username|SCUserProfileHeader-username|Styles applied to the username element.|
66
73
  |realname|SCUserProfileHeader-realname|Styles applied to the realname element.|
67
74
  |changePicture|.SCUserProfileHeader-change-picture|Styles applied to changePicture element.|
@@ -13,6 +13,8 @@ const classes = {
13
13
  root: `${PREFIX}-root`,
14
14
  cover: `${PREFIX}-cover`,
15
15
  avatar: `${PREFIX}-avatar`,
16
+ info: `${PREFIX}-info`,
17
+ infOpsSection: `${PREFIX}-infops-section`,
16
18
  username: `${PREFIX}-username`,
17
19
  realname: `${PREFIX}-realname`,
18
20
  changePicture: `${PREFIX}-change-picture`,
@@ -47,6 +49,8 @@ const Root = styled(Box, {
47
49
  |root|.SCUserProfileHeader-root|Styles applied to the root element.|
48
50
  |cover|.SCUserProfileHeader-cover|Styles applied to the cover element.|
49
51
  |avatar|.SCUserProfileHeader-avatar|Styles applied to the avatar element.|
52
+ |infOpsSection|SCUserProfileHeader-infops-section|Styles applied to the section including info and actions.|
53
+ |info|SCUserProfileHeader-info|Styles applied to the info section.|
50
54
  |username|SCUserProfileHeader-username|Styles applied to the username element.|
51
55
  |realname|SCUserProfileHeader-realname|Styles applied to the realname element.|
52
56
  |changePicture|.SCUserProfileHeader-change-picture|Styles applied to changePicture element.|
@@ -60,7 +64,7 @@ export default function UserProfileHeader(inProps) {
60
64
  props: inProps,
61
65
  name: PREFIX
62
66
  });
63
- const { id = null, className = null, userId = null, user = null, ChangePictureProps = {}, ChangeCoverProps = {} } = props, rest = __rest(props, ["id", "className", "userId", "user", "ChangePictureProps", "ChangeCoverProps"]);
67
+ const { id = null, className = null, userId = null, user = null, ChangePictureProps = {}, ChangeCoverProps = {}, actions } = props, rest = __rest(props, ["id", "className", "userId", "user", "ChangePictureProps", "ChangeCoverProps", "actions"]);
64
68
  // PREFERENCES
65
69
  const scPreferences = useSCPreferences();
66
70
  // CONTEXT
@@ -109,8 +113,11 @@ export default function UserProfileHeader(inProps) {
109
113
  React.createElement(ChangePicture, Object.assign({ iconButton: true, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
110
114
  React.createElement("div", { className: classes.changeCover },
111
115
  React.createElement(ChangeCover, Object.assign({ onChange: handleChangeCover }, ChangeCoverProps)))))),
112
- React.createElement(Typography, { variant: "h5", className: classes.username },
113
- "@",
114
- isMe ? scUserContext.user.username : scUser.username),
115
- realName && (React.createElement(Typography, { variant: "h5", className: classes.realname }, realName))));
116
+ React.createElement(Box, { className: classes.infOpsSection },
117
+ React.createElement(Box, { className: classes.info },
118
+ React.createElement(Typography, { variant: "h5", className: classes.username },
119
+ "@",
120
+ isMe ? scUserContext.user.username : scUser.username),
121
+ realName && (React.createElement(Typography, { variant: "h5", className: classes.realname }, realName))),
122
+ actions && actions)));
116
123
  }