@selfcommunity/react-ui 0.7.9-alpha.5 → 0.7.9-alpha.51

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/lib/cjs/components/CategoryHeader/Skeleton.js +3 -2
  2. package/lib/cjs/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
  3. package/lib/cjs/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
  4. package/lib/cjs/components/Composer/Attributes/Attributes.js +3 -3
  5. package/lib/cjs/components/Composer/Composer.js +3 -5
  6. package/lib/cjs/components/Composer/Content/ContentPost/ContentPost.js +4 -3
  7. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +2 -3
  8. package/lib/cjs/components/Composer/Layer/AudienceLayer/AudienceLayer.js +8 -9
  9. package/lib/cjs/components/EditGroupButton/EditGroupButton.js +4 -0
  10. package/lib/cjs/components/FeedObject/FeedObject.d.ts +1 -0
  11. package/lib/cjs/components/FeedObject/FeedObject.js +23 -6
  12. package/lib/cjs/components/FeedUpdatesWidget/FeedUpdatesWidget.js +1 -1
  13. package/lib/cjs/components/Group/Group.d.ts +3 -0
  14. package/lib/cjs/components/Group/Group.js +16 -4
  15. package/lib/cjs/components/GroupAutocomplete/GroupAutocomplete.js +1 -1
  16. package/lib/cjs/components/GroupForm/GroupForm.js +31 -9
  17. package/lib/cjs/components/GroupHeader/GroupHeader.d.ts +6 -5
  18. package/lib/cjs/components/GroupHeader/GroupHeader.js +53 -11
  19. package/lib/cjs/components/GroupHeader/Skeleton.d.ts +2 -4
  20. package/lib/cjs/components/GroupHeader/Skeleton.js +10 -10
  21. package/lib/cjs/components/GroupInfoWidget/GroupInfoWidget.js +40 -7
  22. package/lib/cjs/components/GroupInviteButton/GroupInviteButton.js +33 -46
  23. package/lib/cjs/components/GroupInvitedWidget/GroupInvitedWidget.d.ts +74 -0
  24. package/lib/cjs/components/GroupInvitedWidget/GroupInvitedWidget.js +221 -0
  25. package/lib/cjs/components/GroupInvitedWidget/Skeleton.d.ts +22 -0
  26. package/lib/cjs/components/GroupInvitedWidget/Skeleton.js +38 -0
  27. package/lib/cjs/components/GroupInvitedWidget/constants.d.ts +1 -0
  28. package/lib/cjs/components/GroupInvitedWidget/constants.js +4 -0
  29. package/lib/cjs/components/GroupInvitedWidget/index.d.ts +4 -0
  30. package/lib/cjs/components/GroupInvitedWidget/index.js +8 -0
  31. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  32. package/lib/cjs/components/GroupMembersButton/GroupMembersButton.js +7 -2
  33. package/lib/cjs/components/GroupMembersWidget/GroupMembersWidget.js +25 -4
  34. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +11 -5
  35. package/lib/cjs/components/GroupRequestsWidget/GroupRequestsWidget.js +18 -7
  36. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
  37. package/lib/cjs/components/GroupSettingsIconButton/GroupSettingsIconButton.js +145 -0
  38. package/lib/cjs/components/GroupSettingsIconButton/index.d.ts +3 -0
  39. package/lib/cjs/components/GroupSettingsIconButton/index.js +5 -0
  40. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
  41. package/lib/cjs/components/GroupSubscribeButton/GroupSubscribeButton.js +31 -10
  42. package/lib/cjs/components/Groups/Groups.d.ts +19 -16
  43. package/lib/cjs/components/Groups/Groups.js +89 -85
  44. package/lib/cjs/components/Groups/Skeleton.d.ts +4 -0
  45. package/lib/cjs/components/Groups/Skeleton.js +2 -2
  46. package/lib/cjs/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  47. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  48. package/lib/cjs/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  49. package/lib/cjs/components/Notification/Group/Group.d.ts +15 -0
  50. package/lib/cjs/components/Notification/Group/Group.js +78 -0
  51. package/lib/cjs/components/Notification/Group/index.d.ts +3 -0
  52. package/lib/cjs/components/Notification/Group/index.js +5 -0
  53. package/lib/cjs/components/Notification/Notification.js +31 -1
  54. package/lib/cjs/components/Notification/PrivateMessage/PrivateMessage.js +16 -5
  55. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  56. package/lib/cjs/components/PrivateMessageComponent/PrivateMessageComponent.js +12 -7
  57. package/lib/cjs/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
  58. package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
  59. package/lib/cjs/components/PrivateMessageSnippets/PrivateMessageSnippets.js +24 -6
  60. package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
  61. package/lib/cjs/components/PrivateMessageThread/PrivateMessageThread.js +45 -20
  62. package/lib/cjs/components/PrivateMessageThreadItem/PrivateMessageThreadItem.js +6 -0
  63. package/lib/cjs/components/SearchAutocomplete/SearchAutocomplete.js +22 -5
  64. package/lib/cjs/components/SnippetNotifications/SnippetNotifications.js +7 -0
  65. package/lib/cjs/components/ToastNotifications/ToastNotifications.js +7 -0
  66. package/lib/cjs/components/User/User.d.ts +6 -1
  67. package/lib/cjs/components/User/User.js +5 -4
  68. package/lib/cjs/constants/PubSub.d.ts +28 -0
  69. package/lib/cjs/constants/PubSub.js +22 -0
  70. package/lib/cjs/index.d.ts +5 -2
  71. package/lib/cjs/index.js +12 -4
  72. package/lib/esm/components/CategoryHeader/Skeleton.js +3 -2
  73. package/lib/esm/components/ChangeGroupCover/ChangeGroupCover.js +24 -1
  74. package/lib/esm/components/ChangeGroupPicture/ChangeGroupPicture.js +32 -11
  75. package/lib/esm/components/Composer/Attributes/Attributes.js +3 -3
  76. package/lib/esm/components/Composer/Composer.js +3 -5
  77. package/lib/esm/components/Composer/Content/ContentPost/ContentPost.js +4 -3
  78. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.d.ts +2 -3
  79. package/lib/esm/components/Composer/Layer/AudienceLayer/AudienceLayer.js +8 -9
  80. package/lib/esm/components/EditGroupButton/EditGroupButton.js +5 -1
  81. package/lib/esm/components/FeedObject/FeedObject.d.ts +1 -0
  82. package/lib/esm/components/FeedObject/FeedObject.js +24 -7
  83. package/lib/esm/components/FeedUpdatesWidget/FeedUpdatesWidget.js +1 -1
  84. package/lib/esm/components/Group/Group.d.ts +3 -0
  85. package/lib/esm/components/Group/Group.js +18 -6
  86. package/lib/esm/components/GroupAutocomplete/GroupAutocomplete.js +1 -1
  87. package/lib/esm/components/GroupForm/GroupForm.js +31 -9
  88. package/lib/esm/components/GroupHeader/GroupHeader.d.ts +6 -5
  89. package/lib/esm/components/GroupHeader/GroupHeader.js +55 -13
  90. package/lib/esm/components/GroupHeader/Skeleton.d.ts +2 -4
  91. package/lib/esm/components/GroupHeader/Skeleton.js +10 -10
  92. package/lib/esm/components/GroupInfoWidget/GroupInfoWidget.js +40 -7
  93. package/lib/esm/components/GroupInviteButton/GroupInviteButton.js +33 -46
  94. package/lib/esm/components/GroupInvitedWidget/GroupInvitedWidget.d.ts +74 -0
  95. package/lib/esm/components/GroupInvitedWidget/GroupInvitedWidget.js +218 -0
  96. package/lib/esm/components/GroupInvitedWidget/Skeleton.d.ts +22 -0
  97. package/lib/esm/components/GroupInvitedWidget/Skeleton.js +34 -0
  98. package/lib/esm/components/GroupInvitedWidget/constants.d.ts +1 -0
  99. package/lib/esm/components/GroupInvitedWidget/constants.js +1 -0
  100. package/lib/esm/components/GroupInvitedWidget/index.d.ts +4 -0
  101. package/lib/esm/components/GroupInvitedWidget/index.js +4 -0
  102. package/lib/esm/components/GroupMembersButton/GroupMembersButton.d.ts +5 -0
  103. package/lib/esm/components/GroupMembersButton/GroupMembersButton.js +8 -3
  104. package/lib/esm/components/GroupMembersWidget/GroupMembersWidget.js +26 -5
  105. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.d.ts +11 -5
  106. package/lib/esm/components/GroupRequestsWidget/GroupRequestsWidget.js +18 -7
  107. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.d.ts +48 -0
  108. package/lib/esm/components/GroupSettingsIconButton/GroupSettingsIconButton.js +142 -0
  109. package/lib/esm/components/GroupSettingsIconButton/index.d.ts +3 -0
  110. package/lib/esm/components/GroupSettingsIconButton/index.js +2 -0
  111. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.d.ts +8 -3
  112. package/lib/esm/components/GroupSubscribeButton/GroupSubscribeButton.js +32 -11
  113. package/lib/esm/components/Groups/Groups.d.ts +19 -16
  114. package/lib/esm/components/Groups/Groups.js +94 -90
  115. package/lib/esm/components/Groups/Skeleton.d.ts +4 -0
  116. package/lib/esm/components/Groups/Skeleton.js +2 -2
  117. package/lib/esm/components/NavigationMenuIconButton/NavigationMenuIconButton.js +1 -1
  118. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.d.ts +4 -0
  119. package/lib/esm/components/NavigationToolbarMobile/NavigationToolbarMobile.js +2 -3
  120. package/lib/esm/components/Notification/Group/Group.d.ts +15 -0
  121. package/lib/esm/components/Notification/Group/Group.js +75 -0
  122. package/lib/esm/components/Notification/Group/index.d.ts +3 -0
  123. package/lib/esm/components/Notification/Group/index.js +2 -0
  124. package/lib/esm/components/Notification/Notification.js +31 -1
  125. package/lib/esm/components/Notification/PrivateMessage/PrivateMessage.js +16 -5
  126. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.d.ts +1 -1
  127. package/lib/esm/components/PrivateMessageComponent/PrivateMessageComponent.js +13 -8
  128. package/lib/esm/components/PrivateMessageSnippetItem/PrivateMessageSnippetItem.js +11 -6
  129. package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.d.ts +3 -3
  130. package/lib/esm/components/PrivateMessageSnippets/PrivateMessageSnippets.js +26 -8
  131. package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.d.ts +6 -1
  132. package/lib/esm/components/PrivateMessageThread/PrivateMessageThread.js +47 -22
  133. package/lib/esm/components/PrivateMessageThreadItem/PrivateMessageThreadItem.js +7 -1
  134. package/lib/esm/components/SearchAutocomplete/SearchAutocomplete.js +22 -5
  135. package/lib/esm/components/SnippetNotifications/SnippetNotifications.js +7 -0
  136. package/lib/esm/components/ToastNotifications/ToastNotifications.js +7 -0
  137. package/lib/esm/components/User/User.d.ts +6 -1
  138. package/lib/esm/components/User/User.js +5 -4
  139. package/lib/esm/constants/PubSub.d.ts +28 -0
  140. package/lib/esm/constants/PubSub.js +19 -0
  141. package/lib/esm/index.d.ts +5 -2
  142. package/lib/esm/index.js +7 -4
  143. package/lib/umd/react-ui.js +1 -1
  144. package/package.json +6 -6
