@selfcommunity/react-ui 0.7.32 → 0.7.33-alpha.1

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.
@@ -418,7 +418,6 @@ const Feed = (inProps, ref) => {
418
418
  react_1.default.createElement(InfiniteScroll_1.default, Object.assign({ ref: containerRef, className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: react_1.default.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: react_1.default.createElement(material_1.Box, { className: classes.end },
419
419
  react_1.default.createElement(Widget_1.default, { className: classes.endMessage },
420
420
  react_1.default.createElement(material_1.CardContent, null, endMessage)),
421
- advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (react_1.default.createElement(CustomAdv_1.default, Object.assign({ position: types_1.SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
422
421
  FooterComponent ? react_1.default.createElement(FooterComponent, Object.assign({}, FooterComponentProps)) : null), refreshFunction: refresh, pullDownToRefresh: true, pullDownToRefreshThreshold: 1000, pullDownToRefreshContent: null, releaseToRefreshContent: react_1.default.createElement(Widget_1.default, { variant: "outlined", className: classes.refresh },
423
422
  react_1.default.createElement(material_1.CardContent, null, refreshMessage)), style: { overflow: 'visible' } }, (scrollableTargetId && { scrollableTarget: scrollableTargetId })),
424
423
  renderHeaderComponent(),
@@ -24,12 +24,12 @@ export interface GroupSettingsIconButtonProps extends IconButtonProps {
24
24
  [p: string]: any;
25
25
  }
26
26
  /**
27
- * > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
27
+ * > API documentation for the Community-JS GroupSettingsIconButton component. Learn about the available props and the CSS API.
28
28
 
29
29
  #### Import
30
30
 
31
31
  ```jsx
32
- import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
32
+ import {GroupSettingsIconButton} from '@selfcommunity/react-ui';
33
33
  ```
34
34
 
35
35
  #### Component Name
@@ -34,12 +34,12 @@ const MenuRoot = (0, styles_1.styled)(material_1.Menu, {
34
34
  slot: 'MenuRoot'
35
35
  })(() => ({}));
36
36
  /**
37
- * > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
37
+ * > API documentation for the Community-JS GroupSettingsIconButton component. Learn about the available props and the CSS API.
38
38
 
39
39
  #### Import
40
40
 
41
41
  ```jsx
42
- import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
42
+ import {GroupSettingsIconButton} from '@selfcommunity/react-ui';
43
43
  ```
44
44
 
45
45
  #### Component Name
@@ -39,9 +39,10 @@ function DefaultDrawerContent() {
39
39
  //order
40
40
  return (react_1.default.createElement(react_1.default.Fragment, null,
41
41
  react_1.default.createElement(material_1.Typography, { variant: "subtitle1" },
42
- react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.title", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.title" }),
42
+ react_1.default.createElement("span", null,
43
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.title", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.title" })),
43
44
  ' ',
44
- react_1.default.createElement(material_1.Button, { variant: "text", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORIES_LIST_ROUTE_NAME, {}) },
45
+ react_1.default.createElement(material_1.Button, { variant: "text", component: react_core_1.Link, color: "secondary", to: scRoutingContext.url(react_core_1.SCRoutes.CATEGORIES_LIST_ROUTE_NAME, {}) },
45
46
  react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.seeAll", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.seeAll" }))),
46
47
  categoriesOrdered.map((c, index) => (react_1.default.createElement(material_1.Zoom, { in: true, style: { transform: isHovered[c.id] && 'scale(1.05)' }, key: index },
47
48
  react_1.default.createElement(material_1.ListItem, { key: c.id },
@@ -1,5 +1,5 @@
1
1
  import { IconButtonProps } from '@mui/material';
2
- import { SCUserType } from '@selfcommunity/types';
2
+ import { SCGroupType, SCUserType } from '@selfcommunity/types';
3
3
  export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
4
4
  /**
5
5
  * Overrides or extends the styles applied to the component.
@@ -17,11 +17,15 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
17
17
  /**
18
18
  * The deleting thread id
19
19
  */
20
- threadToDelete?: any;
20
+ threadToDelete?: number;
21
21
  /**
22
22
  * The user receiver context
23
23
  */
24
24
  user?: SCUserType;
25
+ /**
26
+ * The group
27
+ */
28
+ group?: SCGroupType;
25
29
  /**
26
30
  * Any other properties
27
31
  */
@@ -60,7 +60,7 @@ function PrivateMessageSettingsIconButton(inProps) {
60
60
  props: inProps,
61
61
  name: PREFIX
62
62
  });
63
- const { className = null, onMenuItemDeleteClick, user, onItemDeleteConfirm, threadToDelete } = props, rest = tslib_1.__rest(props, ["className", "onMenuItemDeleteClick", "user", "onItemDeleteConfirm", "threadToDelete"]);
63
+ const { className = null, onMenuItemDeleteClick, user, group, onItemDeleteConfirm, threadToDelete } = props, rest = tslib_1.__rest(props, ["className", "onMenuItemDeleteClick", "user", "group", "onItemDeleteConfirm", "threadToDelete"]);
64
64
  // STATE
65
65
  const [anchorEl, setAnchorEl] = (0, react_1.useState)(null);
66
66
  const [openConfirmDialog, setOpenConfirmDialog] = (0, react_1.useState)(false);
@@ -88,9 +88,15 @@ function PrivateMessageSettingsIconButton(inProps) {
88
88
  * Handles thread deletion
89
89
  */
90
90
  function handleDeleteThread() {
91
- api_services_1.PrivateMessageService.deleteAThread({ user: threadToDelete })
91
+ const params = group ? { group: threadToDelete } : { user: threadToDelete };
92
+ api_services_1.PrivateMessageService.deleteAThread(params)
92
93
  .then(() => {
93
- pubsub_js_1.default.publish('snippetsChannelDelete', threadToDelete);
94
+ if (group) {
95
+ pubsub_js_1.default.publish('snippetsChannelDeleteGroup', threadToDelete);
96
+ }
97
+ else {
98
+ pubsub_js_1.default.publish('snippetsChannelDelete', threadToDelete);
99
+ }
94
100
  handleCloseDialog();
95
101
  })
96
102
  .catch((error) => {
@@ -108,6 +114,10 @@ function PrivateMessageSettingsIconButton(inProps) {
108
114
  react_1.default.createElement(material_1.ListItemIcon, null,
109
115
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "people_alt")),
110
116
  react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),
117
+ group && (react_1.default.createElement(material_1.ListItem, { className: classes.item, key: "profile", component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, group) },
118
+ react_1.default.createElement(material_1.ListItemIcon, null,
119
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "groups")),
120
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.group", defaultMessage: "ui.privateMessageSettingsIconButton.item.group" }))),
111
121
  react_1.default.createElement(material_1.ListItem, { className: classes.item, key: "delete", onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick },
112
122
  react_1.default.createElement(material_1.ListItemIcon, null,
113
123
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "delete")),
@@ -120,6 +130,10 @@ function PrivateMessageSettingsIconButton(inProps) {
120
130
  react_1.default.createElement(material_1.ListItemIcon, null,
121
131
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "people_alt")),
122
132
  react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),
133
+ group && (react_1.default.createElement(material_1.MenuItem, { className: classes.item, component: react_core_1.Link, to: scRoutingContext.url(react_core_1.SCRoutes.GROUP_ROUTE_NAME, group), key: "profile", onClick: handleCloseDialog },
134
+ react_1.default.createElement(material_1.ListItemIcon, null,
135
+ react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "groups")),
136
+ react_1.default.createElement(react_intl_1.FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.group", defaultMessage: "ui.privateMessageSettingsIconButton.item.group" }))),
123
137
  react_1.default.createElement(material_1.MenuItem, { className: classes.item, onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick, key: "delete" },
124
138
  react_1.default.createElement(material_1.ListItemIcon, null,
125
139
  react_1.default.createElement(Icon_1.default, { fontSize: "small" }, "delete")),
@@ -156,12 +156,16 @@ function PrivateMessageSnippets(inProps) {
156
156
  updateSnippets(newSnippets);
157
157
  }
158
158
  }
159
- function handleSnippetsUpdate(message, forDeletion) {
159
+ function handleSnippetsUpdate(message, forDeletion, type) {
160
160
  const newSnippets = [...data.snippets];
161
- if (forDeletion) {
161
+ if (forDeletion && type === types_1.SCPrivateMessageType.USER) {
162
162
  const _snippets = newSnippets.filter((s) => messageReceiver(s, authUserId) !== message);
163
163
  updateSnippets(_snippets);
164
164
  }
165
+ else if (forDeletion && types_1.SCPrivateMessageType.GROUP) {
166
+ const _snippets = newSnippets.filter((s) => { var _a; return ((_a = s === null || s === void 0 ? void 0 : s.group) === null || _a === void 0 ? void 0 : _a.id) !== message; });
167
+ updateSnippets(_snippets);
168
+ }
165
169
  else {
166
170
  let temp = [...data.snippets];
167
171
  message.map((m) => {
@@ -210,11 +214,15 @@ function PrivateMessageSnippets(inProps) {
210
214
  handleSnippetsUpdate(data);
211
215
  });
212
216
  const snippetsSubscriber = pubsub_js_1.default.subscribe('snippetsChannelDelete', (msg, data) => {
213
- handleSnippetsUpdate(data, true);
217
+ handleSnippetsUpdate(data, true, types_1.SCPrivateMessageType.USER);
218
+ });
219
+ const snippetsGroupSubscriber = pubsub_js_1.default.subscribe('snippetsChannelDeleteGroup', (msg, data) => {
220
+ handleSnippetsUpdate(data, true, types_1.SCPrivateMessageType.GROUP);
214
221
  });
215
222
  return () => {
216
223
  pubsub_js_1.default.unsubscribe(threadSubscriber);
217
224
  pubsub_js_1.default.unsubscribe(snippetsSubscriber);
225
+ pubsub_js_1.default.unsubscribe(snippetsGroupSubscriber);
218
226
  };
219
227
  }, [data.snippets]);
220
228
  //RENDERING
@@ -240,6 +248,6 @@ function PrivateMessageSnippets(inProps) {
240
248
  } }),
241
249
  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,
242
250
  message.thread_status === types_1.SCPrivateMessageStatusType.NEW && (react_1.default.createElement(material_1.Icon, { fontSize: "small", color: "secondary" }, "fiber_manual_record")),
243
- !isMobile && (react_1.default.createElement(PrivateMessageSettingsIconButton_1.default, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true) }))), selected: isSelected(message) })))))))));
251
+ !isMobile && (react_1.default.createElement(PrivateMessageSettingsIconButton_1.default, { threadToDelete: (message === null || message === void 0 ? void 0 : message.group) ? message.group.id : messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true), group: message === null || message === void 0 ? void 0 : message.group }))), selected: isSelected(message) })))))))));
244
252
  }
