Skip to content

Commit

Permalink
PasswordInput: Fix overlap for long passwords and show/hide button
Browse files Browse the repository at this point in the history
Long passwords and show/hide buttons overlap with each other. I fixed
this problem by doing the following:

- I changed the style of Password Input to take up as much space as
  needed. I did this by setting a flex of 1 to the Password Input.

- I changed the positioning of the show/hide button from absolute to
  relative.

- I ensured horizontal alignment by setting the flex-direction of the
  parent view to 'row'.

- To fix the problem of the changing width of the text input, when the
  show/hide text changes, I replaced the show/hide text with a
  show/icon. The show/hide icon is an eye-open/eye-closed icon. This
  icon always has a fixed width and does not affect the text input.

- I removed hide text from messages_en.json since it is not in the app.

I tested this on Android and IOS devices with different screen sizes,
and it works fine on both platforms.

Fixes: zulip#5614
  • Loading branch information
KshitizSareen committed Feb 9, 2023
1 parent ff4e8a3 commit 5bbfcf2
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 10 deletions.
26 changes: 17 additions & 9 deletions src/common/PasswordInput.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,26 @@ import React, { useState, useCallback } from 'react';
import type { Node } from 'react';
import { View } from 'react-native';

import { Icon } from './Icons';
import Input from './Input';
import type { Props as InputProps } from './Input';
import { BRAND_COLOR, createStyleSheet } from '../styles';
import ZulipTextIntl from './ZulipTextIntl';
import Touchable from './Touchable';

const styles = createStyleSheet({
showPasswordButton: {
position: 'absolute',
right: 0,
top: 0,
bottom: 0,
justifyContent: 'center',
},
showPasswordButtonText: {
showPasswordButtonIcon: {
margin: 8,
color: BRAND_COLOR,
},
passwordTextInput: {
flex: 1,
},
passwordInputView: {
flexDirection: 'row',
},
});

// Prettier wants a ", >" here, which is silly.
Expand All @@ -44,10 +46,16 @@ export default function PasswordInput(props: Props): Node {
}, []);

return (
<View>
<Input {...props} secureTextEntry={isHidden} autoCorrect={false} autoCapitalize="none" />
<View style={styles.passwordInputView}>
<Input
{...props}
secureTextEntry={isHidden}
autoCorrect={false}
autoCapitalize="none"
style={styles.passwordTextInput}
/>
<Touchable style={styles.showPasswordButton} onPress={handleShow}>
<ZulipTextIntl style={styles.showPasswordButtonText} text={isHidden ? 'show' : 'hide'} />
<Icon name={isHidden ? 'eye-off' : 'eye'} size={24} style={styles.showPasswordButtonIcon} />
</Touchable>
</View>
);
Expand Down
1 change: 0 additions & 1 deletion static/translations/messages_en.json
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,6 @@
"Stream settings": "Stream settings",
"Failed to show stream settings": "Failed to show stream settings",
"show": "show",
"hide": "hide",
"Debug": "Debug",
"Administrators": "Administrators",
"Normal users": "Normal users",
Expand Down

0 comments on commit 5bbfcf2

Please sign in to comment.