@@ -10,9 +10,8 @@ export declare enum AudienceTypes {
10
10
  AUDIENCE_GROUP = "group"
11
11
  }
12
12
  export interface AudienceLayerProps extends Omit<BoxProps, 'defaultValue'>, ComposerLayerProps {
13
- defaultType: AudienceTypes;
14
- defaultValue: SCTagType[] | SCGroupType;
13
+ defaultValue: SCTagType[] | SCGroupType | any;
15
14
  TextFieldProps?: TextFieldProps;
16
15
  }
17
- declare const AudienceLayer: React.ForwardRefExoticComponent<Pick<AudienceLayerProps, "p" | "slot" | "style" | "title" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "border" | "borderTop" | "borderRight" | "borderBottom" | "borderLeft" | "borderColor" | "borderRadius" | "display" | "displayPrint" | "overflow" | "textOverflow" | "visibility" | "whiteSpace" | "flexBasis" | "flexDirection" | "flexWrap" | "justifyContent" | "alignItems" | "alignContent" | "order" | "flex" | "flexGrow" | "flexShrink" | "alignSelf" | "justifyItems" | "justifySelf" | "gap" | "columnGap" | "rowGap" | "gridColumn" | "gridRow" | "gridAutoFlow" | "gridAutoColumns" | "gridAutoRows" | "gridTemplateColumns" | "gridTemplateRows" | "gridTemplateAreas" | "gridArea" | "bgcolor" | "zIndex" | "position" | "top" | "right" | "bottom" | "left" | "boxShadow" | "width" | "maxWidth" | "minWidth" | "height" | "maxHeight" | "minHeight" | "boxSizing" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "margin" | "marginTop" | "marginRight" | "marginBottom" | "marginLeft" | "marginX" | "marginY" | "marginInline" | "marginInlineStart" | "marginInlineEnd" | "marginBlock" | "marginBlockStart" | "marginBlockEnd" | "padding" | "paddingTop" | "paddingRight" | "paddingBottom" | "paddingLeft" | "paddingX" | "paddingY" | "paddingInline" | "paddingInlineStart" | "paddingInlineEnd" | "paddingBlock" | "paddingBlockStart" | "paddingBlockEnd" | "typography" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "letterSpacing" | "lineHeight" | "textAlign" | "textTransform" | "component" | "sx" | "classes" | "onClose" | "TextFieldProps" | "defaultType" | "onSave"> & React.RefAttributes<unknown>>;
16
+ declare const AudienceLayer: React.ForwardRefExoticComponent<Pick<AudienceLayerProps, "p" | "slot" | "style" | "title" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "border" | "borderTop" | "borderRight" | "borderBottom" | "borderLeft" | "borderColor" | "borderRadius" | "display" | "displayPrint" | "overflow" | "textOverflow" | "visibility" | "whiteSpace" | "flexBasis" | "flexDirection" | "flexWrap" | "justifyContent" | "alignItems" | "alignContent" | "order" | "flex" | "flexGrow" | "flexShrink" | "alignSelf" | "justifyItems" | "justifySelf" | "gap" | "columnGap" | "rowGap" | "gridColumn" | "gridRow" | "gridAutoFlow" | "gridAutoColumns" | "gridAutoRows" | "gridTemplateColumns" | "gridTemplateRows" | "gridTemplateAreas" | "gridArea" | "bgcolor" | "zIndex" | "position" | "top" | "right" | "bottom" | "left" | "boxShadow" | "width" | "maxWidth" | "minWidth" | "height" | "maxHeight" | "minHeight" | "boxSizing" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "px" | "py" | "margin" | "marginTop" | "marginRight" | "marginBottom" | "marginLeft" | "marginX" | "marginY" | "marginInline" | "marginInlineStart" | "marginInlineEnd" | "marginBlock" | "marginBlockStart" | "marginBlockEnd" | "padding" | "paddingTop" | "paddingRight" | "paddingBottom" | "paddingLeft" | "paddingX" | "paddingY" | "paddingInline" | "paddingInlineStart" | "paddingInlineEnd" | "paddingBlock" | "paddingBlockStart" | "paddingBlockEnd" | "typography" | "fontFamily" | "fontSize" | "fontStyle" | "fontWeight" | "letterSpacing" | "lineHeight" | "textAlign" | "textTransform" | "component" | "sx" | "classes" | "onClose" | "TextFieldProps" | "onSave"> & React.RefAttributes<unknown>>;
18
17
  export default AudienceLayer;