245
253
  exports.default = PrivateMessageSnippets;
@@ -23,7 +23,7 @@ const PREFIX = 'SCContributionActionsMenu';
23
23
  const classes = {
24
24
  root: `${PREFIX}-root`,
25
25
  button: `${PREFIX}-button`,
26
- popper: `${PREFIX}-popper`,
26
+ popperRoot: `${PREFIX}-popper-root`,
27
27
  paper: `${PREFIX}-paper`,
28
28
  item: `${PREFIX}-item`,
29
29
  itemText: `${PREFIX}-item-text`,
@@ -38,44 +38,8 @@ const classes = {
38
38
  const PopperRoot = (0, styles_1.styled)(Popper_1.default, {
39
39
  name: PREFIX,
40
40
  slot: 'Root',
41
- overridesResolver: (props, styles) => styles.root
42
- })(({ theme }) => ({
43
- zIndex: 2,
44
- [`&.${classes.popper}`]: {
45
- overflow: 'visible',
46
- filter: 'drop-shadow(0px -1px 5px rgba(0,0,0,0.10))',
47
- mt: 1.5
48
- },
49
- [`& .${classes.paper}`]: {
50
- width: 280
51
- },
52
- [`& .${classes.footerSubItems}`]: {
53
- margin: '10px 10px 10px 17px',
54
- border: '1px solid #dddddd',
55
- padding: 5,
56
- borderRadius: 3,
57
- fontSize: 11
58
- },
59
- [`& .${classes.selectedIcon}`]: {
60
- marginLeft: 2,
61
- '&.MuiListItemIcon-root': {
62
- width: '10px'
63
- },
64
- '& svg': {
65
- fontSize: '1.4rem'
66
- }
67
- },
68
- [`& .${classes.sectionBadge}`]: {
69
- padding: 0,
70
- minWidth: 15,
71
- height: 15,
72
- top: 3
73
- },
74
- [`& .${classes.sectionWithSelectionIcon}`]: {
75
- fontSize: 12,
76
- color: '#FFF'
77
- }
78
- }));
41
+ overridesResolver: (props, styles) => styles.popperRoot
42
+ })(() => ({}));
79
43
  const Root = (0, styles_1.styled)(material_1.Box, {
80
44
  name: PREFIX,
81
45
  slot: 'Root',
@@ -661,7 +625,7 @@ function ContributionActionsMenu(props) {
661
625
  open ? react_1.default.createElement(Icon_1.default, null, "expand_less") : react_1.default.createElement(Icon_1.default, null, "expand_more")),
662
626
  react_1.default.createElement(material_1.Collapse, { in: open, timeout: "auto", unmountOnExit: true },
663
627
  renderReports(ContributionsActionsMenu_1.FLAG_CONTRIBUTION_SECTION),
664
- react_1.default.createElement(material_1.Typography, { variant: 'caption', component: 'div', className: classes.footerSubItems }, intl.formatMessage(messages.footer)))))));
628
+ react_1.default.createElement(material_1.Typography, { variant: 'caption', component: "div", className: classes.footerSubItems }, intl.formatMessage(messages.footer)))))));
665
629
  }
