diff --git a/app/javascript/gabsocial/components/group_header.js b/app/javascript/gabsocial/components/group_header.js index fc6a2a4f..f2964c57 100644 --- a/app/javascript/gabsocial/components/group_header.js +++ b/app/javascript/gabsocial/components/group_header.js @@ -7,6 +7,10 @@ import { defineMessages, injectIntl } from 'react-intl' import { openPopover, closePopover } from '../actions/popover' import { openModal } from '../actions/modal' import { joinGroup, leaveGroup } from '../actions/groups' +import { + addShortcut, + removeShortcut, +} from '../actions/shortcuts' import { PLACEHOLDER_MISSING_HEADER_SRC, BREAKPOINT_EXTRA_SMALL, @@ -32,7 +36,24 @@ class GroupHeader extends ImmutablePureComponent { handleOnOpenGroupOptions = () => { const { relationships } = this.props const isAdmin = !!relationships ? relationships.get('admin') : false - this.props.onOpenGroupOptions(this.infoBtn, this.props.group, isAdmin) + const isModerator = !!relationships ? relationships.get('moderator') : false + this.props.onOpenGroupOptions(this.infoBtn, this.props.group, { + isAdmin, + isModerator, + }) + } + + handleToggleShortcut = () => { + const { group, isShortcut } = this.props + const groupId = !!group ? group.get('id') : null + + if (!groupId) return + + if (isShortcut) { + this.props.onRemoveShortcut(groupId) + } else { + this.props.onAddShortcut(groupId) + } } setInfoBtn = (c) => { @@ -45,6 +66,7 @@ class GroupHeader extends ImmutablePureComponent { group, intl, isXS, + isShortcut, relationships, } = this.props @@ -52,12 +74,13 @@ class GroupHeader extends ImmutablePureComponent { const coverSrcMissing = coverSrc.indexOf(PLACEHOLDER_MISSING_HEADER_SRC) > -1 || !coverSrc const title = !!group ? group.get('title') : undefined const slug = !!group ? !!group.get('slug') ? `g/${group.get('slug')}` : undefined : undefined + const isPrivate = !!group ? group.get('is_private') : false - let isAdmin = false + let isAdminOrMod = false let actionButtonTitle let actionButtonOptions = {} if (relationships) { - isAdmin = relationships.get('admin') + isAdminOrMod = relationships.get('admin') || relationships.get('moderator') const isMember = relationships.get('member') actionButtonTitle = intl.formatMessage(isMember ? messages.member : messages.join) @@ -79,13 +102,20 @@ class GroupHeader extends ImmutablePureComponent { // }, ] - if (isAdmin && group) { + if (isAdminOrMod && group) { tabs.push({ to: `/groups/${group.get('id')}/members`, title: 'Members', }) } + if (isAdminOrMod && group && isPrivate) { + tabs.push({ + to: `/groups/${group.get('id')}/requests`, + title: 'Requests', + }) + } + if (isXS && group) { tabs.push({ to: `/groups/${group.get('id')}/about`, @@ -193,14 +223,13 @@ class GroupHeader extends ImmutablePureComponent { color='brand' backgroundColor='none' className={[_s.mr10, _s.px10].join(' ')} - icon='star-outline' - onClick={this.handleOnOpenGroupOptions} - buttonRef={this.setInfoBtn} + icon={isShortcut ? 'star' : 'star-outline'} + onClick={this.handleToggleShortcut} />