@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.
- package/lib/cjs/components/ChangeCover/ChangeCover.js +12 -23
- package/lib/cjs/components/ChangeCover/constants.d.ts +1 -0
- package/lib/cjs/components/ChangeCover/constants.js +4 -0
- package/lib/cjs/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.d.ts +6 -1
- package/lib/cjs/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js +11 -1
- package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.js +7 -4
- package/lib/cjs/components/UserProfileHeader/UserProfileHeader.d.ts +7 -0
- package/lib/cjs/components/UserProfileHeader/UserProfileHeader.js +12 -5
- package/lib/esm/components/ChangeCover/ChangeCover.js +7 -18
- package/lib/esm/components/ChangeCover/constants.d.ts +1 -0
- package/lib/esm/components/ChangeCover/constants.js +1 -0
- package/lib/esm/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.d.ts +6 -1
- package/lib/esm/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js +11 -1
- package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.js +7 -4
- package/lib/esm/components/UserProfileHeader/UserProfileHeader.d.ts +7 -0
- package/lib/esm/components/UserProfileHeader/UserProfileHeader.js +12 -5
- package/lib/umd/react-ui.js +1 -1
- package/package.json +4 -4
|
@@ -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
|
|
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
|
-
|
|
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),
|
|
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.
|
|
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";
|
package/lib/cjs/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.d.ts
CHANGED
|
@@ -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
|
*/
|
package/lib/cjs/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js
CHANGED
|
@@ -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
|
-
|
|
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.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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),
|
|
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(
|
|
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';
|
package/lib/esm/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.d.ts
CHANGED
|
@@ -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
|
*/
|
package/lib/esm/components/PrivateMessageSettingsIconButton/PrivateMessageSettingsIconButton.js
CHANGED
|
@@ -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
|
-
|
|
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(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
}
|