666
630
  /**
667
631
  * Renders section hide actions
@@ -766,7 +730,7 @@ function ContributionActionsMenu(props) {
766
730
  }, "aria-haspopup": "true", onClick: handleOpen, className: classes.button, size: "small" }, contributionObj && (contributionObj.collapsed || contributionObj.deleted) ? (react_1.default.createElement("span", { className: classes.visibilityIcons },
767
731
  contributionObj.collapsed ? react_1.default.createElement(Icon_1.default, null, "visibility_off") : react_1.default.createElement(Icon_1.default, null, "delete"),
768
732
  react_1.default.createElement(Icon_1.default, null, "expand_more"))) : (react_1.default.createElement(Icon_1.default, null, "more_vert"))),
769
- isMobile ? (react_1.default.createElement(material_1.SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderContent())) : (react_1.default.createElement(PopperRoot, Object.assign({ open: open, anchorEl: popperRef.current, role: undefined, transition: true, className: classes.popper }, PopperProps, { placement: "bottom-end" }), ({ TransitionProps, placement }) => (react_1.default.createElement(material_1.Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' } }),
733
+ isMobile ? (react_1.default.createElement(material_1.SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderContent())) : (react_1.default.createElement(PopperRoot, Object.assign({ open: open, anchorEl: popperRef.current, role: undefined, transition: true, className: classes.popperRoot }, PopperProps, { placement: "bottom-end" }), ({ TransitionProps, placement }) => (react_1.default.createElement(material_1.Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' } }),
770
734
  react_1.default.createElement(material_1.Paper, { variant: 'outlined', className: classes.paper },
771
735
  react_1.default.createElement(material_1.ClickAwayListener, { onClickAway: handleClose }, renderContent())))))),
772
736
  openConfirmDialog && (react_1.default.createElement(ConfirmDialog_1.default, Object.assign({ open: openConfirmDialog }, (currentAction === ContributionsActionsMenu_1.DELETE_CONTRIBUTION
@@ -415,7 +415,6 @@ const Feed = (inProps, ref) => {
415
415
  React.createElement(InfiniteScroll, Object.assign({ ref: containerRef, className: classes.left, dataLength: feedDataLeft.length, next: getNextPage, previous: getPreviousPage, hasMoreNext: Boolean(feedDataObject.next), hasMorePrevious: Boolean(feedDataObject.previous), header: PreviousPageLink, footer: NextPageLink, loaderNext: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), loaderPrevious: React.createElement(ItemSkeleton, Object.assign({}, ItemSkeletonProps)), scrollThreshold: '90%', endMessage: React.createElement(Box, { className: classes.end },
416
416
  React.createElement(Widget, { className: classes.endMessage },
417
417
  React.createElement(CardContent, null, endMessage)),
418
- advEnabled && !hideAdvs && enabledCustomAdvPositions.includes(SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR) ? (React.createElement(CustomAdv, Object.assign({ position: SCCustomAdvPosition.POSITION_ABOVE_FOOTER_BAR }, CustomAdvProps))) : null,
419
418
  FooterComponent ? React.createElement(FooterComponent, Object.assign({}, FooterComponentProps)) : null), refreshFunction: refresh, pullDownToRefresh: true, pullDownToRefreshThreshold: 1000, pullDownToRefreshContent: null, releaseToRefreshContent: React.createElement(Widget, { variant: "outlined", className: classes.refresh },
420
419
  React.createElement(CardContent, null, refreshMessage)), style: { overflow: 'visible' } }, (scrollableTargetId && { scrollableTarget: scrollableTargetId })),
421
420
  renderHeaderComponent(),
@@ -24,12 +24,12 @@ export interface GroupSettingsIconButtonProps extends IconButtonProps {
24
24
  [p: string]: any;
25
25
  }
26
26
  /**
27
- * > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
27
+ * > API documentation for the Community-JS GroupSettingsIconButton component. Learn about the available props and the CSS API.
28
28
 
29
29
  #### Import
30
30
 
31
31
  ```jsx
32
- import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
32
+ import {GroupSettingsIconButton} from '@selfcommunity/react-ui';
33
33
  ```
34
34
 
35
35
  #### Component Name
@@ -32,12 +32,12 @@ const MenuRoot = styled(Menu, {
32
32
  slot: 'MenuRoot'
33
33
  })(() => ({}));
34
34
  /**
35
- * > API documentation for the Community-JS PrivateMessageSettingsIconButton component. Learn about the available props and the CSS API.
35
+ * > API documentation for the Community-JS GroupSettingsIconButton component. Learn about the available props and the CSS API.
36
36
 
37
37
  #### Import
38
38
 
39
39
  ```jsx
40
- import {PrivateMessageSettingsIconButton} from '@selfcommunity/react-ui';
40
+ import {GroupSettingsIconButton} from '@selfcommunity/react-ui';
41
41
  ```
42
42
 
43
43
  #### Component Name
@@ -36,9 +36,10 @@ export default function DefaultDrawerContent() {
36
36
  //order
37
37
  return (React.createElement(React.Fragment, null,
38
38
  React.createElement(Typography, { variant: "subtitle1" },
39
- React.createElement(FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.title", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.title" }),
39
+ React.createElement("span", null,
40
+ React.createElement(FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.title", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.title" })),
40
41
  ' ',
41
- React.createElement(Button, { variant: "text", component: Link, to: scRoutingContext.url(SCRoutes.CATEGORIES_LIST_ROUTE_NAME, {}) },
42
+ React.createElement(Button, { variant: "text", component: Link, color: "secondary", to: scRoutingContext.url(SCRoutes.CATEGORIES_LIST_ROUTE_NAME, {}) },
42
43
  React.createElement(FormattedMessage, { id: "ui.navigationMenuIconButton.defaultDrawerContent.category.seeAll", defaultMessage: "ui.navigationMenuIconButton.defaultDrawerContent.category.seeAll" }))),
43
44
  categoriesOrdered.map((c, index) => (React.createElement(Zoom, { in: true, style: { transform: isHovered[c.id] && 'scale(1.05)' }, key: index },
44
45
  React.createElement(ListItem, { key: c.id },
@@ -1,5 +1,5 @@
1
1
  import { IconButtonProps } from '@mui/material';
2
- import { SCUserType } from '@selfcommunity/types';
2
+ import { SCGroupType, SCUserType } from '@selfcommunity/types';
3
3
  export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
4
4
  /**
5
5
  * Overrides or extends the styles applied to the component.
@@ -17,11 +17,15 @@ export interface PrivateMessageSettingsIconButtonProps extends IconButtonProps {
17
17
  /**
18
18
  * The deleting thread id
19
19
  */
