Methods
# setAfterDetailsComponent(AfterDetailsComponent)
You can customize the Social Group options such as replacing group avatars, adding components before/after the group details, modifying the default group action buttons and much more.
Parameters:
Name | Type | Description |
---|---|---|
AfterDetailsComponent |
React.ComponentType.<AfterGroupDetailsComponentProps> |
Example
externalCodeSetup.socialGroupSingleApi.setAfterDetailsComponent(props => {
return (
<Button
title="Open this group in a web browser"
onPress={() => props.group.navigateToWeb()}
/>
);
});
# setAfterProfileHeader(AfterProfileHeader)
It adds a component after the group header but places it before the group items list.
Parameters:
Name | Type | Description |
---|---|---|
AfterProfileHeader |
React.ComponentType.<AfterGroupProfileHeaderProps> |
Example
externalCodeSetup.socialGroupSingleApi.setAfterProfileHeader(({group}) => {
const toggleSubscription = () => {
if (typeof group.subscribeClick === "function") {
group.subscribeClick();
}
};
return group.hasForum ? (
<View style={{margin: 10}}>
<Button
onPress={toggleSubscription}
title="Subscribe/Unsubscribe to group forum"
/>
</View>
) : null;
});
# setBeforeDetailsComponent(BeforeDetailsComponent)
You can use it to add a component before the group details such as the title and group description.
Parameters:
Name | Type | Description |
---|---|---|
BeforeDetailsComponent |
React.ComponentType.<BeforeGroupDetailsComponentProps> |
Example
externalCodeSetup.socialGroupSingleApi.setBeforeDetailsComponent(
props =>
!props.group.isMember ? (
<Text>
You are not a member of this group. To see all available items, please
join the group.
</Text>
) : null
);
# setCustomHeaderBackground(customHeaderBackground)
Replaces a group's cover image
Parameters:
Name | Type | Description |
---|---|---|
customHeaderBackground |
String |
Example
externalCodeSetup.socialGroupSingleApi.setCustomHeaderBackground('https://link-to-image.png')
# setFilteredGroupActionButtons(filteredGroupActionButtons)
Append or prepend action buttons.
You can use this to modify the group's default action buttons.
doFunction
can be used to dispatch a redux action.
Parameters:
Name | Type | Description |
---|---|---|
filteredGroupActionButtons |
Array.<GroupActionButton> |
Example
externalCodeSetup.socialGroupSingleApi.setFilteredGroupActionButtons(
action => {
const requestDeliveryRedux = {
icon: {fontIconName: 'activity', weight: 200},
label: "Request for food delivery",
doFunction: () => ({type: "FOOD_DELIVERY_REQUEST"}) //Call custom redux action FOOD_DELIVERY_REQUEST
};
return [...action, requestDeliveryRedux];
}
);
# setGroupDetailsComponent(GroupDetailsComponent)
Replaces the group details component and lets you compose your own component to display the group details.
Parameters:
Name | Type | Description |
---|---|---|
GroupDetailsComponent |
React.ComponentType.<GroupDetailsComponentProps> |
Example
//In custom_code/GroupDetailsComponent.js...
import React from "react";
import {View, Text, Animated} from "react-native";
import HTML from "react-native-render-html";
import htmlclean from "htmlclean";
import {groupMembersCountTranslation, groupStatusTranslation} from "@src/utils"; //BuddyBoss translation helper functions
import GroupActionSheetWrapper from "@src/components/Group/GroupActionSheetWrapper";
const GroupDetailsComponent = ({
global,
colors,
group,
truncated,
textStyle,
t,
filteredActions,
onLinkPress,
styles
}) => (
<>
<Text
numberOfLines={1}
style={[global.textHeaderTitle, styles.textHeaderTitle, textStyle]}
>
{group.title}
</Text>
<Animated.View style={[global.screenMetas, styles.groupStatusContainer]}>
<Text style={[global.textHeaderMeta, styles.groupStatusText, textStyle]}>
{groupStatusTranslation(t, group)} •{" "}
{groupMembersCountTranslation(t, group)}
</Text>
</Animated.View>
{!!group.shortContent && (
<Animated.View style={{maxWidth: 300}}>
<GroupActionSheetWrapper
actionButtons={filteredActions}
{...{
global,
colors,
t,
group,
onLinkPress
}}
>
<View>
<HTML
html={htmlclean(truncated.html)}
tagsStyles={{
p: {marginTop: 0},
a: global.textHeaderShortContent
}}
baseFontStyle={{
...global.textHeaderShortContent,
...textStyle
}}
onLinkPress={(event, url) => {
if (onLinkPress) {
onLinkPress(event, url);
}
}}
/>
</View>
</GroupActionSheetWrapper>
</Animated.View>
)}
</>
);
export default GroupDetailsComponent;
//In custom_code/index.js...
...
import GroupDetailsComponent from "./GroupDetailsComponent";
export const applyCustomCode = externalCodeSetup => {
externalCodeSetup.socialGroupSingleApi.setGroupDetailsComponent(props => <GroupDetailsComponent {...props} />);
}
# setGroupHeaderAvatar(GroupHeaderAvatar)
You can use it to replace the group header avatar. For example, you change the default group avatar if the group does not have an avatar.
Parameters:
Name | Type | Description |
---|---|---|
GroupHeaderAvatar |
React.ComponentType.<GroupHeaderAvatarProps> |
Example
...
import Animated from "react-native-reanimated";
import AppImage from "@src/components/AppImage";
import {DEVICE_WIDTH} from "@src/styles/global";
export const applyCustomCode = externalCodeSetup => {
externalCodeSetup.socialGroupSingleApi.setGroupHeaderAvatar(props => {
const {global, group} = props;
const avatarSize = Math.min(DEVICE_WIDTH * 0.3, 110);
let customUri = group.avatar;
if (group.avatar.includes("mystery-group")) {
customUri = "https://link-to-image.png";
}
return (
<Animated.View
style={[
{
marginBottom: 18,
marginTop: "auto"
},
!!group.coverImage && {
borderRadius: 18,
backgroundColor: "#fff",
borderWidth: 3,
borderColor: "#fff",
...global.shadowBelow
}
]}
>
<AppImage
source={{uri: customUri}}
style={[{width: avatarSize, height: avatarSize, borderRadius: 18}]}
resizeMode={"contain"}
/>
</Animated.View>
);
});
}
# setGroupHeaderButtons(GroupHeaderButtons)
You can add new components near the default group button section.
Parameters:
Name | Type | Description |
---|---|---|
GroupHeaderButtons |
React.ComponentType.<GroupHeaderButtonsProps> |
Examples
externalCodeSetup.socialGroupSingleApi.setGroupHeaderButtons(props => {
const {OldButtonComponent, group} = props;
const goToForum = () => {
if (typeof group.navigateToForum === 'function'){
group.navigateToForum()
}
}
const NavigateToForum = () => (
<TouchableOpacity onPress={() => goToForum()}>
<Text> Go to forum </Text>
</TouchableOpacity>
);
const OpenInWeb = () => (
<TouchableOpacity onPress={() => group.navigateToWeb()}>
<Text> Open in browser </Text>
</TouchableOpacity>
);
return (
<View style={{flexDirection: "column"}}>
<NavigateToForum />
<OpenInWeb />
<OldButtonComponent />
</View>
);
});
//In custom_code/GroupHeaderButton.js...
import React from "react";
import GroupActionSheetWrapper from "@src/components/Group/GroupActionSheetWrapper";
import AvatarActionButton from "@src/components/ActionButtons/AvatarActionButton";
import AuthWrapper from "@src/components/AuthWrapper";
import ActionButtonList from "@src/components/ActionButtons/ActionButtonList";
const GroupHeaderButton = ({group, currentUser, global, colors, t, onLinkPress, filteredActions, buttonTextColor, buttonStyle}) => {
return group.isMember ? (
<GroupActionSheetWrapper
actionButtons={filteredActions}
{...{
global,
colors,
t,
group,
onLinkPress
}}
>
<AvatarActionButton
user={currentUser}
style={{
...buttonStyle,
paddingLeft: 3,
paddingRight: 13
}}
{...{
global,
colors,
t,
title: group.role,
titleStyle: {
...global.textHeaderActionButton,
color: colors.primaryColor
},
color: buttonTextColor
}}
/>
</GroupActionSheetWrapper>
) : (
<AuthWrapper>
<ActionButtonList
hideIcons={true}
actionButtons={filteredActions}
object={group}
color={buttonTextColor}
t={t}
buttonStyle={{
...buttonStyle,
marginHorizontal: 5,
paddingVertical: 0
}}
textStyle={global.textHeaderActionButton}
/>
</AuthWrapper>
);
}
export default GroupHeaderButton;
//In custom_code/index.js...
import GroupHeaderButton from "./components/GroupHeaderButton";
export const applyCustomCode = externalCodeSetup => {
externalCodeSetup.socialGroupSingleApi.setGroupHeaderButtons(GroupHeaderButton)
}
# setHeaderRightComponent(HeaderRightComponent)
You can use this hook to customize the button of the HeaderRightComponent.
Parameters:
Name | Type | Description |
---|---|---|
HeaderRightComponent |
React.ComponentType.<HeaderRightComponentProps> |
Example
...
import AuthWrapper from "@src/components/AuthWrapper";
import {BottomSheetWrapper} from "../src/containers/SocialGroupsSingleScreen";
import IconButton from "@src/components/IconButton";
export const applyCustomCode = (externalCodeSetup: ExternalCodeSetup) => {
externalCodeSetup.socialGroupSingleApi.setHeaderRightComponent(
({
styles,
t,
group,
colors,
global,
actionButtons,
onLinkPress,
icon,
headerColor,
rest
}) => (
<AuthWrapper>
<View style={styles.container}>
<BottomSheetWrapper
t={t}
group={group}
colors={colors}
global={global}
actionButtons={actionButtons}
onLinkPress={onLinkPress}
>
<IconButton
icon={icon}
webIcon={"IconAdd"}
tintColor={headerColor}
style={styles.icon}
{...rest}
/>
</BottomSheetWrapper>
</View>
</AuthWrapper>
)
);
}
# setManageGroupTabFilter(manageGroupTabFilter)
You can use this hook to modify the tabs in the Group Manage screen.
Parameters:
Name | Type | Description |
---|---|---|
manageGroupTabFilter |
Array.<GroupManageTab> |
Example
externalCodeSetup.socialGroupSingleApi.setManageGroupTabFilter(props => {
const customTab = {
icon: {fontIconName: 'comment', weight: 200},
label: "About",
onPress: () => Alert.alert("Navigate to custom manage screen")
};
return [...props, customTab];
});
# setParentGroupBar(ParentGroupBar)
You can use this hook to customize the ParentGroupBar component which is rendered if a group has a parent.
Parameters:
Name | Type | Description |
---|---|---|
ParentGroupBar |
React.ComponentType.<ParentGroupBarProps> |
Example
...
import ParentGroupBar from "@src/components/Group/ParentGroupBar";
export const applyCustomCode = (externalCodeSetup) => {
externalCodeSetup.socialGroupSingleApi.setParentGroupBar(
({parentGroup, styles, group, global, colors, navigateToParent, t}) => {
return !!parentGroup ? (
<ParentGroupBar
containerStyle={styles.container}
parentGroup={parentGroup}
subGroup={group}
global={global}
colors={colors}
onPress={navigateToParent}
t={t}
/>
) : null;
}
);
}
# setSendInvitesTabFilter(sendInvitesTabFilter)
You can use this hook to modify the tabs in the Group Send Invites screen. By default, only "Send Invites" and "Pending Invites" are available.
Parameters:
Name | Type | Description |
---|---|---|
sendInvitesTabFilter |
Array.<GroupSendInvitesTab> |
Example
externalCodeSetup.socialGroupSingleApi.setSendInvitesTabFilter(props => {
const customTab = {
icon: {fontIconName: 'comment', weight: 200},
label: "About",
onPress: () => Alert.alert("Navigate to custom invite screen"),
};
return [...props, customTab];
});
# setTabArrowComponent(TabArrowComponent)
You can use this hook to customize the list item's arrow component.
Parameters:
Name | Type | Description |
---|---|---|
TabArrowComponent |
React.ComponentType.<GroupTabArrowComponentProps> |
Example
...
import Icon from "@src/components/Icon";
export const applyCustomCode = (externalCodeSetup) => {
externalCodeSetup.socialGroupSingleApi.setTabArrowComponent(
({tintColor, icon, styles}) => (
<Icon
webIcon={"IconArrowRight"}
tintColor={tintColor}
icon={icon}
styles={styles.arrow}
/>
)
);
}
# setTabBadge(TabBadge)
You can use this hook to customize the list item's badge.
Parameters:
Name | Type | Description |
---|---|---|
TabBadge |
React.ComponentType.<GroupTabBadgeProps> |
Example
...
import {BubbleIcon} from "@src/components/BubbleIcon";
export const applyCustomCode = (externalCodeSetup) => {
externalCodeSetup.socialGroupSingleApi.setTabBadge(
({item, global, text, styles}) => (
<BubbleIcon
key={"tab_badge_" + item.label}
global={global}
text={text}
containerStyle={styles.container}
textStyle={styles.text}
/>
)
);
}
# setTabFilter(tabFilter)
You can use it to modify the tab list on the Groups screen.
Parameters:
Name | Type | Description |
---|---|---|
tabFilter |
Array.<GroupListTab> |
Example
externalCodeSetup.socialGroupSingleApi.setTabFilter(props => {
const customTab = {
icon: {fontIconName: 'comment', weight: 200},
label: "About",
onPress: () => Alert.alert("This group was created by the admin"),
count: 0,
loading: false,
};
return [...props, customTab];
});
# setTabIcon(TabIcon)
You can use this hook to customize the list item's icon.
Parameters:
Name | Type | Description |
---|---|---|
TabIcon |
React.ComponentType.<GroupTabIconProps> |
Example
...
import Icon from "@src/components/Icon";
export const applyCustomCode = (externalCodeSetup: ExternalCodeSetup) => {
externalCodeSetup.socialGroupSingleApi.setTabIcon(
({link, global, colors}) => {
return link.icon ? (
<View style={global.profileItemIconWrap}>
<Icon
tintColor={colors.textColor}
icon={link.icon}
styles={global.profileItemIcon}
/>
</View>
) : null;
}
);
}
# setTabTitleComponent(TabTitleComponent)
You can use this hook to customize the list item's title component.
Parameters:
Name | Type | Description |
---|---|---|
TabTitleComponent |
React.ComponentType.<GroupTabTitleComponentProps> |
Example
externalCodeSetup.socialGroupSingleApi.setTabTitleComponent(
({index, styles, title}) => (
<Text key={"itemTitle_" + index} style={styles.title}>
{title}
</Text>
)
);