@@ -32,10 +32,10 @@ const Root = styled(Box, {
32
32
  })(() => ({}));
33
33
  const AudienceLayer = React.forwardRef((props, ref) => {
34
34
  // Props
35
- const { className, onClose, onSave, defaultType = AudienceTypes.AUDIENCE_TAG, defaultValue = AudienceTypes.AUDIENCE_TAG ? [] : null, TextFieldProps = {
35
+ const { className, onClose, onSave, defaultValue = AudienceTypes.AUDIENCE_TAG ? [] : null, TextFieldProps = {
36
36
  variant: 'outlined',
37
37
  label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.tags.label", defaultMessage: "ui.composer.layer.audience.tags.label" })
38
- } } = props, rest = __rest(props, ["className", "onClose", "onSave", "defaultType", "defaultValue", "TextFieldProps"]);
38
+ } } = props, rest = __rest(props, ["className", "onClose", "onSave", "defaultValue", "TextFieldProps"]);
39
39
  // STATE
40
40
  const [autocompleteOpen, setAutocompleteOpen] = useState(false);
41
41
  const [audience, setAudience] = useState(
@@ -43,7 +43,7 @@ const AudienceLayer = React.forwardRef((props, ref) => {
43
43
  // @ts-ignore
44
44
  defaultValue === null || defaultValue.length === 0
45
45
  ? AudienceTypes.AUDIENCE_ALL
46
- : defaultType === AudienceTypes.AUDIENCE_GROUP
46
+ : defaultValue && Object.prototype.hasOwnProperty.call(defaultValue, 'managed_by')
47
47
  ? AudienceTypes.AUDIENCE_GROUP
48
48
  : AudienceTypes.AUDIENCE_TAG);
49
49
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -52,10 +52,9 @@ const AudienceLayer = React.forwardRef((props, ref) => {
52
52
  // HOOKS
53
53
  const { scAddressingTags } = useSCFetchAddressingTagList({ fetch: autocompleteOpen });
54
54
  // HANDLERS
55
- const handleSave = useCallback(
56
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
57
- // @ts-ignore
58
- () => (defaultType === AudienceTypes.AUDIENCE_GROUP ? onSave(value) : onSave((value === null || value === void 0 ? void 0 : value.length) && (value === null || value === void 0 ? void 0 : value.length) > 0 ? value : null)), [value, onSave]);
55
+ const handleSave = useCallback(() => {
56
+ audience === AudienceTypes.AUDIENCE_GROUP ? onSave(value) : onSave((value === null || value === void 0 ? void 0 : value.length) && (value === null || value === void 0 ? void 0 : value.length) > 0 ? value : null);
57
+ }, [value, onSave, audience]);
59
58
  const handleChange = useCallback((event, tags) => setValue(tags), []);
60
59
  const handleGroupChange = useCallback((group) => setValue(group), []);
61
60
  const handleChangeAudience = useCallback((event, data) => setAudience(data), []);
@@ -72,8 +71,8 @@ const AudienceLayer = React.forwardRef((props, ref) => {
72
71
  React.createElement(DialogContent, { className: classes.content },
73
72
  React.createElement(Tabs, { value: audience, onChange: handleChangeAudience, "aria-label": "audience type" },
74
73
  React.createElement(Tab, { value: AudienceTypes.AUDIENCE_ALL, icon: React.createElement(Icon, null, "public"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.all", defaultMessage: "ui.composer.layer.audience.all" }) }),
75
- React.createElement(Tab, { disabled: defaultType === AudienceTypes.AUDIENCE_TAG, value: AudienceTypes.AUDIENCE_GROUP, icon: React.createElement(Icon, null, "groups"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.group", defaultMessage: "ui.composer.layer.audience.group" }) }),
76
- React.createElement(Tab, { disabled: defaultType === AudienceTypes.AUDIENCE_GROUP, value: AudienceTypes.AUDIENCE_TAG, icon: React.createElement(Icon, null, "label"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
74
+ React.createElement(Tab, { disabled: (value && Boolean(value === null || value === void 0 ? void 0 : value.length)) || (value && !Object.prototype.hasOwnProperty.call(value, 'managed_by')), value: AudienceTypes.AUDIENCE_GROUP, icon: React.createElement(Icon, null, "groups"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.group", defaultMessage: "ui.composer.layer.audience.group" }) }),
75
+ React.createElement(Tab, { disabled: value && Object.prototype.hasOwnProperty.call(value, 'managed_by'), value: AudienceTypes.AUDIENCE_TAG, icon: React.createElement(Icon, null, "label"), label: React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.tag", defaultMessage: "ui.composer.layer.audience.tag" }) })),
77
76
  React.createElement(Typography, { className: classes.message },
78
77
  audience === AudienceTypes.AUDIENCE_ALL && (React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.all.message", defaultMessage: "ui.composer.audience.layer.all.message" })),
79
78
  audience === AudienceTypes.AUDIENCE_GROUP && (React.createElement(FormattedMessage, { id: "ui.composer.layer.audience.group.message", defaultMessage: "ui.composer.audience.layer.group.message" })),
@@ -3,7 +3,7 @@ import React from 'react';
3
3
  import { useThemeProps } from '@mui/system';
4
4
  import { styled } from '@mui/material/styles';
5
5
  import { FormattedMessage } from 'react-intl';
6
- import { useSCFetchGroup } from '@selfcommunity/react-core';
6
+ import { useSCFetchGroup, useSCUser } from '@selfcommunity/react-core';
7
7
  import classNames from 'classnames';
8
8
  import CreateGroupButton from '../CreateGroupButton';
9
9
  const PREFIX = 'SCEditGroupButton';
@@ -42,10 +42,14 @@ export default function EditGroupButton(inProps) {
42
42
  });
43
43
  const { className, groupId, group, onEditSuccess } = props, rest = __rest(props, ["className", "groupId", "group", "onEditSuccess"]);
44
44
  const { scGroup, setSCGroup } = useSCFetchGroup({ id: groupId, group });
45
+ const scUserContext = useSCUser();
45
46
  const handleSuccess = (data) => {
46
47
  setSCGroup(data);
47
48
  onEditSuccess && onEditSuccess(data);
48
49
  };
50
+ if (!scUserContext.user) {
51
+ return null;
52
+ }
49
53
  /**
50
54
  * Renders root object
51
55
  */
@@ -188,6 +188,7 @@ export interface FeedObjectProps extends CardProps, VirtualScrollerItemProps {
188
188
  |deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
189
189
  |header|.SCFeedObject-header|Styles applied to the header of the card.|
190
190
  |category|.SCFeedObject-category|Styles applied to the category element.|
191
+ |group|.SCFeedObject-group|Styles applied to the group element.|
191
192
  |avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
192
193
  |username|.SCFeedObject-username|Styles applied to the username element.|
193
194
  |activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
@@ -2,7 +2,7 @@ import { __rest } from "tslib";
2
2
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import CardContent from '@mui/material/CardContent';
5
- import { Avatar, Box, Button, CardActions, CardHeader, Collapse, Stack, Tooltip, Typography } from '@mui/material';
5
+ import { Avatar, Box, Button, CardActions, CardHeader, Chip, Collapse, Stack, Tooltip, Typography } from '@mui/material';
6
6
  import FeedObjectSkeleton from './Skeleton';
7
7
  import DateTimeAgo from '../../shared/DateTimeAgo';
8
8
  import Bullet from '../../shared/Bullet';
@@ -40,6 +40,10 @@ const messages = defineMessages({
40
40
  visibleToAll: {
41
41
  id: 'ui.feedObject.visibleToAll',
42
42
  defaultMessage: 'ui.feedObject.visibleToAll'
43
+ },
44
+ visibleToGroup: {
45
+ id: 'ui.feedObject.visibleToGroup',
46
+ defaultMessage: 'ui.feedObject.visibleToGroup'
43
47
  }
44
48
  });
45
49
  const classes = {
@@ -47,6 +51,7 @@ const classes = {
47
51
  deleted: `${PREFIX}-deleted`,
48
52
  header: `${PREFIX}-header`,
49
53
  category: `${PREFIX}-category`,
54
+ group: `${PREFIX}-group`,
50
55
  avatar: `${PREFIX}-avatar`,
51
56
  username: `${PREFIX}-username`,
52
57
  activityAt: `${PREFIX}-activity-at`,
@@ -100,6 +105,7 @@ const Root = styled(Widget, {
100
105
  |deleted|.SCFeedObject-deleted|Styles applied to the feed obj when is deleted (visible only for admin and moderator).|
101
106
  |header|.SCFeedObject-header|Styles applied to the header of the card.|
102
107
  |category|.SCFeedObject-category|Styles applied to the category element.|
108
+ |group|.SCFeedObject-group|Styles applied to the group element.|
103
109
  |avatar|.SCFeedObject-avatar|Styles applied to the avatar element.|
104
110
  |username|.SCFeedObject-username|Styles applied to the username element.|
105
111
  |activityAt|.SCFeedObject-activity-at|Styles applied to the activity at section.|
@@ -167,7 +173,7 @@ export default function FeedObject(inProps) {
167
173
  }, [onStateChange, onHeightChange]);
168
174
  /**
169
175
  * Update state object
170
- * @param obj
176
+ * @param newObj
171
177
  */
172
178
  const updateObject = (newObj) => {
173
179
  setObj(newObj);
@@ -424,8 +430,13 @@ export default function FeedObject(inProps) {
424
430
  template === SCFeedObjectTemplateType.DETAIL ||
425
431
  template === SCFeedObjectTemplateType.SEARCH) {
426
432
  objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(Box, { className: classNames({ [classes.deleted]: obj && obj.deleted }) },
427
- obj.categories.length > 0 && (React.createElement("div", { className: classes.category }, obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
428
- React.createElement(Typography, { variant: "overline" }, c.name)))))),
433
+ obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
434
+ React.createElement(React.Fragment, null, obj.group && (React.createElement("div", { className: classes.group },
435
+ React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
436
+ obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
437
+ React.createElement(Typography, { variant: "overline" }, c.name)))))),
438
+ obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
439
+ React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
429
440
  React.createElement(CardHeader, { className: classes.header, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null }),
430
441
  React.createElement(UserAvatar, { hide: !obj.author.community_badge },
431
442
  React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(React.Fragment, null,
@@ -437,7 +448,8 @@ export default function FeedObject(inProps) {
437
448
  React.createElement(Icon, null, "add_location_alt"), (_a = obj.location) === null || _a === void 0 ? void 0 :
438
449
  _a.location))),
439
450
  React.createElement(Bullet, null),
440
- React.createElement(Box, { className: classes.tag }, obj.addressing.length > 0 ? (React.createElement(Tags, { tags: obj.addressing, TagChipProps: { disposable: false, clickable: false } })) : (React.createElement(Tooltip, { title: `${intl.formatMessage(messages.visibleToAll)}` },
451
+ React.createElement(Box, { className: classes.tag }, obj.addressing.length > 0 ? (React.createElement(Tags, { tags: obj.addressing, TagChipProps: { disposable: false, clickable: false } })) : obj.group ? (React.createElement(Tooltip, { title: `${intl.formatMessage(messages.visibleToGroup, { group: obj.group.name })}` },
452
+ React.createElement(Icon, { color: "disabled", fontSize: "small" }, "groups"))) : (React.createElement(Tooltip, { title: `${intl.formatMessage(messages.visibleToAll)}` },
441
453
  React.createElement(Icon, { color: "disabled", fontSize: "small" }, "public"))))), action: renderHeaderAction() }),
442
454
  React.createElement(CardContent, { classes: { root: classes.content } },
443
455
  React.createElement(Box, { className: classes.titleSection }, 'title' in obj && (React.createElement(React.Fragment, null, template === SCFeedObjectTemplateType.DETAIL ? (React.createElement(Typography, { variant: "body1", gutterBottom: true, className: classes.title }, obj.title)) : (React.createElement(Link, { to: scRoutingContext.url(getContributionRouteName(obj), getRouteData(obj)) },
@@ -466,8 +478,13 @@ export default function FeedObject(inProps) {
466
478
  }
467
479
  else if (template === SCFeedObjectTemplateType.SHARE) {
468
480
  objElement = (React.createElement(React.Fragment, null, obj ? (React.createElement(React.Fragment, null,
469
- obj.categories.length > 0 && (React.createElement("div", { className: classes.category }, obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
470
- React.createElement(Typography, { variant: "overline" }, c.name)))))),
481
+ obj.categories.length > 0 && (React.createElement("div", { className: classes.category },
482
+ React.createElement(React.Fragment, null, obj.group && (React.createElement("div", { className: classes.group },
483
+ React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true })))),
484
+ obj.categories.map((c) => (React.createElement(Link, { to: scRoutingContext.url(SCRoutes.CATEGORY_ROUTE_NAME, c), key: c.id },
485
+ React.createElement(Typography, { variant: "overline" }, c.name)))))),
486
+ obj.group && !obj.categories.length && (React.createElement("div", { className: classes.group },
487
+ React.createElement(Chip, { color: "secondary", size: "small", key: obj.group.id, icon: React.createElement(Icon, null, "groups"), label: obj.group.name, component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, obj.group), clickable: true }))),
471
488
  React.createElement(CardHeader, { classes: { root: classes.header }, avatar: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }),
472
489
  React.createElement(UserAvatar, { hide: !obj.author.community_badge },
473
490
  React.createElement(Avatar, { "aria-label": "recipe", src: obj.author.avatar, className: classes.avatar }, obj.author.username))), title: React.createElement(Link, Object.assign({}, (!obj.author.deleted && { to: scRoutingContext.url(SCRoutes.USER_PROFILE_ROUTE_NAME, obj.author) }), { onClick: obj.author.deleted ? () => setOpenAlert(true) : null, className: classes.username }), obj.author.username), subheader: React.createElement(Link, { to: scRoutingContext.url(getContributionRouteName(obj), getRouteData(obj)), className: classes.activityAt },
@@ -55,7 +55,7 @@ export default function FeedUpdatesWidget(inProps) {
55
55
  const [updates, setUpdates] = useState(false);
56
56
  // REFS
57
57
  const updatesSubscription = useRef(null);
58
- // Subscripber for pubsub callback
58
+ // Subscriber for pubsub callback
59
59
  const subscriber = (msg, data) => {
60
60
  if (subscriptionChannelUpdatesCallback(msg, data)) {
61
61
  setUpdates(true);
@@ -61,6 +61,9 @@ export interface GroupProps extends WidgetProps {
61
61
  |---|---|---|
62
62
  |root|.SCGroup-root|Styles applied to the root element.|
63
63
  |avatar|.SCGroup-avatar|Styles applied to the avatar element.|
64
+ |actions|.SCGroup-actions|Styles applied to the actions section.|
65
+ |icon|.SCGroup-icon|Styles applied to the group privacy icon element.|
66
+
64
67
 
65
68
  *
66
69
  * @param inProps
@@ -1,8 +1,9 @@
1
1
  import { __rest } from "tslib";
2
- import React, { useState } from 'react';
2
+ import React, { useMemo, useState } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import { Avatar, Icon, Stack } from '@mui/material';
5
- import { Link, SCRoutes, useSCFetchGroup, useSCRouting } from '@selfcommunity/react-core';
5
+ import { SCGroupPrivacyType } from '@selfcommunity/types';
6
+ import { Link, SCRoutes, useSCFetchGroup, useSCRouting, useSCUser } from '@selfcommunity/react-core';
6
7
  import { defineMessages, useIntl } from 'react-intl';
7
8
  import classNames from 'classnames';
8
9
  import { useThemeProps } from '@mui/system';
@@ -20,7 +21,8 @@ const messages = defineMessages({
20
21
  const classes = {
21
22
  root: `${PREFIX}-root`,
22
23
  avatar: `${PREFIX}-avatar`,
23
- actions: `${PREFIX}-actions`
24
+ actions: `${PREFIX}-actions`,
25
+ icon: `${PREFIX}-icon`
24
26
  };
25
27
  const Root = styled(BaseItemButton, {
26
28
  name: PREFIX,
@@ -51,21 +53,28 @@ const Root = styled(BaseItemButton, {
51
53
  |---|---|---|
52
54
  |root|.SCGroup-root|Styles applied to the root element.|
53
55
  |avatar|.SCGroup-avatar|Styles applied to the avatar element.|
56
+ |actions|.SCGroup-actions|Styles applied to the actions section.|
57
+ |icon|.SCGroup-icon|Styles applied to the group privacy icon element.|
58
+
54
59
 
55
60
  *
56
61
  * @param inProps
57
62
  */
58
63
  export default function Group(inProps) {
64
+ var _a;
59
65
  // PROPS
60
66
  const props = useThemeProps({
61
67
  props: inProps,
62
68
  name: PREFIX
63
69
  });
64
- const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {}, buttonProps = {}, visible = true } = props, rest = __rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps", "buttonProps", "visible"]);
70
+ const { groupId = null, group = null, className = null, elevation, hideActions = false, groupSubscribeButtonProps = {} } = props, rest = __rest(props, ["groupId", "group", "className", "elevation", "hideActions", "groupSubscribeButtonProps"]);
65
71
  // STATE
66
72
  const { scGroup } = useSCFetchGroup({ id: groupId, group });
67
73
  // CONTEXT
68
74
  const scRoutingContext = useSCRouting();
75
+ const scUserContext = useSCUser();
76
+ // CONST
77
+ const isGroupAdmin = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
69
78
  const [openAlert, setOpenAlert] = useState(false);
70
79
  // INTL
71
80
  const intl = useIntl();
@@ -75,7 +84,7 @@ export default function Group(inProps) {
75
84
  */
76
85
  function renderAuthenticatedActions() {
77
86
  return (React.createElement(Stack, { className: classes.actions, direction: "row", alignItems: "center", justifyContent: "center", spacing: 2 },
78
- React.createElement(Icon, null, !visible ? 'private' : 'public'),
87
+ isGroupAdmin && React.createElement(Icon, null, "face"),
79
88
  React.createElement(GroupSubscribeButton, Object.assign({ group: group, groupId: groupId }, groupSubscribeButtonProps))));
80
89
  }
81
90
  /**
@@ -88,6 +97,9 @@ export default function Group(inProps) {
88
97
  * Renders root object
89
98
  */
90
99
  return (React.createElement(React.Fragment, null,
91
- React.createElement(Root, Object.assign({ elevation: elevation }, rest, { className: classNames(classes.root, className), ButtonBaseProps: buttonProps !== null && buttonProps !== void 0 ? buttonProps : { component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, scGroup) }, image: React.createElement(Avatar, { alt: scGroup.name, src: scGroup.image_medium, className: classes.avatar }), primary: scGroup.name, secondary: `${intl.formatMessage(messages.groupMembers, { total: scGroup.subscribers_counter })}`, actions: hideActions ? null : renderAuthenticatedActions() })),
100
+ React.createElement(Root, Object.assign({ elevation: elevation }, rest, { className: classNames(classes.root, className), ButtonBaseProps: { component: Link, to: scRoutingContext.url(SCRoutes.GROUP_ROUTE_NAME, scGroup) }, image: React.createElement(Avatar, { alt: scGroup.name, src: scGroup.image_medium, className: classes.avatar }), primary: React.createElement(React.Fragment, null,
101
+ scGroup.name,
102
+ " ",
103
+ React.createElement(Icon, { className: classes.icon }, (group === null || group === void 0 ? void 0 : group.privacy) === SCGroupPrivacyType.PRIVATE ? 'private' : 'public')), secondary: `${intl.formatMessage(messages.groupMembers, { total: scGroup.subscribers_counter })}`, actions: hideActions ? null : renderAuthenticatedActions() })),
92
104
  openAlert && React.createElement(UserDeletedSnackBar, { open: openAlert, handleClose: () => setOpenAlert(false) })));
93
105
  }
@@ -78,7 +78,7 @@ const GroupAutocomplete = (inProps) => {
78
78
  setValue(value);
79
79
  };
80
80
  // Render
81
- return (React.createElement(Root, Object.assign({ freeSolo: true, className: classes.root, open: open, onOpen: handleOpen, onClose: handleClose, options: groups || [], getOptionLabel: (option) => option.name || '', value: value, selectOnFocus: true, clearOnBlur: true, blurOnSelect: true, handleHomeEndKeys: true, clearIcon: null, disabled: disabled || isLoading, noOptionsText: React.createElement(FormattedMessage, { id: "ui.groupAutocomplete.empty", defaultMessage: "ui.groupAutocomplete.empty" }), onChange: handleChange, isOptionEqualToValue: (option, value) => value.id === option.id,
81
+ return (React.createElement(Root, Object.assign({ className: classes.root, open: open, onOpen: handleOpen, onClose: handleClose, options: groups || [], getOptionLabel: (option) => option.name || '', value: value, selectOnFocus: true, clearOnBlur: true, blurOnSelect: true, handleHomeEndKeys: true, clearIcon: null, disabled: disabled || isLoading, noOptionsText: React.createElement(FormattedMessage, { id: "ui.groupAutocomplete.empty", defaultMessage: "ui.groupAutocomplete.empty" }), onChange: handleChange, isOptionEqualToValue: (option, value) => value.id === option.id,
82
82
  // renderTags={(value, getTagProps) => {
83
83
  // return value.map((option: any, index) => (
84
84
  // <Chip key={option.id} id={option.id} label={option.name} color={option.color} {...getTagProps({index})} />
@@ -13,10 +13,12 @@ import ChangeGroupPicture from '../ChangeGroupPicture';
13
13
  import ChangeGroupCover from '../ChangeGroupCover';
14
14
  import { GROUP_DESCRIPTION_MAX_LENGTH, GROUP_TITLE_MAX_LENGTH } from '../../constants/Group';
15
15
  import GroupInviteButton from '../GroupInviteButton';
16
+ import PubSub from 'pubsub-js';
16
17
  import { SCGroupPrivacyType } from '@selfcommunity/types';
17
18
  import { SCOPE_SC_UI } from '../../constants/Errors';
18
19
  import { formatHttpErrorCode, GroupService } from '@selfcommunity/api-services';
19
20
  import { Logger } from '@selfcommunity/utils';
21
+ import { SCEventType, SCTopicType } from '../../constants/PubSub';
20
22
  const messages = defineMessages({
21
23
  name: {
22
24
  id: 'ui.groupForm.name.placeholder',
@@ -140,6 +142,22 @@ export default function GroupForm(inProps) {
140
142
  setError(error);
141
143
  }
142
144
  }
145
+ /**
146
+ * Notify when a group info changed
147
+ * @param data
148
+ */
149
+ function notifyChanges(data) {
150
+ if (data) {
151
+ if (group) {
152
+ // Edit group
153
+ PubSub.publish(`${SCTopicType.GROUP}.${SCEventType.EDIT}`, data);
154
+ }
155
+ else {
156
+ // Create group
157
+ PubSub.publish(`${SCTopicType.GROUP}.${SCEventType.CREATE}`, data);
158
+ }
159
+ }
160
+ }
143
161
  const handleSubmit = () => {
144
162
  setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: true })));
145
163
  const formData = new FormData();
@@ -153,8 +171,10 @@ export default function GroupForm(inProps) {
153
171
  if (field.emotionalImageOriginalFile) {
154
172
  formData.append('emotional_image_original', field.emotionalImageOriginalFile);
155
173
  }
156
- for (const key in field.invitedUsers) {
157
- formData.append(key, field.invitedUsers[key]);
174
+ if (!group) {
175
+ for (const key in field.invitedUsers) {
176
+ formData.append(key, field.invitedUsers[key]);
177
+ }
158
178
  }
159
179
  let groupService;
160
180
  if (group) {
@@ -166,6 +186,7 @@ export default function GroupForm(inProps) {
166
186
  groupService
167
187
  .then((data) => {
168
188
  onSuccess && onSuccess(data);
189
+ notifyChanges(data);
169
190
  onClose && onClose();
170
191
  setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
171
192
  })
@@ -213,24 +234,25 @@ export default function GroupForm(inProps) {
213
234
  React.createElement(Typography, { className: classNames(classes.switchLabel, { [classes.active]: !field.isPublic }) },
214
235
  React.createElement(Icon, null, "private"),
215
236
  React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private", defaultMessage: "ui.groupForm.privacy.private" })),
216
- React.createElement(Switch, { className: classes.switch, checked: field.isPublic, onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['isPublic']: !field.isPublic }))) }),
237
+ React.createElement(Switch, { className: classes.switch, checked: field.isPublic, onChange: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['isPublic']: !field.isPublic }))), disabled: group && group.privacy === SCGroupPrivacyType.PRIVATE }),
217
238
  React.createElement(Typography, { className: classNames(classes.switchLabel, { [classes.active]: field.isPublic }) },
218
239
  React.createElement(Icon, null, "public"),
219
240
  React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public", defaultMessage: "ui.groupForm.privacy.public" }))),
220
- React.createElement(Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))),
221
- React.createElement(Box, { className: classes.visibilitySection }, !field.isPublic && (React.createElement(React.Fragment, null,
241
+ React.createElement(Typography, { variant: "body2", className: classes.privacySectionInfo }, field.isPublic ? (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.public.info", defaultMessage: "ui.groupForm.privacy.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(React.Fragment, null, group && group.privacy === SCGroupPrivacyType.PRIVATE ? (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info.edit", defaultMessage: "ui.groupForm.private.public.info.edit", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.privacy.private.info", defaultMessage: "ui.groupForm.private.public.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })))))),
242
+ React.createElement(Box, { className: classes.visibilitySection }, ((!field.isPublic && !group) || (group && !field.isPublic)) && (React.createElement(React.Fragment, null,
222
243
  React.createElement(Typography, { variant: "h4" },
223
244
  React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.title", defaultMessage: "ui.groupForm.visibility.title", values: { b: (chunks) => React.createElement("strong", null, chunks) } })),
224
245
  React.createElement(Stack, { direction: "row", spacing: 1, alignItems: "center" },
225
246
  React.createElement(Typography, { className: classNames(classes.switchLabel, { [classes.active]: !field.isVisible }) },
226
247
  React.createElement(Icon, null, "visibility_off"),
227
248
  React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.hidden", defaultMessage: "ui.groupForm.visibility.hidden" })),
228
- React.createElement(Switch, { className: classes.switch, checked: field.isVisible, onClick: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['isVisible']: !field.isVisible }))) }),
249
+ React.createElement(Switch, { className: classes.switch, checked: field.isVisible, onChange: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['isVisible']: !field.isVisible }))) }),
229
250
  React.createElement(Typography, { className: classNames(classes.switchLabel, { [classes.active]: field.isVisible }) },
230
251
  React.createElement(Icon, null, "visibility"),
231
252
  React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.visible", defaultMessage: "ui.groupForm.visibility.visible" }))),
232
253
  React.createElement(Typography, { variant: "body2", className: classes.visibilitySectionInfo }, !field.isVisible ? (React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.hidden.info", defaultMessage: "ui.groupForm.visibility.hidden.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } })) : (React.createElement(FormattedMessage, { id: "ui.groupForm.visibility.visible.info", defaultMessage: "ui.groupForm.visibility.visible.info", values: { b: (chunks) => React.createElement("strong", null, chunks) } }))))))),
233
- React.createElement(Divider, null),
234
- React.createElement(Box, { className: classes.inviteSection },
235
- React.createElement(GroupInviteButton, { handleInvitations: handleInviteSection })))));
254
+ !group && (React.createElement(React.Fragment, null,
255
+ React.createElement(Divider, null),
256
+ React.createElement(Box, { className: classes.inviteSection },
257
+ React.createElement(GroupInviteButton, { handleInvitations: handleInviteSection })))))));
236
258
  }
@@ -1,8 +1,8 @@
1
- import React from 'react';
2
1
  import { SCGroupType } from '@selfcommunity/types';
3
2
  import { ChangeGroupCoverProps } from '../ChangeGroupCover';
4
3
  import { ChangeGroupPictureProps } from '../ChangeGroupPicture';
5
4
  import { GroupMembersButtonProps } from '../GroupMembersButton';
5
+ import { GroupSubscribeButtonProps } from '../GroupSubscribeButton';
6
6
  export interface GroupHeaderProps {
7
7
  /**
8
8
  * Id of group object
@@ -35,14 +35,15 @@ export interface GroupHeaderProps {
35
35
  */
36
36
  ChangeCoverProps?: ChangeGroupCoverProps;
37
37
  /**
38
- * Props to spread to the group memebers button
38
+ * Props to spread group button followed
39
39
  * @default {}
40
40
  */
41
- GroupMembersButtonProps?: GroupMembersButtonProps;
41
+ GroupSubscribeButtonProps?: GroupSubscribeButtonProps;
42
42
  /**
43
- *
43
+ * Props to spread to the group memebers button
44
+ * @default {}
44
45
  */
45
- actions?: React.ReactNode;
46
+ GroupMembersButtonProps?: GroupMembersButtonProps;
46
47
  /**
47
48
  * Any other properties
48
49
  */
@@ -1,8 +1,8 @@
1
1
  import { __rest } from "tslib";
2
- import React, { useMemo } from 'react';
2
+ import React, { useCallback, useEffect, useMemo, useRef } from 'react';
3
3
  import { styled } from '@mui/material/styles';
4
4
  import { Avatar, Box, Icon, Paper, Typography } from '@mui/material';
5
- import { SCGroupPrivacyType } from '@selfcommunity/types';
5
+ import { SCGroupPrivacyType, SCGroupSubscriptionStatusType } from '@selfcommunity/types';
6
6
  import { SCPreferences, useSCFetchGroup, useSCPreferences, useSCUser } from '@selfcommunity/react-core';
7
7
  import GroupHeaderSkeleton from './Skeleton';
8
8
  import classNames from 'classnames';
@@ -14,6 +14,10 @@ import Bullet from '../../shared/Bullet';
14
14
  import ChangeGroupPicture from '../ChangeGroupPicture';
15
15
  import GroupMembersButton from '../GroupMembersButton';
16
16
  import EditGroupButton from '../EditGroupButton';
17
+ import GroupSubscribeButton from '../GroupSubscribeButton';
18
+ import GroupInviteButton from '../GroupInviteButton';
19
+ import { SCEventType, SCTopicType } from '../../constants/PubSub';
20
+ import PubSub from 'pubsub-js';
17
21
  const classes = {
18
22
  root: `${PREFIX}-root`,
19
23
  cover: `${PREFIX}-cover`,
@@ -70,22 +74,24 @@ export default function GroupHeader(inProps) {
70
74
  props: inProps,
71
75
  name: PREFIX
72
76
  });
73
- const { id = null, className = null, group, groupId = null, ChangePictureProps = {}, ChangeCoverProps = {}, GroupMembersButtonProps = {}, actions } = props, rest = __rest(props, ["id", "className", "group", "groupId", "ChangePictureProps", "ChangeCoverProps", "GroupMembersButtonProps", "actions"]);
77
+ const { id = null, className = null, group, groupId = null, ChangePictureProps = {}, ChangeCoverProps = {}, GroupSubscribeButtonProps = {}, GroupMembersButtonProps = {} } = props, rest = __rest(props, ["id", "className", "group", "groupId", "ChangePictureProps", "ChangeCoverProps", "GroupSubscribeButtonProps", "GroupMembersButtonProps"]);
74
78
  // PREFERENCES
75
79
  const scPreferences = useSCPreferences();
76
80
  // CONTEXT
77
81
  const scUserContext = useSCUser();
78
82
  // HOOKS
79
83
  const { scGroup, setSCGroup } = useSCFetchGroup({ id: groupId, group });
84
+ // REFS
85
+ const updatesSubscription = useRef(null);
80
86
  // CONST
81
- const canEdit = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
87
+ const isGroupAdmin = useMemo(() => { var _a; return scUserContext.user && ((_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id) === scUserContext.user.id; }, [scUserContext.user, (_a = scGroup === null || scGroup === void 0 ? void 0 : scGroup.managed_by) === null || _a === void 0 ? void 0 : _a.id]);
82
88
  /**
83
89
  * Handles Change Avatar
84
90
  * @param avatar
85
91
  */
86
92
  function handleChangeAvatar(avatar) {
87
- if (canEdit) {
88
- setSCGroup(Object.assign({}, scGroup, { image_bigger: avatar }));
93
+ if (isGroupAdmin) {
94
+ setSCGroup(Object.assign({}, scGroup, { image_big: avatar }));
89
95
  }
90
96
  }
91
97
  /**
@@ -93,10 +99,44 @@ export default function GroupHeader(inProps) {
93
99
  * @param cover
94
100
  */
95
101
  function handleChangeCover(cover) {
96
- if (canEdit) {
102
+ if (isGroupAdmin) {
97
103
  setSCGroup(Object.assign({}, scGroup, { emotional_image: cover }));
98
104
  }
99
105
  }
106
+ /**
107
+ * Handles callback subscribe/unsubscribe group
108
+ */
109
+ const handleSubscribe = (group, status) => {
110
+ setSCGroup(Object.assign(Object.assign({}, group), { subscribers_counter: group.subscribers_counter + (status ? 1 : -1) }));
111
+ };
112
+ /**
113
+ * Subscriber for pubsub callback
114
+ */
115
+ const onChangeGroupMembersHandler = useCallback((msg, data) => {
116
+ var _a;
117
+ if (data && ((_a = data === null || data === void 0 ? void 0 : data.group) === null || _a === void 0 ? void 0 : _a.id) === (scGroup === null || scGroup === void 0 ? void 0 : scGroup.id)) {
118
+ let _group = Object.assign({}, scGroup);
119
+ if (msg === `${SCTopicType.GROUP}.${SCEventType.ADD_MEMBER}`) {
120
+ _group.subscribers_counter = _group.subscribers_counter + 1;
121
+ }
122
+ else if (msg === `${SCTopicType.GROUP}.${SCEventType.REMOVE_MEMBER}`) {
123
+ _group.subscribers_counter = Math.max(_group.subscribers_counter - 1, 0);
124
+ }
125
+ console.log(_group);
126
+ setSCGroup(_group);
127
+ }
128
+ }, [scGroup, setSCGroup]);
129
+ /**
130
+ * On mount, subscribe to receive groups updates (only edit)
131
+ */
132
+ useEffect(() => {
133
+ if (scGroup) {
134
+ updatesSubscription.current = PubSub.subscribe(`${SCTopicType.GROUP}.${SCEventType.MEMBERS}`, onChangeGroupMembersHandler);
135
+ }
136
+ return () => {
137
+ updatesSubscription.current && PubSub.unsubscribe(updatesSubscription.current);
138
+ };
139
+ }, [scGroup]);
100
140
  // RENDER
101
141
  if (!scGroup) {
102
142
  return React.createElement(GroupHeaderSkeleton, null);
@@ -108,13 +148,13 @@ export default function GroupHeader(inProps) {
108
148
  React.createElement(Paper, { style: _backgroundCover, classes: { root: classes.cover } },
109
149
  React.createElement(Box, { className: classes.avatar },
110
150
  React.createElement(Avatar, null,
111
- React.createElement("img", { alt: "group", src: scGroup.image_bigger ? scGroup.image_bigger : '' }))),
112
- canEdit && (React.createElement(React.Fragment, null,
151
+ React.createElement("img", { alt: "group", src: scGroup.image_big ? scGroup.image_big : '' }))),
152
+ isGroupAdmin && (React.createElement(React.Fragment, null,
113
153
  React.createElement(ChangeGroupPicture, Object.assign({ groupId: scGroup.id, onChange: handleChangeAvatar, className: classes.changePicture }, ChangePictureProps)),
114
154
  React.createElement("div", { className: classes.changeCover },
115
155
  React.createElement(ChangeGroupCover, Object.assign({ groupId: scGroup.id, onChange: handleChangeCover }, ChangeCoverProps)))))),
116
156
  React.createElement(Box, { className: classes.info },
117
- canEdit && React.createElement(EditGroupButton, { group: scGroup, groupId: scGroup.id, onEditSuccess: (data) => setSCGroup(data) }),
157
+ isGroupAdmin && React.createElement(EditGroupButton, { group: scGroup, groupId: scGroup.id, onEditSuccess: (data) => setSCGroup(data) }),
118
158
  React.createElement(Typography, { variant: "h5", className: classes.name }, scGroup.name),
119
159
  React.createElement(Box, { className: classes.visibility },
120
160
  scGroup.privacy === SCGroupPrivacyType.PUBLIC ? (React.createElement(Typography, { className: classes.visibilityItem },
@@ -128,9 +168,11 @@ export default function GroupHeader(inProps) {
128
168
  React.createElement(FormattedMessage, { id: "ui.groupHeader.visibility.visible", defaultMessage: "ui.groupHeader.visibility.visible" }))) : (React.createElement(Typography, { className: classes.visibilityItem },
129
169
  React.createElement(Icon, null, "visibility_off"),
130
170
  React.createElement(FormattedMessage, { id: "ui.groupHeader.visibility.hidden", defaultMessage: "ui.groupHeader.visibility.hidden" })))),
131
- React.createElement(Box, { className: classes.members },
171
+ React.createElement(React.Fragment, null, ((scGroup && scGroup.privacy === SCGroupPrivacyType.PUBLIC) ||
172
+ scGroup.subscription_status === SCGroupSubscriptionStatusType.SUBSCRIBED ||
173
+ isGroupAdmin) && (React.createElement(Box, { className: classes.members },
132
174
  React.createElement(Typography, { className: classes.membersCounter, component: "div" },
133
175
  React.createElement(FormattedMessage, { id: "ui.groupHeader.members", defaultMessage: "ui.groupHeader.members", values: { total: scGroup.subscribers_counter } })),
134
- React.createElement(GroupMembersButton, Object.assign({ groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup }, GroupMembersButtonProps))),
135
- actions && actions)));
176
+ React.createElement(GroupMembersButton, Object.assign({ key: scGroup.subscribers_counter, groupId: scGroup === null || scGroup === void 0 ? void 0 : scGroup.id, group: scGroup, autoHide: !isGroupAdmin }, GroupMembersButtonProps))))),
177
+ isGroupAdmin ? (React.createElement(GroupInviteButton, { group: scGroup, groupId: scGroup.id })) : (React.createElement(GroupSubscribeButton, Object.assign({ group: scGroup, onSubscribe: handleSubscribe }, GroupSubscribeButtonProps))))));
136
178
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * > API documentation for the Community-JS Group Headerr Skeleton component. Learn about the available props and the CSS API.
2
+ * > API documentation for the Community-JS Group Header Skeleton component. Learn about the available props and the CSS API.
3
3
 
4
4
  #### Import
5
5
 
@@ -18,9 +18,7 @@
18
18
  |root|.SCGroupHeader-skeleton-root|Styles applied to the root element.|
19
19
  |avatar|.SCGroupHeader-avatar|Styles applied to the avatar element.|
20
20
  |cover|.SCGroupHeader-cover|Styles applied to the cover element.|
21
- |actions|.SCGroupHeader-actions|Styles applied to the actions section.|
22
- |section|.SCGroupHeader-section|Styles applied to the info section.|
23
- |username|.SCGroupHeader-username|Styles applied to the username element.|
21
+ |info|.SCGroupHeader-info|Styles applied to the info info.|
24
22
  *
25
23
  */
26
24
  declare function GroupHeaderSkeleton(): JSX.Element;