20
- threadToDelete?: any;
20
+ threadToDelete?: number;
21
21
  /**
22
22
  * The user receiver context
23
23
  */
24
24
  user?: SCUserType;
25
+ /**
26
+ * The group
27
+ */
28
+ group?: SCGroupType;
25
29
  /**
26
30
  * Any other properties
27
31
  */
@@ -58,7 +58,7 @@ export default function PrivateMessageSettingsIconButton(inProps) {
58
58
  props: inProps,
59
59
  name: PREFIX
60
60
  });
61
- const { className = null, onMenuItemDeleteClick, user, onItemDeleteConfirm, threadToDelete } = props, rest = __rest(props, ["className", "onMenuItemDeleteClick", "user", "onItemDeleteConfirm", "threadToDelete"]);
61
+ const { className = null, onMenuItemDeleteClick, user, group, onItemDeleteConfirm, threadToDelete } = props, rest = __rest(props, ["className", "onMenuItemDeleteClick", "user", "group", "onItemDeleteConfirm", "threadToDelete"]);
62
62
  // STATE
63
63
  const [anchorEl, setAnchorEl] = useState(null);
64
64
  const [openConfirmDialog, setOpenConfirmDialog] = useState(false);
@@ -86,9 +86,15 @@ export default function PrivateMessageSettingsIconButton(inProps) {
86
86
  * Handles thread deletion
87
87
  */
88
88
  function handleDeleteThread() {
89
- PrivateMessageService.deleteAThread({ user: threadToDelete })
89
+ const params = group ? { group: threadToDelete } : { user: threadToDelete };
90
+ PrivateMessageService.deleteAThread(params)
90
91
  .then(() => {
91
- PubSub.publish('snippetsChannelDelete', threadToDelete);
92
+ if (group) {
93
+ PubSub.publish('snippetsChannelDeleteGroup', threadToDelete);
94
+ }
95
+ else {
96
+ PubSub.publish('snippetsChannelDelete', threadToDelete);
97
+ }
92
98
  handleCloseDialog();
93
99
  })
94
100
  .catch((error) => {
@@ -106,6 +112,10 @@ export default function PrivateMessageSettingsIconButton(inProps) {
106
112
  React.createElement(ListItemIcon, null,
107
113
  React.createElement(Icon, { fontSize: "small" }, "people_alt")),
108
114
  React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),
115
+ group && (React.createElement(ListItem, { className: classes.item, key: "profile", component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, group) },
116
+ React.createElement(ListItemIcon, null,
117
+ React.createElement(Icon, { fontSize: "small" }, "groups")),
118
+ React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.group", defaultMessage: "ui.privateMessageSettingsIconButton.item.group" }))),
109
119
  React.createElement(ListItem, { className: classes.item, key: "delete", onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick },
110
120
  React.createElement(ListItemIcon, null,
111
121
  React.createElement(Icon, { fontSize: "small" }, "delete")),
@@ -118,6 +128,10 @@ export default function PrivateMessageSettingsIconButton(inProps) {
118
128
  React.createElement(ListItemIcon, null,
119
129
  React.createElement(Icon, { fontSize: "small" }, "people_alt")),
120
130
  React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.profile", defaultMessage: "ui.privateMessageSettingsIconButton.item.profile" }))),
131
+ group && (React.createElement(MenuItem, { className: classes.item, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, group), key: "profile", onClick: handleCloseDialog },
132
+ React.createElement(ListItemIcon, null,
133
+ React.createElement(Icon, { fontSize: "small" }, "groups")),
134
+ React.createElement(FormattedMessage, { id: "ui.privateMessageSettingsIconButton.item.group", defaultMessage: "ui.privateMessageSettingsIconButton.item.group" }))),
121
135
  React.createElement(MenuItem, { className: classes.item, onClick: threadToDelete ? handleOpenDialog : onMenuItemDeleteClick, key: "delete" },
122
136
  React.createElement(ListItemIcon, null,
123
137
  React.createElement(Icon, { fontSize: "small" }, "delete")),
@@ -154,12 +154,16 @@ export default function PrivateMessageSnippets(inProps) {
154
154
  updateSnippets(newSnippets);
155
155
  }
156
156
  }
157
- function handleSnippetsUpdate(message, forDeletion) {
157
+ function handleSnippetsUpdate(message, forDeletion, type) {
158
158
  const newSnippets = [...data.snippets];
159
- if (forDeletion) {
159
+ if (forDeletion && type === SCPrivateMessageType.USER) {
160
160
  const _snippets = newSnippets.filter((s) => messageReceiver(s, authUserId) !== message);
161
161
  updateSnippets(_snippets);
162
162
  }
163
+ else if (forDeletion && SCPrivateMessageType.GROUP) {
164
+ const _snippets = newSnippets.filter((s) => { var _a; return ((_a = s === null || s === void 0 ? void 0 : s.group) === null || _a === void 0 ? void 0 : _a.id) !== message; });
165
+ updateSnippets(_snippets);
166
+ }
163
167
  else {
164
168
  let temp = [...data.snippets];
165
169
  message.map((m) => {
@@ -208,11 +212,15 @@ export default function PrivateMessageSnippets(inProps) {
208
212
  handleSnippetsUpdate(data);
209
213
  });
210
214
  const snippetsSubscriber = PubSub.subscribe('snippetsChannelDelete', (msg, data) => {
211
- handleSnippetsUpdate(data, true);
215
+ handleSnippetsUpdate(data, true, SCPrivateMessageType.USER);
216
+ });
217
+ const snippetsGroupSubscriber = PubSub.subscribe('snippetsChannelDeleteGroup', (msg, data) => {
218
+ handleSnippetsUpdate(data, true, SCPrivateMessageType.GROUP);
212
219
  });
213
220
  return () => {
214
221
  PubSub.unsubscribe(threadSubscriber);
215
222
  PubSub.unsubscribe(snippetsSubscriber);
223
+ PubSub.unsubscribe(snippetsGroupSubscriber);
216
224
  };
217
225
  }, [data.snippets]);
218
226
  //RENDERING
@@ -238,5 +246,5 @@ export default function PrivateMessageSnippets(inProps) {
238
246
  } }),
239
247
  React.createElement(List, null, filteredSnippets.map((message) => (React.createElement(PrivateMessageSnippetItem, { message: message, key: message.id, onItemClick: () => handleOpenThread(message), secondaryAction: React.createElement(React.Fragment, null,
240
248
  message.thread_status === SCPrivateMessageStatusType.NEW && (React.createElement(Icon, { fontSize: "small", color: "secondary" }, "fiber_manual_record")),
241
- !isMobile && (React.createElement(PrivateMessageSettingsIconButton, { threadToDelete: messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true) }))), selected: isSelected(message) })))))))));
249
+ !isMobile && (React.createElement(PrivateMessageSettingsIconButton, { threadToDelete: (message === null || message === void 0 ? void 0 : message.group) ? message.group.id : messageReceiver(message, authUserId), onItemDeleteConfirm: () => handleDeleteConversation(messageReceiver(message, authUserId)), user: messageReceiver(message, authUserId, true), group: message === null || message === void 0 ? void 0 : message.group }))), selected: isSelected(message) })))))))));
242
250
  }
