Page MenuHomePhorge

D8445.1765066385.diff
No OneTemporary

Size
3 KB
Referenced Files
None
Subscribers
None

D8445.1765066385.diff

diff --git a/native/roles/create-roles-header-right-button.react.js b/native/roles/create-roles-header-right-button.react.js
--- a/native/roles/create-roles-header-right-button.react.js
+++ b/native/roles/create-roles-header-right-button.react.js
@@ -12,23 +12,36 @@
useServerCall,
useDispatchActionPromise,
} from 'lib/utils/action-utils.js';
+import { values } from 'lib/utils/objects.js';
import type { NavigationRoute } from '../navigation/route-names';
import { useStyles } from '../themes/colors.js';
type Props = {
+route: NavigationRoute<'CreateRolesScreen'>,
+ +setRoleCreationFailed: boolean => mixed,
};
function CreateRolesHeaderRightButton(props: Props): React.Node {
const { threadInfo, action, roleName, rolePermissions } = props.route.params;
+ const { setRoleCreationFailed } = props;
const navigation = useNavigation();
const styles = useStyles(unboundStyles);
const callModifyCommunityRole = useServerCall(modifyCommunityRole);
const dispatchActionPromise = useDispatchActionPromise();
+ const threadRoleNames = React.useMemo(
+ () => values(threadInfo.roles).map(role => role.name),
+ [threadInfo.roles],
+ );
+
const onPressCreate = React.useCallback(() => {
+ if (threadRoleNames.includes(roleName)) {
+ setRoleCreationFailed(true);
+ return;
+ }
+
dispatchActionPromise(
modifyCommunityRoleActionTypes,
callModifyCommunityRole({
@@ -48,6 +61,8 @@
roleName,
rolePermissions,
navigation,
+ setRoleCreationFailed,
+ threadRoleNames,
]);
const shouldHeaderRightBeDisabled = roleName.length === 0;
diff --git a/native/roles/create-roles-screen.react.js b/native/roles/create-roles-screen.react.js
--- a/native/roles/create-roles-screen.react.js
+++ b/native/roles/create-roles-screen.react.js
@@ -59,8 +59,19 @@
$ReadOnlyArray<UserSurfacedPermission>,
>(defaultRolePermissions);
+ const [roleCreationFailed, setRoleCreationFailed] =
+ React.useState<boolean>(false);
+
const styles = useStyles(unboundStyles);
+ const errorStyles = React.useMemo(
+ () =>
+ roleCreationFailed
+ ? [styles.errorContainer, styles.errorContainerVisible]
+ : styles.errorContainer,
+ [roleCreationFailed, styles.errorContainer, styles.errorContainerVisible],
+ );
+
const onClearPermissions = React.useCallback(() => {
setSelectedPermissions([]);
}, []);
@@ -152,6 +163,7 @@
);
const onChangeRoleNameInput = React.useCallback((roleName: string) => {
+ setRoleCreationFailed(false);
setCustomRoleName(roleName);
}, []);
@@ -170,7 +182,12 @@
);
}
- return <CreateRolesHeaderRightButton route={props.route} />;
+ return (
+ <CreateRolesHeaderRightButton
+ route={props.route}
+ setRoleCreationFailed={setRoleCreationFailed}
+ />
+ );
},
}),
[
@@ -194,6 +211,11 @@
/>
<SWMansionIcon name="edit-1" size={20} style={styles.pencilIcon} />
</View>
+ <View style={errorStyles}>
+ <Text style={styles.errorText}>
+ There is already a role with this name in the community
+ </Text>
+ </View>
</View>
<View style={styles.permissionsContainer}>
<View style={styles.permissionsHeader}>
@@ -231,6 +253,18 @@
pencilIcon: {
color: 'panelInputSecondaryForeground',
},
+ errorContainer: {
+ marginTop: 10,
+ alignItems: 'center',
+ opacity: 0,
+ },
+ errorContainerVisible: {
+ opacity: 1,
+ },
+ errorText: {
+ color: 'redText',
+ fontSize: 14,
+ },
permissionsContainer: {
marginTop: 20,
paddingBottom: 220,

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 7, 12:13 AM (7 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5841534
Default Alt Text
D8445.1765066385.diff (3 KB)

Event Timeline