@@ -21,7 +21,7 @@ const PREFIX = 'SCContributionActionsMenu';
21
21
  const classes = {
22
22
  root: `${PREFIX}-root`,
23
23
  button: `${PREFIX}-button`,
24
- popper: `${PREFIX}-popper`,
24
+ popperRoot: `${PREFIX}-popper-root`,
25
25
  paper: `${PREFIX}-paper`,
26
26
  item: `${PREFIX}-item`,
27
27
  itemText: `${PREFIX}-item-text`,
@@ -36,44 +36,8 @@ const classes = {
36
36
  const PopperRoot = styled(Popper, {
37
37
  name: PREFIX,
38
38
  slot: 'Root',
39
- overridesResolver: (props, styles) => styles.root
40
- })(({ theme }) => ({
41
- zIndex: 2,
42
- [`&.${classes.popper}`]: {
43
- overflow: 'visible',
44
- filter: 'drop-shadow(0px -1px 5px rgba(0,0,0,0.10))',
45
- mt: 1.5
46
- },
47
- [`& .${classes.paper}`]: {
48
- width: 280
49
- },
50
- [`& .${classes.footerSubItems}`]: {
51
- margin: '10px 10px 10px 17px',
52
- border: '1px solid #dddddd',
53
- padding: 5,
54
- borderRadius: 3,
55
- fontSize: 11
56
- },
57
- [`& .${classes.selectedIcon}`]: {
58
- marginLeft: 2,
59
- '&.MuiListItemIcon-root': {
60
- width: '10px'
61
- },
62
- '& svg': {
63
- fontSize: '1.4rem'
64
- }
65
- },
66
- [`& .${classes.sectionBadge}`]: {
67
- padding: 0,
68
- minWidth: 15,
69
- height: 15,
70
- top: 3
71
- },
72
- [`& .${classes.sectionWithSelectionIcon}`]: {
73
- fontSize: 12,
74
- color: '#FFF'
75
- }
76
- }));
39
+ overridesResolver: (props, styles) => styles.popperRoot
40
+ })(() => ({}));
77
41
  const Root = styled(Box, {
78
42
  name: PREFIX,
79
43
  slot: 'Root',
@@ -659,7 +623,7 @@ export default function ContributionActionsMenu(props) {
659
623
  open ? React.createElement(Icon, null, "expand_less") : React.createElement(Icon, null, "expand_more")),
660
624
  React.createElement(Collapse, { in: open, timeout: "auto", unmountOnExit: true },
661
625
  renderReports(FLAG_CONTRIBUTION_SECTION),
662
- React.createElement(Typography, { variant: 'caption', component: 'div', className: classes.footerSubItems }, intl.formatMessage(messages.footer)))))));
626
+ React.createElement(Typography, { variant: 'caption', component: "div", className: classes.footerSubItems }, intl.formatMessage(messages.footer)))))));
663
627
  }
664
628
  /**
665
629
  * Renders section hide actions
@@ -764,7 +728,7 @@ export default function ContributionActionsMenu(props) {
764
728
  }, "aria-haspopup": "true", onClick: handleOpen, className: classes.button, size: "small" }, contributionObj && (contributionObj.collapsed || contributionObj.deleted) ? (React.createElement("span", { className: classes.visibilityIcons },
765
729
  contributionObj.collapsed ? React.createElement(Icon, null, "visibility_off") : React.createElement(Icon, null, "delete"),
766
730
  React.createElement(Icon, null, "expand_more"))) : (React.createElement(Icon, null, "more_vert"))),
767
- isMobile ? (React.createElement(SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderContent())) : (React.createElement(PopperRoot, Object.assign({ open: open, anchorEl: popperRef.current, role: undefined, transition: true, className: classes.popper }, PopperProps, { placement: "bottom-end" }), ({ TransitionProps, placement }) => (React.createElement(Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' } }),
731
+ isMobile ? (React.createElement(SwipeableDrawer, { open: open, onClose: handleClose, onOpen: handleOpen, anchor: "bottom", disableSwipeToOpen: true }, renderContent())) : (React.createElement(PopperRoot, Object.assign({ open: open, anchorEl: popperRef.current, role: undefined, transition: true, className: classes.popperRoot }, PopperProps, { placement: "bottom-end" }), ({ TransitionProps, placement }) => (React.createElement(Grow, Object.assign({}, TransitionProps, { style: { transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom' } }),
768
732
  React.createElement(Paper, { variant: 'outlined', className: classes.paper },
769
733
  React.createElement(ClickAwayListener, { onClickAway: handleClose }, renderContent())))))),
770
734
  openConfirmDialog && (React.createElement(ConfirmDialog, Object.assign({ open: openConfirmDialog }, (currentAction === DELETE_CONTRIBUTION